linux/net/mac80211
Johannes Berg 96f5e66e8a mac80211: fix aggregation for hardware with ampdu queues
Hardware with AMPDU queues currently has broken aggregation.

This patch fixes it by making all A-MPDUs go over the regular AC queues,
but keeping track of the hardware queues in mac80211. As a first rough
version, it actually stops the AC queue for extended periods of time,
which can be removed by adding buffering internal to mac80211, but is
currently not a huge problem because people rarely use multiple TIDs
that are in the same AC (and iwlwifi currently doesn't operate as AP).

This is a short-term fix, my current medium-term plan, which I hope to
execute soon as well, but am not sure can finish before .30, looks like
this:
 1) rework the internal queuing layer in mac80211 that we use for
    fragments if the driver stopped queue in the middle of a fragmented
    frame to be able to queue more frames at once (rather than just a
    single frame with its fragments)
 2) instead of stopping the entire AC queue, queue up the frames in a
    per-station/per-TID queue during aggregation session initiation,
    when the session has come up take all those frames and put them
    onto the queue from 1)
 3) push the ampdu queue layer abstraction this patch introduces in
    mac80211 into the driver, and remove the virtual queue stuff from
    mac80211 again

This plan will probably also affect ath9k in that mac80211 queues the
frames instead of passing them down, even when there are no ampdu queues.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2009-02-27 14:51:42 -05:00
..
Kconfig mac80211: make Minstrel the default rate control algorithm 2008-11-26 09:47:03 -05:00
Makefile mac80211: restructure HT code 2009-02-13 13:45:34 -05:00
aes_ccm.c mac80211: aes_ccm.c remove crypto wrapper and extra args 2008-07-08 14:16:02 -04:00
aes_ccm.h mac80211: pass scratch buffer directly, remove additional pointers 2008-07-08 14:16:02 -04:00
aes_cmac.c mac80211: 802.11w - Add BIP (AES-128-CMAC) 2009-01-29 16:00:02 -05:00
aes_cmac.h mac80211: 802.11w - Add BIP (AES-128-CMAC) 2009-01-29 16:00:02 -05:00
agg-rx.c mac80211: further cleanups to stopping BA sessions 2009-02-13 13:45:48 -05:00
agg-tx.c mac80211: fix aggregation for hardware with ampdu queues 2009-02-27 14:51:42 -05:00
cfg.c cfg80211/nl80211: scanning (and mac80211 update to use it) 2009-02-13 13:45:49 -05:00
cfg.h [MAC80211]: rename ieee80211_cfg.h to cfg.h 2007-10-10 16:52:34 -07:00
debugfs.c mac80211: Generic TSF debugging 2009-01-29 16:01:46 -05:00
debugfs.h [MAC80211]: Add debugfs attributes. 2007-05-05 11:46:38 -07:00
debugfs_key.c mac80211: 802.11w - Use BIP (AES-128-CMAC) 2009-01-29 16:00:03 -05:00
debugfs_key.h mac80211: 802.11w - Use BIP (AES-128-CMAC) 2009-01-29 16:00:03 -05:00
debugfs_netdev.c mac80211: move bss_conf into vif 2008-10-31 19:00:15 -04:00
debugfs_netdev.h mac80211: revamp virtual interface handling 2008-07-14 14:30:07 -04:00
debugfs_sta.c mac80211: 802.11w - STA flag for MFP 2009-01-29 16:00:00 -05:00
debugfs_sta.h mac80211: RCU-ify STA info structure access 2008-03-06 15:30:46 -05:00
event.c mac80211: convert to %pM away from print_mac 2008-10-27 17:06:16 -07:00
ht.c mac80211: further cleanups to stopping BA sessions 2009-02-13 13:45:48 -05:00
ieee80211_i.h mac80211: fix aggregation for hardware with ampdu queues 2009-02-27 14:51:42 -05:00
iface.c mac80211: disallow moving netns 2009-02-27 14:51:39 -05:00
key.c mac80211: 802.11w - Use BIP (AES-128-CMAC) 2009-01-29 16:00:03 -05:00
key.h mac80211: 802.11w - Use BIP (AES-128-CMAC) 2009-01-29 16:00:03 -05:00
led.c mac80211: rename files 2008-04-08 16:44:45 -04:00
led.h mac80211: rename files 2008-04-08 16:44:45 -04:00
main.c mac80211: fix aggregation for hardware with ampdu queues 2009-02-27 14:51:42 -05:00
mesh.c mac80211: use cfg80211s BSS infrastructure 2009-02-13 13:45:58 -05:00
mesh.h mac80211: use cfg80211s BSS infrastructure 2009-02-13 13:45:58 -05:00
mesh_hwmp.c mac80211: fix RX aggregation timeouts 2009-02-13 13:45:32 -05:00
mesh_pathtbl.c mac80211: mesh portal functionality support 2008-09-24 16:18:02 -04:00
mesh_plink.c wireless: restrict to 32 legacy rates 2009-01-29 16:01:09 -05:00
michael.c mac80211: remove ieee80211_get_hdr_info 2008-07-08 14:16:01 -04:00
michael.h mac80211: remove ieee80211_get_hdr_info 2008-07-08 14:16:01 -04:00
mlme.c mac80211: Make sure non-HT connection when IEEE80211_STA_TKIP_WEP_USED is set 2009-02-27 14:51:39 -05:00
pm.c mac80211: flush workqueue a second time in suspend() 2009-01-29 16:01:42 -05:00
rate.c mac80211/drivers: rewrite the rate control API 2008-10-31 19:00:23 -04:00
rate.h mac80211: remove rate_control_clear 2008-10-31 19:00:37 -04:00
rc80211_minstrel.c minstrel: fix warning if lowest supported rate index is not 0 2009-01-12 14:24:55 -05:00
rc80211_minstrel.h minstrel: improve performance for non-MRR drivers 2008-10-31 19:00:36 -04:00
rc80211_minstrel_debugfs.c mac80211: correct warnings in minstrel rate control algorithm 2008-10-27 17:46:11 -04:00
rc80211_pid.h mac80211/drivers: rewrite the rate control API 2008-10-31 19:00:23 -04:00
rc80211_pid_algo.c mac80211: Fix pid rate-setting algorithm to allow rate changes 2008-11-26 09:47:20 -05:00
rc80211_pid_debugfs.c mac80211/drivers: rewrite the rate control API 2008-10-31 19:00:23 -04:00
rx.c mac80211: restrict aggregation to supported interface modes 2009-02-13 13:45:36 -05:00
scan.c mac80211: use cfg80211s BSS infrastructure 2009-02-13 13:45:58 -05:00
spectmgmt.c mac80211: use cfg80211s BSS infrastructure 2009-02-13 13:45:58 -05:00
sta_info.c mac80211: fix aggregation for hardware with ampdu queues 2009-02-27 14:51:42 -05:00
sta_info.h mac80211: fix aggregation for hardware with ampdu queues 2009-02-27 14:51:42 -05:00
tkip.c mac80211: convert to %pM away from print_mac 2008-10-27 17:06:16 -07:00
tkip.h mac80211: tkip.c consolidate tkip IV writing in helper 2008-06-14 12:18:13 -04:00
tx.c mac80211: fix aggregation for hardware with ampdu queues 2009-02-27 14:51:42 -05:00
util.c mac80211: fix aggregation for hardware with ampdu queues 2009-02-27 14:51:42 -05:00
wep.c mac80211: fix unaligned access in ieee80211_wep_encrypt_data 2008-11-26 09:47:51 -05:00
wep.h mac80211: minor code cleanups 2008-10-31 18:05:59 -04:00
wext.c mac80211: calculate wstats_flags on the fly 2009-02-13 13:45:59 -05:00
wme.c mac80211: fix aggregation for hardware with ampdu queues 2009-02-27 14:51:42 -05:00
wme.h mac80211: fix aggregation for hardware with ampdu queues 2009-02-27 14:51:42 -05:00
wpa.c mac80211: 802.11w - Optional software CCMP for management frames 2009-01-29 16:00:08 -05:00
wpa.h mac80211: 802.11w - Add BIP (AES-128-CMAC) 2009-01-29 16:00:02 -05:00