]> git.karo-electronics.de Git - linux-beck.git/commitdiff
brcmfmac: Do not handle link downs for ibss.
authorHante Meuleman <meuleman@broadcom.com>
Tue, 5 Jan 2016 10:05:50 +0000 (11:05 +0100)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 8 Jan 2016 08:44:48 +0000 (10:44 +0200)
Sometimes on module reload and reconnect to ibss a deauth from
other station can be received. This is treated as a link down but
for ibss this is wrong. It will close the interface and no data
is possible. Ignore the firmware generated link down events in
ibss mode, as ibss is always teared down by cfg80211.

Reviewed-by: Arend Van Spriel <arend@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c

index 84788ea9e39e5aad196c7ee247c1412d637f8748..7b01e4ddb315b70ca0432371ecdb695808c2a4ac 100644 (file)
@@ -1454,6 +1454,7 @@ brcmf_cfg80211_leave_ibss(struct wiphy *wiphy, struct net_device *ndev)
        }
 
        brcmf_link_down(ifp->vif, WLAN_REASON_DEAUTH_LEAVING);
+       brcmf_net_setcarrier(ifp, false);
 
        brcmf_dbg(TRACE, "Exit\n");
 
@@ -5248,12 +5249,13 @@ brcmf_notify_connect_status(struct brcmf_if *ifp,
                brcmf_dbg(CONN, "Linkdown\n");
                if (!brcmf_is_ibssmode(ifp->vif)) {
                        brcmf_bss_connect_done(cfg, ndev, e, false);
+                       brcmf_link_down(ifp->vif,
+                                       brcmf_map_fw_linkdown_reason(e));
+                       brcmf_init_prof(ndev_to_prof(ndev));
+                       if (ndev != cfg_to_ndev(cfg))
+                               complete(&cfg->vif_disabled);
+                       brcmf_net_setcarrier(ifp, false);
                }
-               brcmf_link_down(ifp->vif, brcmf_map_fw_linkdown_reason(e));
-               brcmf_init_prof(ndev_to_prof(ndev));
-               if (ndev != cfg_to_ndev(cfg))
-                       complete(&cfg->vif_disabled);
-               brcmf_net_setcarrier(ifp, false);
        } else if (brcmf_is_nonetwork(cfg, e)) {
                if (brcmf_is_ibssmode(ifp->vif))
                        clear_bit(BRCMF_VIF_STATUS_CONNECTING,