freebsd-dev/sys/net80211
Adrian Chadd d029471197 Migrate the fast-frames transmit support away from using the txa_private
field and into a separate fast-frames staging pointer in ieee80211_node.

The A-MPDU TX path allows txa_private to be used by drivers.  So it will
clash with any attempt to use fast-frames.  Now, fast-frames is not really
anything special - it's just a custom ethernet frame type that contains
two MSDUs into one MPDU.  So all the NIC has to support doing is transmitting
up to a 4KiB frame with an arbitrary ethertype and bam! Fast-frames.
However, using txa_private means we can /either/ do fast-frames or A-MPDU TX,
so fast frames has been turned off in the Atheros HAL for 11n chipsets.
This is a bit silly - it actually means that 802.11 performance to/from
11abg Atheros chips is actually better than between an 11abg atheros device
and an 11n Atheros device.

So:

* create a new mbuf staging queue for fast frames.  It only queues a single
  frame in the staging queue (and there's a top-level ic staging queue
  used for expiry/tracking) so it's just an mbuf pointer per TID.

* Still use the ampdu TX packet counter to determine whether to do
  aggregation or not.  It'll double count if we start doing both A-MPDU TX
  and fast frames, but that's not all that important right now.

* Initialise the pps tracker so ticks isn't zero.  This ensures that
  fast-frames actually gets used - without it, the ticks math overflows
  and the pps math always sets txa_pps=0.  This is the same bug that
  plagued A-MPDU TX starting logic.

This actually allows fast-frames transmit to occur between the AR9331
(in 11n HT/20 mode) and AR9170 (if_otus) in 11bg mode.

Now, this is a great big no-op on atheros 11n hardware, so don't worry.
It may mean you start seeing more reliable fast-frames transmission on
11abg hardware which may expose some more amusing bugs.

TODO:

* further testing and debugging of all of this before flipping on
  fast-frames in if_ath (for 11n) and if_otus.
