10d517a27a579a0ccedf8c7242260e8e812c5744
[openwrt/staging/ansuel.git] /
1 From 534c2dd8099a9cc4bad8ea8b3c7fa1f730e10d5d Mon Sep 17 00:00:00 2001
2 From: Aditya Kumar Singh <quic_adisi@quicinc.com>
3 Date: Tue, 10 Oct 2023 10:27:19 +0300
4 Subject: [PATCH] wifi: ath11k: add parsing of phy bitmap for reg rules
5
6 Certain regulatory domains could put restrictions on phy mode operation.
7 For example, in a few countries HE Operation is not allowed. For such
8 countries, firmware indicates this via phy bitmap in each reg rule.
9
10 Currently, there is no logic to parse this info and then pass it on to the
11 cfg80211/regulatory.
12
13 Add parsing of this phy bitmap from the regulatory channel change event and
14 then accordingly map it to cfg80211/regulatory flags and pass it on to it.
15
16 While at it, correct typo in debug print s/dsf/dfs.
17
18 Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
19
20 Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
21 Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
22 Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
23 Link: https://lore.kernel.org/r/20231004092655.25020-1-quic_adisi@quicinc.com
24 ---
25 drivers/net/wireless/ath/ath11k/reg.c | 11 +++++++++++
26 drivers/net/wireless/ath/ath11k/reg.h | 3 +++
27 drivers/net/wireless/ath/ath11k/wmi.c | 5 +++--
28 3 files changed, 17 insertions(+), 2 deletions(-)
29
30 --- a/drivers/net/wireless/ath/ath11k/reg.c
31 +++ b/drivers/net/wireless/ath/ath11k/reg.c
32 @@ -352,6 +352,16 @@ static u32 ath11k_map_fw_reg_flags(u16 r
33 return flags;
34 }
35
36 +static u32 ath11k_map_fw_phy_flags(u32 phy_flags)
37 +{
38 + u32 flags = 0;
39 +
40 + if (phy_flags & ATH11K_REG_PHY_BITMAP_NO11AX)
41 + flags |= NL80211_RRF_NO_HE;
42 +
43 + return flags;
44 +}
45 +
46 static bool
47 ath11k_reg_can_intersect(struct ieee80211_reg_rule *rule1,
48 struct ieee80211_reg_rule *rule2)
49 @@ -685,6 +695,7 @@ ath11k_reg_build_regd(struct ath11k_base
50 }
51
52 flags |= ath11k_map_fw_reg_flags(reg_rule->flags);
53 + flags |= ath11k_map_fw_phy_flags(reg_info->phybitmap);
54
55 ath11k_reg_update_rule(tmp_regd->reg_rules + i,
56 reg_rule->start_freq,
57 --- a/drivers/net/wireless/ath/ath11k/reg.h
58 +++ b/drivers/net/wireless/ath/ath11k/reg.h
59 @@ -24,6 +24,9 @@ enum ath11k_dfs_region {
60 ATH11K_DFS_REG_UNDEF,
61 };
62
63 +/* Phy bitmaps */
64 +#define ATH11K_REG_PHY_BITMAP_NO11AX BIT(5)
65 +
66 /* ATH11K Regulatory API's */
67 void ath11k_reg_init(struct ath11k *ar);
68 void ath11k_reg_free(struct ath11k_base *ab);
69 --- a/drivers/net/wireless/ath/ath11k/wmi.c
70 +++ b/drivers/net/wireless/ath/ath11k/wmi.c
71 @@ -5440,10 +5440,11 @@ static int ath11k_pull_reg_chan_list_ext
72 }
73
74 ath11k_dbg(ab, ATH11K_DBG_WMI,
75 - "cc_ext %s dsf %d BW: min_2ghz %d max_2ghz %d min_5ghz %d max_5ghz %d",
76 + "cc_ext %s dfs %d BW: min_2ghz %d max_2ghz %d min_5ghz %d max_5ghz %d phy_bitmap 0x%x",
77 reg_info->alpha2, reg_info->dfs_region,
78 reg_info->min_bw_2ghz, reg_info->max_bw_2ghz,
79 - reg_info->min_bw_5ghz, reg_info->max_bw_5ghz);
80 + reg_info->min_bw_5ghz, reg_info->max_bw_5ghz,
81 + reg_info->phybitmap);
82
83 ath11k_dbg(ab, ATH11K_DBG_WMI,
84 "num_2ghz_reg_rules %d num_5ghz_reg_rules %d",