#
9b48fb4b |
| 13-May-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Improve the debugging output - use the MAC address rather than various pointer values everywhere.
|
#
22780332 |
| 13-May-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Oops, commit the other half of r250606.
|
#
55cf0326 |
| 07-May-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Simplify this bit of code!
|
#
3527f6a9 |
| 21-Apr-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
When doing BAW tracking, don't dereference a NULL pointer if the BAW slot is actually NULL.
|
#
dff5bdf4 |
| 21-Apr-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
There's some races (likely in the BAR handling, sigh) which is causing the pause/resume code to not be called completely symmetrically.
I'll chase down the root cause of that soon; this at least wor
There's some races (likely in the BAR handling, sigh) which is causing the pause/resume code to not be called completely symmetrically.
I'll chase down the root cause of that soon; this at least works around the bug and tells me when it happens.
show more ...
|
#
12087a07 |
| 16-Apr-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Use the new net80211 method to fetch the node TX power, rather than directly referencing ni->ni_txpower.
This provides the hardware with a slightly more accurate idea of the maximum TX power to be u
Use the new net80211 method to fetch the node TX power, rather than directly referencing ni->ni_txpower.
This provides the hardware with a slightly more accurate idea of the maximum TX power to be using.
This is part of a series to get per-packet TPC to work (better).
Tested:
* AR5416, hostap mode
show more ...
|
#
69e6d7b7 |
| 12-Apr-2013 |
Simon J. Gerraty <sjg@FreeBSD.org> |
sync from head
|
#
c23a9d98 |
| 02-Apr-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Mark a couple of places where I think the dmamap isn't being unmapped before the TX path is being aborted.
Right now it's in the TDMA code and I can live with that; but it really should get fixed.
Mark a couple of places where I think the dmamap isn't being unmapped before the TX path is being aborted.
Right now it's in the TDMA code and I can live with that; but it really should get fixed.
I'll do a more thorough audit of this code soon.
show more ...
|
#
3f3a5dbd |
| 01-Apr-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Ensure that we only call the busdma unmap/flush routines once, when the buffer is being freed.
* When buffers are cloned, the original mapping isn't copied but it wasn't freeing the mapping until
Ensure that we only call the busdma unmap/flush routines once, when the buffer is being freed.
* When buffers are cloned, the original mapping isn't copied but it wasn't freeing the mapping until later. To be safe, free the mapping when the buffer is cloned.
* ath_freebuf() now no longer calls the busdma sync/unmap routines.
* ath_tx_freebuf() now calls sync/unmap.
* Call sync first, before calling unmap.
Tested:
* AR5416, STA mode
show more ...
|
#
09067b6e |
| 01-Apr-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Use ATH_MAX_SCATTER rather than ATH_TXDESC.
ATH_MAX_SCATTER is used to size the ath_buf DMA segment array. We thus should use it when checking sizes of things.
|
#
92e84e43 |
| 26-Mar-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Implement the replacement EDMA FIFO code.
(Yes, the previous code temporarily broke EDMA TX. I'm sorry; I should've actually setup ATH_BUF_FIFOEND on frames so txq->axq_fifo_depth was cleared!)
Thi
Implement the replacement EDMA FIFO code.
(Yes, the previous code temporarily broke EDMA TX. I'm sorry; I should've actually setup ATH_BUF_FIFOEND on frames so txq->axq_fifo_depth was cleared!)
This code implements a whole bunch of sorely needed EDMA TX improvements along with CABQ TX support.
The specifics:
* When filling/refilling the FIFO, use the new TXQ staging queue for FIFO frames
* Tag frames with ATH_BUF_FIFOPTR and ATH_BUF_FIFOEND correctly. For now the non-CABQ transmit path pushes one frame into the TXQ staging queue without setting up the intermediary link pointers to chain them together, so draining frames from the txq staging queue to the FIFO queue occurs AMPDU / MPDU at a time.
* In the CABQ case, manually tag the list with ATH_BUF_FIFOPTR and ATH_BUF_FIFOEND so a chain of frames is pushed into the FIFO at once.
* Now that frames are in a FIFO pending queue, we can top up the FIFO after completing a single frame. This means we can keep it filled rather than waiting for it drain and _then_ adding more frames.
* The EDMA restart routine now walks the FIFO queue in the TXQ rather than the pending queue and re-initialises the FIFO with that.
* When restarting EDMA, we may have partially completed sending a list. So stamp the first frame that we see in a list with ATH_BUF_FIFOPTR and push _that_ into the hardware.
* When completing frames, only check those on the FIFO queue. We should never ever queue frames from the pending queue direct to the hardware, so there's no point in checking.
* Until I figure out what's going on, make sure if the TXSTATUS for an empty queue pops up, complain loudly and continue. This will stop the panics that people are seeing. I'll add some code later which will assist in ensuring I'm populating each descriptor with the correct queue ID.
* When considering whether to queue frames to the hardware queue directly or software queue frames, make sure the depth of the FIFO is taken into account now.
* When completing frames, tag them with ATH_BUF_BUSY if they're not the final frame in a FIFO list. The same holding descriptor behaviour is required when handling descriptors linked together with a link pointer as the hardware will re-read the previous descriptor to refresh the link pointer before contiuning.
* .. and if we complete the FIFO list (ie, the buffer has ATH_BUF_FIFOEND set), then we don't need the holding buffer any longer. Thus, free it.
Tested:
* AR9380/AR9580, STA and hostap * AR9280, STA/hostap
TODO:
* I don't yet trust that the EDMA restart routine is totally correct in all circumstances. I'll continue to thrash this out under heavy multiple-TXQ traffic load and fix whatever pops up.
show more ...
|
#
35bec365 |
| 26-Mar-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Remove the mcast path calls to ath_hal_gettxdesclinkptr() for axq_link - they're no longer needed for the legacy path and they're not wanted for the EDMA path.
Tested:
* AR9280, hostap + CABQ * AR9
Remove the mcast path calls to ath_hal_gettxdesclinkptr() for axq_link - they're no longer needed for the legacy path and they're not wanted for the EDMA path.
Tested:
* AR9280, hostap + CABQ * AR9380/AR9580, hostap + CABQ
show more ...
|
#
0891354c |
| 26-Mar-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Migrate the multicast queue assembly code to not use the axq_link pointer and instead use the HAL method to set the link pointer.
Tested:
* AR9280, hostap mode, CABQ frames being queued and transmi
Migrate the multicast queue assembly code to not use the axq_link pointer and instead use the HAL method to set the link pointer.
Tested:
* AR9280, hostap mode, CABQ frames being queued and transmitted
show more ...
|
#
56a85978 |
| 24-Mar-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Move the TXQ lock earlier in this routine - so to correctly protect the link pointer check.
|
#
b837332d |
| 24-Mar-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Overhaul the TXQ locking (again!) as part of some beacon/cabq timing related issues.
Moving the TX locking under one lock made things easier to progress on but it had one important side-effect - it
Overhaul the TXQ locking (again!) as part of some beacon/cabq timing related issues.
Moving the TX locking under one lock made things easier to progress on but it had one important side-effect - it increased the latency when handling CABQ setup when sending beacons.
This commit introduces a bunch of new changes and a few unrelated changs that are just easier to lump in here.
The aim is to have the CABQ locking separate from other locking. The CABQ transmit path in the beacon process thus doesn't have to grab the general TX lock, reducing lock contention/latency and making it more likely that we'll make the beacon TX timing.
The second half of this commit is the CABQ related setup changes needed for sane looking EDMA CABQ support. Right now the EDMA TX code naively assumes that only one frame (MPDU or A-MPDU) is being pushed into each FIFO slot. For the CABQ this isn't true - a whole list of frames is being pushed in - and thus CABQ handling breaks very quickly.
The aim here is to setup the CABQ list and then push _that list_ to the hardware for transmission. I can then extend the EDMA TX code to stamp that list as being "one" FIFO entry (likely by tagging the last buffer in that list as "FIFO END") so the EDMA TX completion code correctly tracks things.
Major:
* Migrate the per-TXQ add/removal locking back to per-TXQ, rather than a single lock.
* Leave the software queue side of things under the ATH_TX_LOCK lock, (continuing) to serialise things as they are.
* Add a new function which is called whenever there's a beacon miss, to print out some debugging. This is primarily designed to help me figure out if the beacon miss events are due to a noisy environment, issues with the PHY/MAC, or other.
* Move the CABQ setup/enable to occur _after_ all the VAPs have been looked at. This means that for multiple VAPS in bursted mode, the CABQ gets primed once all VAPs are checked, rather than being primed on the first VAP and then having frames appended after this.
Minor:
* Add a (disabled) twiddle to let me enable/disable cabq traffic. It's primarily there to let me easily debug what's going on with beacon and CABQ setup/traffic; there's some DMA engine hangs which I'm finally trying to trace down.
* Clear bf_next when flushing frames; it should quieten some warnings that show up when a node goes away.
Tested:
* AR9280, STA/hostap, up to 4 vaps (staggered) * AR5416, STA/hostap, up to 4 vaps (staggered)
TODO:
* (Lots) more AR9380 and later testing, as I may have missed something here. * Leverage this to fix CABQ hanling for AR9380 and later chips. * Force bursted beaconing on the chips that default to staggered beacons and ensure the CABQ stuff is all sane (eg, the MORE bits that aren't being correctly set when chaining descriptors.)
show more ...
|
#
378a752f |
| 19-Mar-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Now that the tx map field is correctly populated for both edma and legacy chips, just use that.
|
#
876a84e8 |
| 18-Mar-2013 |
Martin Matuska <mm@FreeBSD.org> |
MFC @248461
|
#
cd4f1ba8 |
| 15-Mar-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Why'd I keep this here? remove it entirely now.
|
#
302868d9 |
| 15-Mar-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Fix two bugs:
* when pulling frames off of the TID queue, the ATH_TID_REMOVE() macro decrements the axq_depth field. So don't do it twice.
* in ath_tx_comp_cleanup_aggr(), bf wasn't being reset
Fix two bugs:
* when pulling frames off of the TID queue, the ATH_TID_REMOVE() macro decrements the axq_depth field. So don't do it twice.
* in ath_tx_comp_cleanup_aggr(), bf wasn't being reset to bf_first before walking the buffer list to complete buffers; so those buffers will leak.
show more ...
|
#
8454d321 |
| 15-Mar-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Remove a now incorrect comment.
This comment dates back to my initial stab at TX aggregation completion, where I didn't even bother trying to do software retries.
|
#
a03fbc7e |
| 09-Mar-2013 |
Martin Matuska <mm@FreeBSD.org> |
MFC @248093
|
#
b3420862 |
| 09-Mar-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Disable the hw TID != buffer TID check.
I can 100% reliably trigger this on TID 1 traffic by using iperf -S 32 <client fields> to create traffic that maps to TID 1.
The reference driver doesn't do
Disable the hw TID != buffer TID check.
I can 100% reliably trigger this on TID 1 traffic by using iperf -S 32 <client fields> to create traffic that maps to TID 1.
The reference driver doesn't do this check.
show more ...
|
#
d241a0e6 |
| 26-Feb-2013 |
Xin LI <delphij@FreeBSD.org> |
IFC @247348.
|
#
ce597531 |
| 21-Feb-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
Disable debugging entries about BAW issues. I haven't seen any issues to do with BAW tracking in the last 9 months or so.
|
#
f274e91f |
| 20-Feb-2013 |
Adrian Chadd <adrian@FreeBSD.org> |
A couple of quick tidyups:
* Delete this debugging print - I used it when debugging the initial TX descriptor chaining code. It now works, so let's toss it. It just confuses people if they enab
A couple of quick tidyups:
* Delete this debugging print - I used it when debugging the initial TX descriptor chaining code. It now works, so let's toss it. It just confuses people if they enable TX descriptor debugging as they get two slightly different versions of the same descriptor.
* Indenting.
show more ...
|