summaryrefslogtreecommitdiffstats
path: root/contrib/gcclibs/libcpp
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2013-12-02 03:40:51 +0000
committeradrian <adrian@FreeBSD.org>2013-12-02 03:40:51 +0000
commitfa8d4d4e358d69d29ae51a200890b2f48900593e (patch)
treecea88b638f25cb56d4b2d628b8983733876fb8ff /contrib/gcclibs/libcpp
parent3488bf48748597086276466de56694e33d849066 (diff)
downloadFreeBSD-src-fa8d4d4e358d69d29ae51a200890b2f48900593e.zip
FreeBSD-src-fa8d4d4e358d69d29ae51a200890b2f48900593e.tar.gz
Add some code to double-check whether we're correctly populating the
TX ring according to what the firmware requires. The firmware requires A-MPDU sub-frames to be at a very specific ring offset - that is, the ring slot offset should be (seqno % 256.) This holds for every NIC I've tested thus far except the 4965, which starts erroring out here shortly before the firmware panics. Which is good, it's doing what it's supposed to (read: capture that we've screwed up somewhere.) The specifics about getting this stuff right: * the initial seqno allocation should match up with the ringid. * .. yes, this means we can start at a ring offset that isn't zero. * .. because we program the start seqno in the firmware message to setup the AC. * The initial seqno allocation may be non-zero _and_ frames may be being transmitted during a-mpdu negotiation. I faced similar issues on ath(4) and had to software queue frames to that node+TID during A-MPDU negotiation. * seqno allocation should be in lockstep with ring increments. * If we fail to transmit some segment, no, we shouldn't reuse that ring slot. We should just transmit a BAR (which we aren't yet doing, sigh) and move onto the next seqno. * In theory there shouldn't be any holes in the seqno space when we are transmitting frames. Tested: * 4965 (throws problems, so yes we have to fix this); * 5100 (seems ok); * 6200 (seems ok); * 2200 (seems ok); * 2230 (seems ok).
Diffstat (limited to 'contrib/gcclibs/libcpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud