mirror of
https://github.com/opnsense/src.git
synced 2026-02-27 11:50:47 -05:00
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. |
||
|---|---|---|
| .. | ||
| ath_dfs/null | ||
| ath_hal | ||
| ath_rate | ||
| ah_osdep.c | ||
| ah_osdep.h | ||
| if_ath.c | ||
| if_ath_ahb.c | ||
| if_ath_alq.c | ||
| if_ath_alq.h | ||
| if_ath_beacon.c | ||
| if_ath_beacon.h | ||
| if_ath_debug.c | ||
| if_ath_debug.h | ||
| if_ath_keycache.c | ||
| if_ath_keycache.h | ||
| if_ath_led.c | ||
| if_ath_led.h | ||
| if_ath_misc.h | ||
| if_ath_pci.c | ||
| if_ath_rx.c | ||
| if_ath_rx.h | ||
| if_ath_rx_edma.c | ||
| if_ath_rx_edma.h | ||
| if_ath_spectral.c | ||
| if_ath_spectral.h | ||
| if_ath_sysctl.c | ||
| if_ath_sysctl.h | ||
| if_ath_tdma.c | ||
| if_ath_tdma.h | ||
| if_ath_tsf.h | ||
| if_ath_tx.c | ||
| if_ath_tx.h | ||
| if_ath_tx_edma.c | ||
| if_ath_tx_edma.h | ||
| if_ath_tx_ht.c | ||
| if_ath_tx_ht.h | ||
| if_athdfs.h | ||
| if_athioctl.h | ||
| if_athrate.h | ||
| if_athvar.h | ||