diff options
author | Ansuel Smith <ansuelsmth@gmail.com> | 2018-07-08 16:04:15 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2018-07-22 22:25:33 +0200 |
commit | 2dcd955aea1ab715d048910322b05d1af0b69748 (patch) | |
tree | 9f7e269a5a6a886bfe625aa9a42be536e84a20c9 /package/kernel/mac80211/patches/380-0001-ath10k-wmi-modify-svc-bitmap-parsing-for-wcn3990.patch | |
parent | 57b808ec88315db6743b3159a04dbb16097597ea (diff) | |
download | upstream-2dcd955aea1ab715d048910322b05d1af0b69748.tar.gz upstream-2dcd955aea1ab715d048910322b05d1af0b69748.tar.bz2 upstream-2dcd955aea1ab715d048910322b05d1af0b69748.zip |
mac80211: backport and update patches for ath10k
This commit refreshes and updates the VHT160 ath10k support fix patches
and adds a number of backports from ath-next:
* 8ed05ed06fca ath10k: handle tdls peer events
* 229329ff345f ath10k: wmi: modify svc bitmap parsing for wcn3990
* 14d65775687c ath10k: advertise TDLS wider bandwidth support for 5GHz
* bc64d05220f3 ath10k: debugfs support to get final TPC stats for 10.4 variants
* 8b2d93dd2261 ath10k: Fix kernel panic while using worker (ath10k_sta_rc_update_wk)
* 4b190675ad06 ath10k: fix kernel panic while reading tpc_stats
* be8cce96f14d ath10k: add support to configure channel dwell time
* f40105e67478 ath: add support to get the detected radar specifications
* 6f6eb1bcbeff ath10k: DFS Host Confirmation
* 260e629bbf44 ath10k: fix memory leak of tpc_stats
* 38441fb6fcbb ath10k: support use of channel 173
* 2e9bcd0d7324 ath10k: fix spectral scan for QCA9984 and QCA9888 chipsets
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
[move backported patches in the 3xx number space, bring in upstream order,
replace incomplete patch files with git format-patch ones, rewrite commit
message, fix subject]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'package/kernel/mac80211/patches/380-0001-ath10k-wmi-modify-svc-bitmap-parsing-for-wcn3990.patch')
-rw-r--r-- | package/kernel/mac80211/patches/380-0001-ath10k-wmi-modify-svc-bitmap-parsing-for-wcn3990.patch | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/380-0001-ath10k-wmi-modify-svc-bitmap-parsing-for-wcn3990.patch b/package/kernel/mac80211/patches/380-0001-ath10k-wmi-modify-svc-bitmap-parsing-for-wcn3990.patch new file mode 100644 index 0000000000..6788136273 --- /dev/null +++ b/package/kernel/mac80211/patches/380-0001-ath10k-wmi-modify-svc-bitmap-parsing-for-wcn3990.patch @@ -0,0 +1,215 @@ +From 229329ff345f80c95202eaf2d7a0f2910c06144e Mon Sep 17 00:00:00 2001 +From: Rakesh Pillai <pillair@qti.qualcomm.com> +Date: Mon, 11 Dec 2017 19:52:52 +0530 +Subject: [PATCH] ath10k: wmi: modify svc bitmap parsing for wcn3990 + +Due to the limitation of wmi tlv parsing logic, if there are +two parameters in a wmi event with same tlv tag, we can get only +the last value, as it overwrites the prev value of the same tlv tag. + +The service ready event in wcn3990 contains two parameters of the +same tag UINT32, due to which the svc bitmap is overwritten with the +DBS support parameter. + +Refactor the service ready event parsing to allow parsing two tlv +of the same tag UINT32 for wcn3990. + +Signed-off-by: Rakesh Pillai <pillair@qti.qualcomm.com> +Signed-off-by: Govind Singh <govinds@qti.qualcomm.com> +Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> +--- + drivers/net/wireless/ath/ath10k/mac.c | 4 +- + drivers/net/wireless/ath/ath10k/wmi-tlv.c | 61 ++++++++++++++++++++++++------- + drivers/net/wireless/ath/ath10k/wmi-tlv.h | 46 +++++++++++++++++++++++ + drivers/net/wireless/ath/ath10k/wmi.h | 1 + + 4 files changed, 97 insertions(+), 15 deletions(-) + +--- a/drivers/net/wireless/ath/ath10k/mac.c ++++ b/drivers/net/wireless/ath/ath10k/mac.c +@@ -3574,7 +3574,9 @@ ath10k_mac_tx_h_get_txpath(struct ath10k + return ATH10K_MAC_TX_HTT; + case ATH10K_HW_TXRX_MGMT: + if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX, +- ar->running_fw->fw_file.fw_features)) ++ ar->running_fw->fw_file.fw_features) || ++ test_bit(WMI_SERVICE_MGMT_TX_WMI, ++ ar->wmi.svc_map)) + return ATH10K_MAC_TX_WMI_MGMT; + else if (ar->htt.target_version_major >= 3) + return ATH10K_MAC_TX_HTT; +--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c ++++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c +@@ -917,33 +917,69 @@ ath10k_wmi_tlv_parse_mem_reqs(struct ath + return -ENOMEM; + } + ++struct wmi_tlv_svc_rdy_parse { ++ const struct hal_reg_capabilities *reg; ++ const struct wmi_tlv_svc_rdy_ev *ev; ++ const __le32 *svc_bmap; ++ const struct wlan_host_mem_req *mem_reqs; ++ bool svc_bmap_done; ++ bool dbs_hw_mode_done; ++}; ++ ++static int ath10k_wmi_tlv_svc_rdy_parse(struct ath10k *ar, u16 tag, u16 len, ++ const void *ptr, void *data) ++{ ++ struct wmi_tlv_svc_rdy_parse *svc_rdy = data; ++ ++ switch (tag) { ++ case WMI_TLV_TAG_STRUCT_SERVICE_READY_EVENT: ++ svc_rdy->ev = ptr; ++ break; ++ case WMI_TLV_TAG_STRUCT_HAL_REG_CAPABILITIES: ++ svc_rdy->reg = ptr; ++ break; ++ case WMI_TLV_TAG_ARRAY_STRUCT: ++ svc_rdy->mem_reqs = ptr; ++ break; ++ case WMI_TLV_TAG_ARRAY_UINT32: ++ if (!svc_rdy->svc_bmap_done) { ++ svc_rdy->svc_bmap_done = true; ++ svc_rdy->svc_bmap = ptr; ++ } else if (!svc_rdy->dbs_hw_mode_done) { ++ svc_rdy->dbs_hw_mode_done = true; ++ } ++ break; ++ default: ++ break; ++ } ++ return 0; ++} ++ + static int ath10k_wmi_tlv_op_pull_svc_rdy_ev(struct ath10k *ar, + struct sk_buff *skb, + struct wmi_svc_rdy_ev_arg *arg) + { +- const void **tb; + const struct hal_reg_capabilities *reg; + const struct wmi_tlv_svc_rdy_ev *ev; + const __le32 *svc_bmap; + const struct wlan_host_mem_req *mem_reqs; ++ struct wmi_tlv_svc_rdy_parse svc_rdy = { }; + int ret; + +- tb = ath10k_wmi_tlv_parse_alloc(ar, skb->data, skb->len, GFP_ATOMIC); +- if (IS_ERR(tb)) { +- ret = PTR_ERR(tb); ++ ret = ath10k_wmi_tlv_iter(ar, skb->data, skb->len, ++ ath10k_wmi_tlv_svc_rdy_parse, &svc_rdy); ++ if (ret) { + ath10k_warn(ar, "failed to parse tlv: %d\n", ret); + return ret; + } + +- ev = tb[WMI_TLV_TAG_STRUCT_SERVICE_READY_EVENT]; +- reg = tb[WMI_TLV_TAG_STRUCT_HAL_REG_CAPABILITIES]; +- svc_bmap = tb[WMI_TLV_TAG_ARRAY_UINT32]; +- mem_reqs = tb[WMI_TLV_TAG_ARRAY_STRUCT]; ++ ev = svc_rdy.ev; ++ reg = svc_rdy.reg; ++ svc_bmap = svc_rdy.svc_bmap; ++ mem_reqs = svc_rdy.mem_reqs; + +- if (!ev || !reg || !svc_bmap || !mem_reqs) { +- kfree(tb); ++ if (!ev || !reg || !svc_bmap || !mem_reqs) + return -EPROTO; +- } + + /* This is an internal ABI compatibility check for WMI TLV so check it + * here instead of the generic WMI code. +@@ -961,7 +997,6 @@ static int ath10k_wmi_tlv_op_pull_svc_rd + __le32_to_cpu(ev->abi.abi_ver_ns1) != WMI_TLV_ABI_VER_NS1 || + __le32_to_cpu(ev->abi.abi_ver_ns2) != WMI_TLV_ABI_VER_NS2 || + __le32_to_cpu(ev->abi.abi_ver_ns3) != WMI_TLV_ABI_VER_NS3) { +- kfree(tb); + return -ENOTSUPP; + } + +@@ -982,12 +1017,10 @@ static int ath10k_wmi_tlv_op_pull_svc_rd + ret = ath10k_wmi_tlv_iter(ar, mem_reqs, ath10k_wmi_tlv_len(mem_reqs), + ath10k_wmi_tlv_parse_mem_reqs, arg); + if (ret) { +- kfree(tb); + ath10k_warn(ar, "failed to parse mem_reqs tlv: %d\n", ret); + return ret; + } + +- kfree(tb); + return 0; + } + +--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.h ++++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.h +@@ -965,6 +965,50 @@ enum wmi_tlv_service { + WMI_TLV_SERVICE_STA_RX_IPA_OFFLOAD_SUPPORT, + WMI_TLV_SERVICE_MDNS_OFFLOAD, + WMI_TLV_SERVICE_SAP_AUTH_OFFLOAD, ++ WMI_TLV_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT, ++ WMI_TLV_SERVICE_OCB, ++ WMI_TLV_SERVICE_AP_ARPNS_OFFLOAD, ++ WMI_TLV_SERVICE_PER_BAND_CHAINMASK_SUPPORT, ++ WMI_TLV_SERVICE_PACKET_FILTER_OFFLOAD, ++ WMI_TLV_SERVICE_MGMT_TX_HTT, ++ WMI_TLV_SERVICE_MGMT_TX_WMI, ++ WMI_TLV_SERVICE_EXT_MSG, ++ WMI_TLV_SERVICE_MAWC, ++ WMI_TLV_SERVICE_PEER_ASSOC_CONF, ++ WMI_TLV_SERVICE_EGAP, ++ WMI_TLV_SERVICE_STA_PMF_OFFLOAD, ++ WMI_TLV_SERVICE_UNIFIED_WOW_CAPABILITY, ++ WMI_TLV_SERVICE_ENHANCED_PROXY_STA, ++ WMI_TLV_SERVICE_ATF, ++ WMI_TLV_SERVICE_COEX_GPIO, ++ WMI_TLV_SERVICE_AUX_SPECTRAL_INTF, ++ WMI_TLV_SERVICE_AUX_CHAN_LOAD_INTF, ++ WMI_TLV_SERVICE_BSS_CHANNEL_INFO_64, ++ WMI_TLV_SERVICE_ENTERPRISE_MESH, ++ WMI_TLV_SERVICE_RESTRT_CHNL_SUPPORT, ++ WMI_TLV_SERVICE_BPF_OFFLOAD, ++ WMI_TLV_SERVICE_SYNC_DELETE_CMDS, ++ WMI_TLV_SERVICE_SMART_ANTENNA_SW_SUPPORT, ++ WMI_TLV_SERVICE_SMART_ANTENNA_HW_SUPPORT, ++ WMI_TLV_SERVICE_RATECTRL_LIMIT_MAX_MIN_RATES, ++ WMI_TLV_SERVICE_NAN_DATA, ++ WMI_TLV_SERVICE_NAN_RTT, ++ WMI_TLV_SERVICE_11AX, ++ WMI_TLV_SERVICE_DEPRECATED_REPLACE, ++ WMI_TLV_SERVICE_TDLS_CONN_TRACKER_IN_HOST_MODE, ++ WMI_TLV_SERVICE_ENHANCED_MCAST_FILTER, ++ WMI_TLV_SERVICE_PERIODIC_CHAN_STAT_SUPPORT, ++ WMI_TLV_SERVICE_MESH_11S, ++ WMI_TLV_SERVICE_HALF_RATE_QUARTER_RATE_SUPPORT, ++ WMI_TLV_SERVICE_VDEV_RX_FILTER, ++ WMI_TLV_SERVICE_P2P_LISTEN_OFFLOAD_SUPPORT, ++ WMI_TLV_SERVICE_MARK_FIRST_WAKEUP_PACKET, ++ WMI_TLV_SERVICE_MULTIPLE_MCAST_FILTER_SET, ++ WMI_TLV_SERVICE_HOST_MANAGED_RX_REORDER, ++ WMI_TLV_SERVICE_FLASH_RDWR_SUPPORT, ++ WMI_TLV_SERVICE_WLAN_STATS_REPORT, ++ WMI_TLV_SERVICE_TX_MSDU_ID_NEW_PARTITION_SUPPORT, ++ WMI_TLV_SERVICE_DFS_PHYERR_OFFLOAD, + }; + + #define WMI_SERVICE_IS_ENABLED(wmi_svc_bmap, svc_id, len) \ +@@ -1121,6 +1165,8 @@ wmi_tlv_svc_map(const __le32 *in, unsign + WMI_SERVICE_MDNS_OFFLOAD, len); + SVCMAP(WMI_TLV_SERVICE_SAP_AUTH_OFFLOAD, + WMI_SERVICE_SAP_AUTH_OFFLOAD, len); ++ SVCMAP(WMI_TLV_SERVICE_MGMT_TX_WMI, ++ WMI_SERVICE_MGMT_TX_WMI, len); + } + + #undef SVCMAP +--- a/drivers/net/wireless/ath/ath10k/wmi.h ++++ b/drivers/net/wireless/ath/ath10k/wmi.h +@@ -195,6 +195,7 @@ enum wmi_service { + WMI_SERVICE_SMART_LOGGING_SUPPORT, + WMI_SERVICE_TDLS_CONN_TRACKER_IN_HOST_MODE, + WMI_SERVICE_TDLS_EXPLICIT_MODE_ONLY, ++ WMI_SERVICE_MGMT_TX_WMI, + + /* keep last */ + WMI_SERVICE_MAX, |