1. 25 6月, 2019 3 次提交
    • D
      ath10k: Add peer delete response event · c6f537a1
      Dundi Raviteja 提交于
      Peer creation in firmware fails if last peer deletion is still
      in progress.
      
      The firmware sends a peer delete response event if it advertises
      the service WMI_SERVICE_SYNC_DELETE_CMDS. This peer delete response
      event is used to synchronize the peer deletion.
      
      Add peer delete response event and wait for the event after
      deleting every peer from host driver to synchronize with firmware.
      
      Tested HW: WCN3990
      Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
      Signed-off-by: NDundi Raviteja <dundi@codeaurora.org>
      Signed-off-by: NRakesh Pillai <pillair@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      c6f537a1
    • R
      ath10k: wait for vdev delete response from firmware · fe36e70f
      Rakesh Pillai 提交于
      When we add an interface immediately after removing
      the interface the vdev deletion in firmware might not
      have been completed. We need to synchronize the vdev creation
      with the firmware.
      
      Wait for vdev delete response from firmware when we
      remove an interface.
      
      Tested HW: WCN3990
      Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
      Signed-off-by: NRakesh Pillai <pillair@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      fe36e70f
    • M
      ath10k: fix failure to set multiple fixed rate · 8b97b055
      Miaoqing Pan 提交于
      Currently, below fixed rate commands are broken,
      iw wlanx set bitrates legacy-<2.4|5> ht-mcs-<2.4|5> vht-mcs-<2.4|5> \
      <NSS:MCSx>
      iw wlanx set bitrates legacy-<2.4|5> <legacy rate> ht-mcs-<2.4|5> \
      vht-mcs-<2.4|5> <NSS:MCSx>
      
      There are two methods to set fixed rate, both failed,
      - Use vdev fixed rate command
        This command only support one single rate, but it's broken due to
        mac80211 change commit e8e4f528 ("mac80211: reject/clear user
        rate mask if not usable"), which requires user to specify at least
        one legacy rate. So we can't use this command to set ht/vht single
        rate any more.
      - Use peer_assoc command
        This command can update rx capability for multiple rates, it will
        work fine for ht mcs rates, as each supported mcs can be advertised
        in ht_mcs index mask. But this will not work with vht rates because,
        as per the vht mcs capability advertisement, there are only two bits
        to indicate the supported mcs. E.g. only support 0-7, 0-8, 0-9.
      
      So introduced new WMI command: WMI_PEER_PARAM_FIXED_RATE. After peer
      assoc, the peer fixed rate cmd will work for that specific peer.
      Remaining peers will use auto rate. If both vdev fixed rate and peer
      fixed rates are given, peer fixed rate will take effect to peers for
      which this cmd is given. Remaining peers in that vdev, will use vdev
      fixed rate.
      
      Tested HW: QCA9984
      Tested FW: 10.4-3.9.0.2-00035
      Signed-off-by: NMiaoqing Pan <miaoqing@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      8b97b055
  2. 07 5月, 2019 1 次提交
  3. 28 2月, 2019 3 次提交
    • S
      ath10k: Fill rx duration for each peer in fw_stats for WCN3990 · f40a307e
      Surabhi Vishnoi 提交于
      Currently, rx_duration for each peer is not getting populated in
      fw_stats debugfs entry for WCN3990.
      
      WCN3990 firmware sends rx duration for each peer as part of
      peer_extd_stats in WMI_UPDATE_STATS_EVENT. To enable peer_extd_stats,
      firmware expects host to send fw_stats_req_mask with flag
      WMI_TLV_PEER_STATS_EXTD set in WMI_REQUEST_STATS_CMD.
      
      Send fw_stats_req_mask with flag WMI_TLV_PEER_STATS_EXTD set in
      WMI_REQUEST_STATS_CMD and parse the peer_extd_stats in
      WMI_UPDATE_STATS_EVENT to populate the rx_duration of each peer
      in fw_stats debugfs entry.
      
      Currently the driver handles 32-bit rx_duration, but the rx_duration
      for WCN3990 can be upto 63 bit. The firmware sends rx_duration split
      into two 32-bit fields, with the upper 32-bits being valid only if its
      MSB is set. This change handles the 63-bit rx_duration obtained from
      WCN3990 and maintain the backward compatibility.
      
      To get the rx_duration of each connected peer :
      cat /sys/kernel/debug/ieee80211/phyX/ath10k/fw_stats
      
      Tested HW: WCN3990
      Tested FW: WLAN.HL.3.1-00784-QCAHLSWMTPLZ-1
      Signed-off-by: NSurabhi Vishnoi <svishnoi@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      f40a307e
    • S
      ath10k: Fix the wrong updation of SGI in tx_stats debugfs · 8e55fdaa
      Surabhi Vishnoi 提交于
      The SGI is updated wrongly in tx stats table in debugfs per sta
      entry. To know whether the packets/bytes are sent with SHORT GI,
      test whether the SGI bit(ATH10K_RATE_INFO_FLAGS_SGI_BIT) is set or
      not in the txrate flags.
      
      Tested HW: WCN3990
      Tested FW: WLAN.HL.3.1-00784-QCAHLSWMTPLZ-1
      
      Fixes: a904417f ("ath10k: add extended per sta tx statistics support")
      Signed-off-by: NSurabhi Vishnoi <svishnoi@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      8e55fdaa
    • S
      ath10k: Fix the wrong updation of BW in tx_stats debugfs entry · ef9051c7
      Surabhi Vishnoi 提交于
      Currently, the bandwidth is updated wrongly in BW table in tx_stats
      debugfs per sta as there is difference in number of bandwidth type
      in mac80211 and driver stats table. This leads to bandwidth getting
      updated at wrong index in bandwidth table in tx_stats.
      
      Fix this index mismatch between mac80211 and driver stats table (BW table)
      by making the number of bandwidth type in driver compatible with mac80211.
      
      Tested HW: WCN3990
      Tested FW: WLAN.HL.3.1-00784-QCAHLSWMTPLZ-1
      
      Fixes: a904417f ("ath10k: add extended per sta tx statistics support")
      Signed-off-by: NSurabhi Vishnoi <svishnoi@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      ef9051c7
  4. 26 2月, 2019 1 次提交
  5. 20 2月, 2019 1 次提交
  6. 13 2月, 2019 6 次提交
    • K
      ath10k: change wmi.h to include only ieee80211.h · db3b6280
      Kalle Valo 提交于
      wmi.h does not use anything from mac80211.h so change it to include only
      ieee80211.h.
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      db3b6280
    • K
      ath10k: make wmi_service_name() warn about missing service ids · 95cccf4d
      Kalle Valo 提交于
      When adding a new value to enum wmi_service it's very easy to miss that the new
      value should be also added to wmi_service_name() mapping function. Modify the
      function so that GCC can now warn about this:
      
      drivers/net/wireless/ath/ath10k/wmi.h:385:2: warning: enumeration value 'WMI_SERVICE_FOO' not handled in switch [-Wswitch]
      
      And also add a reminder to the enum.
      
      Thanks to Jouni Malinen for the idea.
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      95cccf4d
    • K
      ath10k: add missing values to wmi_service_name() · 2321dd5d
      Kalle Valo 提交于
      After implementing the next patch GCC reported:
      
      drivers/net/wireless/ath/ath10k/wmi.h:385:2: warning: enumeration value 'WMI_SERVICE_BTCOEX' not handled in switch [-Wswitch]
      drivers/net/wireless/ath/ath10k/wmi.h:385:2: warning: enumeration value 'WMI_SERVICE_MGMT_TX_WMI' not handled in switch [-Wswitch]
      drivers/net/wireless/ath/ath10k/wmi.h:385:2: warning: enumeration value 'WMI_SERVICE_SPOOF_MAC_SUPPORT' not handled in switch [-Wswitch]
      drivers/net/wireless/ath/ath10k/wmi.h:385:2: warning: enumeration value 'WMI_SERVICE_VDEV_DISABLE_4_ADDR_SRC_LRN_SUPPORT' not handled in switch [-Wswitch]
      drivers/net/wireless/ath/ath10k/wmi.h:385:2: warning: enumeration value 'WMI_SERVICE_BB_TIMING_CONFIG_SUPPORT' not handled in switch [-Wswitch]
      drivers/net/wireless/ath/ath10k/wmi.h:385:2: warning: enumeration value 'WMI_SERVICE_THERM_THROT' not handled in switch [-Wswitch]
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      2321dd5d
    • M
      ath10k: report tx airtime provided by fw · bb31b7cb
      Manikanta Pubbisetty 提交于
      If supported, update transmit airtime in mac80211 with the airtime
      values reported by the firmware. TX airtime of the PPDU is reported
      via HTT data TX completion indication message.
      
      A new service flag 'WMI_SERVICE_REPORT_AIRTIME' is added to advertise
      the firmware support. For firmwares which do not support this feature,
      TX airtime is calculated in the driver using TX bitrate.
      
      Hardwares tested : QCA9984
      Firmwares tested : 10.4-3.6.1-00841
      Signed-off-by: NManikanta Pubbisetty <mpubbise@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      bb31b7cb
    • M
      ath10k: add dynamic vlan support · 4920ce3b
      Manikanta Pubbisetty 提交于
      Multicast/broadcast traffic destined for a particular vlan group will
      always be encrypted in software. To enable dynamic VLANs, it requires
      driver support for sending software encrypted packets.
      
      In ath10k, sending software encrypted frames is allowed only when we insmod
      the driver with cryptmode param set to 1, this configuration disables
      hardware crypto and enables RAW mode implicitly. Since, enabling raw
      mode has performance impact, this cannot be considered as an ideal
      solution for supporting VLANs in the driver.
      
      As an alternative take, in this approach, cryptographic keys for
      unicast traffic (per peer PTKs) and keys for non-vlan group traffic
      will be configured in hardware, allowing hardware encryption for unicast
      and non-vlan group traffic. Only vlan group traffic will be encrypted in
      software and pushed to the target with encap mode set to RAW in the TX
      descriptors.
      
      Not all firmwares can support this type of key configuration(having few
      keys installed in hardware and few only in software); for this purpose a
      new WMI service flag "WMI_SERVICE_PER_PACKET_SW_ENCRYPT" is introduced to
      advertise this support.
      
      Also, adding the logic required to send sw encrypted frames in raw mode.
      
      Hardwares Tested : QCA9984, QCA988X
      Firmwares Tested : 10.4-3.5.3-00057, 10.2.4-1.0-00042
      Signed-off-by: NManikanta Pubbisetty <mpubbise@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      4920ce3b
    • P
      ath10k: add support to configure ftm responder role · 059104bf
      Pradeep Kumar Chitrapu 提交于
      Configure fine timing measurement (FTM) responder role from the
      ftm_responder bss param sent by mac80211. With FTM functionality offloaded
      to firmware, adding the interface allows userspace to enable or disable
      FTM responder functionality. ath10k disables it at the time of interface
      creation.
      
      Supported FW: 10.4
      
      Tested on IPQ4019 with firmware: 10.4-3.2.1.1-00022
      Signed-off-by: NPradeep Kumar Chitrapu <pradeepc@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      059104bf
  7. 12 2月, 2019 2 次提交
    • C
      ath10k: implement set_base_macaddr to fix rx-bssid mask in multiple APs conf · 05e7ba24
      Christian Lamparter 提交于
      Many integrated QCA9984 WiFis in various IPQ806x platform routers
      from various vendors (Netgear R7800, ZyXEL NBG6817, TP-LINK C2600,
      etc.) have either blank, bogus or non-unique MAC-addresses in
      their calibration data.
      
      As a result, OpenWrt utilizes a discouraged binary calibration data
      patching method that allows to modify the device's MAC-addresses right
      at the source. This is because the ath10k' firmware extracts the MAC
      address from the supplied radio/calibration data and issues a response
      to the ath10k linux driver. Which was designed to take the main MAC in
      ath10k_wmi_event_ready().
      
      Part of the "setting an alternate MAC" issue was already tackled by a
      patch from Brian Norris:
      commit 9d580466
      ("ath10k: retrieve MAC address from system firmware if provided")
      by allowing the option to specify an alternate MAC-address with the
      established device_get_mac_address() function which extracts the right
      address from DeviceTree/fwnode mac-address or local-mac-address
      properties and saves it for later.
      
      However, Ben Greear noted that the Qualcomm's ath10k firmware is liable
      to not properly calculate its rx-bssid mask in this case. This can cause
      issues in the popluar "multiple AP with a single ath10k instance"
      configurations.
      
      To improve MAC address handling, Felix Fietkau suggested to call
      pdev_set_base_macaddr_cmdid before bringing up the first vif and
      use the first vif MAC address there. Which is in ath10k_core_start().
      
      This patch implement Felix Fietkau's request to
      "call pdev_set_base_macaddr_cmdid before bringing up the first vif".
      The pdev_set_base_macaddr_cmdid is already declared for all devices
      and version. The driver just needed the support code for this
      function.
      
      Tested on:
      QCA9880/CUS223, firmwares: 10.2.4.13-2, 10.2.4.70.44, 10.2.4-1.0-00041
      QCA9887/MR33 firmware:10.2.4-1.0-00033
      QCA4019/RT-AC58U firmware: 10.4-3.4-00104, 10.4-3.5.3-00057
      QCA9984/R7800 firmware: Candela Technologies (CT) Firmware
      
      BugLink: https://lists.openwrt.org/pipermail/openwrt-devel/2018-November/014595.html
      Fixes: 9d580466 ("ath10k: retrieve MAC address from system firmware if provided")
      Cc: Brian Norris <briannorris@chromium.org>
      Cc: Ben Greear <greearb@candelatech.com>
      Cc: Felix Fietkau <nbd@nbd.name>
      Cc: Mathias Kresin <dev@kresin.me>
      Signed-off-by: NChristian Lamparter <chunkeey@gmail.com>
      Tested-by: NBrian Norris <briannorris@chromium.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      05e7ba24
    • A
      ath10k: update GCMP & GCMP-256 cipher suite number for WCN3990 · 7d94f862
      Abhishek Ambure 提交于
      TLV based firmware ex. QCA6174, WCN3990 expects key cipher value
      set to 9 while non-TLV firmware expects key cipher value set to 8
      for enabling GCMP and GCMP-256 cipher suites.
      
      To fix this problem, attach the key cipher suite values based on
      wmi version.
      
      Tested HW: WCN3990
      Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
      Signed-off-by: NAbhishek Ambure <aambure@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      7d94f862
  8. 07 2月, 2019 2 次提交
  9. 01 2月, 2019 1 次提交
  10. 21 12月, 2018 3 次提交
    • B
      ath10k: add support to configure BB timing over wmi · 84758d4d
      Bhagavathi Perumal S 提交于
      Add wmi configuration cmd to configure base band(BB) power amplifier(PA)
      off timing values in hardware. The default PA off timings were fine tuned
      to make proper DFS radar detection in QCA reference design. If ODM uses
      different PA in their design, then the same default PA off timing values
      cannot be used, it requires different settling time to detect radar pulses
      very sooner and avoid radar detection problems. In that case it provides
      provision to select proper PA off timing values based on the PA hardware used.
      The PA component is part of FEM hardware and new device tree entry
      "ext-fem-name" is used to indentify the FEM hardware. And this wmi configuration
      cmd is enabled via wmi service flag "WMI_SERVICE_BB_TIMING_CONFIG_SUPPORT".
      
      Other way is to apply these values through calibration data, but recalibration
      of all boards out there might not be feasible.
      
      This change tested on firmware ver 10.2.4-1.0-00042 in QCA988X chipset.
      Signed-off-by: NBhagavathi Perumal S <bperumal@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      84758d4d
    • S
      ath10k: disable 4addr source port learning in 10.4 FW by default · 68c295f2
      Sathishkumar Muruganandam 提交于
      Currently in 10.4 FW, all the received 4addr frames are processed for
      source port learning which is enabled by default. This learning can't be
      disabled by default in FW since it breaks backward compatibility.
      
      Since ath10k uses mac80211 based 4addr mode, source port learning done in
      10.4 FW is redundant and also causes issues when 3addr frames are
      transmitted/received for a 4addr station.
      
      One such visible functional impact is when GTK rekey frame from
      hostapd based AP to 4addr STA is dropped in AP's 10.4 FW. This is since
      GTK rekey EAPOL frame is 3addr frame on AP interface and STA enabled
      with 4addr is already allowed for receiving 3addr EAPOL frames.
      
      Source port learning implementation in 10.4 FW drops this 3addr GTK rekey
      frame in AP destinated for 4addr STA causing disassociation and
      re-association for every GTK rekey session. GTK rekey issue is not seen
      when learning is disabled in FW.
      
      To prevent such issues without breaking backward compatibility, FW
      advertises new service bit making the source port learning configurable and
      this learning is being currently disabled during ath10k vdev creation.
      
      * Tested HW: QCA9984
      * Tested FW: 10.4-3.6.0.1-00004
      Signed-off-by: NSathishkumar Muruganandam <murugana@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      68c295f2
    • A
      ath10k: report tx rate using ieee80211_tx_rate_update() · 9a9cf0e6
      Anilkumar Kolli 提交于
      Mesh path metric needs tx rate information from ieee80211_tx_status()
      call but in ath10k there is no mechanism to report tx rate information
      via ieee80211_tx_status(), the tx rate is only accessible via
      sta_statiscs() op.
      
      Per peer tx stats has tx rate info available, Tx rate is available
      to ath10k driver after every 4 PPDU sent in the air. For each PPDU,
      ath10k driver updates rate informattion to mac80211 using
      ieee80211_tx_rate_update().
      
      Per peer txrate information is updated through per peer statistics
      and is available for QCA9888/QCA9984/QCA4019/QCA998X only
      
      Tested on QCA9984 with firmware-5.bin_10.4-3.5.3-00053
      Tested on QCA998X with firmware-5.bin_10.2.4-1.0-00036
      Signed-off-by: NAnilkumar Kolli <akolli@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      9a9cf0e6
  11. 19 12月, 2018 1 次提交
  12. 05 11月, 2018 2 次提交
  13. 14 10月, 2018 1 次提交
    • W
      ath10k: support NET_DETECT WoWLAN feature · ce834e28
      Wen Gong 提交于
      For WoWLAN support it is expected to support wake up based on discovery of
      one or more known SSIDs. This is the WIPHY_WOWLAN_NET_DETECT feature,
      which shows up as an NL80211 feature flag.
      
      This shows up in 'iw phy' as:
      
      WoWLAN support:
      * wake up on network detection, up to 16 match sets
      
      And it can be enabled with command:
      
      iw phy0 wowlan enable net-detect interval 5000 delay 30 freqs 2412 matches ssid foo
      
      Firmware will do scan by the configured parameters after suspend and
      wakeup if it found matched SSIDs. Tested with QCA6174 hw3.0 with
      firmware WLAN.RM.4.4.1-00110-QCARMSWPZ-1.
      Signed-off-by: NWen Gong <wgong@codeaurora.org>
      [kvalo@codeaurora.org: fix lots of endian bugs, whitespace, commit log and style cleanup]
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      ce834e28
  14. 01 10月, 2018 3 次提交
    • M
      ath10k: advertize beacon_int_min_gcd as 100 while bring up multi vaps · 4600563f
      Maharaja Kennadyrajan 提交于
      With the latest firmware design, the beacon interval should be
      greater than 100 to bring the multiple vaps.
      
      Set beacon_int_min_gcd to 100, when the wmi service
      WMI_SERVICE_VDEV_DIFFERENT_BEACON_INTERVAL_SUPPORT is enabled
      in the firmware. If not, beacon_int_min_gcd will be set
      to the default value 1.
      
      Tested in QCA4019 with firmware ver 10.4-3.2.1.1-00015
      Tested in QCA9888 with firmware ver 10.4-3.5.1-0005
      Signed-off-by: NMaharaja Kennadyrajan <mkenna@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      4600563f
    • M
      ath10k: add debugfs support to get power save state change of STA · d70c0d46
      Maharaja Kennadyrajan 提交于
      This patch helps to get the power save state change of each peer
      connected to the AP. With WMI_10_4_PEER_STA_PS_STATECHG_EVENTID
      event, ps state of each peer is reported to user space via
      debugfs.
      
      Use the below command to get the ps state of each sta:
      cat /sys/kernel/debug/ieee80211/phyX/netdev::wlanX/stations/
      XX:XX:XX:XX:XX:XX/peer_ps_state
      
      If STA is in power save state, we get the peer_ps_state value as 1.
      if STA is not in power save state, we get the peer_ps_state value as 0.
      If ps_state event is disabled, we get the peer_ps_state value as 2.
      
      We can enable/disable the ps_state events using the debugfs flag
      "ps_state_enable"
      
      echo Y > /sys/kernel/debug/ieee80211/phyX/ath10k/ps_state_enable
      
      Y = 1 to enable and Y = 0 to disable
      
      Tested in QCA4019 with firmware ver 10.4-3.2.1.1-00011
      Signed-off-by: NMaharaja Kennadyrajan <mkenna@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      d70c0d46
    • B
      ath10k: fix vdev-start timeout on error · 833fd34d
      Ben Greear 提交于
      The vdev-start-response message should cause the
      completion to fire, even in the error case.  Otherwise,
      the user still gets no useful information and everything
      is blocked until the timeout period.
      
      Add some warning text to print out the invalid status
      code to aid debugging, and propagate failure code.
      Signed-off-by: NBen Greear <greearb@candelatech.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      833fd34d
  15. 07 9月, 2018 2 次提交
  16. 31 7月, 2018 2 次提交
    • M
      ath10k: add debugfs file warm_hw_reset · db251d7d
      Maharaja Kennadyrajan 提交于
      Debugfs support to do hardware warm reset with WMI command
      WMI_PDEV_PARAM_PDEV_RESET for 10.4 and 10.2.4(if wmi
      service is enabled in the firmware for backward compatibility).
      
      This change is purely for debugging purpose when hardware hangs/mutes.
      
      This hardware reset won't affect the connectivity but there will be small
      pause in data traffic. Here we are doing BB/MAC level reset and hence
      whenever the BB/MAC watchdog is triggered, it does a hardware_chip_reset.
      So the target will be in the active state.
      
      Below command used to warm reset the hardware.
      echo 1 > /sys/kernel/debug/ieee80211/phyX/ath10k/warm_hw_reset
      
      Tested in QCA988X with firmware ver 10.2.4.70.45
      Tested in QCA4019 with firmware ver 10.4-3.2.1.1-00011
      Signed-off-by: NMaharaja Kennadyrajan <mkenna@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      db251d7d
    • R
      ath10k: handle mgmt tx completion event · dc405152
      Rakesh Pillai 提交于
      WCN3990 transmits management frames via WMI
      with reference. Currently, with the management
      tx completion not being handled, these frames are
      not getting freed even after the transmission status
      is returned by the firmware.
      
      The transmitted management frames should be freed
      when the firmware sends the over-the-air tx status of
      the corresponding management frames.
      
      Handle the wmi mgmt tx completion event and free
      the corresponding management frame.
      
      Tested HW: WCN3990
      Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
      Signed-off-by: NRakesh Pillai <pillair@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      dc405152
  17. 28 6月, 2018 1 次提交
    • R
      ath10k: update the phymode along with bandwidth change request · 9191fc2a
      Ryan Hsu 提交于
      In the case of Station connects to AP with narrower bandwidth at beginning.
      And later the AP changes the bandwidth to winder bandwidth, the AP will
      beacon with wider bandwidth IE, eg VHT20->VHT40->VHT80 or VHT40->VHT80.
      
      Since the supported BANDWIDTH will be limited by the PHYMODE, so while
      Station receives the bandwidth change request, it will also need to
      reconfigure the PHYMODE setting to firmware instead of just configuring
      the BANDWIDTH info, otherwise it'll trigger a firmware crash with
      non-support bandwidth.
      
      The issue was observed in WLAN.RM.4.4.1-00051-QCARMSWP-1, QCA6174 with
      below scenario:
      
      AP xxx changed bandwidth, new config is 5200 MHz, width 2 (5190/0 MHz)
      disconnect from AP xxx for new auth to yyy
      RX ReassocResp from xxx (capab=0x1111 status=0 aid=102)
      associated
      
      ....
      
      AP xxx changed bandwidth, new config is 5200 MHz, width 2 (5190/0 MHz)
      AP xxx changed bandwidth, new config is 5200 MHz, width 3 (5210/0 MHz)
      
      ....
      
      firmware register dump:
      [00]: 0x05030000 0x000015B3 0x00987291 0x00955B31
      [04]: 0x00987291 0x00060730 0x00000004 0x00000001
      [08]: 0x004089F0 0x00955A00 0x000A0B00 0x00400000
      [12]: 0x00000009 0x00000000 0x00952CD0 0x00952CE6
      [16]: 0x00952CC4 0x0098E25F 0x00000000 0x0091080D
      [20]: 0x40987291 0x0040E7A8 0x00000000 0x0041EE3C
      [24]: 0x809ABF05 0x0040E808 0x00000000 0xC0987291
      [28]: 0x809A650C 0x0040E948 0x0041FE40 0x004345C4
      [32]: 0x809A5C63 0x0040E988 0x0040E9AC 0x0042D1A8
      [36]: 0x8091D252 0x0040E9A8 0x00000002 0x00000001
      [40]: 0x809FDA9D 0x0040EA58 0x0043D554 0x0042D554
      [44]: 0x809F8B22 0x0040EA78 0x0043D554 0x00000001
      [48]: 0x80911210 0x0040EAC8 0x00000010 0x004041D0
      [52]: 0x80911154 0x0040EB28 0x00400000 0x00000000
      [56]: 0x8091122D 0x0040EB48 0x00000000 0x00400600
      Reported-by: NRouven Czerwinski <rouven@czerwinskis.de>
      Tested-by: NTimur Kristóf <timur.kristof@gmail.com>
      Signed-off-by: NRyan Hsu <ryanhsu@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      9191fc2a
  18. 25 5月, 2018 1 次提交
    • S
      ath10k: DFS Host Confirmation · 6f6eb1bc
      Sriram R 提交于
      In the 10.4-3.6 firmware branch there's a new DFS Host confirmation
      feature which is advertised using WMI_SERVICE_HOST_DFS_CHECK_SUPPORT flag.
      
      This new features enables the ath10k host to send information to the
      firmware on the specifications of detected radar type. This allows the
      firmware to validate if the host's radar pattern detector unit is
      operational and check if the radar information shared by host matches
      the radar pulses sent as phy error events from firmware. If the check
      fails the firmware won't allow use of DFS channels on AP mode when using
      FCC regulatory region.
      
      Hence this patch is mandatory when using a firmware from 10.4-3.6 branch.
      Else, DFS channels on FCC regions cannot be used.
      
      Supported Chipsets : QCA9984/QCA9888/QCA4019
      Firmware Version : 10.4-3.6-00104
      Signed-off-by: NSriram R <srirrama@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      6f6eb1bc
  19. 27 4月, 2018 1 次提交
    • T
      ath10k: fix kernel panic while reading tpc_stats · 4b190675
      Tamizh Chelvam 提交于
      When attempt to read tpc_stats for the chipsets which support
      more than 3 tx chain will trigger kernel panic(kernel stack is corrupted)
      due to writing values on rate_code array out of range.
      This patch changes the array size depends on the WMI_TPC_TX_N_CHAIN and
      added check to avoid write values on the array if the num tx chain
      get in tpc config event is greater than WMI_TPC_TX_N_CHAIN.
      
      Tested on QCA9984 with firmware-5.bin_10.4-3.5.3-00057
      
      Kernel panic log :
      
      [  323.510944] Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: bf90c654
      [  323.510944]
      [  323.524390] CPU: 0 PID: 1908 Comm: cat Not tainted 3.14.77 #31
      [  323.530224] [<c021db48>] (unwind_backtrace) from [<c021ac08>] (show_stack+0x10/0x14)
      [  323.537941] [<c021ac08>] (show_stack) from [<c03c53c0>] (dump_stack+0x80/0xa0)
      [  323.545146] [<c03c53c0>] (dump_stack) from [<c022e4ac>] (panic+0x84/0x1e4)
      [  323.552000] [<c022e4ac>] (panic) from [<c022e61c>] (__stack_chk_fail+0x10/0x14)
      [  323.559350] [<c022e61c>] (__stack_chk_fail) from [<bf90c654>] (ath10k_wmi_event_pdev_tpc_config+0x424/0x438 [ath10k_core])
      [  323.570471] [<bf90c654>] (ath10k_wmi_event_pdev_tpc_config [ath10k_core]) from [<bf90d800>] (ath10k_wmi_10_4_op_rx+0x2f0/0x39c [ath10k_core])
      [  323.583047] [<bf90d800>] (ath10k_wmi_10_4_op_rx [ath10k_core]) from [<bf8fcc18>] (ath10k_htc_rx_completion_handler+0x170/0x1a0 [ath10k_core])
      [  323.595702] [<bf8fcc18>] (ath10k_htc_rx_completion_handler [ath10k_core]) from [<bf961f44>] (ath10k_pci_hif_send_complete_check+0x1f0/0x220 [ath10k_pci])
      [  323.609421] [<bf961f44>] (ath10k_pci_hif_send_complete_check [ath10k_pci]) from [<bf96562c>] (ath10k_ce_per_engine_service+0x74/0xc4 [ath10k_pci])
      [  323.622490] [<bf96562c>] (ath10k_ce_per_engine_service [ath10k_pci]) from [<bf9656f0>] (ath10k_ce_per_engine_service_any+0x74/0x80 [ath10k_pci])
      [  323.635423] [<bf9656f0>] (ath10k_ce_per_engine_service_any [ath10k_pci]) from [<bf96365c>] (ath10k_pci_napi_poll+0x44/0xe8 [ath10k_pci])
      [  323.647665] [<bf96365c>] (ath10k_pci_napi_poll [ath10k_pci]) from [<c0599994>] (net_rx_action+0xac/0x160)
      [  323.657208] [<c0599994>] (net_rx_action) from [<c02324a4>] (__do_softirq+0x104/0x294)
      [  323.665017] [<c02324a4>] (__do_softirq) from [<c0232920>] (irq_exit+0x9c/0x11c)
      [  323.672314] [<c0232920>] (irq_exit) from [<c0217fc0>] (handle_IRQ+0x6c/0x90)
      [  323.679341] [<c0217fc0>] (handle_IRQ) from [<c02084e0>] (gic_handle_irq+0x3c/0x60)
      [  323.686893] [<c02084e0>] (gic_handle_irq) from [<c02095c0>] (__irq_svc+0x40/0x70)
      [  323.694349] Exception stack(0xdd489c58 to 0xdd489ca0)
      [  323.699384] 9c40:                                                       00000000 a0000013
      [  323.707547] 9c60: 00000000 dc4bce40 60000013 ddc1d800 dd488000 00000990 00000000 c085c800
      [  323.715707] 9c80: 00000000 dd489d44 0000092d dd489ca0 c026e664 c026e668 60000013 ffffffff
      [  323.723877] [<c02095c0>] (__irq_svc) from [<c026e668>] (rcu_note_context_switch+0x170/0x184)
      [  323.732298] [<c026e668>] (rcu_note_context_switch) from [<c020e928>] (__schedule+0x50/0x4d4)
      [  323.740716] [<c020e928>] (__schedule) from [<c020e490>] (schedule_timeout+0x148/0x178)
      [  323.748611] [<c020e490>] (schedule_timeout) from [<c020f804>] (wait_for_common+0x114/0x154)
      [  323.756972] [<c020f804>] (wait_for_common) from [<bf8f6ef0>] (ath10k_tpc_stats_open+0xc8/0x340 [ath10k_core])
      [  323.766873] [<bf8f6ef0>] (ath10k_tpc_stats_open [ath10k_core]) from [<c02bb598>] (do_dentry_open+0x1ac/0x274)
      [  323.776741] [<c02bb598>] (do_dentry_open) from [<c02c838c>] (do_last+0x8c0/0xb08)
      [  323.784201] [<c02c838c>] (do_last) from [<c02c87e4>] (path_openat+0x210/0x598)
      [  323.791408] [<c02c87e4>] (path_openat) from [<c02c9d1c>] (do_filp_open+0x2c/0x78)
      [  323.798873] [<c02c9d1c>] (do_filp_open) from [<c02bc85c>] (do_sys_open+0x114/0x1b4)
      [  323.806509] [<c02bc85c>] (do_sys_open) from [<c0208c80>] (ret_fast_syscall+0x0/0x44)
      [  323.814241] CPU1: stopping
      [  323.816927] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 3.14.77 #31
      [  323.823008] [<c021db48>] (unwind_backtrace) from [<c021ac08>] (show_stack+0x10/0x14)
      [  323.830731] [<c021ac08>] (show_stack) from [<c03c53c0>] (dump_stack+0x80/0xa0)
      [  323.837934] [<c03c53c0>] (dump_stack) from [<c021cfac>] (handle_IPI+0xb8/0x140)
      [  323.845224] [<c021cfac>] (handle_IPI) from [<c02084fc>] (gic_handle_irq+0x58/0x60)
      [  323.852774] [<c02084fc>] (gic_handle_irq) from [<c02095c0>] (__irq_svc+0x40/0x70)
      [  323.860233] Exception stack(0xdd499fa0 to 0xdd499fe8)
      [  323.865273] 9fa0: ffffffed 00000000 1d3c9000 00000000 dd498000 dd498030 10c0387d c08b62c8
      [  323.873432] 9fc0: 4220406a 512f04d0 00000000 00000000 00000001 dd499fe8 c021838c c0218390
      [  323.881588] 9fe0: 60000013 ffffffff
      [  323.885070] [<c02095c0>] (__irq_svc) from [<c0218390>] (arch_cpu_idle+0x30/0x50)
      [  323.892454] [<c0218390>] (arch_cpu_idle) from [<c026500c>] (cpu_startup_entry+0xa4/0x108)
      [  323.900690] [<c026500c>] (cpu_startup_entry) from [<422085a4>] (0x422085a4)
      Signed-off-by: NTamizh chelvam <tamizhr@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      4b190675
  20. 24 4月, 2018 3 次提交
    • W
      ath10k: convert wow pattern from 802.3 to 802.11 · fa3440fa
      Wen Gong 提交于
      When trying to set wow wakeup patterns it fails with this command:
      
      iw phyxx wowlan enable patterns offset xx+ IP address xx.xx.xx.xx
      
      The reason is that the wow pattern from upper layer is in 802.3 format
      for this case, it need to convert it to 802.11 format. The input
      offset parameter is used for 802.3, but the actual offset firmware
      need depends on rx_decap_mode, so that it needs to be recalculated.
      Pattern of 802.3 packet is not same with 802.11 packet. If the
      rx_decap_mode is ATH10K_HW_TXRX_NATIVE_WIFI, then firmware will
      receive data packet with 802.11 format from hardware.
      
      Tested with QCA6174 hw3.0 with firmware
      WLAN.RM.4.4.1-00099-QCARMSWPZ-1, but this will also affect QCA9377.
      This has always failed, so it's not a regression with new firmware
      releases.
      Signed-off-by: NWen Gong <wgong@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      fa3440fa
    • C
      ath10k: support MAC address randomization in scan · 60e1d0fb
      Carl Huang 提交于
      The ath10k reports the random_mac_addr capability to upper layer
      based on the service bit firmware reported. Driver sets the
      spoofed flag in scan_ctrl_flag to firmware if upper layer has
      enabled this feature in scan request.
      
      Test with QCA6174 hw3.0 and firmware-6.bin_WLAN.RM.4.4.1-00102-QCARMSWP-1,
      but QCA9377 is also affected.
      Signed-off-by: NCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      60e1d0fb
    • C
      ath10k: add WMI_SERVICE_AVAILABLE_EVENT support · cea19a6c
      Carl Huang 提交于
      Add WMI_SERVICE_AVAILABLE_EVENT to extend WMI_SERVICE_READY_EVENT,
      the 128bit service map in WMI_SERVICE_READY_EVENT is not enough
      for firmware to notice new WLAN service to host driver. Hereby,
      for thoese new WLAN service, firmware will notice host driver by
      WMI_SERVICE_AVAILABLE_EVENT.
      Signed-off-by: NAlan Liu <alanliu@codeaurora.org>
      Signed-off-by: NCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      cea19a6c