wl18xx: limit Tx for the AP single-STA-in-PSM case
authorArik Nemtsov <arik@wizery.com>
Wed, 28 Nov 2012 09:42:41 +0000 (11:42 +0200)
committerLuciano Coelho <coelho@ti.com>
Tue, 11 Dec 2012 10:25:36 +0000 (12:25 +0200)
Treat a single connected STA in PSM as a slow link and regulate Tx speed
according to slow link priority/stop thresholds.
This allows us to avoid flooding the FW, while delivering decent
throughput to a peer in forced-PSM.

[Small simplification of the if statements -- Luca]

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/ti/wl18xx/main.c

index ed34a7f..3f6762c 100644 (file)
@@ -1410,7 +1410,8 @@ static bool wl18xx_lnk_high_prio(struct wl1271 *wl, u8 hlid,
                return false;
 
        /* the priority thresholds are taken from FW */
-       if (test_bit(hlid, (unsigned long *)&wl->fw_fast_lnk_map))
+       if (test_bit(hlid, (unsigned long *)&wl->fw_fast_lnk_map) &&
+           !test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map))
                thold = status_priv->tx_fast_link_prio_threshold;
        else
                thold = status_priv->tx_slow_link_prio_threshold;
@@ -1428,7 +1429,8 @@ static bool wl18xx_lnk_low_prio(struct wl1271 *wl, u8 hlid,
 
        if (test_bit(hlid, (unsigned long *)&suspend_bitmap))
                thold = status_priv->tx_suspend_threshold;
-       else if (test_bit(hlid, (unsigned long *)&wl->fw_fast_lnk_map))
+       else if (test_bit(hlid, (unsigned long *)&wl->fw_fast_lnk_map) &&
+                !test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map))
                thold = status_priv->tx_fast_stop_threshold;
        else
                thold = status_priv->tx_slow_stop_threshold;