msm: mhi_rmnet: add support for dynamic interface name
mhi_rmnet support both hardware accelerated path, and software path for IP traffic. Add support to configure interface name through device tree. CRs-Fixed: 2022229 Change-Id: I8356c599ce22ae45e0f3c03272ebf50251a73a59 Signed-off-by: Sujeev Dias <sdias@codeaurora.org>
This commit is contained in:
parent
687a4eb82b
commit
aaefb772f4
2 changed files with 26 additions and 7 deletions
|
@ -41,6 +41,12 @@ Main node properties:
|
||||||
Definition: Maximum payload interface support on transmit path. If
|
Definition: Maximum payload interface support on transmit path. If
|
||||||
not defined MHI_MAX_MTU is used.
|
not defined MHI_MAX_MTU is used.
|
||||||
|
|
||||||
|
- qcom,interface-name
|
||||||
|
Usage: optional
|
||||||
|
Value type: <string>
|
||||||
|
Definition: optional string to overwrite default interface name. If
|
||||||
|
not defined string RMNET_MHI_DRIVER_NAME is used.
|
||||||
|
|
||||||
========
|
========
|
||||||
Example:
|
Example:
|
||||||
========
|
========
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
#include <linux/rtnetlink.h>
|
#include <linux/rtnetlink.h>
|
||||||
|
|
||||||
#define RMNET_MHI_DRIVER_NAME "rmnet_mhi"
|
#define RMNET_MHI_DRIVER_NAME "rmnet_mhi"
|
||||||
#define RMNET_MHI_DEV_NAME "rmnet_mhi%d"
|
|
||||||
#define MHI_DEFAULT_MTU 8000
|
#define MHI_DEFAULT_MTU 8000
|
||||||
#define MHI_MAX_MRU 0xFFFF
|
#define MHI_MAX_MRU 0xFFFF
|
||||||
#define MHI_NAPI_WEIGHT_VALUE 12
|
#define MHI_NAPI_WEIGHT_VALUE 12
|
||||||
|
@ -80,6 +79,7 @@ struct __packed mhi_skb_priv {
|
||||||
struct rmnet_mhi_private {
|
struct rmnet_mhi_private {
|
||||||
struct list_head node;
|
struct list_head node;
|
||||||
u32 dev_id;
|
u32 dev_id;
|
||||||
|
const char *interface_name;
|
||||||
struct mhi_client_handle *tx_client_handle;
|
struct mhi_client_handle *tx_client_handle;
|
||||||
struct mhi_client_handle *rx_client_handle;
|
struct mhi_client_handle *rx_client_handle;
|
||||||
enum MHI_CLIENT_CHANNEL tx_channel;
|
enum MHI_CLIENT_CHANNEL tx_channel;
|
||||||
|
@ -113,6 +113,7 @@ struct rmnet_mhi_private {
|
||||||
};
|
};
|
||||||
|
|
||||||
static LIST_HEAD(rmnet_mhi_ctxt_list);
|
static LIST_HEAD(rmnet_mhi_ctxt_list);
|
||||||
|
static struct platform_driver rmnet_mhi_driver;
|
||||||
|
|
||||||
static int rmnet_mhi_process_fragment(struct rmnet_mhi_private *rmnet_mhi_ptr,
|
static int rmnet_mhi_process_fragment(struct rmnet_mhi_private *rmnet_mhi_ptr,
|
||||||
struct sk_buff *skb, int frag)
|
struct sk_buff *skb, int frag)
|
||||||
|
@ -693,7 +694,7 @@ static int rmnet_mhi_ioctl_extended(struct net_device *dev, struct ifreq *ifr)
|
||||||
ext_cmd.u.data = 0;
|
ext_cmd.u.data = 0;
|
||||||
break;
|
break;
|
||||||
case RMNET_IOCTL_GET_DRIVER_NAME:
|
case RMNET_IOCTL_GET_DRIVER_NAME:
|
||||||
strlcpy(ext_cmd.u.if_name, RMNET_MHI_DRIVER_NAME,
|
strlcpy(ext_cmd.u.if_name, rmnet_mhi_ptr->interface_name,
|
||||||
sizeof(ext_cmd.u.if_name));
|
sizeof(ext_cmd.u.if_name));
|
||||||
break;
|
break;
|
||||||
case RMNET_IOCTL_SET_SLEEP_STATE:
|
case RMNET_IOCTL_SET_SLEEP_STATE:
|
||||||
|
@ -799,6 +800,7 @@ static int rmnet_mhi_enable_iface(struct rmnet_mhi_private *rmnet_mhi_ptr)
|
||||||
struct rmnet_mhi_private **rmnet_mhi_ctxt = NULL;
|
struct rmnet_mhi_private **rmnet_mhi_ctxt = NULL;
|
||||||
int r = 0;
|
int r = 0;
|
||||||
char ifalias[IFALIASZ];
|
char ifalias[IFALIASZ];
|
||||||
|
char ifname[IFNAMSIZ];
|
||||||
struct mhi_client_handle *client_handle = NULL;
|
struct mhi_client_handle *client_handle = NULL;
|
||||||
|
|
||||||
rmnet_log(rmnet_mhi_ptr, MSG_INFO, "Entered.\n");
|
rmnet_log(rmnet_mhi_ptr, MSG_INFO, "Entered.\n");
|
||||||
|
@ -861,18 +863,20 @@ static int rmnet_mhi_enable_iface(struct rmnet_mhi_private *rmnet_mhi_ptr)
|
||||||
snprintf(ifalias,
|
snprintf(ifalias,
|
||||||
sizeof(ifalias),
|
sizeof(ifalias),
|
||||||
"%s_%04x_%02u.%02u.%02u_%u",
|
"%s_%04x_%02u.%02u.%02u_%u",
|
||||||
RMNET_MHI_DRIVER_NAME,
|
rmnet_mhi_ptr->interface_name,
|
||||||
client_handle->dev_id,
|
client_handle->dev_id,
|
||||||
client_handle->domain,
|
client_handle->domain,
|
||||||
client_handle->bus,
|
client_handle->bus,
|
||||||
client_handle->slot,
|
client_handle->slot,
|
||||||
rmnet_mhi_ptr->dev_id);
|
rmnet_mhi_ptr->dev_id);
|
||||||
|
|
||||||
|
snprintf(ifname, sizeof(ifname), "%s%%d",
|
||||||
|
rmnet_mhi_ptr->interface_name);
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
rmnet_mhi_ptr->dev =
|
rmnet_mhi_ptr->dev =
|
||||||
alloc_netdev(sizeof(struct rmnet_mhi_private *),
|
alloc_netdev(sizeof(struct rmnet_mhi_private *),
|
||||||
RMNET_MHI_DEV_NAME,
|
ifname, NET_NAME_PREDICTABLE, rmnet_mhi_setup);
|
||||||
NET_NAME_PREDICTABLE, rmnet_mhi_setup);
|
|
||||||
if (!rmnet_mhi_ptr->dev) {
|
if (!rmnet_mhi_ptr->dev) {
|
||||||
rmnet_log(rmnet_mhi_ptr,
|
rmnet_log(rmnet_mhi_ptr,
|
||||||
MSG_CRITICAL,
|
MSG_CRITICAL,
|
||||||
|
@ -1083,7 +1087,7 @@ static void rmnet_mhi_create_debugfs(struct rmnet_mhi_private *rmnet_mhi_ptr)
|
||||||
snprintf(node_name,
|
snprintf(node_name,
|
||||||
sizeof(node_name),
|
sizeof(node_name),
|
||||||
"%s_%04x_%02u.%02u.%02u_%u",
|
"%s_%04x_%02u.%02u.%02u_%u",
|
||||||
RMNET_MHI_DRIVER_NAME,
|
rmnet_mhi_ptr->interface_name,
|
||||||
client_handle->dev_id,
|
client_handle->dev_id,
|
||||||
client_handle->domain,
|
client_handle->domain,
|
||||||
client_handle->bus,
|
client_handle->bus,
|
||||||
|
@ -1209,6 +1213,15 @@ static int rmnet_mhi_probe(struct platform_device *pdev)
|
||||||
rmnet_mhi_ptr->max_mtu = MHI_MAX_MTU;
|
rmnet_mhi_ptr->max_mtu = MHI_MAX_MTU;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc = of_property_read_string(pdev->dev.of_node, "qcom,interface-name",
|
||||||
|
&rmnet_mhi_ptr->interface_name);
|
||||||
|
if (likely(rc)) {
|
||||||
|
rmnet_log(rmnet_mhi_ptr, MSG_INFO,
|
||||||
|
"interface-name not defined, setting to default name %s\n",
|
||||||
|
RMNET_MHI_DRIVER_NAME);
|
||||||
|
rmnet_mhi_ptr->interface_name = rmnet_mhi_driver.driver.name;
|
||||||
|
}
|
||||||
|
|
||||||
client_info.dev = &pdev->dev;
|
client_info.dev = &pdev->dev;
|
||||||
client_info.node_name = "qcom,mhi";
|
client_info.node_name = "qcom,mhi";
|
||||||
client_info.mhi_client_cb = rmnet_mhi_cb;
|
client_info.mhi_client_cb = rmnet_mhi_cb;
|
||||||
|
@ -1271,7 +1284,7 @@ static int rmnet_mhi_probe(struct platform_device *pdev)
|
||||||
snprintf(node_name,
|
snprintf(node_name,
|
||||||
sizeof(node_name),
|
sizeof(node_name),
|
||||||
"%s_%04x_%02u.%02u.%02u_%u",
|
"%s_%04x_%02u.%02u.%02u_%u",
|
||||||
RMNET_MHI_DRIVER_NAME,
|
rmnet_mhi_ptr->interface_name,
|
||||||
client_handle->dev_id,
|
client_handle->dev_id,
|
||||||
client_handle->domain,
|
client_handle->domain,
|
||||||
client_handle->bus,
|
client_handle->bus,
|
||||||
|
|
Loading…
Add table
Reference in a new issue