mwifiex: use LOW_PRIORITY scan flag provided in scan request
authorAmitkumar Karwar <akarwar@marvell.com>
Sat, 20 Oct 2012 02:19:15 +0000 (19:19 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 29 Oct 2012 19:19:31 +0000 (15:19 -0400)
We will delay/abort scan operation based on traffic for low
priority scan.

Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mwifiex/cfg80211.c
drivers/net/wireless/mwifiex/scan.c

index 38a58713de6a7a4ffd02436a0b00aab6b87f0c4f..60461325dff809deaa88f5279f2599ef49e76673 100644 (file)
@@ -1819,7 +1819,8 @@ mwifiex_cfg80211_scan(struct wiphy *wiphy,
 
        wiphy_dbg(wiphy, "info: received scan request on %s\n", dev->name);
 
-       if (atomic_read(&priv->wmm.tx_pkts_queued) >=
+       if ((request->flags & NL80211_SCAN_FLAG_LOW_PRIORITY) &&
+           atomic_read(&priv->wmm.tx_pkts_queued) >=
            MWIFIEX_MIN_TX_PENDING_TO_CANCEL_SCAN) {
                dev_dbg(priv->adapter->dev, "scan rejected due to traffic\n");
                return -EBUSY;
@@ -2251,7 +2252,8 @@ int mwifiex_register_cfg80211(struct mwifiex_adapter *adapter)
        wiphy->available_antennas_rx = BIT(adapter->number_of_antenna) - 1;
 
        wiphy->features |= NL80211_FEATURE_HT_IBSS |
-                          NL80211_FEATURE_INACTIVITY_TIMER;
+                          NL80211_FEATURE_INACTIVITY_TIMER |
+                          NL80211_FEATURE_LOW_PRIORITY_SCAN;
 
        /* Reserve space for mwifiex specific private data for BSS */
        wiphy->bss_priv_size = sizeof(struct mwifiex_bss_priv);
index 5896b1fb4a2de6fc31d914c0b7e7d9bf91050c39..05965267cc271c37440a0c993ae7d811120cfadf 100644 (file)
@@ -1776,12 +1776,16 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
                        priv->user_scan_cfg = NULL;
                }
        } else {
-               if (!mwifiex_wmm_lists_empty(adapter)) {
+               if (!mwifiex_wmm_lists_empty(adapter) &&
+                   (priv->scan_request && (priv->scan_request->flags &
+                                           NL80211_SCAN_FLAG_LOW_PRIORITY))) {
                        spin_unlock_irqrestore(&adapter->scan_pending_q_lock,
                                               flags);
                        adapter->scan_delay_cnt = 1;
                        mod_timer(&priv->scan_delay_timer, jiffies +
                                  msecs_to_jiffies(MWIFIEX_SCAN_DELAY_MSEC));
+                       dev_dbg(priv->adapter->dev,
+                               "info: %s: deferring scan\n", __func__);
                } else {
                        /* Get scan command from scan_pending_q and put to
                           cmd_pending_q */