Эх сурвалжийг харах

qcacld-3.0: Add ini to configure SAP 11n max mcs

qcacld-2.0 to qcacld-3.0 propagation

Add support for configure host init SAP HT rate
upper bound.

Change-Id: If749f8a036d98d9070cb05170fa1e612fcb30e8a
CRs-Fixed: 1091897
lifeng 8 жил өмнө
parent
commit
13a89d7d81

+ 18 - 0
core/hdd/inc/wlan_hdd_cfg.h

@@ -10135,6 +10135,23 @@ enum hdd_external_acs_freq_band {
 #define CFG_EXTERNAL_ACS_FREQ_BAND_MAX      (HDD_EXTERNAL_ACS_FREQ_BAND_5GHZ)
 #define CFG_EXTERNAL_ACS_FREQ_BAND_DEFAULT  (HDD_EXTERNAL_ACS_FREQ_BAND_24GHZ)
 
+/*
+ * gSapMaxMCSForTxData - sap 11n max mcs
+ * @Min: 0
+ * @Max: 383
+ * @Default: 0
+ *
+ * This ini configure SAP 11n max mcs
+ *
+ * Usage: External
+ *
+ * </ini>
+ */
+#define CFG_SAP_MAX_MCS_FOR_TX_DATA         "gSapMaxMCSForTxData"
+#define CFG_SAP_MAX_MCS_FOR_TX_DATA_MIN     (0)
+#define CFG_SAP_MAX_MCS_FOR_TX_DATA_MAX     (383)
+#define CFG_SAP_MAX_MCS_FOR_TX_DATA_DEFAULT (0)
+
 /*
  * Type declarations
  */
@@ -10865,6 +10882,7 @@ struct hdd_config {
 	bool is_force_1x1;
 	uint8_t enable_rts_sifsbursting;
 	uint8_t max_mpdus_inampdu;
+	uint16_t sap_max_mcs_txdata;
 };
 
 #define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var))

+ 14 - 0
core/hdd/src/wlan_hdd_cfg.c

@@ -4368,6 +4368,13 @@ struct reg_table_entry g_registry_table[] = {
 		CFG_MAX_MPDUS_IN_AMPDU_DEFAULT,
 		CFG_MAX_MPDUS_IN_AMPDU_MIN,
 		CFG_MAX_MPDUS_IN_AMPDU_MAX),
+
+	REG_VARIABLE(CFG_SAP_MAX_MCS_FOR_TX_DATA, WLAN_PARAM_Integer,
+		struct hdd_config, sap_max_mcs_txdata,
+		VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+		CFG_SAP_MAX_MCS_FOR_TX_DATA_DEFAULT,
+		CFG_SAP_MAX_MCS_FOR_TX_DATA_MIN,
+		CFG_SAP_MAX_MCS_FOR_TX_DATA_MAX),
 };
 
 
@@ -7020,6 +7027,13 @@ bool hdd_update_config_cfg(hdd_context_t *hdd_ctx)
 		hdd_err("Couldn't pass on WNI_CFG_RATE_FOR_TX_MGMT to CCM");
 	}
 
+	if (sme_cfg_set_int(hdd_ctx->hHal, WNI_CFG_SAP_MAX_MCS_DATA,
+			    config->sap_max_mcs_txdata) ==
+			    QDF_STATUS_E_FAILURE) {
+		status = false;
+		hdd_err("Could not pass on WNI_CFG_SAP_MAX_MCS_DATA to CCM");
+	}
+
 	return status;
 }
 

+ 5 - 0
core/mac/inc/wni_cfg.h

@@ -317,6 +317,7 @@ enum {
 	WNI_CFG_HE_PPET,
 	WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT,
 	WNI_CFG_HE_STA_OBSSPD,
+	WNI_CFG_SAP_MAX_MCS_DATA,
 	/* Any new items to be added should be above this strictly */
 	CFG_PARAM_MAX_NUM
 };
