staging: brcm80211: cfg80211 up/down routines in brcmfmac driver are fixed
authorSukesh Srikakula <sukeshs@broadcom.com>
Fri, 13 May 2011 09:59:49 +0000 (11:59 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 17 May 2011 19:12:38 +0000 (12:12 -0700)
'__wl_cfg80211_up' & '__wl_cfg80211_down' routines are updated to correctly
set the 'wl->status' variable.

Cc: devel@linuxdriverproject.org
Cc: linux-wireless@vger.kernel.org
Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
Reviewed-by: Brett Rudley <brudley@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c

index eb7f611b93ef72fe495101416241e773cc5878b6..03f6c2052f79a34fc1dcd65e04a1f68382a64995 100644 (file)
@@ -3391,7 +3391,6 @@ s32 wl_cfg80211_attach(struct net_device *ndev, void *data)
                goto cfg80211_attach_out;
        }
        wl_set_drvdata(wl_cfg80211_dev, ci);
-       set_bit(WL_STATUS_READY, &wl->status);
 
        return err;
 
@@ -4021,6 +4020,8 @@ static s32 __wl_cfg80211_up(struct wl_priv *wl)
 {
        s32 err = 0;
 
+       set_bit(WL_STATUS_READY, &wl->status);
+
        wl_debugfs_add_netdev_params(wl);
 
        err = wl_config_dongle(wl, false);
@@ -4028,41 +4029,29 @@ static s32 __wl_cfg80211_up(struct wl_priv *wl)
                return err;
 
        wl_invoke_iscan(wl);
-       set_bit(WL_STATUS_READY, &wl->status);
+
        return err;
 }
 
 static s32 __wl_cfg80211_down(struct wl_priv *wl)
 {
-       s32 err = 0;
-
-       /* Check if cfg80211 interface is already down */
-       if (!test_bit(WL_STATUS_READY, &wl->status))
-               return err;     /* it is even not ready */
-
        set_bit(WL_STATUS_SCAN_ABORTING, &wl->status);
        wl_term_iscan(wl);
        if (wl->scan_request) {
-               cfg80211_scan_done(wl->scan_request, true);     /* true
-                                                                means abort */
-               /* wl_set_mpc(wl_to_ndev(wl), 1); */    /* BUG
-                                               * this operation cannot help
-                                               * but here because sdio
-                                               * is already down through
-                                               * rmmod process.
-                                               * Need to figure out how to
-                                               * address this issue
-                                               */
+               cfg80211_scan_done(wl->scan_request, true);
+               /* May need to perform this to cover rmmod */
+               /* wl_set_mpc(wl_to_ndev(wl), 1); */
                wl->scan_request = NULL;
        }
        clear_bit(WL_STATUS_READY, &wl->status);
        clear_bit(WL_STATUS_SCANNING, &wl->status);
        clear_bit(WL_STATUS_SCAN_ABORTING, &wl->status);
+       clear_bit(WL_STATUS_CONNECTING, &wl->status);
        clear_bit(WL_STATUS_CONNECTED, &wl->status);
 
        wl_debugfs_remove_netdev(wl);
 
-       return err;
+       return 0;
 }
 
 s32 wl_cfg80211_up(void)