1. 27 8月, 2010 1 次提交
  2. 26 8月, 2010 3 次提交
  3. 17 8月, 2010 1 次提交
  4. 10 8月, 2010 1 次提交
    • J
      iwlagn: fix rts cts protection · 94597ab2
      Johannes Berg 提交于
      Currently the driver will try to protect all frames,
      which leads to a lot of odd things like sending an
      RTS with a zeroed RA before multicast frames, which
      is clearly bogus.
      
      In order to fix all of this, we need to take a step
      back and see what we need to achieve:
       * we need RTS/CTS protection if requested by
         the AP for the BSS, mac80211 tells us this
       * in that case, CTS-to-self should only be
         enabled when mac80211 tells us
       * additionally, as a hardware workaround, on
         some devices we have to protect aggregated
         frames with RTS
      
      To achieve the first two items, set up the RXON
      accordingly and set the protection required flag
      in the transmit command when mac80211 requests
      protection for the frame.
      
      To achieve the last item, set the rate-control
      RTS-requested flag for all stations that we have
      aggregation sessions with, and set the protection
      required flag when sending aggregated frames (on
      those devices where this is required).
      
      Since otherwise bugs can occur, do not allow the
      user to override the RTS-for-aggregation setting
      from sysfs any more.
      
      Finally, also clean up the way all these flags get
      set in the driver and move everything into the
      device-specific functions.
      
      Cc: stable@kernel.org [2.6.35]
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: NWey-Yi Guy <wey-yi.w.guy@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      94597ab2
  5. 07 8月, 2010 1 次提交
  6. 05 8月, 2010 1 次提交
  7. 10 7月, 2010 1 次提交
  8. 22 6月, 2010 1 次提交
  9. 15 6月, 2010 1 次提交
    • S
      iwlagn: verify flow id in compressed BA packet · b561e827
      Shanyu Zhao 提交于
      The flow id (scd_flow) in a compressed BA packet should match the txq_id
      of the queue from which the aggregated packets were sent. However, in
      some hardware like the 1000 series, sometimes the flow id is 0 for the
      txq_id (10 to 19). This can cause the annoying message:
      [ 2213.306191] iwlagn 0000:01:00.0: Received BA when not expected
      [ 2213.310178] iwlagn 0000:01:00.0: Read index for DMA queue txq id (0),
      index 5, is out of range [0-256] 7 7.
      
      And even worse, if agg->wait_for_ba is true when the bad BA is arriving,
      this can cause system hang due to NULL pointer dereference because the
      code is operating in a wrong tx queue!
      Signed-off-by: NShanyu Zhao <shanyu.zhao@intel.com>
      Signed-off-by: NPradeep Kulkarni <pradeepx.kulkarni@intel.com>
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      b561e827
  10. 09 6月, 2010 1 次提交
  11. 06 6月, 2010 3 次提交
    • D
      iwlwifi: parse block ack responses correctly · 02cd8dee
      Daniel Halperin 提交于
      Compressed BlockAck frames store the ACKs/NACKs in a 64-bit bitmap that starts
      at the sequence number of the first frame sent in the aggregated batch. Note
      that this is a selective ACKnowledgement following selective retransmission;
      e.g., if frames 1,4-5 in a batch are ACKed then the next transmission will
      include frames 2-3,6-10 (7 frames). In this latter case, the Compressed
      BlockAck will not have all meaningful information in the low order bits -- the
      semantically meaningful bits of the BA will be 0x1f3 (where the low-order frame
      is seq 2).
      
      The driver code originally just looked at the lower (in this case, 7) bits of
      the BlockAck. In this case, the lower 7 bits of 0x1f3 => only 5 packets,
      maximum, could ever be ACKed. In reality it should be looking at all of the
      bits, filtered by those corresponding to packets that were actually sent. This
      flaw meant that the number of correctly ACked packets could be significantly
      underreported and might result in asynchronous state between TX and RX sides as
      well as driver and uCode.
      
      Fix this and also add a shortcut that doesn't require the code to loop through
      all 64 bits of the bitmap but rather stops when no higher packets are ACKed.
      
      In my experiments this fix greatly reduces throughput swing, making throughput
      stable and high. It is also likely related to some of the stalls observed in
      aggregation mode and maybe some of the buffer underruns observed, e.g.,
      
      http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=1968
      http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2098
      http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2018Signed-off-by: NDaniel Halperin <dhalperi@cs.washington.edu>
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      02cd8dee
    • J
      iwlwifi: generic scan TX antenna forcing · 0e1654fa
      Johannes Berg 提交于
      In "iwlwifi: make scan antenna forcing more generic"
      I introduced generic scan RX antenna forcing, which
      here I rename to make it more evident. Also add scan
      TX antenna forcing, since I will need that as well.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      0e1654fa
    • J
      iwlwifi: reduce memory allocation · ff0d91c3
      Johannes Berg 提交于
      Currently, the driver allocates up to 19 skb pointers
      for each TFD, of which we have 256 per queue. This
      means that for each TX queue, we allocate 19k/38k
      (an order 4 or 5 allocation on 32/64 bit respectively)
      just for each queue's "txb" array, which contains only
      the SKB pointers.
      
      However, due to the way we use these pointers only the
      first one can ever be assigned. When the driver was
      initially written, the idea was that it could be
      passed multiple SKBs for each TFD and attach all
      those to implement gather DMA. However, due to
      constraints in the userspace API and lack of TCP/IP
      level checksumming in the device, this is in fact not
      possible. And even if it were, the SKBs would be
      chained, and we wouldn't need to keep pointers to
      each anyway.
      
      Change this to only keep track of one SKB per TFD,
      and thereby reduce memory consumption to just one
      pointer per TFD, which is an order 0 allocation per
      transmit queue.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      ff0d91c3
  12. 05 6月, 2010 1 次提交
  13. 04 6月, 2010 1 次提交
  14. 14 5月, 2010 2 次提交
  15. 11 5月, 2010 3 次提交
  16. 01 5月, 2010 2 次提交
    • D
      iwlwifi: set AMPDU status variables correctly · e3a3cd87
      Daniel Halperin 提交于
      The TX status code is currently abusing the ampdu_ack_map field (a bitmap) to
      count the number of successfully received frames.  The comments in mac80211.h
      show there are actually three different, relevant variables, of which we are
      currently using two, both incorrectly. Fix this by making
      
      - ampdu_ack_len -> the number of ACKed frames (i.e. successes)
      - ampdu_ack_map -> the bitmap
      - ampdu_len -> the total number of frames sent (i.e., attempts)
      
      to match the header file (and verified with ath9k's usage) and updating Intel's
      RS code to match.
      Signed-off-by: NDaniel Halperin <dhalperi@cs.washington.edu>
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      e3a3cd87
    • S
      iwlwifi: set correct AC to swq_id for aggregation · c2845d01
      Shanyu Zhao 提交于
      When starting an aggregation session, the swq_id is generated in function
      iwl_virtual_agg_queue_num() where the first parameter is supposed to be
      the Access Class, but it used the tx fifo ID instead. This means the AC
      value stored in swq_id is incorrect. To test this, look at the tx_queue
      file in debugfs while transmitting Best Effort flow (ac=2), it shows:
      hwq 10: read=0 write=0 stop=0 swq_id=0xa9 (ac 1/hwq 10)
      After this fix, it will show:
      hwq 10: read=0 write=0 stop=0 swq_id=0xaa (ac 2/hwq 10)
      Signed-off-by: NShanyu Zhao <shanyu.zhao@intel.com>
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      c2845d01
  17. 17 4月, 2010 1 次提交
  18. 10 4月, 2010 1 次提交
  19. 03 4月, 2010 2 次提交
  20. 26 3月, 2010 4 次提交