[ath] fix TX throughput for EDMA chips by pushing more into the TX FIFO.
authoradrian <adrian@FreeBSD.org>
Tue, 21 Jun 2016 15:38:20 +0000 (15:38 +0000)
committeradrian <adrian@FreeBSD.org>
Tue, 21 Jun 2016 15:38:20 +0000 (15:38 +0000)
commit1f3d721c13e4003f60d682bc7ea691711c4b8f70
tree37ac66f9513f1e641d1be4300f8be9737c6c8451
parent8abfab9cb0b033b9452758c841868c68eae4a80b
[ath] fix TX throughput for EDMA chips by pushing more into the TX FIFO.

It turns out that getting decent performance requires stacking the TX
FIFO a little more aggressively.

* Ensure that when we complete a frame, we attempt to push a new frame
  into the FIFO so TX is kept as active as it needs to be
* Be more aggressive about batching non-aggregate frames into a single
  TX FIFO slot.  This "fixes" TDMA performance (since we only get one
  TX FIFO slot ungated per DMA beacon alert) but it does this by pushing
  a whole lot of work into the TX FIFO slot.

I'm not /entirely/ pleased by this solution, but it does fix a whole bunch
of corner case issues in the transmit side and fix TDMA whilst I'm at it.
I'll go revisit transmit packet scheduling in ath(4) post 11.

Tested:

* AR9380, STA mode
* AR9580, hostap mode
* AR9380, TDMA client mode

Approved by: re (hrs)
sys/dev/ath/if_ath_tx_edma.c