diff options
author | adrian <adrian@FreeBSD.org> | 2013-03-26 19:46:51 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2013-03-26 19:46:51 +0000 |
commit | bd33256583e92ae27c4215f57aa7bbdee3d50799 (patch) | |
tree | 46589ea1e20b350340fe9a175103cc318306a61d /sys/netnatm | |
parent | b664987a1a3481b96f38691bf502f77646a0f426 (diff) | |
download | FreeBSD-src-bd33256583e92ae27c4215f57aa7bbdee3d50799.zip FreeBSD-src-bd33256583e92ae27c4215f57aa7bbdee3d50799.tar.gz |
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.
Diffstat (limited to 'sys/netnatm')
0 files changed, 0 insertions, 0 deletions