mwifiex: set MAC address from wifi_addr module parameter.
backports-0500-wifi-hwaddr-param.patch
Change-Id: Ia4c0a3bcc2e8745e5c0120e091927318644d4e8a
diff --git a/drivers/net/wireless/mwifiex/main.c b/drivers/net/wireless/mwifiex/main.c
index 5fe0574..6c23346 100644
--- a/drivers/net/wireless/mwifiex/main.c
+++ b/drivers/net/wireless/mwifiex/main.c
@@ -27,6 +27,12 @@
const char driver_version[] = "mwifiex " VERSION " (%s) ";
static char *cal_data_cfg;
module_param(cal_data_cfg, charp, 0);
+static char *wifi_addr;
+module_param(wifi_addr, charp, 0644);
+MODULE_PARM_DESC(wifi_addr, "Wifi adapter base mac address");
+
+extern bool mac_pton(const char *s, u8 *mac);
+static int mwifiex_set_mac_address(struct net_device *dev, void *addr);
static unsigned short driver_mode;
module_param(driver_mode, ushort, 0);
@@ -549,6 +555,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;