linux/drivers/net/wireless/iwlwifi
Johannes Berg 6ab10ff873 iwlwifi: handle unicast PS buffering
Using the new mac80211 functionality, this makes
iwlwifi handle unicast PS buffering correctly.
The device works like this:

 * when a station goes to sleep, the microcode notices
   this and marks the station as asleep
 * when the station is marked asleep, the microcode
   refuses to transmit to the station and rejects all
   frames queued to it with the failure status code
   TX_STATUS_FAIL_DEST_PS (a previous patch handled
   this correctly)
 * when we need to send frames to the station _although_
   it is asleep, we need to tell the ucode how many,
   and this is asynchronous with sending so we cannot
   just send the frames, we need to wait for all other
   frames to be flushed, and then update the counter
   before sending out the poll response frames. This
   is handled partially in the driver and partially in
   mac80211.

In order to do all this correctly, we need to
 * keep track of how many frames are pending for each
   associated client station (avoid doing it for other
   stations to avoid the atomic ops)
 * tell mac80211 that we driver-block the PS status
   while there are still frames pending on the queues,
   and once they are all rejected (due to the dest sta
   being in PS) unblock mac80211

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2009-11-18 17:09:08 -05:00
..
iwl3945-base.c iwl3945: Reset saved POWER_TABLE_CMD in "up" 2009-11-18 17:09:05 -05:00
iwl-1000.c iwlwifi: fix iwl1000 "RTS/CTS for HT" merge damage 2009-11-11 13:04:42 -08:00
iwl-3945-fh.h
iwl-3945-hw.h iwlwifi: remove duplicate defines 2009-10-27 16:50:02 -04:00
iwl-3945-led.c iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-3945-led.h iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-3945-rs.c drivers/net/wireless/iwlwifi: remove exceptional & on function name 2009-11-18 10:48:54 -08:00
iwl-3945.c iwlwifi: allocate 128 bytes linear buffer for rx skb 2009-11-11 15:23:41 -05:00
iwl-3945.h iwl3945: store station rate scale information in mac80211 station structure 2009-11-02 15:39:47 -05:00
iwl-4965-hw.h iwlwifi: remove duplicated/unused definition 2009-10-27 16:47:58 -04:00
iwl-4965.c iwlwifi: add sleep_tx_count ucode station API 2009-11-18 17:09:07 -05:00
iwl-5000-hw.h
iwl-5000.c iwlwifi: report PS filtered status 2009-11-18 17:09:07 -05:00
iwl-6000-hw.h
iwl-6000.c iwlwifi: drop non-production PCI-IDs for 6x50 series 2009-11-18 17:09:03 -05:00
iwl-agn-led.c iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-agn-led.h iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-agn-rs.c iwlagn: move rate scale initialization to init function 2009-11-02 15:39:47 -05:00
iwl-agn-rs.h iwlwifi: move rate scaling structures to header file 2009-10-27 16:48:32 -04:00
iwl-agn.c iwlwifi: handle unicast PS buffering 2009-11-18 17:09:08 -05:00
iwl-calib.c iwlwifi: update reply_statistics_cmd with 'clear' parameter 2009-11-18 17:09:04 -05:00
iwl-calib.h
iwl-commands.h iwlwifi: handle unicast PS buffering 2009-11-18 17:09:08 -05:00
iwl-core.c iwlwifi: make iwlwifi send beacons 2009-11-18 17:09:06 -05:00
iwl-core.h iwlwifi: update reply_statistics_cmd with 'clear' parameter 2009-11-18 17:09:04 -05:00
iwl-csr.h iwlwifi: set auto clock gate disable bit for 6x00/6x50 series 2009-10-27 16:48:33 -04:00
iwl-debug.h iwlwifi: update reply_statistics_cmd with 'clear' parameter 2009-11-18 17:09:04 -05:00
iwl-debugfs.c iwlwifi: handle unicast PS buffering 2009-11-18 17:09:08 -05:00
iwl-dev.h iwlwifi: handle unicast PS buffering 2009-11-18 17:09:08 -05:00
iwl-devtrace.c iwlwifi: device tracing 2009-10-07 16:39:44 -04:00
iwl-devtrace.h iwlwifi: device tracing 2009-10-07 16:39:44 -04:00
iwl-eeprom.c iwlagn: power up device before initializing EEPROM 2009-11-18 17:09:06 -05:00
iwl-eeprom.h iwlwifi: validate enhanced tx power entry 2009-11-18 17:09:02 -05:00
iwl-fh.h
iwl-hcmd.c iwlwifi: change debug message to error in failure case 2009-11-11 15:23:40 -05:00
iwl-helpers.h iwlwifi: change iwl_enable/disable_interrupts to "inline" 2009-07-24 15:05:26 -04:00
iwl-io.h iwlwifi: Add comments about MAC_ACCESS_REQ 2009-11-11 15:23:47 -05:00
iwl-led.c iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-led.h iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00
iwl-power.c iwlwifi: update reply_statistics_cmd with 'clear' parameter 2009-11-18 17:09:04 -05:00
iwl-power.h iwlwifi: remove duplicated define 2009-10-27 16:50:03 -04:00
iwl-prph.h iwlwifi: add FIFO usage for 5000 2009-11-11 15:23:43 -05:00
iwl-rx.c iwlwifi: handle unicast PS buffering 2009-11-18 17:09:08 -05:00
iwl-scan.c iwlwifi: use configured valid rx chain for scan 2009-11-11 15:23:42 -05:00
iwl-spectrum.c iwlwifi: use paged Rx 2009-10-27 16:48:06 -04:00
iwl-spectrum.h
iwl-sta.c iwlwifi: handle unicast PS buffering 2009-11-18 17:09:08 -05:00
iwl-sta.h iwlwifi: handle unicast PS buffering 2009-11-18 17:09:08 -05:00
iwl-tx.c iwlwifi: handle unicast PS buffering 2009-11-18 17:09:08 -05:00
Kconfig wireless: remove WLAN_80211 and WLAN_PRE80211 from Kconfig 2009-10-30 16:50:35 -04:00
Makefile iwlwifi: LED cleanup 2009-10-07 16:39:45 -04:00