freebsd-nq/sys/dev/ath
Adrian Chadd 57af292d36 [ath] fix thresholds for deciding to queue to the software queue and populate hardware frames
This is two fixes, which establishes what I /think/ is pretty close to the
theoretical PHY maximum speed on the AR9380 devices.

* When doing A-MPDU on a TID, don't queue to the hardware directly if
  the hardware queue is busy.  This gives us time to get more packets
  queued up (and the hardware is busy, so there's no point in queuing
  more to the hardware right now) to potentially form an A-MPDU.

  This fixes up the throughput issue I was seeing where a couple hundred
  single frames were being sent a second interspersed between A-MPDU
  frames.  It just happened that the software queue had exactly one
  frame in it at that point.  Queuing it until the hardware finishes
  transmitting isn't exactly costly.

* When determining whether to dequeue from a software node/TID queue into
  the hardware queue, fix up the checks to work right for EDMA chips
  (ar9380 and later.)   Before it was not dispatching anything until
  the FIFO was empty.  Now we allow it to dispatch another aggregate
  up to the hardware aggregate limit, like I intended with the earlier
  work.

This allows a 5GHz HT40, short-GI, "htprotmode off" test at MCS23
to achieve 357 Mbit/sec in a one-way UDP test.  The stars have to be
aligned /just right/ so there are no retries but it can happen.
Just don't expect it to work in an OTA test if your 2yo is running
around the room - MCS23 is very very sensitive to channel conditions.

Tested:

* AR9380 STA (test) -> AR9580 hostap

TODO:

* More thorough testing on pre-AR9380 chips (AR5416, AR9160, AR9280)
* (Finally) teach ath_rate_sample about throughput/latency rather than
  air time, so I can get good transmit rates with a 2yo running around.
2017-01-23 04:30:08 +00:00
..
ath_dfs/null dev/ath: minor spelling fixes in comments. 2016-05-02 19:56:48 +00:00
ath_hal [ath_hal] mad, mad hacks to get some semblence of correct HT/40 channels populated. 2017-01-05 04:56:04 +00:00
ath_rate [ath] [ath_hal] break out the duration calculation to optionally include SIFS. 2016-07-15 06:39:35 +00:00
ah_osdep.c [ath] remove the inline version of the register access macros. 2016-01-03 17:58:11 +00:00
ah_osdep.h [ath] remove the inline version of the register access macros. 2016-01-03 17:58:11 +00:00
if_ath_ahb.c Remove the references to the TX IC lock - i ended up solving this 2015-09-29 03:37:17 +00:00
if_ath_alq.c
if_ath_alq.h [ath] add a placeholder event for debuggin EDMA TX FIFO push events. 2016-06-09 22:01:05 +00:00
if_ath_beacon.c [ath] revert the previous commit, after reading the 802.11-2012 spec a bit more. 2016-11-28 17:06:35 +00:00
if_ath_beacon.h
if_ath_btcoex_mci.c Fix kernel build. Improper definition location of a variable. 2016-06-02 01:59:41 +00:00
if_ath_btcoex_mci.h [ath] commit initial bluetooth coexistence support for the MCI NICs. 2016-06-02 00:51:36 +00:00
if_ath_btcoex.c [ath] remove now unused parameters. 2016-06-04 08:56:30 +00:00
if_ath_btcoex.h [ath] commit initial bluetooth coexistence support for the MCI NICs. 2016-06-02 00:51:36 +00:00
if_ath_debug.c
if_ath_debug.h [ath] add BTCOEX debug section; modify DPRINTF() to take a no-arg format string. 2016-05-31 04:09:17 +00:00
if_ath_descdma.c [ath] migrate ioctl and busdma memory operations out into separate source files. 2015-11-24 03:42:58 +00:00
if_ath_descdma.h [ath] migrate ioctl and busdma memory operations out into separate source files. 2015-11-24 03:42:58 +00:00
if_ath_ioctl.c [ath] Begin to lay the groundwork for btcoex related ioctl controls. 2016-11-27 18:34:29 +00:00
if_ath_ioctl.h [ath] migrate ioctl and busdma memory operations out into separate source files. 2015-11-24 03:42:58 +00:00
if_ath_keycache.c net80211 + drivers: convert to ieee80211_crypto_get_key_wepidx(). 2016-12-07 22:16:07 +00:00
if_ath_keycache.h net80211: drop redundant 3rd parameter from iv_key_set(). 2015-10-03 21:48:27 +00:00
if_ath_led.c
if_ath_led.h
if_ath_lna_div.c dev/ath: minor spelling fixes in comments. 2016-05-02 19:56:48 +00:00
if_ath_lna_div.h
if_ath_misc.h [ath] force wake the hardware if we see a missed beacon. 2016-11-28 17:54:29 +00:00
if_ath_pci_devlist.h
if_ath_pci.c dev/ath: minor spelling fixes in comments. 2016-05-02 19:56:48 +00:00
if_ath_rx_edma.c [ath] don't debug RX EDMA descriptors that are not yet complete. 2016-06-17 17:01:32 +00:00
if_ath_rx_edma.h
if_ath_rx.c [ath] include logging of TU versions of the TSF values. 2016-11-28 02:51:55 +00:00
if_ath_rx.h
if_ath_spectral.c
if_ath_spectral.h
if_ath_sysctl.c [ath] report node queue overflows. 2016-06-09 21:59:36 +00:00
if_ath_sysctl.h
if_ath_tdma.c Fix improper use of "its". 2016-11-08 23:59:41 +00:00
if_ath_tdma.h
if_ath_tsf.h
if_ath_tx_edma.c [ath] [ar9300] ensure the software scheduler is called to form more aggregates for EDMA chips 2017-01-23 04:20:37 +00:00
if_ath_tx_edma.h
if_ath_tx_ht.c [ath] only apply the AR9300 delimiter workaround for the first sub-frame. 2017-01-22 05:45:42 +00:00
if_ath_tx_ht.h
if_ath_tx.c [ath] fix thresholds for deciding to queue to the software queue and populate hardware frames 2017-01-23 04:30:08 +00:00
if_ath_tx.h net80211: separate mbuf cleanup from ieee80211_fragment() 2015-10-12 03:27:08 +00:00
if_ath.c ath: adapt LDPC support checks 2017-01-21 21:03:26 +00:00
if_athdfs.h
if_athioctl.h [ath] Begin to lay the groundwork for btcoex related ioctl controls. 2016-11-27 18:34:29 +00:00
if_athrate.h
if_athvar.h [ath] add a new buf flag, marking a buffer as involved with ToA/ToD positioning. 2016-07-08 22:20:35 +00:00