1. 11 12月, 2012 1 次提交
    • A
      wlcore: use separate HW queue for each AC in each vif · 1c33db78
      Arik Nemtsov 提交于
      Start using the new hw_queue mechanism in mac80211 and give each AC in
      each vif its own hw_queue number. This allows us to stop an AC in a vif
      independently from other vifs.
      
      Change the Tx watermark handling functions to count packets per AC in
      vif. From now on fast links should not be able to hurt the throughput
      of slow links on the same AC but on different vifs.
      
      Change internal queue mgmt functions to operate per vif, to support the
      new Tx watermark granularity. Make the global versions of the queue
      stop/start functions to use the global mac80211 API for queue mgmt. This
      helps in situations where the driver currently doesn't know all the vifs
      that reside in mac80211. Recovery is a good example for such a case.
      
      [Moved hw_base_queue addition into the wlcore_tx_get_mac80211_queue()
      function; changed WARN_ONs to WARN_ON_ONCEs; simplified for loops;
      fixed new checkpatch warnings. -- Luca]
      Signed-off-by: NArik Nemtsov <arik@wizery.com>
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      1c33db78
  2. 31 7月, 2012 1 次提交
  3. 22 6月, 2012 2 次提交
  4. 07 6月, 2012 4 次提交
    • I
      wl18xx: pad only last frame in aggregration buffer for PG2 · 9fccc82e
      Ido Reis 提交于
      In PG2 only the last frame in the aggregate buffer should be
      aligned to the sdio block size. This frame's header msb should be
      set to 0, while in all the previous frames in the aggregation
      buffer, this bit should be set to 1.
      
      [Add a HW op for setting the frame ctrl bit only for 18xx. Other minor
      cleanups - Arik]
      
      [Make the pre_pkt_send operation optional -- Luca]
      Signed-off-by: NIdo Reis <idor@ti.com>
      Signed-off-by: NArik Nemtsov <arik@wizery.com>
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      9fccc82e
    • A
      wlcore/wl12xx/wl18xx: implement op_set_key per HW arch · a1c597f2
      Arik Nemtsov 提交于
      The 12xx set_key just calls the common wlcore_set_key function, in order
      to program the keys into the FW.
      
      The 18xx variant changes the spare block count when a GEM or TKIP
      key is set. Also modify the get_spare_blocks HW op for 18xx to return
      the correct numbers of spare blocks, according to what is currently
      set in FW.
      Signed-off-by: NArik Nemtsov <arik@wizery.com>
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      a1c597f2
    • A
      wlcore: stop queues on Tx flush · 2c38849f
      Arik Nemtsov 提交于
      Stop network queues during Tx flush, and also drop other internal
      mac80211 packets (mgmt) that may arrive when the queues are stopped.
      
      When flush is done all driver queues are clear, forcefully if needed.
      
      Protect the Tx flush operation with a new mutex, to prevent concurrency
      that can mess us queue state.
      
      Based on a patch by Eliad Peller <eliad@wizery.com>
      Signed-off-by: NArik Nemtsov <arik@wizery.com>
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      2c38849f
    • A
      wlcore: add stop reason bitmap for waking/starting queues · 66396114
      Arik Nemtsov 提交于
      Allow the driver to wake/stop the queues for multiple reasons. A queue
      is started when no stop-reasons exist.
      
      Convert all wake/stop queue calls to use the new API.
      
      Before, a stopped queue was almost synonymous a high-watermark on Tx.
      Remove a bit of code in wl12xx_tx_reset() that relied on it.
      
      Internal packets arriving from mac80211 are also discarded when a queue
      is stopped. A notable exception to this is the watermark reason, which
      is a "soft"-stop reason. We allow traffic to gradually come to a halt,
      but we don't mind spurious packets here and there. This is merely a flow
      regulation mechanism.
      
      Based on a similar patch by Eliad Peller <eliadWizery.com>.
      Signed-off-by: NArik Nemtsov <arik@wizery.com>
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      66396114
  5. 05 6月, 2012 3 次提交
  6. 12 4月, 2012 5 次提交
  7. 08 3月, 2012 1 次提交
  8. 15 2月, 2012 2 次提交
  9. 11 10月, 2011 3 次提交
  10. 07 10月, 2011 3 次提交
  11. 23 9月, 2011 1 次提交
  12. 14 9月, 2011 2 次提交
  13. 25 8月, 2011 1 次提交
  14. 22 8月, 2011 2 次提交
  15. 08 7月, 2011 1 次提交
    • A
      wl12xx: start/stop queues according to global per-AC counters · f1a46384
      Arik Nemtsov 提交于
      Split tx_queue_count to count per-AC skb's queued, instead of relying on
      the skb-queue len. The skb queues used were only valid in STA-mode, as
      AP-mode uses per-link queues.
      
      This fixes a major regression in AP-mode, caused by the patch
      "wl12xx: implement Tx watermarks per AC". With that patch applied, we
      effectively had no regulation of Tx queues in AP-mode. Therefore a
      sustained high rate of Tx could cause exhaustion of the skb memory pool.
      Signed-off-by: NArik Nemtsov <arik@wizery.com>
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      f1a46384
  16. 06 7月, 2011 2 次提交
  17. 02 5月, 2011 1 次提交
    • A
      wl12xx: fix race condition during recovery in AP mode · 7dece1c8
      Arik Nemtsov 提交于
      When operating as AP, the TX queues are not stopped when we start
      recovery. mac80211 is notified only after the fact. When there is
      pending TX, it will be queued even after the FW is down. This leads to
      situations where the TX queues are stopped (because of the TX-watermark
      mechanism), and are never woken up when we return from recovery.
      
      Fix this by explicitly stopping the TX queues when before initiating
      recovery.
      Signed-off-by: NArik Nemtsov <arik@wizery.com>
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      7dece1c8
  18. 19 4月, 2011 5 次提交
    • I
      wl12xx: Clean up the dummy packet mechanism · 990f5de7
      Ido Yariv 提交于
      The current implementation allocates a skb each time one is requested by
      the firmware. Since dummy packets are handled differently than regular
      packets, the skb needs to be marked. Currently, this is done by
      setting the pkt_type member to 5. This might not be safe, as we cannot
      be sure that there won't be any other packets with this pkt_type value.
      
      Since the packet does not change from one request to another, we can
      simply allocate a dummy packet template and always send it. All changes
      to the skb done during packet preparation must be reverted, so the same
      skb can be reused.
      
      The dummy packets are not transmitted, therefore there's no need to set
      the BSSID or our own MAC address.
      
      In addition, the header portion of the packet was zeroed by mistake, so
      fix that as well.
      Signed-off-by: NIdo Yariv <ido@wizery.com>
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      990f5de7
    • I
      wl12xx: Clean up the block size alignment code · 0da13da7
      Ido Yariv 提交于
      Simplify and clean up the block size alignment code:
      1. Set the block size according to the padding field type, as it cannot
         exceed the maximum value this field can hold.
      2. Move the alignment code into a function instead of duplicating it in
         multiple places.
      3. In the current implementation, the block_size member can be
         misleading because a zero value actually means that there's no need to
         align. Declare a block size alignment quirk instead.
      Signed-off-by: NIdo Yariv <ido@wizery.com>
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      0da13da7
    • L
      wl12xx: use 1 spare TX block instead of two · e7ddf549
      Luciano Coelho 提交于
      All the new firmware versions (>=6.1.3.50.58 for STA and >=6.2.0.0.47
      for AP) use 1 spare TX block.  We still want to support older
      firmwares that require 2 spare blocks, so added a quirk to handle the
      difference.
      
      Also implemented a generic way of setting quirks that depend on the
      firmware revision.
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      e7ddf549
    • S
      wl12xx: 1281/1283 support - Add dummy packet support · ae47c45f
      Shahar Levi 提交于
      Support sending dummy packet to wl128x FW as results of
      dummy packet event. That is part of dynamic TX mem blocks mechanism.
      
      Only send dummy packet when not in AP mode.
      
      [Even though the DUMMY_PACKET_EVENT_ID and the
      STA_REMOVE_COMPLETE_EVENT_ID events are defined to the same value, we
      need to treat them separately in the code.  Keep the check and enable
      STA_REMOVE_COMPLETE_EVENT_ID for AP mode and DUMMY_PACKET_EVENT_ID for
      STA.  Moved one warning to a cleaner place.  Use WL1271_TID_MGMT for
      dummy packets -- Luca]
      Signed-off-by: NShahar Levi <shahar_levi@ti.com>
      Reviewed-by: NLuciano Coelho <coelho@ti.com>
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      ae47c45f
    • S
      wl12xx: 1281/1283 support - Add acx commands · 48a61477
      Shahar Levi 提交于
      New acx command that sets: Rx fifo enable reduced bus transactions
      in RX path. Tx bus transactions padding to SDIO block size that
      improve preference in Tx and essential for working with SDIO HS (48Mhz).
      The max SDIO block size is 256 when working with Tx bus transactions
      padding to SDIO block.
      
      Add new ops to SDIO & SPI that handles the win size change in case of
      transactions padding (relevant only for SDIO).
      
      [Fix endianess issues; simplify sdio-specific block_size handling;
      minor changes in comments; use "aligned_len" in one calculation
      instead of "pad" to avoid confusion -- Luca]
      Signed-off-by: NShahar Levi <shahar_levi@ti.com>
      Reviewed-by: NLuciano Coelho <coelho@ti.com>
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      48a61477