1. 04 4月, 2016 6 次提交
  2. 18 3月, 2016 2 次提交
    • R
      ath10k: move mgmt descriptor limit handle under mgmt_tx · cac08552
      Rajkumar Manoharan 提交于
      Frames that are transmitted via MGMT_TX are using reserved descriptor
      slots in firmware. This limitation is for the htt_mgmt_tx path itself,
      not for mgmt frames per se. In 16 MBSSID scenario, these reserved slots
      will be easy exhausted due to frequent probe responses. So for 10.4
      based solutions, probe responses are limited by a threshold (24).
      
      management tx path is separate for all except tlv based solutions. Since
      tlv solutions (qca6174 & qca9377) do not support 16 AP interfaces, it is
      safe to move management descriptor limitation check under mgmt_tx
      function. Though CPU improvement is negligible, unlikely conditions or
      never hit conditions in hot path can be avoided on data transmission.
      Signed-off-by: NRajkumar Manoharan <rmanohar@qti.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      cac08552
    • R
      ath10k: handle channel change htt event · 2ce9b25c
      Rajkumar Manoharan 提交于
      Whenever firmware is configuring operating channel during scan or
      home channel, channel change event will be indicated to host. In some
      cases (device probe/ last vdev down), target will be configured to
      default channel whereas host is unaware of target's operating channel.
      This leads to packet drop due to unknown channel and kernel log will be
      filled up with "no channel configured; ignoring frame(s)!". Fix that
      by handling HTT_T2H_MSG_TYPE_CHAN_CHANGE event.
      Signed-off-by: NRajkumar Manoharan <rmanohar@qti.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      2ce9b25c
  3. 08 3月, 2016 1 次提交
  4. 06 3月, 2016 3 次提交
    • M
      ath10k: implement push-pull tx · 426e10ea
      Michal Kazior 提交于
      The current/old tx path design was that host, at
      its own leisure, pushed tx frames to the device.
      For HTT there was ~1000-1400 msdu queue depth.
      
      After reaching that limit the driver would request
      mac80211 to stop queues. There was little control
      over what packets got in there as far as
      DA/RA was considered so it was rather easy to
      starve per-station traffic flows.
      
      With MU-MIMO this became a significant problem
      because the queue depth was insufficient to buffer
      frames from multiple clients (which could have
      different signal quality and capabilities) in an
      efficient fashion.
      
      Hence the new tx path in 10.4 was introduced: a
      pull-push mode.
      
      Firmware and host can share tx queue state via
      DMA. The state is logically a 2 dimensional array
      addressed via peer_id+tid pair. Each entry is a
      counter (either number of bytes or packets. Host
      keeps it updated and firmware uses it for
      scheduling Tx pull requests to host.
      
      This allows MU-MIMO to become a lot more effective
      with 10+ clients.
      Signed-off-by: NMichal Kazior <michal.kazior@tieto.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      426e10ea
    • M
      ath10k: implement wake_tx_queue · 29946878
      Michal Kazior 提交于
      This implements very basic support for software
      queueing. It also contains some knobs that will be
      patched later.
      Signed-off-by: NMichal Kazior <michal.kazior@tieto.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      29946878
    • M
      ath10k: add new htt message generation/parsing logic · 839ae637
      Michal Kazior 提交于
      This merely adds some parsing, generation and
      sanity checks with placeholders for real
      code/functionality to be added later.
      Signed-off-by: NMichal Kazior <michal.kazior@tieto.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      839ae637
  5. 04 3月, 2016 3 次提交
  6. 28 1月, 2016 2 次提交
  7. 21 1月, 2016 1 次提交
    • M
      ath10k: prevent txrx running for too long · d742c969
      Michal Kazior 提交于
      On multicore systems it was possible for the txrx
      tasklet to keep on running for long periods of
      time on a single CPU due to tx completion
      processing. Another CPU could feed the running
      tasklet for an indefinite amount of time.
      
      The tasklet is now guaranteed to run a finite
      amount of time and is limited by HTT CE Rx ring
      depth.
      
      This improves behavior when RPS is used on target
      system and might improve TCP handling as well.
      Signed-off-by: NMichal Kazior <michal.kazior@tieto.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      d742c969
  8. 30 11月, 2015 1 次提交
  9. 23 11月, 2015 1 次提交
  10. 17 11月, 2015 1 次提交
  11. 05 11月, 2015 1 次提交
  12. 16 10月, 2015 1 次提交
  13. 09 9月, 2015 2 次提交
  14. 29 7月, 2015 2 次提交
    • D
      ath10k: enable raw encap mode and software crypto engine · ccec9038
      David Liu 提交于
      This patch enables raw Rx/Tx encap mode to support software based
      crypto engine. This patch introduces a new module param 'cryptmode'.
      
       cryptmode:
      
         0: Use hardware crypto engine globally with native Wi-Fi mode TX/RX
            encapsulation to the firmware. This is the default mode.
         1: Use sofware crypto engine globally with raw mode TX/RX
            encapsulation to the firmware.
      
      Known limitation:
         A-MSDU must be disabled for RAW Tx encap mode to perform well when
         heavy traffic is applied.
      
      Testing: (by Michal Kazior <michal.kazior@tieto.com>)
      
           a) Performance Testing
      
            cryptmode=1
             ap=qca988x sta=killer1525
              killer1525  ->  qca988x     194.496 mbps [tcp1 ip4]
              killer1525  ->  qca988x     238.309 mbps [tcp5 ip4]
              killer1525  ->  qca988x     266.958 mbps [udp1 ip4]
              killer1525  ->  qca988x     477.468 mbps [udp5 ip4]
              qca988x     ->  killer1525  301.378 mbps [tcp1 ip4]
              qca988x     ->  killer1525  297.949 mbps [tcp5 ip4]
              qca988x     ->  killer1525  331.351 mbps [udp1 ip4]
              qca988x     ->  killer1525  371.528 mbps [udp5 ip4]
             ap=killer1525 sta=qca988x
              qca988x     ->  killer1525  331.447 mbps [tcp1 ip4]
              qca988x     ->  killer1525  328.783 mbps [tcp5 ip4]
              qca988x     ->  killer1525  375.309 mbps [udp1 ip4]
              qca988x     ->  killer1525  403.379 mbps [udp5 ip4]
              killer1525  ->  qca988x     203.689 mbps [tcp1 ip4]
              killer1525  ->  qca988x     222.339 mbps [tcp5 ip4]
              killer1525  ->  qca988x     264.199 mbps [udp1 ip4]
              killer1525  ->  qca988x     479.371 mbps [udp5 ip4]
      
            Note:
             - only open network tested for RAW vs nwifi performance comparison
             - killer1525 (qca6174 hw2.2) is 2x2 device (hence max 866mbps)
             - used iperf
             - OTA, devices a few cm apart from each other, no shielding
             - tcpX/udpX, X - means number of threads used
      
            Overview:
             - relative Tx performance drop is seen but is within reasonable and
               expected threshold (A-MSDU must be disabled with RAW Tx)
      
           b) Connectivity Testing
      
            cryptmode=1
             ap=iwl6205 sta1=qca988x crypto=open     topology-1ap1sta          OK
             ap=iwl6205 sta1=qca988x crypto=wep1     topology-1ap1sta          OK
             ap=iwl6205 sta1=qca988x crypto=wpa      topology-1ap1sta          OK
             ap=iwl6205 sta1=qca988x crypto=wpa-ccmp topology-1ap1sta          OK
             ap=qca988x sta1=iwl6205 crypto=open     topology-1ap1sta          OK
             ap=qca988x sta1=iwl6205 crypto=wep1     topology-1ap1sta          OK
             ap=qca988x sta1=iwl6205 crypto=wpa      topology-1ap1sta          OK
             ap=qca988x sta1=iwl6205 crypto=wpa-ccmp topology-1ap1sta          OK
             ap=iwl6205 sta1=qca988x crypto=open     topology-1ap1sta2br       OK
             ap=iwl6205 sta1=qca988x crypto=wep1     topology-1ap1sta2br       OK
             ap=iwl6205 sta1=qca988x crypto=wpa      topology-1ap1sta2br       OK
             ap=iwl6205 sta1=qca988x crypto=wpa-ccmp topology-1ap1sta2br       OK
             ap=qca988x sta1=iwl6205 crypto=open     topology-1ap1sta2br       OK
             ap=qca988x sta1=iwl6205 crypto=wep1     topology-1ap1sta2br       OK
             ap=qca988x sta1=iwl6205 crypto=wpa      topology-1ap1sta2br       OK
             ap=qca988x sta1=iwl6205 crypto=wpa-ccmp topology-1ap1sta2br       OK
             ap=iwl6205 sta1=qca988x crypto=open     topology-1ap1sta2br1vlan  OK
             ap=iwl6205 sta1=qca988x crypto=wep1     topology-1ap1sta2br1vlan  OK
             ap=iwl6205 sta1=qca988x crypto=wpa      topology-1ap1sta2br1vlan  OK
             ap=iwl6205 sta1=qca988x crypto=wpa-ccmp topology-1ap1sta2br1vlan  OK
             ap=qca988x sta1=iwl6205 crypto=open     topology-1ap1sta2br1vlan  OK
             ap=qca988x sta1=iwl6205 crypto=wep1     topology-1ap1sta2br1vlan  OK
             ap=qca988x sta1=iwl6205 crypto=wpa      topology-1ap1sta2br1vlan  OK
             ap=qca988x sta1=iwl6205 crypto=wpa-ccmp topology-1ap1sta2br1vlan  OK
      
            Note:
             - each test takes all possible endpoint pairs and pings
             - each pair-ping flushes arp table
             - ip6 is used
      
           c) Testbed Topology:
      
            1ap1sta:
              [ap] ---- [sta]
      
              endpoints: ap, sta
      
            1ap1sta2br:
              [veth0] [ap] ---- [sta] [veth2]
                 |     |          |     |
              [veth1]  |          \   [veth3]
                  \   /            \  /
                  [br0]            [br1]
      
              endpoints: veth0, veth2, br0, br1
              note: STA works in 4addr mode, AP has wds_sta=1
      
            1ap1sta2br1vlan:
              [veth0] [ap] ---- [sta] [veth2]
                 |     |          |     |
              [veth1]  |          \   [veth3]
                  \   /            \  /
                [br0]              [br1]
                  |                  |
                [vlan0_id2]        [vlan1_id2]
      
              endpoints: vlan0_id2, vlan1_id2
              note: STA works in 4addr mode, AP has wds_sta=1
      
      Credits:
      
          Thanks to Michal Kazior <michal.kazior@tieto.com> who helped find the
          amsdu issue, contributed a workaround (already squashed into this
          patch), and contributed the throughput and connectivity tests results.
      Signed-off-by: NDavid Liu <cfliu.tw@gmail.com>
      Signed-off-by: NMichal Kazior <michal.kazior@tieto.com>
      Tested-by: NMichal Kazior <michal.kazior@tieto.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      ccec9038
    • Q
      ath10k: Improve performance by reducing tx_lock contention · 005fb161
      Qi Zhou 提交于
      During tx completion, tx_lock is held for longer than required, preventing
      efficient refill of htt->pending_tx. Refactor the code so that only MSDU
      related operations are protected by the lock.
      
      Improves downstream performance on a dual-core ARM Freescale LS1024A
      (f.k.a. Mindspeed Comcerto 2000) AP with a 3x3 client from 495 to 580 Mbps.
      Other CPU bound multicore systems may also benefit.
      Signed-off-by: NDenton Gentry <dgentry@google.com>
      Signed-off-by: NAvery Pennarun <apenwarr@google.com>
      [mfaltesek@google.com: removed conflicting code for tracking msdu_ids.]
      Signed-off-by: NMarty Faltesek <mfaltesek@google.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      005fb161
  15. 24 7月, 2015 1 次提交
    • P
      ath10k: add support for qca99x0 Rx descriptors · 1f5dbfbb
      Peter Oh 提交于
      QCA99X0 chip has an extra 4 bytes in rx_msdu_start,
      20 bytes in rx_msdu_end and 20 bytes in rx_ppdu_end structure
      which are used in htt_rx_desc and HTT Rx ring offset setup.
      This is necessary for correct Rx for QCA99X0 or Rx descriptors
      will be overwritten and corrupted.
      
      With this patch QCA988X and QCA6174 will have extra 44 bytes
      padding in Rx descriptor layout which is harmless.
      Signed-off-by: NPeter Oh <poh@qca.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      1f5dbfbb
  16. 02 7月, 2015 1 次提交
  17. 16 6月, 2015 1 次提交
  18. 22 5月, 2015 1 次提交
    • M
      ath10k: add new 4addr related fw_feature · 48f4ca34
      Michal Kazior 提交于
      Some firmware revisions pad 4th hw address in
      Native Wifi Rx decap. This is the case with 10.x
      and it was assumed that this is true for all
      firmware images.
      
      However QCA988X with 999.999.0.636 and QCA61X4
      with WLAN.RM.2.0-00088 don't have the padding.
      Hence add a feature flag indicating that the
      padding isn't present so firmware images can
      advertise it appropriately. This way driver will
      behave as it was before with old firmware blobs
      and doesn't cause any regressions from user
      perspective.
      
      Effectively this patch enables QCA988X with
      999.999.0.636 and QCA61X4 with WLAN.RM.2.0-00088
      to set up client bridging provided user has an
      updated firmware blob.
      Signed-off-by: NMichal Kazior <michal.kazior@tieto.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      48f4ca34
  19. 09 4月, 2015 1 次提交
  20. 02 4月, 2015 1 次提交
  21. 30 3月, 2015 3 次提交
    • M
      ath10k: rework legacy rx rate decoding · 5528e032
      Michal Kazior 提交于
      Instead of using a hacky table and magic values
      use supported band information advertised to
      mac80211.
      
      This may impact performance a little when dealing
      with legacy rx rates depending on system
      architecture. It's probably negligible.
      
      This also fixes a highly theoretical corner case
      when HT/VHT rates weren't reported correctly if
      channel frequency wasn't known.
      Signed-off-by: NMichal Kazior <michal.kazior@tieto.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      5528e032
    • M
      ath10k: unify tx mode and dispatch · d740d8fd
      Michal Kazior 提交于
      There are a few different tx paths depending on
      firmware and frame itself.
      
      Creating a uniform decision will make it possible
      to switch between different txmode easier, both
      for testing and for future features as well.
      Signed-off-by: NMichal Kazior <michal.kazior@tieto.com>
      Signed-off-by: NMarek Puzyniak <marek.puzyniak@tieto.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      d740d8fd
    • R
      ath10k: add ATH10K_FW_IE_HTT_OP_VERSION · 8348db29
      Rajkumar Manoharan 提交于
      Target to host HTT messages are conflicting between 10.x and other
      firmware revisions. By maintaining separate HTT T2H tables for each
      firmware revisions (main, 10x and tlv) similar to WMI abstraction,
      solves the conflicts. Add ATH10K_FW_IE_HTT_OP_VERSION so that the firmware can
      advertise the HTT interface to ath10k.
      
      This fix is needed to get management frames over HTT (ie.
      ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX disabled) working with 10.2.4.48-2 firmware.
      Otherwise there will be unknown htt events and nothing works:
      
      [30087.438343] ath10k_pci 0000:02:00.0: htt event (19) not handled
      [30087.448691] ath10k_pci 0000:02:00.0: htt event (19) not handled
      [30149.032974] ath10k_pci 0000:02:00.0: htt event (19) not handled
      
      If the firmware does not have ATH10K_FW_IE_HTT_OP_VERSION use the main HTT
      interface. That way old firmware images will still work.
      
      Cc: Michal Kazior <michal.kazior@tieto.com>
      Signed-off-by: NRajkumar Manoharan <rmanohar@qti.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      8348db29
  22. 15 2月, 2015 1 次提交
  23. 27 1月, 2015 3 次提交