wl1251: prevent scan when connected Release-2010-05/1
authorGrazvydas Ignotas <notasas@gmail.com>
Fri, 19 Mar 2010 21:00:02 +0000 (23:00 +0200)
committerGrazvydas Ignotas <notasas@gmail.com>
Fri, 23 Apr 2010 16:55:14 +0000 (19:55 +0300)
drivers/net/wireless/wl12xx/wl1251.h
drivers/net/wireless/wl12xx/wl1251_main.c

index 4f5f02a..d8087ac 100644 (file)
@@ -381,6 +381,8 @@ struct wl1251 {
 
        u32 chip_id;
        char fw_ver[21];
 
        u32 chip_id;
        char fw_ver[21];
+
+       bool associated;
 };
 
 int wl1251_plt_start(struct wl1251 *wl);
 };
 
 int wl1251_plt_start(struct wl1251 *wl);
index de59d8d..fc91f8f 100644 (file)
@@ -869,6 +869,13 @@ static int wl1251_op_hw_scan(struct ieee80211_hw *hw,
 
        wl1251_debug(DEBUG_MAC80211, "mac80211 hw scan");
 
 
        wl1251_debug(DEBUG_MAC80211, "mac80211 hw scan");
 
+       /*
+        * FIXME: scanning while associated causes lockups,
+        * so we don't allow that
+        */
+       if (wl->associated)
+               return -EBUSY;
+
        if (req->n_ssids) {
                ssid = req->ssids[0].ssid;
                ssid_len = req->ssids[0].ssid_len;
        if (req->n_ssids) {
                ssid = req->ssids[0].ssid;
                ssid_len = req->ssids[0].ssid_len;
@@ -987,6 +994,7 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,
        }
 
        if (changed & BSS_CHANGED_ASSOC) {
        }
 
        if (changed & BSS_CHANGED_ASSOC) {
+               wl->associated = bss_conf->assoc;
                if (bss_conf->assoc) {
                        wl->beacon_int = bss_conf->beacon_int;
 
                if (bss_conf->assoc) {
                        wl->beacon_int = bss_conf->beacon_int;