qcacld-3.0: Advertise emlsr capability based on new hw modes

-Add check for new hw modes, while advertising emlsr capability
in mlo ie and assoc request.
-Add new config emlsr feature flag for ganges.

CRs-Fixed: 3636676
Change-Id: I13038efe4d5001d480ae24fe7da135474eb8a3f1
This commit is contained in:
Amruta Kulkarni 2023-10-09 14:07:35 -07:00 committed by Ravindra Konda
parent c4344f829f
commit 28a296b921
6 changed files with 41 additions and 2 deletions

7
Kbuild
View File

@ -4699,6 +4699,13 @@ CONFIG_WLAN_MAX_ML_BSS_LINKS ?= 1
endif
ccflags-y += -DWLAN_MAX_ML_BSS_LINKS=$(CONFIG_WLAN_MAX_ML_BSS_LINKS)
ifdef CONFIG_WLAN_FEATURE_EMLSR
CONFIG_WLAN_EMLSR_ENABLE ?= 1
else
CONFIG_WLAN_EMLSR_ENABLE ?= 0
endif
ccflags-y += -DWLAN_EMLSR_ENABLE=$(CONFIG_WLAN_EMLSR_ENABLE)
#Maximum pending commands for a vdev is calculated in vdev create handler
#by WLAN_SER_MAX_PENDING_CMDS/WLAN_SER_MAX_VDEVS. For SAP case, we will need
#to accommodate 32 Pending commands to handle multiple STA sending

View File

@ -2035,6 +2035,10 @@ config CNSS_ADRASTEA
bool "Enable CNSS_ADRASTEA"
default n
config WLAN_FEATURE_EMLSR
bool "Enable EMLSR feature"
default n
if CNSS_KIWI_V2
config CFG_BMISS_OFFLOAD_MAX_VDEV
int "Enable CFG_BMISS_OFFLOAD_MAX_VDEV"

View File

@ -2936,6 +2936,20 @@
#define WLAN_MAX_ML_BSS_LINKS CONFIG_WLAN_MAX_ML_BSS_LINKS
#endif
#if defined(CONFIG_WLAN_FEATURE_11BE_MLO) && defined(CONFIG_WLAN_FEATURE_EMLSR)
#ifndef CONFIG_WLAN_EMLSR_ENABLE
#define CONFIG_WLAN_EMLSR_ENABLE (1)
#endif
#else
#ifndef CONFIG_WLAN_EMLSR_ENABLE
#define CONFIG_WLAN_EMLSR_ENABLE (0)
#endif
#endif
#ifdef CONFIG_WLAN_EMLSR_ENABLE
#define WLAN_EMLSR_ENABLE CONFIG_WLAN_EMLSR_ENABLE
#endif
#ifdef CONFIG_WALT_GET_CPU_TAKEN_SUPPORT
#define WALT_GET_CPU_TAKEN_SUPPORT (1)
#endif

View File

@ -395,3 +395,4 @@ CONFIG_BCN_RATECODE_ENABLE=y
CONFIG_4_BYTES_TLV_TAG=y
CONFIG_WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET=y
CONFIG_WLAN_MULTI_CHIP_SUPPORT=y
CONFIG_WLAN_FEATURE_EMLSR=y

View File

@ -4502,6 +4502,7 @@ static void lim_copy_ml_partner_info_to_session(struct pe_session *session,
void lim_set_emlsr_caps(struct mac_context *mac_ctx, struct pe_session *session)
{
bool emlsr_cap, emlsr_allowed, emlsr_band_check, emlsr_enabled = false;
bool emlsr_aux_support = false;
/* Check if HW supports eMLSR mode */
emlsr_cap = policy_mgr_is_hw_emlsr_capable(mac_ctx->psoc);
@ -4515,8 +4516,11 @@ void lim_set_emlsr_caps(struct mac_context *mac_ctx, struct pe_session *session)
emlsr_band_check = lim_is_emlsr_band_supported(session);
emlsr_allowed = emlsr_cap && emlsr_enabled && emlsr_band_check;
emlsr_aux_support = emlsr_enabled && WLAN_EMLSR_ENABLE &&
wlan_mlme_is_aux_emlsr_support(mac_ctx->psoc,
WLAN_MLME_HW_MODE_MAX);
if (emlsr_allowed) {
if (emlsr_allowed || emlsr_aux_support) {
wlan_vdev_obj_lock(session->vdev);
wlan_vdev_mlme_cap_set(session->vdev, WLAN_VDEV_C_EMLSR_CAP);
wlan_vdev_obj_unlock(session->vdev);
@ -4525,6 +4529,9 @@ void lim_set_emlsr_caps(struct mac_context *mac_ctx, struct pe_session *session)
wlan_vdev_mlme_cap_clear(session->vdev, WLAN_VDEV_C_EMLSR_CAP);
wlan_vdev_obj_unlock(session->vdev);
}
pe_debug("eMLSR vdev cap: %d", emlsr_allowed);
pe_debug("eMLSR aux support: %d", emlsr_aux_support);
}
#else
static void lim_fill_ml_info(struct cm_vdev_join_req *req,

View File

@ -12895,6 +12895,7 @@ QDF_STATUS populate_dot11f_mlo_ie(struct mac_context *mac_ctx,
struct wlan_mlo_eml_cap eml_cap = {0};
uint16_t presence_bitmap = 0;
bool emlsr_cap, emlsr_enabled = false;
bool aux_emlsr_support = false;
if (!mac_ctx || !mlo_ie)
return QDF_STATUS_E_NULL_VALUE;
@ -12938,8 +12939,13 @@ QDF_STATUS populate_dot11f_mlo_ie(struct mac_context *mac_ctx,
/* Check if vendor command chooses eMLSR mode */
wlan_mlme_get_emlsr_mode_enabled(mac_ctx->psoc, &emlsr_enabled);
/* check if aux elmsr capable */
aux_emlsr_support = wlan_mlme_is_aux_emlsr_support(mac_ctx->psoc,
WLAN_MLME_HW_MODE_MAX);
/* Check if STA supports EMLSR and vendor command prefers EMLSR mode */
if (emlsr_cap && emlsr_enabled) {
if ((emlsr_cap && emlsr_enabled) ||
aux_emlsr_support) {
wlan_mlme_get_eml_params(psoc, &eml_cap);
mlo_ie->eml_capab_present = 1;
presence_bitmap |= WLAN_ML_BV_CTRL_PBM_EMLCAP_P;