OSDN Git Service

wlcore: consider multiple APs when checking active_link_count
authorEliad Peller <eliad@wizery.com>
Mon, 10 Feb 2014 11:47:30 +0000 (13:47 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 13 Feb 2014 20:20:16 +0000 (15:20 -0500)
Each AP has its own global and broadcast links, so when
checking for active sta count (according to the active_link_count)
we must take them all into account.

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ti/wlcore/main.c
drivers/net/wireless/ti/wlcore/tx.c

index d80d40c..8106c96 100644 (file)
@@ -345,12 +345,12 @@ static void wl12xx_irq_ps_regulate_link(struct wl1271 *wl,
         * Start high-level PS if the STA is asleep with enough blocks in FW.
         * Make an exception if this is the only connected link. In this
         * case FW-memory congestion is less of a problem.
-        * Note that a single connected STA means 3 active links, since we must
-        * account for the global and broadcast AP links. The "fw_ps" check
-        * assures us the third link is a STA connected to the AP. Otherwise
-        * the FW would not set the PSM bit.
+        * Note that a single connected STA means 2*ap_count + 1 active links,
+        * since we must account for the global and broadcast AP links
+        * for each AP. The "fw_ps" check assures us the other link is a STA
+        * connected to the AP. Otherwise the FW would not set the PSM bit.
         */
-       else if (wl->active_link_count > 3 && fw_ps &&
+       else if (wl->active_link_count > (wl->ap_count*2 + 1) && fw_ps &&
                 tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
                wl12xx_ps_link_start(wl, wlvif, hlid, true);
 }
index 38b31a0..40b4311 100644 (file)
@@ -134,12 +134,12 @@ static void wl1271_tx_regulate_link(struct wl1271 *wl,
         * into high-level PS and clean out its TX queues.
         * Make an exception if this is the only connected link. In this
         * case FW-memory congestion is less of a problem.
-        * Note that a single connected STA means 3 active links, since we must
-        * account for the global and broadcast AP links. The "fw_ps" check
-        * assures us the third link is a STA connected to the AP. Otherwise
-        * the FW would not set the PSM bit.
+        * Note that a single connected STA means 2*ap_count + 1 active links,
+        * since we must account for the global and broadcast AP links
+        * for each AP. The "fw_ps" check assures us the other link is a STA
+        * connected to the AP. Otherwise the FW would not set the PSM bit.
         */
-       if (wl->active_link_count > 3 && fw_ps &&
+       if (wl->active_link_count > (wl->ap_count*2 + 1) && fw_ps &&
            tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
                wl12xx_ps_link_start(wl, wlvif, hlid, true);
 }