|
@@ -61,11 +61,24 @@ void wil_memcpy_toio_32(volatile void __iomem *dst, const void *src,
|
|
|
static void wil_disconnect_cid(struct wil6210_priv *wil, int cid)
|
|
|
{
|
|
|
uint i;
|
|
|
+ struct net_device *ndev = wil_to_ndev(wil);
|
|
|
+ struct wireless_dev *wdev = wil->wdev;
|
|
|
struct wil_sta_info *sta = &wil->sta[cid];
|
|
|
+ wil_dbg_misc(wil, "%s(CID %d, status %d)\n", __func__, cid,
|
|
|
+ sta->status);
|
|
|
|
|
|
sta->data_port_open = false;
|
|
|
if (sta->status != wil_sta_unused) {
|
|
|
wmi_disconnect_sta(wil, sta->addr, WLAN_REASON_DEAUTH_LEAVING);
|
|
|
+ switch (wdev->iftype) {
|
|
|
+ case NL80211_IFTYPE_AP:
|
|
|
+ case NL80211_IFTYPE_P2P_GO:
|
|
|
+ /* AP-like interface */
|
|
|
+ cfg80211_del_sta(ndev, sta->addr, GFP_KERNEL);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
sta->status = wil_sta_unused;
|
|
|
}
|
|
|
|
|
@@ -119,11 +132,6 @@ static void _wil6210_disconnect(struct wil6210_priv *wil, const u8 *bssid)
|
|
|
clear_bit(wil_status_fwconnecting, &wil->status);
|
|
|
break;
|
|
|
default:
|
|
|
- /* AP-like interface and monitor:
|
|
|
- * never scan, always connected
|
|
|
- */
|
|
|
- if (bssid)
|
|
|
- cfg80211_del_sta(ndev, bssid, GFP_KERNEL);
|
|
|
break;
|
|
|
}
|
|
|
}
|