2015-09-28 00:59:07 +00:00
..
_ieee80211.h Perform some rather amusing layering violations to add mbuf tags to the 2015-09-26 00:53:37 +00:00
ieee80211_acl.c Convert malloc/free back to #define's, as part of OS portability work. 2015-05-25 19:18:16 +00:00
ieee80211_action.c
ieee80211_action.h
ieee80211_adhoc.c Begin plumbing ieee80211_rx_stats through the receive path. 2015-05-25 16:37:41 +00:00
ieee80211_adhoc.h
ieee80211_ageq.c
ieee80211_ageq.h
ieee80211_alq.c
ieee80211_alq.h
ieee80211_amrr.c Convert malloc/free back to #define's, as part of OS portability work. 2015-05-25 19:18:16 +00:00
ieee80211_amrr.h
ieee80211_crypto_ccmp.c Move counter.h include into ieee80211_freebsd.h. Should fix build. 2015-05-27 14:05:46 +00:00
ieee80211_crypto_none.c Move counter.h include into ieee80211_freebsd.h. Should fix build. 2015-05-27 14:05:46 +00:00
ieee80211_crypto_tkip.c Move counter.h include into ieee80211_freebsd.h. Should fix build. 2015-05-27 14:05:46 +00:00
ieee80211_crypto_wep.c Move counter.h include into ieee80211_freebsd.h. Should fix build. 2015-05-27 14:05:46 +00:00
ieee80211_crypto.c Move counter.h include into ieee80211_freebsd.h. Should fix build. 2015-05-27 14:05:46 +00:00
ieee80211_crypto.h
ieee80211_ddb.c Replay r286410. Change KPI of how device drivers that provide wireless 2015-08-27 08:56:39 +00:00
ieee80211_dfs.c Use name from ieee80211com instead of parent ifnet, in debugging printfs. 2015-05-25 14:30:44 +00:00
ieee80211_dfs.h
ieee80211_freebsd.c Perform some rather amusing layering violations to add mbuf tags to the 2015-09-26 00:53:37 +00:00
ieee80211_freebsd.h Perform some rather amusing layering violations to add mbuf tags to the 2015-09-26 00:53:37 +00:00
ieee80211_hostap.c Cleanup compat shims for FreeBSD versions that predate 10.0-RELEASE. 2015-05-25 20:06:49 +00:00
ieee80211_hostap.h
ieee80211_ht.c Abstract out the ampdu TX pps initialisation code so it can be reused 2015-09-28 00:17:51 +00:00
ieee80211_ht.h Abstract out the ampdu TX pps initialisation code so it can be reused 2015-09-28 00:17:51 +00:00
ieee80211_hwmp.c Move counter.h include into ieee80211_freebsd.h. Should fix build. 2015-05-27 14:05:46 +00:00
ieee80211_input.c Perform some rather amusing layering violations to add mbuf tags to the 2015-09-26 00:53:37 +00:00
ieee80211_input.h Begin plumbing ieee80211_rx_stats through the receive path. 2015-05-25 16:37:41 +00:00
ieee80211_ioctl.c Replay r286410. Change KPI of how device drivers that provide wireless 2015-08-27 08:56:39 +00:00
ieee80211_ioctl.h
ieee80211_mesh.c Remove duplicate use of RV(), LE_* and other macros. 2015-09-22 02:25:52 +00:00
ieee80211_mesh.h Migrate the 802.11s locks out into ieee80211_freebsd.h, so they can be 2015-05-26 04:25:11 +00:00
ieee80211_monitor.c Begin plumbing ieee80211_rx_stats through the receive path. 2015-05-25 16:37:41 +00:00
ieee80211_monitor.h
ieee80211_node.c Convert malloc/free back to #define's, as part of OS portability work. 2015-05-25 19:18:16 +00:00
ieee80211_node.h Migrate the fast-frames transmit support away from using the txa_private 2015-09-28 00:59:07 +00:00
ieee80211_output.c Comments, mostly to remind myself of what's going on and why. 2015-09-28 00:51:24 +00:00
ieee80211_phy.c
ieee80211_phy.h
ieee80211_power.c Replay r286410. Change KPI of how device drivers that provide wireless 2015-08-27 08:56:39 +00:00
ieee80211_power.h Begin fleshing out support for net80211 provided (legacy) sleep management. 2014-04-24 01:39:53 +00:00
ieee80211_proto.c Remove duplicate use of RV(), LE_* and other macros. 2015-09-22 02:25:52 +00:00
ieee80211_proto.h Perform some rather amusing layering violations to add mbuf tags to the 2015-09-26 00:53:37 +00:00
ieee80211_radiotap.c Remove unused include. 2015-05-25 14:54:10 +00:00
ieee80211_radiotap.h
ieee80211_ratectl_none.c Move counter.h include into ieee80211_freebsd.h. Should fix build. 2015-05-27 14:05:46 +00:00
ieee80211_ratectl.c
ieee80211_ratectl.h Switch around the order of static inline to be in line with how it's 2015-01-11 18:43:45 +00:00
ieee80211_regdomain.c Replay r286410. Change KPI of how device drivers that provide wireless 2015-08-27 08:56:39 +00:00
ieee80211_regdomain.h
ieee80211_rssadapt.c Convert malloc/free back to #define's, as part of OS portability work. 2015-05-25 19:18:16 +00:00
ieee80211_rssadapt.h
ieee80211_scan_sta.c Remove duplicate use of RV(), LE_* and other macros. 2015-09-22 02:25:52 +00:00
ieee80211_scan_sw.c Break out the current 802.11 software scan methods into an indirect table. 2015-06-08 02:35:43 +00:00
ieee80211_scan_sw.h Break out the current 802.11 software scan methods into an indirect table. 2015-06-08 02:35:43 +00:00
ieee80211_scan.c Break out the current 802.11 software scan methods into an indirect table. 2015-06-08 02:35:43 +00:00
ieee80211_scan.h Break out the current 802.11 software scan methods into an indirect table. 2015-06-08 02:35:43 +00:00
ieee80211_sta.c Convert malloc/free back to #define's, as part of OS portability work. 2015-05-25 19:18:16 +00:00
ieee80211_sta.h
ieee80211_superg.c Migrate the fast-frames transmit support away from using the txa_private 2015-09-28 00:59:07 +00:00
ieee80211_superg.h
ieee80211_tdma.c Convert malloc/free back to #define's, as part of OS portability work. 2015-05-25 19:18:16 +00:00
ieee80211_tdma.h Begin plumbing ieee80211_rx_stats through the receive path. 2015-05-25 16:37:41 +00:00
ieee80211_var.h net80211: include one copy of struct ieee80211_beacon_offsets into ieee80211vap 2015-09-22 06:34:07 +00:00
ieee80211_wds.c Begin plumbing ieee80211_rx_stats through the receive path. 2015-05-25 16:37:41 +00:00
ieee80211_wds.h
ieee80211_xauth.c
ieee80211.c Replay r286410. Change KPI of how device drivers that provide wireless 2015-08-27 08:56:39 +00:00
ieee80211.h Define a rateval macro that drivers tend to hard-code. 2015-09-22 02:24:13 +00:00