1. 01 2月, 2011 1 次提交
    • H
      rt2x00: Refactor beacon code to make use of start- and stop_queue · 69cf36a4
      Helmut Schaa 提交于
      This patch allows to dynamically remove beaconing interfaces without
      shutting beaconing down on all interfaces.
      
      The only place to start and stop beaconing are now the start- and
      stop_queue callbacks. Hence, we can remove some register writes during
      interface bring up (config_intf) and only write the correct sync mode
      to the register there.
      
      When multiple beaconing interfaces are present we should enable
      beaconing as soon as mac80211 enables beaconing on at least one of
      them. The beacon queue gets stopped when the last beaconing
      interface was stopped by mac80211. Therefore, introduce another
      interface counter to keep track ot the number of enabled beaconing
      interfaces and start or stop the beacon queue accordingly.
      
      To allow single interfaces to stop beaconing, add a new driver
      callback clear_beacon to clear a single interface's beacon without
      affecting the other interfaces. Don't overload the clear_entry callback
      for clearing beacons as that would introduce additional overhead
      (check for each TX queue) into the clear_entry callback which is used
      on the drivers TX/RX hotpaths.
      
      Furthermore, the write beacon callback doesn't need to enable beaconing
      anymore but since beaconing should be disabled while a new beacon is
      written or cleared we still disable beacon generation and enable it
      afterwards again in the driver specific callbacks. However, beacon
      related interrupts should not be disabled/enabled here, that's solely
      done from the start- and stop queue callbacks. It would be nice to stop
      the beacon queue just before the beacon update and enable it afterwards
      in rt2x00queue itself instead of the current implementation that relies
      on the driver doing the right thing. However, since start- and
      stop_queue are mutex protected we cannot use them for atomic beacon
      updates.
      Signed-off-by: NHelmut Schaa <helmut.schaa@googlemail.com>
      Acked-by: NGertjan van Wingerde <gwingerde@gmail.com>
      Signed-off-by: NIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      69cf36a4
  2. 05 1月, 2011 5 次提交
  3. 21 12月, 2010 1 次提交
  4. 14 12月, 2010 5 次提交
  5. 01 12月, 2010 1 次提交
  6. 18 11月, 2010 1 次提交
  7. 16 11月, 2010 1 次提交
  8. 12 10月, 2010 2 次提交
  9. 06 10月, 2010 2 次提交
    • H
      rt2x00: Implement HT protection for rt2800 · 87c1915d
      Helmut Schaa 提交于
      Update the HT operation mode when mac80211 sends it to us and set
      the different HT protection modes and rates accordingly. For now
      only use CTS-to-self with OFDM 24M or CCK 11M when protection is
      required.
      Signed-off-by: NHelmut Schaa <helmut.schaa@googlemail.com>
      Signed-off-by: NIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      87c1915d
    • H
      rt2x00: rework tx status handling in rt2800pci · 96c3da7d
      Helmut Schaa 提交于
      This patch changes the way tx status reports are handled by rt2800pci.
      Previously rt2800pci would sometimes lose tx status reports as the
      TX_STA_FIFO register is a fifo of 16 entries that can overflow in case
      we don't read it often/fast enough. Since interrupts are disabled in the
      device during the execution of the interrupt thread it happend sometimes
      under high network and CPU load that processing took too long and a few
      tx status reports were dropped by the hw.
      
      To fix this issue the TX_STA_FIFO register is read directly in the
      interrupt handler and stored in a kfifo which is large enough to hold
      all status reports of all used tx queues.
      
      To process the status reports a new tasklet txstatus_tasklet is used.
      Using the already used interrupt thread is not possible since we don't
      want to disable the TX_FIFO_STATUS interrupt while processing them and
      it is not possible to schedule the interrupt thread multiple times for
      execution. A tasklet instead can be scheduled multiple times which
      allows to leave the TX_FIFO_STATUS interrupt enabled while a previously
      scheduled tasklet is still executing.
      
      In short: All other interrupts are handled in the interrupt thread as
      before. Only the TX_FIFO_STATUS interrupt is partly handled in the
      interrupt handler and finished in the according tasklet.
      
      One drawback of this patch is that it duplicates some code from
      rt2800lib. However, that can be cleaned up in the future once the
      rt2800usb and rt2800pci tx status handling converge more.
      
      Using this patch on a Ralink RT3052 embedded board gives me a reliable
      wireless connection even under high CPU and network load. I've
      transferred several gigabytes without any queue lockups.
      Signed-off-by: NHelmut Schaa <helmut.schaa@googlemail.com>
      Signed-off-by: NIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      96c3da7d
  10. 15 9月, 2010 1 次提交
  11. 01 9月, 2010 1 次提交
    • I
      rt2x00: Split watchdog check into a DMA and STATUS timeout · 652a9dd2
      Ivo van Doorn 提交于
      The watchdog for rt2800usb triggers frequently causing all URB's
      to be canceled often enough to interrupt the normal TX flow.
      More research indicated that not the URB upload to the USB host
      were hanging, but instead the TX status reports.
      
      To correctly detect what is going on, we introduce Q_INDEX_DMA_DONE
      which is an index counter between Q_INDEX_DONE and Q_INDEX and indicates
      if the frame has been transfered to the device.
      
      This also requires the rt2x00queue timeout functions to be updated
      to differentiate between a DMA timeout (time between Q_INDEX and
      Q_INDEX_DMA_DONE timeout) and a STATUS timeout (time between
      Q_INDEX_DMA_DONE and Q_INDEX_DONE timeout)
      
      All Q_INDEX_DMA_DONE code was taken from the RFC from
      Helmut Schaa <helmut.schaa@googlemail.com> for the implementation
      for watchdog for rt2800pci.
      Signed-off-by: NIvo van Doorn <IvDoorn@gmail.com>
      Acked-by: NGertjan van Wingerde <gwingerde@gmail.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      652a9dd2
  12. 26 8月, 2010 2 次提交
  13. 17 8月, 2010 3 次提交
  14. 13 7月, 2010 6 次提交
  15. 01 7月, 2010 1 次提交
  16. 03 6月, 2010 5 次提交
  17. 11 5月, 2010 1 次提交
  18. 17 4月, 2010 1 次提交