freebsd-nq/sys/dev/ath
Adrian Chadd f172ef758e Rewrite the cleanup code to, well, actually work right.
The existing cleanup code was based on the Atheros reference driver
from way back and stuff that was in Linux ath9k.  It turned out to be ..
rather silly.

Specifically:

* The whole method of determining whether there's hardware-queued frames
  was fragile and the BAW would never quite work right afterwards.

* The cleanup path wouldn't correctly pull apart aggregate frames in the
  queue, so frames would not be freed and the BAW wouldn't be correctly
  updated.

So to implement this:

* Pull the aggregate frames apart correctly and handle each separately;
* Make the atid->incomp counter just track the number of hardware queued
  frames rather than try to figure it out from the BAW;
* Modify the aggregate completion path to handle it as a single frame
  (atid->incomp tracks the one frame now, not the subframes) and
  remove the frames from the BAW before completing them as normal frames;
* Make sure bf->bf_next is NULled out correctly;
* Make both aggregate session and non-aggregate path frames now be
  handled via the incompletion path.

TODO:

* kill atid->incomp; the driver tracks the hardware queued frames
  for each TID and so we can just use that.

This is a stability fix that should be merged back to stable/10.

Tested:

* AR5416, STA

MFC after:	7 days
2014-04-21 06:07:08 +00:00
..
ath_dfs/null The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
ath_hal Also set the AR5212 HAL power mode tracking in the right spot. 2014-03-22 03:36:07 +00:00
ath_rate The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
ah_osdep.c Add a function to check whether the given register can be accessed whilst 2014-04-09 03:51:05 +00:00
ah_osdep.h
if_ath_ahb.c - Provide necessary includes, that before came via if.h pollution. 2013-10-28 22:26:03 +00:00
if_ath_alq.c
if_ath_alq.h
if_ath_beacon.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
if_ath_beacon.h
if_ath_btcoex.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
if_ath_btcoex.h
if_ath_debug.c
if_ath_debug.h
if_ath_keycache.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
if_ath_keycache.h
if_ath_led.c
if_ath_led.h
if_ath_lna_div.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
if_ath_lna_div.h
if_ath_misc.h
if_ath_pci.c Include necessary headers that now are available due to pollution 2013-10-28 07:29:16 +00:00
if_ath_rx_edma.c Correctly remove entries from the relevant receive ath_buf list before 2014-01-06 03:48:32 +00:00
if_ath_rx_edma.h
if_ath_rx.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
if_ath_rx.h
if_ath_spectral.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
if_ath_spectral.h
if_ath_sysctl.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
if_ath_sysctl.h
if_ath_tdma.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
if_ath_tdma.h
if_ath_tsf.h
if_ath_tx_edma.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
if_ath_tx_edma.h
if_ath_tx_ht.c
if_ath_tx_ht.h
if_ath_tx.c Rewrite the cleanup code to, well, actually work right. 2014-04-21 06:07:08 +00:00
if_ath_tx.h
if_ath.c Don't call ath_init() inside the lock. 2014-03-20 04:47:34 +00:00
if_athdfs.h
if_athioctl.h
if_athrate.h
if_athvar.h