qcacmn: Add 11BE wireless mode and NO11BE phybitmap

Extract the 11BE flags advertised by FW in WMI_SERVICE_READY_EXT2_EVENTID
and update the regulatory pdev wireless modes. The wireless mode is
currently represented as 'uint32_t' and all the 32 bits are exhausted.
To accommodate the new 11BE flags, change the data type of wireless_modes
from 'uint32_t' to 'uint64_t'.

Add a regulatory phymode 'REG_PHYMODE_11BE' in enum reg_phymode.

If the chip does not support 11BE phymode, FW advertises it via
WMI_REGULATORY_PHYBITMAP enum with a value of REGULATORY_PHYMODE_NO11BE.
Extract the phybitmap and store it in the regualtory
as 'REGULATORY_PHYMODE_NO11BE' bitmap.

CRs-Fixed: 2901260
Change-Id: I4ed3fc7c907b1f76e59efb347c747acea2a163b0
This commit is contained in:
Priyadarshnee Srinivasan
2021-04-08 16:03:54 +05:30
committed by snandini
parent 28de31d838
commit 2b51168ba8
12 changed files with 141 additions and 15 deletions

View File

@@ -9921,6 +9921,30 @@ static inline uint32_t convert_wireless_modes_tlv(uint32_t target_wireless_mode)
return wireless_modes;
}
/**
* convert_11be_phybitmap_to_reg_flags() - Convert 11BE phybitmap to
* to regulatory flags.
* @target_phybitmap: target phybitmap.
* @phybitmap: host internal REGULATORY_PHYMODE set based on target
* phybitmap.
*
* Return: None
*/
#ifdef WLAN_FEATURE_11BE
static void convert_11be_phybitmap_to_reg_flags(uint32_t target_phybitmap,
uint32_t *phybitmap)
{
if (target_phybitmap & WMI_REGULATORY_PHYMODE_NO11BE)
*phybitmap |= REGULATORY_PHYMODE_NO11BE;
}
#else
static void convert_11be_phybitmap_to_reg_flags(uint32_t target_phybitmap,
uint32_t *phybitmap)
{
}
#endif
/* convert_phybitmap_tlv() - Convert WMI_REGULATORY_PHYBITMAP values sent by
* target to host internal REGULATORY_PHYMODE values.
*
@@ -9952,13 +9976,61 @@ static uint32_t convert_phybitmap_tlv(uint32_t target_phybitmap)
if (target_phybitmap & WMI_REGULATORY_PHYMODE_NO11AX)
phybitmap |= REGULATORY_PHYMODE_NO11AX;
convert_11be_phybitmap_to_reg_flags(target_phybitmap, &phybitmap);
return phybitmap;
}
static inline uint32_t convert_wireless_modes_ext_tlv(
/**
* convert_11be_flags_to_modes_ext() - Convert 11BE wireless mode flag
* advertised by the target to wireless mode ext flags.
* @target_wireless_modes_ext: Target wireless mode
* @wireless_modes_ext: Variable to hold all the target wireless mode caps.
*
* Return: None
*/
#ifdef WLAN_FEATURE_11BE
static void convert_11be_flags_to_modes_ext(uint32_t target_wireless_modes_ext,
uint64_t *wireless_modes_ext)
{
if (target_wireless_modes_ext & REGDMN_MODE_U32_11BEG_EHT20)
*wireless_modes_ext |= WMI_HOST_REGDMN_MODE_11BEG_EHT20;
if (target_wireless_modes_ext & REGDMN_MODE_U32_11BEG_EHT40PLUS)
*wireless_modes_ext |= WMI_HOST_REGDMN_MODE_11BEG_EHT40PLUS;
if (target_wireless_modes_ext & REGDMN_MODE_U32_11BEG_EHT40MINUS)
*wireless_modes_ext |= WMI_HOST_REGDMN_MODE_11BEG_EHT40MINUS;
if (target_wireless_modes_ext & REGDMN_MODE_U32_11BEA_EHT20)
*wireless_modes_ext |= WMI_HOST_REGDMN_MODE_11BEA_EHT20;
if (target_wireless_modes_ext & REGDMN_MODE_U32_11BEA_EHT40PLUS)
*wireless_modes_ext |= WMI_HOST_REGDMN_MODE_11BEA_EHT40PLUS;
if (target_wireless_modes_ext & REGDMN_MODE_U32_11BEA_EHT40MINUS)
*wireless_modes_ext |= WMI_HOST_REGDMN_MODE_11BEA_EHT40MINUS;
if (target_wireless_modes_ext & REGDMN_MODE_U32_11BEA_EHT80)
*wireless_modes_ext |= WMI_HOST_REGDMN_MODE_11BEA_EHT80;
if (target_wireless_modes_ext & REGDMN_MODE_U32_11BEA_EHT160)
*wireless_modes_ext |= WMI_HOST_REGDMN_MODE_11BEA_EHT160;
if (target_wireless_modes_ext & REGDMN_MODE_U32_11BEA_EHT320)
*wireless_modes_ext |= WMI_HOST_REGDMN_MODE_11BEA_EHT320;
}
#else
static void convert_11be_flags_to_modes_ext(uint32_t target_wireless_modes_ext,
uint64_t *wireless_modes_ext)
{
}
#endif
static inline uint64_t convert_wireless_modes_ext_tlv(
uint32_t target_wireless_modes_ext)
{
uint32_t wireless_modes_ext = 0;
uint64_t wireless_modes_ext = 0;
wmi_debug("Target wireless mode: 0x%x", target_wireless_modes_ext);
@@ -9989,6 +10061,9 @@ static inline uint32_t convert_wireless_modes_ext_tlv(
if (target_wireless_modes_ext & REGDMN_MODE_U32_11AXA_HE80_80)
wireless_modes_ext |= WMI_HOST_REGDMN_MODE_11AXA_HE80_80;
convert_11be_flags_to_modes_ext(target_wireless_modes_ext,
&wireless_modes_ext);
return wireless_modes_ext;
}