1. 10 Jul, 2009 1 commit
  2. 06 May, 2009 1 commit
  3. 09 Feb, 2009 1 commit
  4. 29 Jan, 2009 5 commits
  5. 05 Dec, 2008 3 commits
  6. 25 Nov, 2008 1 commit
    • Ivo van Doorn's avatar
      rt2x00: Fix TX failure path · 0e3de998
      Ivo van Doorn authored
      
      
      The callback function write_tx_data() can only fail
      when our ENTRY_OWNER_DEVICE_DATA flag on a queue entry
      failed to determine the entry was not available and
      it is in fact still owned by the hardware.
      This means that if that function fails the queue
      must be stopped in mac80211.
      
      When rt2x00queue_get_queue() returns NULL in the TX
      path, it means mac80211 has passed us an invalid queue,
      although this should be impossible, it shouldn't hurt
      if we send mac80211 a signal to stop the queue either.
      
      Both issues can simply be resolved by removing their
      manual failure handler and making them use the failure path
      provided in rt2x00mac_tx().
      Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      0e3de998
  7. 21 Nov, 2008 2 commits
    • Ivo van Doorn's avatar
      rt2x00: Fix BUG_ON() with antenna handling · 6d64360a
      Ivo van Doorn authored
      
      
      With the new configuration handling, and more specifically
      splitting the configuration of the antenna from the normal
      configuration steps allowed a BUG_ON() to be triggered
      in the driver because the SW_DIVERSITY was send to the
      driver. This fixes that by catching the value early in
      rt2x00config.c and replacing it with a sensible value.
      
      This also fixes a problem where the antenna is not being
      initialized at all when the radio is enabled. Since it
      no longer is part of the mac80211 configuration the
      only place where rt2x00 configured it was the SW diversity
      handler. Obviously this is broken for all non-diversity
      hardware and breaks SW diversity due to a broken initialization.
      
      When the radio is enabled the antenna will be configured
      once as soon as the config() callback function is called.
      Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      6d64360a
    • Ivo van Doorn's avatar
      rt2x00: Block set_key() during suspend/shutdown · 8058409c
      Ivo van Doorn authored
      
      
      mac80211 will call set_key() when the device is
      shutting down. When the device is unplugged the
      keys will be lost automatically due to the power
      loss. When the device is not plugged but the module
      is only unloaded the keys can remain in the device
      hardware, when the module is loaded the keys will
      be cleaned up during initialization.
      
      This should prevent the problem reported by Johannes Berg,
      where unplugging the device while suspended resulted in
      a NULL pointer error during set_key() which was
      caused because of the CSR base address being freed.
      Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      8058409c
  8. 10 Nov, 2008 2 commits
  9. 31 Oct, 2008 3 commits
  10. 24 Sep, 2008 1 commit
  11. 15 Sep, 2008 1 commit
  12. 29 Aug, 2008 3 commits
    • Ivo van Doorn's avatar
      rt2x00: Initialize txop during conf_tx() callback · 2af0a570
      Ivo van Doorn authored
      
      
      The txop parameter is supported by rt61pci and rt73usb,
      and thus should be written to the register instead
      of using the fixed value set during initialization.
      Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      2af0a570
    • Mattias Nissler's avatar
      rt2x00: Only configure hardware when radio is enabled · 2575c11d
      Mattias Nissler authored
      
      
      Some hardware configuration registers such as antenna and channel configuration
      can only be written when the radio is enabled. Previously, we didn't consider
      this, so some configuration items could be set inconsistently after reenabling
      the radio. This patch changes the config() handler to only reprogram the
      hardware when the radio is enabled. Configuration changes that are made while
      the radio is off are postponed until the radio is switched back on. We also
      leave the radio turned off during initialization and only enable it when
      requested by mac80211. This allows us to get rid of the DIRTY_CONFIG flag,
      because the device is now guaranteed to be completely initialized when brought
      up by mac80211.
      Signed-off-by: default avatarMattias Nissler <mattias.nissler@gmx.de>
      Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      2575c11d
    • Ivo van Doorn's avatar
      rt2x00: Fix race conditions in flag handling · 0262ab0d
      Ivo van Doorn authored
      
      
      Some of the flags should be accessed atomically to
      prevent race conditions. The flags that are most important
      are those that can change often and indicate the actual
      state of the device, queue or queue entry.
      
      The big flag rename was done to move all state flags to
      the same naming type as the other rt2x00dev flags and
      made sure all places where the flags were used were changed. ;)
      
      Thanks to Stephen for most of the queue flags updates,
      which fixes some of the most obvious consequences of the
      race conditions. Among those the notorious:
      
      rt2x00queue_write_tx_frame: Error - Arrived at non-free entry in the non-full queue 0.
      rt2x00queue_write_tx_frame: Error - Arrived at non-free entry in the non-full queue 0.
      rt2x00queue_write_tx_frame: Error - Arrived at non-free entry in the non-full queue 0.
      Signed-off-by: default avatarStephen Blackheath <tramp.enshrine.stephen@blacksapphire.com>
      Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      0262ab0d
  13. 22 Aug, 2008 2 commits
  14. 07 Aug, 2008 1 commit
  15. 01 Aug, 2008 1 commit
  16. 29 Jul, 2008 4 commits
    • Johannes Berg's avatar
      mac80211: partially fix skb->cb use · d0f09804
      Johannes Berg authored
      
      
      This patch fixes mac80211 to not use the skb->cb over the queue step
      from virtual interfaces to the master. The patch also, for now,
      disables aggregation because that would still require requeuing,
      will fix that in a separate patch. There are two other places (software
      requeue and powersaving stations) where requeue can happen, but that is
      not currently used by any drivers/not possible to use respectively.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      d0f09804
    • Ivo van Doorn's avatar
      rt2x00: Force full register config after start() · 74c0ee9b
      Ivo van Doorn authored
      
      
      rt2x00 will only perform configuration changes from
      mac80211 when the configuration option has changed.
      This means it keeps track of the current active configuration
      and will check these values when the config() callback function
      is used.
      
      However this causes breakage when the interface has been
      brought down and up again, since all stored active values
      aren't reset while the registers might have.
      This is for example the case with rt61pci antenna registers which
      will jump to invalid values when the interface has been started.
      
      To make sure a full configuration takes place after the start()
      callback function, a new flag is added which will be checked
      during config() and skips the "what's changed" phase.
      Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      74c0ee9b
    • Ivo van Doorn's avatar
      rt2x00: Fix memleak when RTS/CTS fails · e7087a82
      Ivo van Doorn authored
      
      
      When sending the RTS/CTS frame fails, we should
      free the skb buffer which was created.
      Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      e7087a82
    • Ivo van Doorn's avatar
      rt2x00: Fix QOS sequence counting · 5adf6d63
      Ivo van Doorn authored
      
      
      When IEEE80211_TX_CTL_ASSIGN_SEQ is not set,
      the driver should disable hardware sequence counting
      to make sure the mac80211 provided counter is used.
      This fixes QOS sequence counting, since that is one
      of the cases where mac80211 provides a seperate
      sequence counter.
      
      By moving the sequence counting code to rt2x00queue
      we make sure that _all_ frames get the sequence counter,
      including RTS/CTS and Beacon frames.
      Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      5adf6d63
  17. 15 Jul, 2008 1 commit
  18. 14 Jul, 2008 4 commits
  19. 08 Jul, 2008 1 commit
  20. 27 Jun, 2008 1 commit
    • Ivo van Doorn's avatar
      rt2x00: Fix lock dependency errror · 980dfcb9
      Ivo van Doorn authored
      
      
      This fixes a circular locking dependency in the workqueue handling.
      The interface work task uses the mac80211 function
      ieee80211_iterate_active_interfaces() which grabs the RTNL lock.
      
      However when the interface is brough down, this happens under the RTNL
      lock as well, this causes problems because mac80211 will flush the workqueue
      during the ifdown event. This causes mac80211 to wait until the driver has
      completed all work which can't finish because it is waiting on the RTNL lock.
      
      This is fixed by moving rt2x00 workqueue tasks on a different workqueue,
      this workqueue can be flushed when the ieee80211_hw structure is removed
      by the driver (when the driver is unloaded) which does not happen under the
      RTNL lock.
      Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      980dfcb9
  21. 14 Jun, 2008 1 commit