#
285830 |
|
23-Jul-2015 |
gjb |
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1 builds. - Update newvers.sh to reflect RC1. - Update __FreeBSD_version to reflect 10.2. - Update default pkg(8) configuration to use the quarterly branch.[1]
Discussed with: re, portmgr [1] Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
256281 |
|
10-Oct-2013 |
gjb |
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation
|
#
252385 |
|
29-Jun-2013 |
adrian |
Don't log anything if npkts == 0.
This occurs at RX DMA start, even though the RX FIFO has plenty of space. I'll go figure out why, but this shouldn't cause people to be spammed by these messages.
|
#
249565 |
|
16-Apr-2013 |
adrian |
Use a per-RX-queue deferred list, rather than a single deferred list for both queues.
Since ath_rx_pkt() does multi-mbuf frame recombining based on the RX queue, this needs to occur.
Tested:
* AR9380 (XB112), hostap mode
|
#
249088 |
|
04-Apr-2013 |
adrian |
Update comments!
|
#
249085 |
|
04-Apr-2013 |
adrian |
Fix the busdma logic to work with EDMA chipsets when using bounce buffers (ie, >4GB on amd64.)
The underlying problem was that PREREAD doesn't sync the mbuf with the DMA memory (ie, bounce buffer), so the bounce buffer may have had stale information. Thus it was always considering the buffer completed and things just went off the rails.
This change does the following:
* Make ath_rx_pkt() always consume the mbuf somehow; it no longer passes error mbufs (eg CRC errors, crypt errors, etc) back up to the RX path to recycle. This means that a new mbuf is always allocated each time, but it's cleaner.
* Push the RX buffer map/unmap to occur in the RX path, not ath_rx_pkt(). Thus, ath_rx_pkt() now assumes (a) it has to consume the mbuf somehow, and (b) that it's already been unmapped and synced.
* For the legacy path, the descriptor isn't mapped, it comes out of coherent, DMA memory anyway. So leave it there.
* For the EDMA path, the RX descriptor has to be cleared before its passed to the hardware, so that when we check with a POSTREAD sync, we actually get either a blank (not finished) or a filled out descriptor (finished.) Otherwise we get stale data in the DMA memory.
* .. so, for EDMA RX path, we need PREREAD|PREWRITE to sync the data -> DMA memory, then POSTREAD|POSTWRITE to finish syncing the DMA memory -> data.
* Whilst we're here, make sure that in EDMA buffer setup (ie, bzero'ing the descriptor part) is done before the mbuf is map/synched.
NOTE: there's been a lot of commits besides this one with regards to tidying up the busdma handling in ath(4). Please check the recent commit history.
Discussed with and thanks to: scottl
Tested:
* AR5416 (non-EDMA) on i386, with the DMA tag for the driver set to 2^^30, not 2^^32, STA
* AR9580 (EDMA) on i386, as above, STA
* User - tested AR9380 on amd64 with 32GB RAM.
PR: kern/177530
|
#
248984 |
|
01-Apr-2013 |
adrian |
Only unmap the RX mbuf DMA map if there's a buffer here.
The normal RX path (ath_rx_pkt()) will sync and unmap the buffer before passing it up the stack. We only need to do this if we're flushing the FIFO during reset/shutdown.
|
#
248529 |
|
19-Mar-2013 |
adrian |
Break out the RX completion path into "FIFO check / refill" and "complete RX frames."
The 128 entry RX FIFO is really easy to fill up and miss refilling when it's done in the ath taskq - as that gets blocked up doing RX completion, TX completion and other random things.
So the 128 entry RX FIFO now gets emptied and refilled in the ath_intr() task (and it grabs / releases locks, so now ath_intr() can't just be a FAST handler yet!) but the locks aren't held for very long. The completion part is done in the ath taskqueue context.
Details:
* Create a new completed frame list - sc->sc_rx_rxlist; * Split the EDMA RX process queue into two halves - one that processes the RX FIFO and refills it with new frames; another that completes the completed frame list; * When tearing down the driver, flush whatever is in the deferred queue as well as what's in the FIFO; * Create two new RX methods - one that processes all RX queues, one that processes the given RX queue. When MSI is implemented, we get told which RX queue the interrupt came in on so we can specifically schedule that. (And I can do that with the non-MSI path too; I'll figure that out later.) * Convert the legacy code over to use these new RX methods; * Replace all the instances of the RX taskqueue enqueue with a call to a relevant RX method to enqueue one or all RX queues.
Tested:
* AR9380, STA * AR9580, STA * AR5413, STA
|
#
248450 |
|
18-Mar-2013 |
adrian |
Log some more information when the RX buffer allocation failed.
|
#
243857 |
|
04-Dec-2012 |
glebius |
Mechanically substitute flags from historic mbuf allocator with malloc(9) flags in sys/dev.
|
#
242782 |
|
08-Nov-2012 |
adrian |
Add some hooks into the driver to attach, detach and record EDMA descriptor events.
This is primarily for the TX EDMA and TX EDMA completion. I haven't yet tied it into the EDMA RX path or the legacy TX/RX path.
Things that I don't quite like:
* Make the pointer type 'void' in ath_softc and have if_ath_alq*() return a malloc'ed buffer. That would remove the need to include if_ath_alq.h in if_athvar.h. * The sysctl setup needs to be cleaned up.
|
#
242778 |
|
08-Nov-2012 |
adrian |
Convert this to a debug printf; it's working fine now.
|
#
240899 |
|
24-Sep-2012 |
adrian |
Migrate the ath(4) KTR logging to use an ATH_KTR() macro.
This should eventually be unified with ATH_DEBUG() so I can get both from one macro; that may take some time.
Add some new probes for TX and TX completion.
|
#
239797 |
|
29-Aug-2012 |
adrian |
Remove - not needed.
|
#
239111 |
|
06-Aug-2012 |
adrian |
Remove unnecessary debugging printf()s.
|
#
238710 |
|
23-Jul-2012 |
adrian |
Begin separating out the TX DMA setup in preparation for TX EDMA support.
* Introduce TX DMA setup/teardown methods, mirroring what's done in the RX path.
Although the TX DMA descriptor is setup via ath_desc_alloc() / ath_desc_free(), there TX status descriptor ring will be allocated in this path.
* Remove some of the TX EDMA capability probing from the RX path and push it into the new TX EDMA path.
|
#
238506 |
|
15-Jul-2012 |
adrian |
Log the number of handled decsriptors and valid descriptors when hitting RXEOL.
|
#
238449 |
|
14-Jul-2012 |
adrian |
Fix build breakage when one isn't building with IEEE80211_SUPPORT_SUPERG.
Noticed by: mav
|
#
238445 |
|
14-Jul-2012 |
adrian |
Merge in some other features from the legacy RX path:
* wrap the RX proc calls in the RX refcount; * call the DFS checking, fast frames staging and TX rescheduling if required.
TODO:
* figure out if I can just make "do TX rescheduling" mean "schedule TX taskqueue" ?
|
#
238441 |
|
14-Jul-2012 |
adrian |
Make sure that 'rs' is pointing to the correct RX status.
|
#
238436 |
|
14-Jul-2012 |
adrian |
Change the RX EDMA path to first complete the FIFO, then re-populate it with fresh descriptors, before handling the frames.
Wrap it all in the RX locks.
Since the FIFO is very shallow (16 for HP, 128 for LP) it needs to be drained and replenished very quickly. Ideally, I'll eventually move this RX FIFO drain/fill into the interrupt handler, only deferring the actual frame completion.
|
#
238432 |
|
14-Jul-2012 |
adrian |
Fix EDMA RX to actually work without panicing the machine.
I was setting up the RX EDMA buffer to be 4096 bytes rather than the RX data buffer portion. The hardware was likely getting very confused and DMAing descriptor portions into places it shouldn't, leading to memory corruption and occasional panics.
Whilst here, don't bother allocating descriptors for the RX EDMA case. We don't use those descriptors. Instead, just allocate ath_buf entries.
|
#
238365 |
|
11-Jul-2012 |
jhb |
Cast a bus address to a uintmax_t for a debug printf to fix the build on arm.
|
#
238350 |
|
10-Jul-2012 |
jhb |
Fix build when ATH_DEBUG is not defined.
|
#
238344 |
|
10-Jul-2012 |
adrian |
Add some debugging and comments about what's going on when reinitialising the FIFO.
I still see some corner cases where no RX occurs when it should be occuring. It's quite possible that there's a subtle race condition somewhere; or maybe I'm not programming the RX queues right.
There's also no locking here yet, so any reset/configuration path state change (ie, enabling/disabling receive from the ioctl, net80211 taskqueue, etc) could quite possibly confuse things.
|
#
238337 |
|
10-Jul-2012 |
adrian |
Add/fix EDMA RX behaviour.
* For now, kickpcu should hopefully just do nothing - the PCU doesn't need 'kicking' for Osprey and later NICs. The PCU will just restart once the next FIFO entry is pushed in.
* Teach "proc" about "dosched", so it can be used to just flush the FIFO contents without adding new FIFO entries.
* .. and now, implement the RX "flush" routine.
* Re-initialise the FIFO contents if the FIFO is empty (the DP is NULL.) When PCU RX is disabled (ie, writing RX_D to the RX configuration register) then the FIFO will be completely emptied. If the software FIFO is full, then no further descriptors are pushed into the FIFO and things stall.
This all requires much, much more thorough stress testing.
|
#
238317 |
|
10-Jul-2012 |
adrian |
Implement EDMA RX for AR93xx and later chips.
This is inspired by ath9k and the reference driver, but it's a new implementation of the RX FIFO handling.
This has some issues - notably the FIFO needs to be reprogrammed when the chip is reset.
|
#
238055 |
|
03-Jul-2012 |
adrian |
Begin abstracting out the RX path in preparation for RX EDMA support.
The RX EDMA support requires a modified approach to the RX descriptor handling.
Specifically:
* There's now two RX queues - high and low priority; * The RX queues are implemented as FIFOs; they're now an array of pointers to buffers; * .. and the RX buffer and descriptor are in the same "buffer", rather than being separate.
So to that end, this commit abstracts out most of the RX related functions from the bulk of the driver. Notably, the RX DMA/buffer allocation isn't updated, primarily because I haven't yet fleshed out what it should look like.
Whilst I'm here, create a set of matching but mostly unimplemented EDMA stubs.
Tested:
* AR9280, station mode
TODO:
* Thorough AP and other mode testing for non-EDMA chips; * Figure out how to allocate RX buffers suitable for RX EDMA, including correctly setting the mbuf length to compensate for the RX descriptor and completion status area.
|