aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/914-wlcore-consider-multiple-APs-when-checking-active_link_count.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/914-wlcore-consider-multiple-APs-when-checking-active_link_count.patch')
-rw-r--r--package/kernel/mac80211/patches/914-wlcore-consider-multiple-APs-when-checking-active_link_count.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/914-wlcore-consider-multiple-APs-when-checking-active_link_count.patch b/package/kernel/mac80211/patches/914-wlcore-consider-multiple-APs-when-checking-active_link_count.patch
new file mode 100644
index 0000000000..9e9eba7417
--- /dev/null
+++ b/package/kernel/mac80211/patches/914-wlcore-consider-multiple-APs-when-checking-active_link_count.patch
@@ -0,0 +1,51 @@
+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>
+
+---
+drivers/net/wireless/ti/wlcore/main.c | 10 +++++-----
+ drivers/net/wireless/ti/wlcore/tx.c | 10 +++++-----
+ 2 files changed, 10 insertions(+), 10 deletions(-)
+
+--- a/drivers/net/wireless/ti/wlcore/main.c
++++ b/drivers/net/wireless/ti/wlcore/main.c
+@@ -345,12 +345,12 @@ static void wl12xx_irq_ps_regulate_link(
+ * 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);
+ }
+--- a/drivers/net/wireless/ti/wlcore/tx.c
++++ b/drivers/net/wireless/ti/wlcore/tx.c
+@@ -134,12 +134,12 @@ static void wl1271_tx_regulate_link(stru
+ * 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);
+ }