1. 10 3月, 2010 1 次提交
  2. 26 1月, 2010 4 次提交
    • D
      iwlwifi: fix throughput degradation in aggregation mode · ff27fabe
      Daniel Halperin 提交于
      The following commit
      
      	commit e4da8c37
      	Author: Johannes Berg <johannes@sipsolutions.net>
      	Date:   Wed Dec 23 13:15:43 2009 +0100
      
      	   mac80211: make off-channel work generic
      
      triggered a bug in iwlwifi where HT parameters would not be correctly set in
      some mac80211 pathways. The aggregation (and possibly other) station flags were
      not being set, which limited the size of aggregation blocks and reduced
      throughput at high rates.
      
      >From Johannes:
      """
      Due to Wey-Yi's patch to use the set-channel command when the channel changes
      while associated, we don't get a full new RXON. Therefore, we don't re-set the
      rxon-station either. However, under some circumstances that apparently have
      gotten more likely mac80211 will first set up the BSS info, then add the
      station and then switch to an HT channel type.
      
      Therefore, the check for "priv->current_ht_config.is_ht" in
      iwl_rxon_add_station() will hit false and not fill in the HT information.
      
      However, that check can just be removed, which is the easiest fix for all this,
      because the HT capa struct is always there, just could possibly have the
      ht_supported member set to false.
      """
      
      A sample good link in my 3x3 network improves by approximately 25% TCP
      throughput. This fixes Bug 2144
      (http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2144).
      Signed-off-by: NDaniel Halperin <dhalperi@cs.washington.edu>
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      ff27fabe
    • R
      iwlwifi: make broadcast station addition generic · 3459ab5a
      Reinette Chatre 提交于
      Add function pointer for broadcast station addition so that we can call it
      in from iwlcore at a later time. We only distinguish between iwlagn and
      iwl3945 broadcast station addition. For the iwl3945 station addition we add
      that function to iwlcore since that is where most station functionality
      resides, making it part of iwl3945 will require significant code
      reorganization that will dilute station management functionality. This
      seems to be an efficient solution.
      
      It may seem as though we are removing error checking when adding the 3945
      broadcast station but this error checking was never really necessary since
      the function returns the station id and the broadcast station id is always
      set.
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      3459ab5a
    • R
      iwlwifi: cleanup station adding code · 1fa97aae
      Reinette Chatre 提交于
      The work done when a station is added is very similar whether the station
      is added synchronously or asynchronously. Centralize this work. At the same
      time increase the status flags being checked for when the command returns
      with accompanying debug messages. Also increase checking when setting the
      "ucode active" state with accompanying debugging.
      
      This work is done in preparation for station notification support.
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      1fa97aae
    • J
      iwlwifi: fix pointer signedness warning · 0b5d9b26
      Johannes Berg 提交于
      There are a few station addresses that are
      char *, instead of the normal u8 *; gcc
      gives pointer signedness warnings for some
      of those, so use u8 * consistently.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      0b5d9b26
  3. 20 1月, 2010 1 次提交
  4. 22 12月, 2009 1 次提交
  5. 19 11月, 2009 1 次提交
    • J
      iwlwifi: handle unicast PS buffering · 6ab10ff8
      Johannes Berg 提交于
      Using the new mac80211 functionality, this makes
      iwlwifi handle unicast PS buffering correctly.
      The device works like this:
      
       * when a station goes to sleep, the microcode notices
         this and marks the station as asleep
       * when the station is marked asleep, the microcode
         refuses to transmit to the station and rejects all
         frames queued to it with the failure status code
         TX_STATUS_FAIL_DEST_PS (a previous patch handled
         this correctly)
       * when we need to send frames to the station _although_
         it is asleep, we need to tell the ucode how many,
         and this is asynchronous with sending so we cannot
         just send the frames, we need to wait for all other
         frames to be flushed, and then update the counter
         before sending out the poll response frames. This
         is handled partially in the driver and partially in
         mac80211.
      
      In order to do all this correctly, we need to
       * keep track of how many frames are pending for each
         associated client station (avoid doing it for other
         stations to avoid the atomic ops)
       * tell mac80211 that we driver-block the PS status
         while there are still frames pending on the queues,
         and once they are all rejected (due to the dest sta
         being in PS) unblock mac80211
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      6ab10ff8
  6. 05 11月, 2009 1 次提交
  7. 03 11月, 2009 2 次提交
  8. 28 10月, 2009 1 次提交
    • Z
      iwlwifi: use paged Rx · 2f301227
      Zhu Yi 提交于
      This switches the iwlwifi driver to use paged skb from linear skb for Rx
      buffer. So that it relieves some Rx buffer allocation pressure for the
      memory subsystem. Currently iwlwifi (4K for 3945) requests 8K bytes for
      Rx buffer. Due to the trailing skb_shared_info in the skb->data,
      alloc_skb() will do the next order allocation, which is 16K bytes. This
      is suboptimal and more likely to fail when the system is under memory
      usage pressure. Switching to paged Rx skb lets us allocate the RXB
      directly by alloc_pages(), so that only order 1 allocation is required.
      
      It also adjusts the area spin_lock (with IRQ disabled) protected in the
      tasklet because tasklet guarentees to run only on one CPU and the new
      unprotected code can be preempted by the IRQ handler. This saves us from
      spawning another workqueue to make skb_linearize/__pskb_pull_tail happy
      (which cannot be called in hard irq context).
      
      Finally, mac80211 doesn't support paged Rx yet. So we linearize the skb
      for all the management frames and software decryption or defragmentation
      required data frames before handed to mac80211. For all the other frames,
      we __pskb_pull_tail 64 bytes in the linear area of the skb for mac80211
      to handle them properly.
      Signed-off-by: NZhu Yi <yi.zhu@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      2f301227
  9. 23 9月, 2009 1 次提交
    • R
      iwlwifi: do not send sync command while holding spinlock · bba98871
      Reinette Chatre 提交于
      commit 10c994ca70e8e94bbc85a5bf13de5911ee8de4d2 "iwlwifi: fix remove key
      error" fixed an error reported by mac80211 during interface down. The fix
      involved changing an async command to synchronous. Unfortunately this was
      inside a spinlock section in which we cannot sleep.
      
      Modify the sending of the command back to async. This causes the mac80211
      error "mac80211-phy0: failed to remove key (0, ff:ff:ff:ff:ff:ff) from
      hardware (-16)." to return. This error is not serious since this occurs
      during interface down and the keys will be cleared anyway when ucode is
      unloaded. Having this error message is thus less serious than a potential
      deadlock introduced when sleeping while holding a spinlock. We will have to
      find another fix for that error.
      
      This is a revert of the abovementioned commit.
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      bba98871
  10. 29 8月, 2009 1 次提交
  11. 14 8月, 2009 2 次提交
  12. 05 8月, 2009 1 次提交
  13. 04 8月, 2009 1 次提交
  14. 28 7月, 2009 2 次提交
  15. 25 7月, 2009 3 次提交
    • R
      iwlwifi: make debug level more user friendly · a562a9dd
      Reinette Chatre 提交于
      * Deprecate the "debug50" module parameter used to obtain
        5000 series and up debugging. Replace it with "debug" module
        parameter to match with original driver and be consistent
        between them. The "debug50" module parameter can still be used,
        except that the module parameter is not writable in keeping
        with its previous state. We currently just mark it as "deprecated"
        and do not have it in the feature-removal-schedule. Some more
        cleanup of module parameters needs to be done and can then be
        entered together.
      
      * Only make "debug" module parameters visible if the driver
        is compiled with CONFIG_IWLWIFI_DEBUG. This will eliminate
        a lot of confusion where users think they have set debug flags
        but yet cannot see any debug output.
      
      * Make module parameters writable. This eliminates the need for the
        "debug_level" sysfs file, which can now also be deprecated and
        added to feature-removal-schedule. This file is in significant
        use though with many iwlwifi documents and text referring users
        to it. We can thus not take its removal lightly and keep it around.
      
      With iwlcore shared between iwlagn and iwl3945 we really do not need
      debug module parameters for each but can instead have one debug
      module parameter for the iwlcore module. The same issue is here as
      with the sysfs file - a lot of iwlwifi documentation and text (like
      bug reports) rely on iwlagn and iwl3945 having this module parameter,
      so changing this to a module parameter of iwlcore will have significant
      impact and we do not do this for that reason.
      
      One consequence of this patch is that if a user is running a system
      with both 3945 and later hardware then the setting of the one module
      parameter will affect the value of the other. The likelihood of this
      seems low - and even if this setup is present it does not seem like an
      issue for both modules to run with the same debug level.
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      a562a9dd
    • R
      iwlagn: do not send key clear commands when rfkill enabled · 2d1bb9e5
      Reinette Chatre 提交于
      Do all key clearing except sending sommands to device when rfkill
      enabled. When rfkill enabled the interface is brought down and will
      be brought back up correctly after rfkill is enabled again.
      
      Same change is not needed for iwl3945 as it ignores return code when
      sending key clearing command to device.
      
      This fixes http://bugzilla.kernel.org/show_bug.cgi?id=13742Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Tested-by: NFrans Pop <elendil@planet.nl>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      2d1bb9e5
    • L
      iwlwifi: use ieee80211_is_data(fc) · 943ab70f
      Luis R. Rodriguez 提交于
      iwl-agn-rs.c already uses this.
      
      Cc: Zhu Yi <yi.zhu@intel.com>
      Cc: Reinette Chatre <reinette.chatre@intel.com>
      Cc: ipw3945-devel@lists.sourceforge.net
      Signed-off-by: NLuis R. Rodriguez <lrodriguez@atheros.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      943ab70f
  16. 04 6月, 2009 2 次提交
  17. 07 5月, 2009 1 次提交
  18. 05 5月, 2009 1 次提交
    • R
      iwlwifi: update key flags at time key is set · 299f5462
      Reinette Chatre 提交于
      We need to be symmetrical in what is done when key is set and cleared.
      This is important wrt the key flags as they are used during key
      clearing and if they are not set when the key is set the key cannot be
      cleared completely.
      
      This addresses the many occurences of the WARN found in
      iwl_set_tkip_dynamic_key_info() and tracked in
      http://www.kerneloops.org/searchweek.php?search=iwl_set_dynamic_key
      
      If calling iwl_set_tkip_dynamic_key_info()/iwl_remove_dynamic_key()
      pair a few times in a row will cause that we run out of key space.
      This is because the index stored in the key flags is used by
      iwl_remove_dynamic_key() to decide if it should remove the key.
      Unfortunately the key flags, and hence the key index is currently only
      set at the time the key is written to the device (in
      iwl_update_tkip_key()) and _not_ in iwl_set_tkip_dynamic_key_info().
      Fix this by setting flags in iwl_set_tkip_dynamic_key_info().
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      299f5462
  19. 23 4月, 2009 3 次提交
  20. 28 3月, 2009 1 次提交
  21. 17 3月, 2009 1 次提交
  22. 06 3月, 2009 1 次提交
  23. 10 2月, 2009 1 次提交
  24. 05 2月, 2009 1 次提交
  25. 30 1月, 2009 5 次提交