freebsd-dev/sys/dev/ath
Adrian Chadd f0db652cf6 Break out the RX completion path into "FIFO check / refill" and
"complete RX frames."

The 128 entry RX FIFO is really easy to fill up and miss refilling
when it's done in the ath taskq - as that gets blocked up doing
RX completion, TX completion and other random things.

So the 128 entry RX FIFO now gets emptied and refilled in the ath_intr()
task (and it grabs / releases locks, so now ath_intr() can't just be
a FAST handler yet!) but the locks aren't held for very long. The
completion part is done in the ath taskqueue context.

Details:

* Create a new completed frame list - sc->sc_rx_rxlist;
* Split the EDMA RX process queue into two halves - one that
  processes the RX FIFO and refills it with new frames; another
  that completes the completed frame list;
* When tearing down the driver, flush whatever is in the deferred
  queue as well as what's in the FIFO;
* Create two new RX methods - one that processes all RX queues,
  one that processes the given RX queue.  When MSI is implemented,
  we get told which RX queue the interrupt came in on so we can
  specifically schedule that.  (And I can do that with the non-MSI
  path too; I'll figure that out later.)
* Convert the legacy code over to use these new RX methods;
* Replace all the instances of the RX taskqueue enqueue with a call
  to a relevant RX method to enqueue one or all RX queues.

Tested:

* AR9380, STA
* AR9580, STA
* AR5413, STA
2013-03-19 19:32:28 +00:00
..
ath_dfs/null Add a method to explicitly disable radar reporting if required. 2013-01-02 01:36:10 +00:00
ath_hal Use the correct antenna configuration variable here. "diversity" just 2013-03-12 03:03:24 +00:00
ath_rate I give up - just throw the EWMA update into the normal update_stats() 2013-02-27 04:33:06 +00:00
ah_osdep.c Fix the HAL debugging to only use one bit to mark a message as unmaskable. 2012-07-01 02:34:32 +00:00
ah_osdep.h Migrate the ath_hal_filltxdesc() API to take a list of buffer/seglen values. 2012-08-05 10:12:27 +00:00
if_ath_ahb.c Create a new TX lock specifically for queuing frames. 2013-02-07 07:50:16 +00:00
if_ath_alq.c Extend the timestamp to be a timeval, rather than ticks. 2013-02-11 02:48:49 +00:00
if_ath_alq.h Fix an incorrect sizeof() 2013-02-18 18:39:15 +00:00
if_ath_beacon.c Add more TODO items. 2013-03-19 17:55:36 +00:00
if_ath_beacon.h Extend the beacon code slightly to support AP mode beaconing for the 2012-08-11 23:26:19 +00:00
if_ath_debug.c TX EDMA debugging fixes: 2012-11-05 07:08:45 +00:00
if_ath_debug.h Add a debug method to dump the EDMA TX status descriptor contents out. 2012-11-03 04:53:44 +00:00
if_ath_keycache.c Don't allocate or program a key for the AR5210. 2012-11-19 23:54:05 +00:00
if_ath_keycache.h Add a 'vap' to ath_keyset(). 2011-11-08 19:25:52 +00:00
if_ath_led.c Bring over the initial 802.11n bluetooth coexistence support code. 2012-06-26 22:16:53 +00:00
if_ath_led.h Refactor out the software LED config code into a common function, called 2011-12-26 05:46:22 +00:00
if_ath_misc.h Pull out the if_transmit() work and revert back to ath_start(). 2013-02-13 05:32:19 +00:00
if_ath_pci.c Create a new TX lock specifically for queuing frames. 2013-02-07 07:50:16 +00:00
if_ath_rx_edma.c Break out the RX completion path into "FIFO check / refill" and 2013-03-19 19:32:28 +00:00
if_ath_rx_edma.h Begin abstracting out the RX path in preparation for RX EDMA support. 2012-07-03 06:59:12 +00:00
if_ath_rx.c Break out the RX completion path into "FIFO check / refill" and 2013-03-19 19:32:28 +00:00
if_ath_rx.h Convert sc_rxpending to a per-EDMA queue, and use that for the legacy code. 2012-07-10 00:02:19 +00:00
if_ath_spectral.c Fix format size. 2013-01-08 22:42:15 +00:00
if_ath_spectral.h Add a new (skeleton) spectral mode manager module. 2013-01-02 03:59:02 +00:00
if_ath_sysctl.c Print out the current fifo queue depth correctly - not just the max 2013-03-18 02:29:57 +00:00
if_ath_sysctl.h Break out most of the HAL related tweaks into a per-HAL instance, 2011-06-23 02:38:36 +00:00
if_ath_tdma.c Pull out the debugging code from the critical path and make sure it 2012-11-28 01:55:22 +00:00
if_ath_tdma.h Migrate the TDMA management functions out of if_ath.c into if_ath_tdma.c. 2012-05-20 02:49:42 +00:00
if_ath_tsf.h Migrate the bulk of the RX routines out from if_ath.c to if_ath_rx.[ch]. 2012-05-20 02:05:10 +00:00
if_ath_tx_edma.c Methodize the process of adding the software TX queue to the taskqueue. 2013-02-07 02:15:25 +00:00
if_ath_tx_edma.h Begin separating out the TX DMA setup in preparation for TX EDMA support. 2012-07-23 03:52:18 +00:00
if_ath_tx_ht.c Oops - fix an incorrect test. 2013-02-28 23:39:22 +00:00
if_ath_tx_ht.h Introduce TX aggregation and software TX queue management 2011-11-08 22:43:13 +00:00
if_ath_tx.c Now that the tx map field is correctly populated for both edma and 2013-03-19 17:54:37 +00:00
if_ath_tx.h Add a new option to limit the maximum size of aggregates. 2013-02-21 06:18:40 +00:00
if_ath.c Break out the RX completion path into "FIFO check / refill" and 2013-03-19 19:32:28 +00:00
if_athdfs.h Add a method to explicitly disable radar reporting if required. 2013-01-02 01:36:10 +00:00
if_athioctl.h Add a few new fields to the RX vendor radiotap header: 2013-03-11 06:54:58 +00:00
if_athrate.h Add missing flags. 2013-02-28 23:39:38 +00:00
if_athvar.h Break out the RX completion path into "FIFO check / refill" and 2013-03-19 19:32:28 +00:00