@@ -1594,6 +1595,10 @@ enum {
 #define WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT_STAMAX    255
 #define WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT_STADEF    50
 
+#define WNI_CFG_SAP_MAX_MCS_DATA_STAMIN  0x0
+#define WNI_CFG_SAP_MAX_MCS_DATA_STAMAX  0x17f
+#define WNI_CFG_SAP_MAX_MCS_DATA_STADEF  0x0
+
 #define CFG_STA_MAGIC_DWORD    0xbeefbeef
 
 #endif

+ 4 - 0
core/mac/src/cfg/cfg_param_name.c

@@ -326,4 +326,8 @@ unsigned char *g_cfg_param_name[] = {
 	(unsigned char *)"MAX_HT_MCS_TX_DATA",
 	(unsigned char *)"DISABLE_ABG_RATE_TX_DATA",
 	(unsigned char *)"RATE_FOR_TX_MGMT",
+	(unsigned char *)"TGT_GTX_USR_CFG",
+	(unsigned char *)"ASSOC_STA_LIMIT_GO",
+	(unsigned char *)"ASSOC_STA_LIMIT_AP",
+	(unsigned char *)"SAP_MAX_MCS_DATA",
 };

+ 6 - 1
core/mac/src/cfg/cfg_proc_msg.c

@@ -1444,7 +1444,12 @@ cgstatic cfg_static[CFG_PARAM_MAX_NUM] = {
 	CFG_CTL_NTF_HAL,
 	WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT_STAMIN,
 	WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT_STAMAX,
-	WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT_STADEF}
+	WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT_STADEF},
+	{WNI_CFG_SAP_MAX_MCS_DATA,
+	CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT,
+	WNI_CFG_SAP_MAX_MCS_DATA_STAMIN,
+	WNI_CFG_SAP_MAX_MCS_DATA_STAMAX,
+	WNI_CFG_SAP_MAX_MCS_DATA_STADEF},
 };
 
 

+ 42 - 0
core/wma/src/wma_dev_if.c

@@ -3736,6 +3736,8 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta)
 	struct wma_target_req *msg;
 	bool peer_assoc_cnf = false;
 	void *soc = cds_get_context(QDF_MODULE_ID_SOC);
+	uint32_t mcs_limit, i, j;
+	uint8_t *rate_pos;
 
 	pdev = cds_get_context(QDF_MODULE_ID_TXRX);
 
@@ -3812,6 +3814,46 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta)
 
 	wmi_unified_send_txbf(wma, add_sta);
 
+	/*
+	 * Get MCS limit from ini configure, and map it to rate parameters
+	 * This will limit HT rate upper bound. CFG_CTRL_MASK is used to
+	 * check whether ini config is enabled and CFG_DATA_MASK to get the
+	 * MCS value.
+	 */
+#define CFG_CTRL_MASK              0xFF00
+#define CFG_DATA_MASK              0x00FF
+
+	if (wlan_cfg_get_int(wma->mac_context, WNI_CFG_SAP_MAX_MCS_DATA,
+				&mcs_limit) != eSIR_SUCCESS) {
+		mcs_limit = WNI_CFG_SAP_MAX_MCS_DATA_STADEF;
+	}
+
+	if (mcs_limit & CFG_CTRL_MASK) {
+		WMA_LOGD("%s: set mcs_limit %x", __func__, mcs_limit);
+
+		mcs_limit &= CFG_DATA_MASK;
+		rate_pos = (u_int8_t *)add_sta->supportedRates.supportedMCSSet;
+		for (i = 0, j = 0; i < MAX_SUPPORTED_RATES;) {
+			if (j < mcs_limit / 8) {
+				rate_pos[j] = 0xff;
+				j++;
+				i += 8;
+			} else if (j < mcs_limit / 8 + 1) {
+				if (i <= mcs_limit)
+					rate_pos[i / 8] |= 1 << (i % 8);
+				else
+					rate_pos[i / 8] &= ~(1 << (i % 8));
+				i++;
+
+				if (i >= (j + 1) * 8)
+					j++;
+			} else {
+				rate_pos[j++] = 0;
+				i += 8;
+			}
+		}
+	}
+
 	if (WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap,
 				    WMI_SERVICE_PEER_ASSOC_CONF)) {
 		peer_assoc_cnf = true;