aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/wl12xx/tx.c
diff options
context:
space:
mode:
authorArik Nemtsov <arik@wizery.com>2011-08-25 12:43:15 +0300
committerLuciano Coelho <coelho@ti.com>2011-09-14 13:15:17 +0300
commitda03209eaca9302e110925f84a515e03062aaa9e (patch)
tree9e8b17cf8d2fc9899ff775a6598195f9ff0bf33f /drivers/net/wireless/wl12xx/tx.c
parentwl12xx: support up to 8 stations in AP-mode (diff)
downloadlinux-dev-da03209eaca9302e110925f84a515e03062aaa9e.tar.xz
linux-dev-da03209eaca9302e110925f84a515e03062aaa9e.zip
wl12xx: don't regulate links when a single STA is connected
When operating as AP track the number of connected stations. When a single STA is connected don't regulate the PS status of the link. Since this is the only STA connected, there's no point holding space in FW for other links. This will speed up communications with a single connected STA in PSM. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
Diffstat (limited to 'drivers/net/wireless/wl12xx/tx.c')
-rw-r--r--drivers/net/wireless/wl12xx/tx.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/wireless/wl12xx/tx.c b/drivers/net/wireless/wl12xx/tx.c
index b876e9eb4e83..2bf31302b975 100644
--- a/drivers/net/wireless/wl12xx/tx.c
+++ b/drivers/net/wireless/wl12xx/tx.c
@@ -126,7 +126,7 @@ static void wl1271_tx_ap_update_inconnection_sta(struct wl1271 *wl,
static void wl1271_tx_regulate_link(struct wl1271 *wl, u8 hlid)
{
- bool fw_ps;
+ bool fw_ps, single_sta;
u8 tx_pkts;
/* only regulate station links */
@@ -138,12 +138,15 @@ static void wl1271_tx_regulate_link(struct wl1271 *wl, u8 hlid)
fw_ps = test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
tx_pkts = wl->links[hlid].allocated_pkts;
+ single_sta = (wl->active_sta_count == 1);
/*
* if in FW PS and there is enough data in FW we can put the link
* into high-level PS and clean out its TX queues.
+ * Make an exception if this is the only connected station. In this
+ * case FW-memory congestion is not a problem.
*/
- if (fw_ps && tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
+ if (!single_sta && fw_ps && tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
wl1271_ps_link_start(wl, hlid, true);
}