opnsense-src/sys/dev/ath
Adrian Chadd 3feffbd796 Add per-TXQ EDMA FIFO staging queue support.
Each set of frames pushed into a FIFO is represented by a list of
ath_bufs - the first ath_buf in the FIFO list is marked with
ATH_BUF_FIFOPTR; the last ath_buf in the FIFO list is marked with
ATH_BUF_FIFOEND.

Multiple lists of frames are just glued together in the TAILQ as per
normal - except that at the end of a FIFO list, the descriptor link
pointer will be NULL and it'll be tagged with ATH_BUF_FIFOEND.

For non-EDMA chipsets this is a no-op - the ath_txq frame list (axq_q)
stays the same and is treated the same.

For EDMA chipsets the frames are pushed into axq_q and then when
the FIFO is to be (re) filled, frames will be moved onto the FIFO
queue and then pushed into the FIFO.

So:

* Add a new queue in each hardware TXQ (ath_txq) for staging FIFO frame
  lists.  It's a TAILQ (like the normal hardware frame queue) rather than
  the ath9k list-of-lists to represent FIFO entries.

* Add new ath_buf flags - ATH_TX_FIFOPTR and ATH_TX_FIFOEND.

* When allocating ath_buf entries, clear out the flag value before
  returning it or it'll end up having stale flags.

* When cloning ath_buf entries, only clone ATH_BUF_MGMT.  Don't clone
  the FIFO related flags.

* Extend ath_tx_draintxq() to first drain the FIFO staging queue, _then_
  drain the normal hardware queue.

Tested:

* AR9280, hostap
* AR9280, STA
* AR9380/AR9580 - hostap

TODO:

* Test on other chipsets, just to be thorough.
2013-03-26 19:46:51 +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 Add new regulatory domain. 2013-03-24 04:42:56 +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.c Add per-TXQ EDMA FIFO staging queue support. 2013-03-26 19:46:51 +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 Convert the CABQ queue code over to use the HAL link pointer method 2013-03-26 04:52:16 +00:00
if_ath_beacon.h Overhaul the TXQ locking (again!) as part of some beacon/cabq timing 2013-03-24 00:03:12 +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 Add per-TXQ EDMA FIFO staging queue support. 2013-03-26 19:46:51 +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.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_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_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 Overhaul the TXQ locking (again!) as part of some beacon/cabq timing 2013-03-24 00:03:12 +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 Overhaul the TXQ locking (again!) as part of some beacon/cabq timing 2013-03-24 00:03:12 +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.c Remove the mcast path calls to ath_hal_gettxdesclinkptr() for axq_link - 2013-03-26 04:56:54 +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_tx_edma.c Remove the mcast path calls to ath_hal_gettxdesclinkptr() for axq_link - 2013-03-26 04:56:54 +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_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 Add per-TXQ EDMA FIFO staging queue support. 2013-03-26 19:46:51 +00:00