mirror of https://gitee.com/openkylin/linux.git
mwifiex: make firmware mac address consistent with host configuration
For user configurated mac address, directly set to firmware with no change. Signed-off-by: Xinming Hu <huxm@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
c126e1995f
commit
307857db47
|
@ -929,7 +929,7 @@ mwifiex_init_new_priv_params(struct mwifiex_private *priv,
|
|||
adapter->rx_locked = false;
|
||||
spin_unlock_irqrestore(&adapter->rx_proc_lock, flags);
|
||||
|
||||
mwifiex_set_mac_address(priv, dev);
|
||||
mwifiex_set_mac_address(priv, dev, false, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -2979,7 +2979,7 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|||
priv->netdev = dev;
|
||||
|
||||
if (!adapter->mfg_mode) {
|
||||
mwifiex_set_mac_address(priv, dev);
|
||||
mwifiex_set_mac_address(priv, dev, false, NULL);
|
||||
|
||||
ret = mwifiex_send_cmd(priv, HostCmd_CMD_SET_BSS_MODE,
|
||||
HostCmd_ACT_GEN_SET, 0, NULL, true);
|
||||
|
|
|
@ -940,16 +940,22 @@ mwifiex_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
}
|
||||
|
||||
int mwifiex_set_mac_address(struct mwifiex_private *priv,
|
||||
struct net_device *dev)
|
||||
struct net_device *dev, bool external,
|
||||
u8 *new_mac)
|
||||
{
|
||||
int ret;
|
||||
u64 mac_addr, old_mac_addr;
|
||||
|
||||
old_mac_addr = ether_addr_to_u64(priv->curr_addr);
|
||||
|
||||
if (external) {
|
||||
mac_addr = ether_addr_to_u64(new_mac);
|
||||
} else {
|
||||
/* Internal mac address change */
|
||||
if (priv->bss_type == MWIFIEX_BSS_TYPE_ANY)
|
||||
return -ENOTSUPP;
|
||||
|
||||
mac_addr = ether_addr_to_u64(priv->curr_addr);
|
||||
old_mac_addr = mac_addr;
|
||||
mac_addr = old_mac_addr;
|
||||
|
||||
if (priv->bss_type == MWIFIEX_BSS_TYPE_P2P)
|
||||
mac_addr |= BIT_ULL(MWIFIEX_MAC_LOCAL_ADMIN_BIT);
|
||||
|
@ -962,6 +968,7 @@ int mwifiex_set_mac_address(struct mwifiex_private *priv,
|
|||
|
||||
if (mac_addr == old_mac_addr)
|
||||
goto done;
|
||||
}
|
||||
|
||||
u64_to_ether_addr(mac_addr, priv->curr_addr);
|
||||
|
||||
|
@ -989,8 +996,7 @@ mwifiex_ndo_set_mac_address(struct net_device *dev, void *addr)
|
|||
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
|
||||
struct sockaddr *hw_addr = addr;
|
||||
|
||||
memcpy(priv->curr_addr, hw_addr->sa_data, ETH_ALEN);
|
||||
return mwifiex_set_mac_address(priv, dev);
|
||||
return mwifiex_set_mac_address(priv, dev, true, hw_addr->sa_data);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1709,7 +1709,8 @@ void mwifiex_process_multi_chan_event(struct mwifiex_private *priv,
|
|||
struct sk_buff *event_skb);
|
||||
void mwifiex_multi_chan_resync(struct mwifiex_adapter *adapter);
|
||||
int mwifiex_set_mac_address(struct mwifiex_private *priv,
|
||||
struct net_device *dev);
|
||||
struct net_device *dev,
|
||||
bool external, u8 *new_mac);
|
||||
void mwifiex_devdump_tmo_func(unsigned long function_context);
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
|
|
Loading…
Reference in New Issue