summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi-tlv.c5
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi-tlv.h4
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi.c19
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi.h6
4 files changed, 25 insertions, 9 deletions
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
index 95bd588e0d2c..74e923efb1c7 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
@@ -923,6 +923,11 @@ static int ath10k_wmi_tlv_op_pull_phyerr_ev_hdr(struct ath10k *ar,
arg->buf_len = __le32_to_cpu(ev->buf_len);
arg->phyerrs = phyerrs;
+ if (QCA_REV_WCN3990(ar)) {
+ arg->phy_err_mask0 = __le32_to_cpu(ev->rs_phy_err_mask0);
+ arg->phy_err_mask1 = __le32_to_cpu(ev->rs_phy_err_mask1);
+ }
+
kfree(tb);
return 0;
}
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.h b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
index 7140e5e23307..89921025201b 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.h
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
@@ -1399,6 +1399,10 @@ struct wmi_tlv_phyerr_ev {
__le32 tsf_l32;
__le32 tsf_u32;
__le32 buf_len;
+ __le32 pdev_id;
+ __le32 rs_phy_err_mask0;
+ __le32 rs_phy_err_mask1;
+ __le32 rs_phy_err_mask2;
} __packed;
enum wmi_tlv_dbglog_param {
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index 86aedff096f6..d9365245da0a 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -4076,19 +4076,20 @@ void ath10k_wmi_event_phyerr(struct ath10k *ar, struct sk_buff *skb)
left_len -= buf_len;
- switch (phy_err_code) {
- case PHY_ERROR_RADAR:
+ if ((phy_err_code == PHY_ERROR_RADAR) ||
+ (hdr_arg.phy_err_mask0 &
+ WMI_PHY_ERROR_MASK0_RADAR)) {
ath10k_wmi_event_dfs(ar, &phyerr_arg, tsf);
- break;
- case PHY_ERROR_SPECTRAL_SCAN:
+ } else if ((phy_err_code ==
+ WMI_PHY_ERROR_MASK0_SPECTRAL_SCAN) ||
+ (hdr_arg.phy_err_mask0 &
+ WMI_PHY_ERROR_MASK0_SPECTRAL_SCAN)) {
ath10k_wmi_event_spectral_scan(ar, &phyerr_arg, tsf);
- break;
- case PHY_ERROR_FALSE_RADAR_EXT:
+ } else if ((phy_err_code == PHY_ERROR_FALSE_RADAR_EXT) ||
+ (hdr_arg.phy_err_mask0 &
+ WMI_PHY_ERROR_MASK0_FALSE_RADAR_EXT)) {
ath10k_wmi_event_dfs(ar, &phyerr_arg, tsf);
ath10k_wmi_event_spectral_scan(ar, &phyerr_arg, tsf);
- break;
- default:
- break;
}
phyerr = phyerr + phyerr_arg.hdr_len + buf_len;
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
index f59e5f86708b..f0128d47a45e 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.h
+++ b/drivers/net/wireless/ath/ath10k/wmi.h
@@ -3116,6 +3116,10 @@ struct wmi_mgmt_rx_ext_info {
#define PHY_ERROR_10_4_RADAR_MASK 0x4
#define PHY_ERROR_10_4_SPECTRAL_SCAN_MASK 0x4000000
+#define WMI_PHY_ERROR_MASK0_RADAR BIT(2)
+#define WMI_PHY_ERROR_MASK0_FALSE_RADAR_EXT BIT(24)
+#define WMI_PHY_ERROR_MASK0_SPECTRAL_SCAN BIT(26)
+
enum phy_err_type {
PHY_ERROR_UNKNOWN,
PHY_ERROR_SPECTRAL_SCAN,
@@ -6303,6 +6307,8 @@ struct wmi_phyerr_hdr_arg {
u32 tsf_u32;
u32 buf_len;
const void *phyerrs;
+ u32 phy_err_mask0;
+ u32 phy_err_mask1;
};
struct wmi_svc_rdy_ev_arg {