浏览代码

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
Amruta Kulkarni 1 年之前
父节点
当前提交
28a296b921

+ 7 - 0
Kbuild

@@ -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

+ 4 - 0
Kconfig

@@ -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"

+ 14 - 0
configs/config_to_feature.h

@@ -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

+ 1 - 0
configs/pineapple_gki_peach_defconfig

@@ -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

+ 8 - 1
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -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,

+ 7 - 1
core/mac/src/sys/legacy/src/utils/src/parser_api.c

@@ -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;