Commit 0013c7ce authored by Avinash Patil's avatar Avinash Patil Committed by John W. Linville

mwifiex: module load parameter for interface creation

This patch adds module load parameter driver_mode for mwifiex
which would enable driver to create AP or P2P client interface while loading
module. driver_mode is bitmap of interface modes for station, AP and
P2P client.

Station interface is created by default and is unaffected by driver_mode
parameter.
Signed-off-by: default avatarAvinash Patil <patila@marvell.com>
Signed-off-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 325e1881
...@@ -28,6 +28,11 @@ const char driver_version[] = "mwifiex " VERSION " (%s) "; ...@@ -28,6 +28,11 @@ const char driver_version[] = "mwifiex " VERSION " (%s) ";
static char *cal_data_cfg; static char *cal_data_cfg;
module_param(cal_data_cfg, charp, 0); module_param(cal_data_cfg, charp, 0);
static unsigned short driver_mode;
module_param(driver_mode, ushort, 0);
MODULE_PARM_DESC(driver_mode,
"station=0x1(default), ap-sta=0x3, station-p2p=0x5, ap-sta-p2p=0x7");
/* /*
* This function registers the device and performs all the necessary * This function registers the device and performs all the necessary
* initializations. * initializations.
...@@ -449,6 +454,11 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context) ...@@ -449,6 +454,11 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context)
goto err_init_fw; goto err_init_fw;
} }
if (driver_mode) {
driver_mode &= MWIFIEX_DRIVER_MODE_BITMASK;
driver_mode |= MWIFIEX_DRIVER_MODE_STA;
}
rtnl_lock(); rtnl_lock();
/* Create station interface by default */ /* Create station interface by default */
wdev = mwifiex_add_virtual_intf(adapter->wiphy, "mlan%d", wdev = mwifiex_add_virtual_intf(adapter->wiphy, "mlan%d",
...@@ -458,6 +468,28 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context) ...@@ -458,6 +468,28 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context)
rtnl_unlock(); rtnl_unlock();
goto err_add_intf; goto err_add_intf;
} }
if (driver_mode & MWIFIEX_DRIVER_MODE_UAP) {
wdev = mwifiex_add_virtual_intf(adapter->wiphy, "uap%d",
NL80211_IFTYPE_AP, NULL, NULL);
if (IS_ERR(wdev)) {
dev_err(adapter->dev, "cannot create AP interface\n");
rtnl_unlock();
goto err_add_intf;
}
}
if (driver_mode & MWIFIEX_DRIVER_MODE_P2P) {
wdev = mwifiex_add_virtual_intf(adapter->wiphy, "p2p%d",
NL80211_IFTYPE_P2P_CLIENT, NULL,
NULL);
if (IS_ERR(wdev)) {
dev_err(adapter->dev,
"cannot create p2p client interface\n");
rtnl_unlock();
goto err_add_intf;
}
}
rtnl_unlock(); rtnl_unlock();
mwifiex_drv_get_driver_version(adapter, fmt, sizeof(fmt) - 1); mwifiex_drv_get_driver_version(adapter, fmt, sizeof(fmt) - 1);
......
...@@ -48,6 +48,11 @@ enum { ...@@ -48,6 +48,11 @@ enum {
MWIFIEX_SYNC_CMD MWIFIEX_SYNC_CMD
}; };
#define MWIFIEX_DRIVER_MODE_STA BIT(0)
#define MWIFIEX_DRIVER_MODE_UAP BIT(1)
#define MWIFIEX_DRIVER_MODE_P2P BIT(2)
#define MWIFIEX_DRIVER_MODE_BITMASK (BIT(0) | BIT(1) | BIT(2))
#define MWIFIEX_MAX_AP 64 #define MWIFIEX_MAX_AP 64
#define MWIFIEX_DEFAULT_WATCHDOG_TIMEOUT (5 * HZ) #define MWIFIEX_DEFAULT_WATCHDOG_TIMEOUT (5 * HZ)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment