wil6210: fix disconnect 1 STA in AP

When disconnecting single STA in AP, it might be that STA
in question is already disconnected. In this case, need to do nothing.
Previously, it was mis-interpreted as "disconnect all"

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
Vladimir Kondratiev
2014-12-23 09:47:07 +02:00
committed by Kalle Valo
parent 56637e7b53
commit 100106d702
+20 -9
View File
@@ -188,18 +188,29 @@ static void _wil6210_disconnect(struct wil6210_priv *wil, const u8 *bssid,
struct wireless_dev *wdev = wil->wdev; struct wireless_dev *wdev = wil->wdev;
might_sleep(); might_sleep();
if (bssid) { wil_dbg_misc(wil, "%s(bssid=%pM, reason=%d, ev%s)\n", __func__, bssid,
cid = wil_find_cid(wil, bssid); reason_code, from_event ? "+" : "-");
wil_dbg_misc(wil, "%s(%pM, CID %d)\n", __func__, bssid, cid);
} else {
wil_dbg_misc(wil, "%s(all)\n", __func__);
}
if (cid >= 0) /* disconnect 1 peer */ /* Cases are:
wil_disconnect_cid(wil, cid, reason_code, from_event); * - disconnect single STA, still connected
else /* disconnect all */ * - disconnect single STA, already disconnected
* - disconnect all
*
* For "disconnect all", there are 2 options:
* - bssid == NULL
* - bssid is our MAC address
*/
if (bssid && memcmp(ndev->dev_addr, bssid, ETH_ALEN)) {
cid = wil_find_cid(wil, bssid);
wil_dbg_misc(wil, "Disconnect %pM, CID=%d, reason=%d\n",
bssid, cid, reason_code);
if (cid >= 0) /* disconnect 1 peer */
wil_disconnect_cid(wil, cid, reason_code, from_event);
} else { /* all */
wil_dbg_misc(wil, "Disconnect all\n");
for (cid = 0; cid < WIL6210_MAX_CID; cid++) for (cid = 0; cid < WIL6210_MAX_CID; cid++)
wil_disconnect_cid(wil, cid, reason_code, from_event); wil_disconnect_cid(wil, cid, reason_code, from_event);
}
/* link state */ /* link state */
switch (wdev->iftype) { switch (wdev->iftype) {