net: usb: Use eth_<foo>_addr instead of memset
[deliverable/linux.git] / drivers / net / wireless / brcm80211 / brcmfmac / cfg80211.c
index 5eba81bfc6eda657fdf9d3b433b554a67de304c6..b59b8c6c42abeb1e17834b1dcd9af4a51b354b4e 100644 (file)
@@ -1229,7 +1229,25 @@ static void brcmf_init_prof(struct brcmf_cfg80211_profile *prof)
        memset(prof, 0, sizeof(*prof));
 }
 
-static void brcmf_link_down(struct brcmf_cfg80211_vif *vif)
+static u16 brcmf_map_fw_linkdown_reason(const struct brcmf_event_msg *e)
+{
+       u16 reason;
+
+       switch (e->event_code) {
+       case BRCMF_E_DEAUTH:
+       case BRCMF_E_DEAUTH_IND:
+       case BRCMF_E_DISASSOC_IND:
+               reason = e->reason;
+               break;
+       case BRCMF_E_LINK:
+       default:
+               reason = 0;
+               break;
+       }
+       return reason;
+}
+
+static void brcmf_link_down(struct brcmf_cfg80211_vif *vif, u16 reason)
 {
        struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(vif->wdev.wiphy);
        s32 err = 0;
@@ -1244,7 +1262,8 @@ static void brcmf_link_down(struct brcmf_cfg80211_vif *vif)
                        brcmf_err("WLC_DISASSOC failed (%d)\n", err);
                }
                clear_bit(BRCMF_VIF_STATUS_CONNECTED, &vif->sme_state);
-               cfg80211_disconnected(vif->wdev.netdev, 0, NULL, 0, GFP_KERNEL);
+               cfg80211_disconnected(vif->wdev.netdev, reason, NULL, 0,
+                                     GFP_KERNEL);
 
        }
        clear_bit(BRCMF_VIF_STATUS_CONNECTING, &vif->sme_state);
@@ -1414,7 +1433,7 @@ brcmf_cfg80211_leave_ibss(struct wiphy *wiphy, struct net_device *ndev)
        if (!check_vif_up(ifp->vif))
                return -EIO;
 
-       brcmf_link_down(ifp->vif);
+       brcmf_link_down(ifp->vif, WLAN_REASON_DEAUTH_LEAVING);
 
        brcmf_dbg(TRACE, "Exit\n");
 
@@ -3041,7 +3060,7 @@ static s32 brcmf_cfg80211_suspend(struct wiphy *wiphy,
                         * disassociate from AP to save power while system is
                         * in suspended state
                         */
-                       brcmf_link_down(vif);
+                       brcmf_link_down(vif, WLAN_REASON_UNSPECIFIED);
                        /* Make sure WPA_Supplicant receives all the event
                         * generated due to DISASSOC call to the fw to keep
                         * the state fw and WPA_Supplicant state consistent
@@ -4927,7 +4946,7 @@ brcmf_notify_connect_status(struct brcmf_if *ifp,
                if (!brcmf_is_ibssmode(ifp->vif)) {
                        brcmf_bss_connect_done(cfg, ndev, e, false);
                }
-               brcmf_link_down(ifp->vif);
+               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);
@@ -5868,7 +5887,7 @@ static s32 __brcmf_cfg80211_down(struct brcmf_if *ifp)
         * from AP to save power
         */
        if (check_vif_up(ifp->vif)) {
-               brcmf_link_down(ifp->vif);
+               brcmf_link_down(ifp->vif, WLAN_REASON_UNSPECIFIED);
 
                /* Make sure WPA_Supplicant receives all the event
                   generated due to DISASSOC call to the fw to keep
This page took 0.025724 seconds and 5 git commands to generate.