| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- From 534c2dd8099a9cc4bad8ea8b3c7fa1f730e10d5d Mon Sep 17 00:00:00 2001
- From: Aditya Kumar Singh <[email protected]>
- Date: Tue, 10 Oct 2023 10:27:19 +0300
- Subject: [PATCH] wifi: ath11k: add parsing of phy bitmap for reg rules
- Certain regulatory domains could put restrictions on phy mode operation.
- For example, in a few countries HE Operation is not allowed. For such
- countries, firmware indicates this via phy bitmap in each reg rule.
- Currently, there is no logic to parse this info and then pass it on to the
- cfg80211/regulatory.
- Add parsing of this phy bitmap from the regulatory channel change event and
- then accordingly map it to cfg80211/regulatory flags and pass it on to it.
- While at it, correct typo in debug print s/dsf/dfs.
- Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
- Signed-off-by: Aditya Kumar Singh <[email protected]>
- Acked-by: Jeff Johnson <[email protected]>
- Signed-off-by: Kalle Valo <[email protected]>
- Link: https://lore.kernel.org/r/[email protected]
- ---
- drivers/net/wireless/ath/ath11k/reg.c | 11 +++++++++++
- drivers/net/wireless/ath/ath11k/reg.h | 3 +++
- drivers/net/wireless/ath/ath11k/wmi.c | 5 +++--
- 3 files changed, 17 insertions(+), 2 deletions(-)
- --- a/drivers/net/wireless/ath/ath11k/reg.c
- +++ b/drivers/net/wireless/ath/ath11k/reg.c
- @@ -352,6 +352,16 @@ static u32 ath11k_map_fw_reg_flags(u16 r
- return flags;
- }
-
- +static u32 ath11k_map_fw_phy_flags(u32 phy_flags)
- +{
- + u32 flags = 0;
- +
- + if (phy_flags & ATH11K_REG_PHY_BITMAP_NO11AX)
- + flags |= NL80211_RRF_NO_HE;
- +
- + return flags;
- +}
- +
- static bool
- ath11k_reg_can_intersect(struct ieee80211_reg_rule *rule1,
- struct ieee80211_reg_rule *rule2)
- @@ -685,6 +695,7 @@ ath11k_reg_build_regd(struct ath11k_base
- }
-
- flags |= ath11k_map_fw_reg_flags(reg_rule->flags);
- + flags |= ath11k_map_fw_phy_flags(reg_info->phybitmap);
-
- ath11k_reg_update_rule(tmp_regd->reg_rules + i,
- reg_rule->start_freq,
- --- a/drivers/net/wireless/ath/ath11k/reg.h
- +++ b/drivers/net/wireless/ath/ath11k/reg.h
- @@ -24,6 +24,9 @@ enum ath11k_dfs_region {
- ATH11K_DFS_REG_UNDEF,
- };
-
- +/* Phy bitmaps */
- +#define ATH11K_REG_PHY_BITMAP_NO11AX BIT(5)
- +
- /* ATH11K Regulatory API's */
- void ath11k_reg_init(struct ath11k *ar);
- void ath11k_reg_free(struct ath11k_base *ab);
- --- a/drivers/net/wireless/ath/ath11k/wmi.c
- +++ b/drivers/net/wireless/ath/ath11k/wmi.c
- @@ -5440,10 +5440,11 @@ static int ath11k_pull_reg_chan_list_ext
- }
-
- ath11k_dbg(ab, ATH11K_DBG_WMI,
- - "cc_ext %s dsf %d BW: min_2ghz %d max_2ghz %d min_5ghz %d max_5ghz %d",
- + "cc_ext %s dfs %d BW: min_2ghz %d max_2ghz %d min_5ghz %d max_5ghz %d phy_bitmap 0x%x",
- reg_info->alpha2, reg_info->dfs_region,
- reg_info->min_bw_2ghz, reg_info->max_bw_2ghz,
- - reg_info->min_bw_5ghz, reg_info->max_bw_5ghz);
- + reg_info->min_bw_5ghz, reg_info->max_bw_5ghz,
- + reg_info->phybitmap);
-
- ath11k_dbg(ab, ATH11K_DBG_WMI,
- "num_2ghz_reg_rules %d num_5ghz_reg_rules %d",
|