wl12xx: declare support for hw scan while idle
authorEliad Peller <eliad@wizery.com>
Thu, 2 Feb 2012 11:15:35 +0000 (13:15 +0200)
committerLuciano Coelho <coelho@ti.com>
Wed, 15 Feb 2012 06:38:34 +0000 (08:38 +0200)
By allowing hw scan while idle, we no longer
need the redundant ROC/CROC that are done
on idle off/on, which helps simplifying the
state machine of the driver.

This way, we can also allow scanning while
there is an ongoing sched scan (otherwise,
we won't be able to ROC on idle-off)

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/wl12xx/main.c
drivers/net/wireless/wl12xx/scan.c

index b45a16c1f7171e341d1a13efdd65c231af1d4b47..17dcd63bfc4868f580ad33ef3f930190f4149b49 100644 (file)
@@ -3068,10 +3068,6 @@ static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
                goto out_sleep;
        }
 
-       /* cancel ROC before scanning */
-       if (wl12xx_dev_role_started(wlvif))
-               wl12xx_croc(wl, wlvif->dev_role_id);
-
        ret = wl1271_scan(hw->priv, vif, ssid, len, req);
 out_sleep:
        wl1271_ps_elp_sleep(wl);
@@ -5050,7 +5046,8 @@ static int wl1271_init_ieee80211(struct wl1271 *wl)
                IEEE80211_HW_SPECTRUM_MGMT |
                IEEE80211_HW_AP_LINK_PS |
                IEEE80211_HW_AMPDU_AGGREGATION |
-               IEEE80211_HW_TX_AMPDU_SETUP_IN_HW;
+               IEEE80211_HW_TX_AMPDU_SETUP_IN_HW |
+               IEEE80211_HW_SCAN_WHILE_IDLE;
 
        wl->hw->wiphy->cipher_suites = cipher_suites;
        wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
index 6adc7333b7e673d1decd3c55be6f69f23c952222..848a165fa55c21e0ef714bf8b8277f3e270ced16 100644 (file)
@@ -38,7 +38,6 @@ void wl1271_scan_complete_work(struct work_struct *work)
        struct ieee80211_vif *vif;
        struct wl12xx_vif *wlvif;
        int ret;
-       bool is_sta, is_ibss;
 
        dwork = container_of(work, struct delayed_work, work);
        wl = container_of(dwork, struct wl1271, scan_complete_work);
@@ -70,18 +69,6 @@ void wl1271_scan_complete_work(struct work_struct *work)
                wl1271_cmd_build_ap_probe_req(wl, wlvif, wlvif->probereq);
        }
 
-       /* return to ROC if needed */
-       is_sta = (wlvif->bss_type == BSS_TYPE_STA_BSS);
-       is_ibss = (wlvif->bss_type == BSS_TYPE_IBSS);
-       if (((is_sta && !test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) ||
-            (is_ibss && !test_bit(WLVIF_FLAG_IBSS_JOINED, &wlvif->flags))) &&
-           !test_bit(wlvif->dev_role_id, wl->roc_map)) {
-               /* restore remain on channel */
-               if (wlvif->dev_hlid == WL12XX_INVALID_LINK_ID)
-                       wl12xx_start_dev(wl, wlvif);
-               else
-                       wl12xx_roc(wl, wlvif, wlvif->dev_role_id);
-       }
        wl1271_ps_elp_sleep(wl);
 
        if (wl->scan.failed) {