freebsd-nq/sys
Adrian Chadd 15e58d4d26 [ath] prepare for "correct" group (bcast/mcast) address frame handling and software/hardware queue TID mapping.
When I initially did this 11n TX work in days of yonder, my 802.11 standards
clue was ... not as finely tuned.  One of the things in 802.11-2012 (which
I guess technically was after I did this work, but I'm sure it was like this
in the previous rev?) is that among other traffic classes, three things are
important:

* group addressed frames should be default non-QoS, even if they're QoS frames, and
* group addressed frames should have a seqno out of a different space than the
  per-TID QoS one; and because of this
* group addressed frames, being non-QoS, should never be in the Block-ACK window
  for TX.

Now, net80211 and now this code cheats by using the non-QOS TID, but ideally
we'd introduce a separate seqno space just for multicast/group traffic for
TX and RX comparison.

Later extensions (eg reliable multicast / multimedia) express what one should do
when doing multicast traffic in a TID.  Now, technically we /could/ do group traffic
as QoS traffic and throw it into a per-TID seqno space, but this definitely
introduces ordering issues when you take into account things like CABQ behaviour.
(Ie, if some traffic in the TID goes into the CABQ and some doesn't, because
it's doing a split of multicast and non-multicast traffic, then you have
seqno ordering issues.)

So, until someone implements 802.11vv reliable multicast / multimedia extensions,
group traffic is non-QoS.

Next, software/hardware queue TID mapping.  In the past I believed the WME tagging
of frames because well, net80211 had a habit of tagging things like management
traffic with it.  But, then we also map QoS traffic categories to TIDs as well.
So, we should obey the TID!  But! then it put some management traffic into higher
WME categories too, as those frames don't have QoS TIDs.  But! It'd do things like
put things like QoS action frames into higher WME categories, when they should
be kept in-order with the rest of the traffic for that TID.  So! Given all of this,
the ath(4) driver does overrides to not trust the WME category.

I .. am undoing some of this.  Now, the TID has a 1:1 mapping to the hardware
queue.  The TID is the primary source of truth now for all QoS traffic.
The WME is only used for non-QoS traffic.  This now means that any TID traffic
queued should be consistently queued regardless of WME, so things like the
"TX finished, do more TX" that is occuring right now for transmit handling
should be "better".

The consistent {TID, WME} -> hardware queue mapping is important for
transmit completion.  It's used to schedule more traffic for that
particular TID, because that {many TID}:{1 TXQ} mapping in ath_tx_tid_sched()
is used for driving completion.  Ie, when the hardware queue completes,
it'll walk that list of scheduled TIDs attached to that TXQ.

The eventual aim is to get ready for some other features around putting
some data into other hardware queues (eg for better PS-POLL support,
uAPSD, support, correct-er TDMA support, etc) which requires that
I tidy all of this up in preparation for then introducing further
TID scheduling that isn't linked to a hardware TXQ (likely a per-WME, per-TID
driver queue, and a per-node driver queue) to enable that.

Tested:

* AR9380, STA mode
* AR9380, AR9580, AP mode
2017-03-19 05:00:14 +00:00
..
amd64 Implement getrandom() syscall. 2017-03-18 18:34:29 +00:00
arm Remove unreferenced global function imx_gpt_get_timerfreq() and do some 2017-03-19 04:03:39 +00:00
arm64 If ofw_bus_msimap fails don't try to use the invalid MSI/MSI-X parent node. 2017-03-16 17:49:37 +00:00
boot Mark the EFI PE header as allocated. While ld.bfd doesn't seem to care 2017-03-17 13:31:24 +00:00
bsm
cam Increase device openings to tagged maximum. 2017-03-11 18:46:46 +00:00
cddl Reduce ARC fragmentation threshold 2017-03-17 12:34:57 +00:00
compat Regenerate syscall files for r315526 2017-03-19 00:54:24 +00:00
conf use INT3 instead of NOP for x86 binary padding 2017-03-19 00:22:13 +00:00
contrib Copy needed include files from EDK2. This is a minimal set gleened 2017-03-08 02:47:59 +00:00
crypto
ddb Fix right shifts on arches with db_expr_t larger than u_int (LP64 arches 2017-03-18 07:01:18 +00:00
dev [ath] prepare for "correct" group (bcast/mcast) address frame handling and software/hardware queue TID mapping. 2017-03-19 05:00:14 +00:00
fs
gdb
geom After r315112 I broke the tests with eli, instead to pass 0, I should pass 2017-03-13 13:56:01 +00:00
gnu Update our device tree files to a Linux 4.10 2017-03-07 13:56:49 +00:00
i386 Implement getrandom() syscall. 2017-03-18 18:34:29 +00:00
isa
kern Regenerate syscall files for r315526 2017-03-19 00:54:24 +00:00
kgssapi
libkern Discard first 3072 bytes of RC4 keystream, this is a bandaid 2017-03-14 06:00:44 +00:00
mips Add MIPS boot support for the BCM4706/Northstar ChipCommon core. 2017-03-17 22:02:02 +00:00
modules - Add support for eMMC "partitions". Besides the user data area, i. e. 2017-03-16 22:23:04 +00:00
net Change casting to a uintptr_t to be compatible with non-x86 architectures. 2017-03-14 22:25:07 +00:00
net80211 [net80211] begin fleshing out per-VAP WME configurations. 2017-03-13 16:44:06 +00:00
netgraph
netinet Add some ntohl() love to r315277 2017-03-14 20:57:54 +00:00
netinet6 Constrain IPv6 routes to single FIBs when net.add_addr_allfibs=0 2017-03-17 16:50:37 +00:00
netipsec Introduce the concept of IPsec security policies scope. 2017-03-07 00:13:53 +00:00
netnatm
netpfil pf: Fix rule evaluation after inet6 route-to 2017-03-19 03:06:09 +00:00
netsmb
nfs
nfsclient
nfsserver
nlm
ofed Add basic support for VIMAGE to the LinuxKPI and ibcore. 2017-03-16 09:59:35 +00:00
opencrypto
powerpc Introduce 64-bit PowerPC Book-E support 2017-03-17 21:40:14 +00:00
riscv
rpc
security
sparc64
sys Regenerate syscall files for r315526 2017-03-19 00:54:24 +00:00
teken Fix bright colors for syscons, and make them work for the first time 2017-03-18 11:13:54 +00:00
tests
tools [fdt] Make DTBs generated by make_dtb.sh overlay-ready 2017-03-10 22:45:07 +00:00
ufs
vm The adj_free and max_free values of new_entry will be calculated and 2017-03-16 05:44:16 +00:00
x86 x86/srat: fix parsing of APIC IDs > MAX_APIC_ID 2017-03-16 09:33:36 +00:00
xdr
xen xenstore: fix suspension when using the xenstore device 2017-03-07 09:17:48 +00:00
Makefile