aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/wl12xx/wl1271.h
diff options
context:
space:
mode:
authorJuuso Oikarinen <juuso.oikarinen@nokia.com>2010-07-08 10:50:00 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-07-08 16:35:51 -0400
commit90494a90bea010af47547880634e0f1c52824a7d (patch)
treee7464aa406385a0a9908324e038736aa9cac6a4d /drivers/net/wireless/wl12xx/wl1271.h
parent849923f43ca681cc86a401178db31acb60e79f3b (diff)
wl1271: Work around AP's with broken ps-poll functionality
Some AP's (such as Zyxel Prestige 600) have totally broken ps-poll functionality. When powersave is enabled, these AP's will set the TIM bit for a STA in beacons, but when the STA responds with a ps-poll, the AP does not respond with data. The wl1271 firmware is able to send an indication to the host, when this problem occurs. This patch adds implementation, which temporarily disables power-save in response to this indication, allowing the AP to transmit whatever data it has buffered for the STA / whatever data is inbound at that time. This patch does not make these AP's work reliably in PSM, but improves the chances of inbound data getting through. The side effect of this patch is increased power consumption when using a faulty AP. Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com> Reviewed-by: Teemu Paasikivi <ext-teemu.3.paasikivi@nokia.com> Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/wl12xx/wl1271.h')
-rw-r--r--drivers/net/wireless/wl12xx/wl1271.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1271.h b/drivers/net/wireless/wl12xx/wl1271.h
index 1b52ce6a84d7..cfdccdb86067 100644
--- a/drivers/net/wireless/wl12xx/wl1271.h
+++ b/drivers/net/wireless/wl12xx/wl1271.h
@@ -351,6 +351,7 @@ struct wl1271 {
351#define WL1271_FLAG_IRQ_RUNNING (10) 351#define WL1271_FLAG_IRQ_RUNNING (10)
352#define WL1271_FLAG_IDLE (11) 352#define WL1271_FLAG_IDLE (11)
353#define WL1271_FLAG_IDLE_REQUESTED (12) 353#define WL1271_FLAG_IDLE_REQUESTED (12)
354#define WL1271_FLAG_PSPOLL_FAILURE (13)
354 unsigned long flags; 355 unsigned long flags;
355 356
356 struct wl1271_partition_set part; 357 struct wl1271_partition_set part;
@@ -445,6 +446,10 @@ struct wl1271 {
445 446
446 struct completion *elp_compl; 447 struct completion *elp_compl;
447 struct delayed_work elp_work; 448 struct delayed_work elp_work;
449 struct delayed_work pspoll_work;
450
451 /* counter for ps-poll delivery failures */
452 int ps_poll_failures;
448 453
449 /* retry counter for PSM entries */ 454 /* retry counter for PSM entries */
450 u8 psm_entry_retry; 455 u8 psm_entry_retry;