| --- a/drivers/net/wireless/mwifiex/main.c 2014-05-23 00:32:03.054567849 -0700 |
| +++ b/drivers/net/wireless/mwifiex/main.c 2014-05-23 13:31:07.238190053 -0700 |
| @@ -28,6 +28,11 @@ |
| static char *cal_data_cfg; |
| module_param(cal_data_cfg, charp, 0); |
| |
| +static char *wifi_addr; |
| + |
| +extern int mac_pton(const char *s, u8 *mac); |
| +static int mwifiex_set_mac_address(struct net_device *dev, void *addr); |
| + |
| static void scan_delay_timer_fn(unsigned long data) |
| { |
| struct mwifiex_private *priv = (struct mwifiex_private *)data; |
| @@ -485,6 +490,23 @@ |
| } |
| rtnl_unlock(); |
| |
| + /* set mac address if provided */ |
| + if (!wifi_addr) { |
| + pr_info("%s: optionally set macaddr with wifi_addr=XX:XX:XX:XX:XX:XX\n", __func__); |
| + } else { |
| + struct sockaddr hwaddr = { 0 }; |
| + if (!mac_pton(wifi_addr, hwaddr.sa_data)) { |
| + pr_err("%s: failed to parse macaddr: %s\n", __func__, wifi_addr); |
| + } else { |
| + struct mwifiex_private *priv = adapter->priv[MWIFIEX_BSS_ROLE_UAP]; |
| + if (priv && priv->netdev && mwifiex_set_mac_address(priv->netdev, &hwaddr)) { |
| + pr_err("%s: failed to set wlan0 macaddr: %s\n", __func__, wifi_addr); |
| + } else { |
| + pr_info("%s: set wlan0 macaddr to %s\n", __func__, wifi_addr); |
| + } |
| + } |
| + } |
| + |
| mwifiex_drv_get_driver_version(adapter, fmt, sizeof(fmt) - 1); |
| dev_notice(adapter->dev, "driver_version = %s\n", fmt); |
| goto done; |
| @@ -1052,6 +1074,9 @@ |
| module_init(mwifiex_init_module); |
| module_exit(mwifiex_cleanup_module); |
| |
| +module_param(wifi_addr, charp, 0644); |
| +MODULE_PARM_DESC(wifi_addr, "Wifi adapter base mac address"); |
| + |
| MODULE_AUTHOR("Marvell International Ltd."); |
| MODULE_DESCRIPTION("Marvell WiFi-Ex Driver version " VERSION); |
| MODULE_VERSION(VERSION); |