Ver código fonte

qcacld-3.0: Add ini to disable mcs 12 13 for 2.4 GHz 40 MHz SAP

Add ini to disable mcs 12 13 for SAP operating in
2.4 GHz with 40 MHz bandwidth.

Change-Id: I78ed90bf6bab80a8f81f7a0640b9aca9d2736f4d
CRs-Fixed: 3672437
Asutosh Mohapatra 1 ano atrás
pai
commit
3ba7cdeb68

+ 3 - 0
components/mlme/core/src/wlan_mlme_main.c

@@ -2198,6 +2198,9 @@ static void mlme_init_he_cap_in_cfg(struct wlan_objmgr_psoc *psoc,
 		QDF_GET_BITS(mcs_12_13,
 			     HE_MCS12_13_5G_INDEX * HE_MCS12_13_BITS,
 			     HE_MCS12_13_BITS);
+
+	mlme_cfg->he_caps.disable_sap_mcs_12_13 = cfg_get(psoc,
+						CFG_DISABLE_MCS_12_13_SAP);
 }
 #else
 static void mlme_init_he_cap_in_cfg(struct wlan_objmgr_psoc *psoc,

+ 25 - 1
components/mlme/dispatcher/inc/cfg_mlme_he_caps.h

@@ -855,6 +855,29 @@
 				CFG_VALUE_OR_DEFAULT, \
 				"He Configure MCS_12_13 bits")
 
+/*
+ * <ini>
+ * disable_mcs_12_13_sap - Bitmask to disable HE MCS 12 13 support for SAP
+ * @Min: 0
+ * @Max: 4095
+ * @Default: 0
+ *
+ * This ini is used to disable HE MCS_12_13 for SAP.
+ * Currently only support is present to disable 2.4 GHz 40 MHz SAP for value
+ * 2 i.e. 2nd bit set.
+ *
+ * Related: NA
+ *
+ * Usage: External
+ *
+ * </ini>
+ */
+#define CFG_DISABLE_MCS_12_13_SAP CFG_INI_UINT( \
+			"disable_mcs_12_13_sap", \
+			0, 4095, 0, \
+			CFG_VALUE_OR_DEFAULT, \
+			"Disable HE MCS_12_13 for SAP")
+
 #define CFG_HE_CAPS_ALL \
 	CFG(CFG_HE_CONTROL) \
 	CFG(CFG_HE_FRAGMENTATION) \
@@ -945,7 +968,8 @@
 	CFG(CFG_ENABLE_UL_MIMO) \
 	CFG(CFG_ENABLE_UL_OFDMA) \
 	CFG(CFG_HE_STA_OBSSPD) \
-	CFG(CFG_HE_MCS_12_13_SUPPORT)
+	CFG(CFG_HE_MCS_12_13_SUPPORT) \
+	CFG(CFG_DISABLE_MCS_12_13_SAP)
 
 #endif /* __CFG_MLME_HE_CAPS_H */
 

+ 2 - 0
components/mlme/dispatcher/inc/wlan_mlme_api.h

@@ -28,6 +28,8 @@
 #include <wlan_cmn.h>
 #include "sme_api.h"
 
+#define DISABLE_MCS_12_13_2G_40M 1
+
 #define ASSEMBLE_RATECODE_V1(_pream, _nss, _rate) \
 		(((1) << 28) | ((_pream) << 8) | ((_nss) << 5) | (_rate))
 

+ 2 - 0
components/mlme/dispatcher/inc/wlan_mlme_public_struct.h

@@ -1064,6 +1064,7 @@ struct wlan_mlme_qos {
  * @he_sta_obsspd:
  * @he_mcs_12_13_supp_2g:
  * @he_mcs_12_13_supp_5g:
+ * @disable_sap_mcs_12_13: Bitmap to disable he mcs 12 13 for SAP
  */
 struct wlan_mlme_he_caps {
 	tDot11fIEhe_cap dot11_he_cap;
@@ -1077,6 +1078,7 @@ struct wlan_mlme_he_caps {
 	uint32_t he_sta_obsspd;
 	uint16_t he_mcs_12_13_supp_2g;
 	uint16_t he_mcs_12_13_supp_5g;
+	uint32_t disable_sap_mcs_12_13;
 };
 #endif
 

+ 10 - 0
core/mac/src/pe/lim/lim_utils.c

@@ -7085,6 +7085,7 @@ void lim_intersect_sta_he_caps(struct mac_context *mac_ctx,
 {
 	tDot11fIEhe_cap *rcvd_he = &assoc_req->he_cap;
 	tDot11fIEhe_cap *peer_he = &sta_ds->he_config;
+	struct wlan_mlme_cfg *mlme_cfg = mac_ctx->mlme_cfg;
 
 	if (!sta_ds->mlmStaContext.he_capable)
 		return;
@@ -7095,6 +7096,15 @@ void lim_intersect_sta_he_caps(struct mac_context *mac_ctx,
 
 	lim_intersect_he_caps(rcvd_he, peer_he, session);
 
+	if ((mlme_cfg->he_caps.disable_sap_mcs_12_13 &
+	     BIT(DISABLE_MCS_12_13_2G_40M)) &&
+	    LIM_IS_AP_ROLE(session) &&
+	    wlan_reg_is_24ghz_ch_freq(session->curr_op_freq) &&
+	    session->ch_width == CH_WIDTH_40MHZ) {
+		sta_ds->he_mcs_12_13_map = 0;
+		return;
+	}
+
 	/* If MCS 12/13 is supported from assoc QCN IE */
 	if (assoc_req->qcn_ie.present &&
 	    assoc_req->qcn_ie.he_mcs13_attr.present) {

+ 10 - 4
core/mac/src/sys/legacy/src/utils/src/parser_api.c

@@ -1651,7 +1651,7 @@ static void populate_dot11f_qcn_ie_he_params(struct mac_context *mac,
 					     tDot11fIEqcn_ie *qcn_ie,
 					     uint8_t attr_id)
 {
-	uint16_t mcs_12_13_supp;
+	uint16_t mcs_12_13_supp = 0;
 
 	if (!lim_is_session_he_capable(pe_session))
 		return;
@@ -1659,10 +1659,16 @@ static void populate_dot11f_qcn_ie_he_params(struct mac_context *mac,
 	/* To fix WAPI IoT issue.*/
 	if (pe_session->encryptType == eSIR_ED_WPI)
 		return;
-	if (wlan_reg_is_24ghz_ch_freq(pe_session->curr_op_freq))
-		mcs_12_13_supp = mac->mlme_cfg->he_caps.he_mcs_12_13_supp_2g;
-	else
+
+	if (wlan_reg_is_24ghz_ch_freq(pe_session->curr_op_freq)) {
+		if (!(LIM_IS_AP_ROLE(pe_session) &&
+		      pe_session->ch_width == CH_WIDTH_40MHZ &&
+		      (mac->mlme_cfg->he_caps.disable_sap_mcs_12_13 &
+		       BIT(DISABLE_MCS_12_13_2G_40M))))
+			mcs_12_13_supp = mac->mlme_cfg->he_caps.he_mcs_12_13_supp_2g;
+	} else {
 		mcs_12_13_supp = mac->mlme_cfg->he_caps.he_mcs_12_13_supp_5g;
+	}
 
 	if (!mcs_12_13_supp)
 		return;