|
@@ -1590,15 +1590,15 @@ static int mwifiex_cfg80211_inform_ibss_bss(struct mwifiex_private *priv)
|
|
|
ie_len = ie_buf[1] + sizeof(struct ieee_types_header);
|
|
|
|
|
|
band = mwifiex_band_to_radio_type(priv->curr_bss_params.band);
|
|
|
- chan = __ieee80211_get_channel(priv->wdev->wiphy,
|
|
|
+ chan = __ieee80211_get_channel(priv->wdev.wiphy,
|
|
|
ieee80211_channel_to_frequency(bss_info.bss_chan,
|
|
|
band));
|
|
|
|
|
|
- bss = cfg80211_inform_bss(priv->wdev->wiphy, chan,
|
|
|
+ bss = cfg80211_inform_bss(priv->wdev.wiphy, chan,
|
|
|
CFG80211_BSS_FTYPE_UNKNOWN,
|
|
|
bss_info.bssid, 0, WLAN_CAPABILITY_IBSS,
|
|
|
0, ie_buf, ie_len, 0, GFP_KERNEL);
|
|
|
- cfg80211_put_bss(priv->wdev->wiphy, bss);
|
|
|
+ cfg80211_put_bss(priv->wdev.wiphy, bss);
|
|
|
memcpy(priv->cfg_bssid, bss_info.bssid, ETH_ALEN);
|
|
|
|
|
|
return 0;
|
|
@@ -1719,12 +1719,12 @@ done:
|
|
|
|
|
|
/* Find the BSS we want using available scan results */
|
|
|
if (mode == NL80211_IFTYPE_ADHOC)
|
|
|
- bss = cfg80211_get_bss(priv->wdev->wiphy, channel,
|
|
|
+ bss = cfg80211_get_bss(priv->wdev.wiphy, channel,
|
|
|
bssid, ssid, ssid_len,
|
|
|
WLAN_CAPABILITY_IBSS,
|
|
|
WLAN_CAPABILITY_IBSS);
|
|
|
else
|
|
|
- bss = cfg80211_get_bss(priv->wdev->wiphy, channel,
|
|
|
+ bss = cfg80211_get_bss(priv->wdev.wiphy, channel,
|
|
|
bssid, ssid, ssid_len,
|
|
|
WLAN_CAPABILITY_ESS,
|
|
|
WLAN_CAPABILITY_ESS);
|
|
@@ -1781,7 +1781,7 @@ mwifiex_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- if (priv->wdev && priv->wdev->current_bss) {
|
|
|
+ if (priv->wdev.current_bss) {
|
|
|
wiphy_warn(wiphy, "%s: already connected\n", dev->name);
|
|
|
return -EALREADY;
|
|
|
}
|
|
@@ -1839,7 +1839,7 @@ mwifiex_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev,
|
|
|
static int mwifiex_set_ibss_params(struct mwifiex_private *priv,
|
|
|
struct cfg80211_ibss_params *params)
|
|
|
{
|
|
|
- struct wiphy *wiphy = priv->wdev->wiphy;
|
|
|
+ struct wiphy *wiphy = priv->wdev.wiphy;
|
|
|
struct mwifiex_adapter *adapter = priv->adapter;
|
|
|
int index = 0, i;
|
|
|
u8 config_bands = 0;
|
|
@@ -2177,7 +2177,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
struct mwifiex_private *priv;
|
|
|
struct net_device *dev;
|
|
|
void *mdev_priv;
|
|
|
- struct wireless_dev *wdev;
|
|
|
|
|
|
if (!adapter)
|
|
|
return ERR_PTR(-EFAULT);
|
|
@@ -2193,13 +2192,8 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
return ERR_PTR(-EINVAL);
|
|
|
}
|
|
|
|
|
|
- wdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL);
|
|
|
- if (!wdev)
|
|
|
- return ERR_PTR(-ENOMEM);
|
|
|
-
|
|
|
- wdev->wiphy = wiphy;
|
|
|
- priv->wdev = wdev;
|
|
|
- wdev->iftype = NL80211_IFTYPE_STATION;
|
|
|
+ priv->wdev.wiphy = wiphy;
|
|
|
+ priv->wdev.iftype = NL80211_IFTYPE_STATION;
|
|
|
|
|
|
if (type == NL80211_IFTYPE_UNSPECIFIED)
|
|
|
priv->bss_mode = NL80211_IFTYPE_STATION;
|
|
@@ -2221,13 +2215,8 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
return ERR_PTR(-EINVAL);
|
|
|
}
|
|
|
|
|
|
- wdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL);
|
|
|
- if (!wdev)
|
|
|
- return ERR_PTR(-ENOMEM);
|
|
|
-
|
|
|
- priv->wdev = wdev;
|
|
|
- wdev->wiphy = wiphy;
|
|
|
- wdev->iftype = NL80211_IFTYPE_AP;
|
|
|
+ priv->wdev.wiphy = wiphy;
|
|
|
+ priv->wdev.iftype = NL80211_IFTYPE_AP;
|
|
|
|
|
|
priv->bss_type = MWIFIEX_BSS_TYPE_UAP;
|
|
|
priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
|
|
@@ -2246,17 +2235,12 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
return ERR_PTR(-EINVAL);
|
|
|
}
|
|
|
|
|
|
- wdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL);
|
|
|
- if (!wdev)
|
|
|
- return ERR_PTR(-ENOMEM);
|
|
|
-
|
|
|
- priv->wdev = wdev;
|
|
|
- wdev->wiphy = wiphy;
|
|
|
+ priv->wdev.wiphy = wiphy;
|
|
|
|
|
|
/* At start-up, wpa_supplicant tries to change the interface
|
|
|
* to NL80211_IFTYPE_STATION if it is not managed mode.
|
|
|
*/
|
|
|
- wdev->iftype = NL80211_IFTYPE_P2P_CLIENT;
|
|
|
+ priv->wdev.iftype = NL80211_IFTYPE_P2P_CLIENT;
|
|
|
priv->bss_mode = NL80211_IFTYPE_P2P_CLIENT;
|
|
|
|
|
|
/* Setting bss_type to P2P tells firmware that this interface
|
|
@@ -2272,8 +2256,9 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
priv->bss_num = 0;
|
|
|
|
|
|
if (mwifiex_cfg80211_init_p2p_client(priv)) {
|
|
|
- wdev = ERR_PTR(-EFAULT);
|
|
|
- goto done;
|
|
|
+ memset(&priv->wdev, 0, sizeof(priv->wdev));
|
|
|
+ priv->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
|
|
|
+ return ERR_PTR(-EFAULT);
|
|
|
}
|
|
|
|
|
|
break;
|
|
@@ -2287,9 +2272,10 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
IEEE80211_NUM_ACS, 1);
|
|
|
if (!dev) {
|
|
|
wiphy_err(wiphy, "no memory available for netdevice\n");
|
|
|
+ memset(&priv->wdev, 0, sizeof(priv->wdev));
|
|
|
+ priv->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
|
|
|
priv->bss_mode = NL80211_IFTYPE_UNSPECIFIED;
|
|
|
- wdev = ERR_PTR(-ENOMEM);
|
|
|
- goto done;
|
|
|
+ return ERR_PTR(-ENOMEM);
|
|
|
}
|
|
|
|
|
|
mwifiex_init_priv_params(priv, dev);
|
|
@@ -2309,7 +2295,7 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
&wiphy->bands[IEEE80211_BAND_5GHZ]->vht_cap, priv);
|
|
|
|
|
|
dev_net_set(dev, wiphy_net(wiphy));
|
|
|
- dev->ieee80211_ptr = priv->wdev;
|
|
|
+ dev->ieee80211_ptr = &priv->wdev;
|
|
|
dev->ieee80211_ptr->iftype = priv->bss_mode;
|
|
|
memcpy(dev->dev_addr, wiphy->perm_addr, ETH_ALEN);
|
|
|
SET_NETDEV_DEV(dev, wiphy_dev(wiphy));
|
|
@@ -2330,8 +2316,9 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
free_netdev(dev);
|
|
|
priv->bss_mode = NL80211_IFTYPE_UNSPECIFIED;
|
|
|
priv->netdev = NULL;
|
|
|
- wdev = ERR_PTR(-EFAULT);
|
|
|
- goto done;
|
|
|
+ memset(&priv->wdev, 0, sizeof(priv->wdev));
|
|
|
+ priv->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
|
|
|
+ return ERR_PTR(-EFAULT);
|
|
|
}
|
|
|
|
|
|
sema_init(&priv->async_sem, 1);
|
|
@@ -2342,13 +2329,7 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
mwifiex_dev_debugfs_init(priv);
|
|
|
#endif
|
|
|
|
|
|
-done:
|
|
|
- if (IS_ERR(wdev)) {
|
|
|
- kfree(priv->wdev);
|
|
|
- priv->wdev = NULL;
|
|
|
- }
|
|
|
-
|
|
|
- return wdev;
|
|
|
+ return &priv->wdev;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(mwifiex_add_virtual_intf);
|
|
|
|
|
@@ -2374,8 +2355,7 @@ int mwifiex_del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev)
|
|
|
/* Clear the priv in adapter */
|
|
|
priv->netdev->ieee80211_ptr = NULL;
|
|
|
priv->netdev = NULL;
|
|
|
- kfree(wdev);
|
|
|
- priv->wdev = NULL;
|
|
|
+ priv->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
|
|
|
|
|
|
priv->media_connected = false;
|
|
|
|