summaryrefslogtreecommitdiffstats
path: root/sys/dev/ath/if_ath_debug.c
Commit message (Collapse)AuthorAgeFilesLines
* Make sure all of the buffers are printed, rather than (n-1).adrian2012-08-201-4/+2
|
* Extend the TX descriptor debug printing to be properly aware ofadrian2012-08-191-4/+77
| | | | | | | | | | | | | | | | | EDMA code. * create a new TX EDMA descriptor struct to represent TX EDMA descriptors when doing debugging; * implement an EDMA printing function which: + hardcodes the TX map size to 4 for now; + correctly prints out the number of segments - there's one descriptor for up to 4 buffers (segments), not one for each segment; + print out 4 DS buffer and len pointers; + print out the correct number of DWORDs in the TX descriptor. TODO: * Remove all of the hard-coded stuff. Ew.
* Add the AR9380 HAL to the TX descriptor debugging, in order to dump alladrian2012-08-111-1/+2
| | | | of the descriptor contents.
* Extend the RX descriptor completion debugging to log the largeradrian2012-07-091-0/+10
| | | | | | | | AR93xx receive descriptors. This isn't entirely complete - the AR93xx and later descriptors don't have a link/buffer pointer; the descriptor contents just start.
* Revert r233227 and followup commits as it breaks CCMP PN replay detection.adrian2012-06-111-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | | This showed up when doing heavy UDP throughput on SMP machines. The problem with this is because the 802.11 sequence number is being allocated separately to the CCMP PN replay number (which is assigned during ieee80211_crypto_encap()). Under significant throughput (200+ MBps) the TX path would be stressed enough that frame TX/retry would force sequence number and PN allocation to be out of order. So once the frames were reordered via 802.11 seqnos, the CCMP PN would be far out of order, causing most frames to be discarded by the receiver. I've fixed this in some local work by being forced to: (a) deal with the issues that lead to the parallel TX causing out of order sequence numbers in the first place; (b) fix all the packet queuing issues which lead to strange (but mostly valid) TX. I'll begin fixing these in a subsequent commit or five. PR: kern/166190
* Migrate ath_debug and sc_debug from an int to a uint64_t / QUAD;adrian2012-05-151-3/+3
| | | | | | | | | | | | | add some more BAR debugging logic. * Change the definition of ath_debug and ath_softc.sc_debug from int to uint64_t; * Change the relevant sysctls; * Add a new BAR TX debugging field; * Use this in if_ath_tx. This has been tested by using the sysctl program, which happily allows for fields > 32 bits to be configured.
* Remove duplicate txflags field from ath_buf.adrian2012-04-071-3/+2
| | | | | rename bf_state.bfs_flags to bf_state.bfs_txflags, as that is what it effectively is.
* Delay sequence number allocation for A-MPDU until just before the frameadrian2012-03-201-6/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | is queued to the hardware. Because multiple concurrent paths can execute ath_start(), multiple concurrent paths can push frames into the software/hardware TX queue and since preemption/interrupting can occur, there's the possibility that a gap in time will occur between allocating the sequence number and queuing it to the hardware. Because of this, it's possible that a thread will have allocated a sequence number and then be preempted by another thread doing the same. If the second thread sneaks the frame into the BAW, the (earlier) sequence number of the first frame will be now outside the BAW and will result in the frame being constantly re-added to the tail of the queue. There it will live until the sequence numbers cycle around again. This also creates a hole in the RX BAW tracking which can also cause issues. This patch delays the sequence number allocation to occur only just before the frame is going to be added to the BAW. I've been wanting to do this anyway as part of a general code tidyup but I've not gotten around to it. This fixes the PR. However, it still makes it quite difficult to try and ensure in-order queuing and dequeuing of frames. Since multiple copies of ath_start() can be run at the same time (eg one TXing process thread, one TX completion task/one RX task) the driver may end up having frames dequeued and pushed into the hardware slightly/occasionally out of order. And, to make matters more annoying, net80211 may have the same behaviour - in the non-aggregation case, the TX code allocates sequence numbers before it's thrown to the driver. I'll open another PR to investigate this and potentially introduce some kind of final-pass TX serialisation before frames are thrown to the hardware. It's also very likely worthwhile adding some debugging code into ath(4) and net80211 to catch when/if this does occur. PR: kern/166190
* Add support to the TX descriptor printing code to follow ath_bufadrian2011-11-081-19/+30
| | | | | | chains. This allows for debugging of aggregate frames. Sponsored by: Hobnob, Inc.
* Break out the debug macros from if_ath.c into if_ath_debug.[ch] .adrian2011-01-291-0/+156
This is prep work for breaking out the TX path into a separate set of source files.
OpenPOWER on IntegriCloud