1. 20 5月, 2014 1 次提交
    • R
      ath9k_hw: Abort transmission for sleeping station · 08232bf9
      Rajkumar Manoharan 提交于
      The data transmission to the power save station should be aborted
      immediately, whenever the station informs sleep state. Right now
      the frames queued into into hardware are being transmitted until
      the hardware detects the power save station based excessive retries
      of the data frames due to unacknowlegdement. Then remaining frames
      are returned with filetered status and might be retried later by
      driver or mac80211.
      
      Per WFA certification testing, AP should not send out more than two
      frames after processing nullfunc with PM bit set from associated
      station. To speed up tx filtering, the pending frames in hardware
      queues for given station will be aborted immediately via tx filter
      registers. This transmit filters can be ignored if the descriptor
      is having invalid destination index or clear destination mask set.
      Signed-off-by: NRajkumar Manoharan <rmanohar@qti.qualcomm.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      08232bf9
  2. 13 2月, 2014 1 次提交
  3. 19 12月, 2013 1 次提交
  4. 15 10月, 2013 1 次提交
  5. 16 8月, 2013 1 次提交
  6. 31 5月, 2013 2 次提交
  7. 11 4月, 2013 1 次提交
    • F
      ath9k: detect more kinds of invalid descriptors · 3747c3ee
      Felix Fietkau 提交于
      If AR_CRCErr, AR_PHYErr, AR_DecryptCRCErr or AR_MichaelErr is indicated
      in the rx status word, but AR_RxFrameOK is also set, the descriptor
      contents are typically invalid. This can show up as a warning about
      invalid MCS rates in a frame. Even with those checks in place, a
      descriptor with invalid MCS rates can still sometimes make it through to
      the driver (mostly on older hardware like AR91xx).
      
      Detect such errors in the last descriptor of a frame and discard the
      whole frame if present.
      Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      3747c3ee
  8. 10 1月, 2013 1 次提交
    • S
      ath9k: add spectral scan feature · e93d083f
      Simon Wunderlich 提交于
      Adds the spectral scan feature for ath9k. AR92xx and AR93xx chips
      are supported for now. The spectral scan is triggered by configuring
      a mode through a debugfs control file. Samples can be gathered via
      another relay debugfs file.
      
      Essentially, to try it out:
      
      echo chanscan > /sys/kernel/debug/ieee80211/phy0/ath9k/spectral_scan_ctl
      iw dev wlan0 scan
      cat /sys/kernel/debug/ieee80211/phy0/ath9k/spectral_scan0 > samples
      echo disable > /sys/kernel/debug/ieee80211/phy0/ath9k/spectral_scan_ctl
      
      This feature is still experimental.
      
      The special "chanscan" mode is used to perform spectral scan while
      mac80211 is scanning for channels. To allow this,
      sw_scan_start/complete() ops have been added.
      
      The patch contains code snippets and information from Zefir Kurtisi and
      information provided by Adrian Chadd and Felix Fietkau.
      Signed-off-by: NSimon Wunderlich <siwu@hrz.tu-chemnitz.de>
      Signed-off-by: NMathias Kretschmer <mathias.kretschmer@fokus.fraunhofer.de>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      e93d083f
  9. 11 8月, 2012 1 次提交
    • F
      ath9k: fix interrupt storms on queued hardware reset · f41a9b3b
      Felix Fietkau 提交于
      commit b74713d0
      "ath9k: Handle fatal interrupts properly" introduced a race condition, where
      IRQs are being left enabled, however the irq handler returns IRQ_HANDLED
      while the reset is still queued without addressing the IRQ cause.
      This leads to an IRQ storm that prevents the system from even getting to
      the reset code.
      
      Fix this by disabling IRQs in the handler without touching intr_ref_cnt.
      
      Cc: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
      Cc: Sujith Manoharan <c_manoha@qca.qualcomm.com>
      Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      f41a9b3b
  10. 10 7月, 2012 1 次提交
  11. 16 3月, 2012 2 次提交
  12. 12 10月, 2011 3 次提交
  13. 20 9月, 2011 1 次提交
  14. 17 9月, 2011 3 次提交
  15. 31 8月, 2011 1 次提交
  16. 30 8月, 2011 1 次提交
  17. 25 8月, 2011 1 次提交
  18. 20 5月, 2011 1 次提交
  19. 20 4月, 2011 1 次提交
    • F
      ath9k: fix powersave frame filtering/buffering in AP mode · 5519541d
      Felix Fietkau 提交于
      This patch fixes a long standing issue of pending packets in the queue being
      sent (and retransmitted many times) to sleeping stations.
      This was made worse by aggregation through driver-internal retransmitting
      of A-MDPU subframes.
      Previously the hardware tx filter was cleared unconditionally for every
      single packet - with this patch it uses the IEEE80211_TX_CTL_CLEAR_PS_FILT
      for unaggregated frames.
      A sta_notify driver op is added to stop aggregation for stations when they
      enter powersave mode. Subframes stay buffered inside the driver, to ensure
      that the BlockAck window keeps a sane state.
      Since the driver uses software aggregation, the clearing of the tx filter
      needs to be handled by the driver instead of mac80211 for aggregated frames.
      Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      5519541d
  20. 13 4月, 2011 1 次提交
    • F
      ath9k_hw: fix stopping rx DMA during resets · 5882da02
      Felix Fietkau 提交于
      During PHY errors, the MAC can sometimes fail to enter an idle state on older
      hardware (before AR9380) after an rx stop has been requested.
      
      This typically shows up in the kernel log with messages like these:
      
      ath: Could not stop RX, we could be confusing the DMA engine when we start RX up
      ------------[ cut here ]------------
      WARNING: at drivers/net/wireless/ath/ath9k/recv.c:504 ath_stoprecv+0xcc/0xf0 [ath9k]()
      Call Trace:
      [<8023f0e8>] dump_stack+0x8/0x34
      [<80075050>] warn_slowpath_common+0x78/0xa4
      [<80075094>] warn_slowpath_null+0x18/0x24
      [<80d66d60>] ath_stoprecv+0xcc/0xf0 [ath9k]
      [<80d642cc>] ath_set_channel+0xbc/0x270 [ath9k]
      [<80d65254>] ath_radio_disable+0x4a4/0x7fc [ath9k]
      
      When this happens, the state that the MAC enters is easy to identify and
      does not result in bogus DMA traffic, however to ensure a working state
      after a channel change, the hardware should still be reset.
      
      This patch adds detection for this specific MAC state, after which the above
      warnings completely disappear in my tests.
      Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
      Cc: stable@kernel.org
      Cc: Kyungwan Nam <Kyungwan.Nam@Atheros.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      5882da02
  21. 15 3月, 2011 2 次提交
    • F
      ath9k: improve reliability of beacon transmission and stuck beacon handling · efff395e
      Felix Fietkau 提交于
      ath9k calls ath9k_hw_stoptxdma every time it sends a beacon, however there
      is not much point in doing that if the previous beacon and mcast traffic
      went out properly. On AR9380, calling that function too often can result
      in an increase of stuck beacons due to differences in the handling of the
      queue enable/disable functionality.
      
      With this patch, the queue will only be explicitly stopped if the previous
      data frames were not sent successfully. With the beacon code being the
      only remaining user of ath9k_hw_stoptxdma, this function can be simplified
      in order to remove the now pointless attempts at waiting for transmission
      completion, which would never happen at this point due to the different
      method of tx scheduling of the beacon queue.
      Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      efff395e
    • F
      ath9k: fix stopping tx dma on reset · 0d51cccc
      Felix Fietkau 提交于
      In some situations, stopping Tx DMA frequently fails, leading to messages
      like this:
      
      ath: Failed to stop TX DMA in 100 msec after killing last frame
      ath: Failed to stop TX DMA!
      
      This patch uses a few MAC features to abort DMA globally instead of iterating
      over all hardware queues and attempting to stop them individually.
      Not only is that faster and works with a shorter timeout, it also makes the
      process much more reliable.
      
      With this change, I can no longer trigger these messages on AR9380,
      and on AR9280 they become much more rare.
      Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      0d51cccc
  22. 29 1月, 2011 1 次提交
  23. 25 11月, 2010 1 次提交
  24. 10 11月, 2010 3 次提交
    • F
      ath9k_hw: optimize all descriptor access functions · ada9f1ca
      Felix Fietkau 提交于
      Because all of the descriptor data structures are marked as __packed, GCC
      assumes the worst case wrt. alignment and generates unaligned load/store
      instructions on MIPS for access to all fields.
      Since descriptors always have to be 4-byte-aligned, we can just mark the
      data structures with __aligned(4), which allows GCC to generate much more
      efficient code.
      Verified through disassembly and OProfile comparisons.
      Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      ada9f1ca
    • F
      ath9k_hw: optimize tx status descriptor processing · e0e9bc82
      Felix Fietkau 提交于
      Disassembly shows, that at least on MIPS, the compiler generates a lot of
      memory accesses to the same location in the descriptor field parsing.
      Since it is operating on uncached memory, this can be quite expensive in
      this hot path.
      Change the code a bit to help the compiler optimize it properly, and get
      rid of some unused fields in the ath_tx_status struct.
      Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      e0e9bc82
    • F
      ath9k_hw: optimize interrupt mask changes · 4df3071e
      Felix Fietkau 提交于
      OProfile showed that ath9k was spending way too much time in
      ath9k_hw_set_interrupts. Since most of the interrupt mask changes only
      need to globally enable/disable interrupts, it makes sense to split
      this part into separate functions, replacing all calls to
      ath9k_hw_set_interrupts(ah, 0) with ath9k_hw_disable_interrupts(ah).
      
      ath9k_hw_set_interrupts(ah, ah->imask) only gets changed to
      ath9k_hw_enable_interrupts(ah), whenever ah->imask was not changed
      since the point where interrupts were disabled.
      Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      4df3071e
  25. 17 9月, 2010 1 次提交
  26. 13 7月, 2010 1 次提交
  27. 15 6月, 2010 2 次提交
  28. 20 4月, 2010 1 次提交
  29. 17 4月, 2010 2 次提交