Browse Source

qcacld-3.0: Add INI params to set edca min, max and aifs params

qcacld-2.0 to qcacld-3.0 propagation

Add INI params gEdcaVoCwmin, gEdcaViCwmin, gEdcaBkCwmin,
gEdcaBeCwmin, gEdcaVoCwmax, gEdcaViCwmax, gEdcaBkCwmax,
gEdcaBeCwmax, gEdcaVoAifs, gEdcaViAifs, gEdcaBkAifs and
gEdcaBeAifs to control edca params for STA mode.

These params will overwrite the values from AP only if
gEnableEdcaParams is set.

Change-Id: I1e688a67df320208416aba4ca40fd870a947e3be
CRs-Fixed: 996685
Abhishek Singh 9 years ago
parent
commit
10ecf58dc6

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

@@ -3023,6 +3023,90 @@ enum dot11p_mode {
 #define CFG_ENABLE_FATAL_EVENT_TRIGGER_MAX             (1)
 #define CFG_ENABLE_FATAL_EVENT_TRIGGER_DEFAULT         (1)
 
+/*
+ * If gEnableEdcaParams is set to 1, params gEdcaVoCwmin,
+ * gEdcaViCwmin, gEdcaBkCwmin, gEdcaBeCwmin, gEdcaVoCwmax,
+ * gEdcaViCwmax, gEdcaBkCwmax, gEdcaBeCwmax, gEdcaVoAifs,
+ * gEdcaViAifs, gEdcaBkAifs and gEdcaBeAifs values are used
+ * to overwrite the values received from AP
+ */
+#define CFG_ENABLE_EDCA_INI_NAME       "gEnableEdcaParams"
+#define CFG_ENABLE_EDCA_INI_MIN        (0)
+#define CFG_ENABLE_EDCA_INI_MAX        (1)
+#define CFG_ENABLE_EDCA_INI_DEFAULT    (0)
+
+/* Cwmin value for EDCA_AC_VO. CWVomin = 2^gEdcaVoCwmin -1 */
+#define CFG_EDCA_VO_CWMIN_VALUE_NAME      "gEdcaVoCwmin"
+#define CFG_EDCA_VO_CWMIN_VALUE_MIN       (0x0)
+#define CFG_EDCA_VO_CWMIN_VALUE_MAX       (15)
+#define CFG_EDCA_VO_CWMIN_VALUE_DEFAULT   (2)
+
+/* Cwmin value for EDCA_AC_VI. CWVimin = 2^gEdcaViCwmin -1 */
+#define CFG_EDCA_VI_CWMIN_VALUE_NAME      "gEdcaViCwmin"
+#define CFG_EDCA_VI_CWMIN_VALUE_MIN       (0x0)
+#define CFG_EDCA_VI_CWMIN_VALUE_MAX       (15)
+#define CFG_EDCA_VI_CWMIN_VALUE_DEFAULT   (3)
+
+/* Cwmin value for EDCA_AC_BK. CWBkmin = 2^gEdcaBkCwmin -1 */
+#define CFG_EDCA_BK_CWMIN_VALUE_NAME      "gEdcaBkCwmin"
+#define CFG_EDCA_BK_CWMIN_VALUE_MIN       (0x0)
+#define CFG_EDCA_BK_CWMIN_VALUE_MAX       (15)
+#define CFG_EDCA_BK_CWMIN_VALUE_DEFAULT   (4)
+
+/* Cwmin value for EDCA_AC_BE. CWBemin = 2^gEdcaBeCwmin -1 */
+#define CFG_EDCA_BE_CWMIN_VALUE_NAME      "gEdcaBeCwmin"
+#define CFG_EDCA_BE_CWMIN_VALUE_MIN       (0x0)
+#define CFG_EDCA_BE_CWMIN_VALUE_MAX       (15)
+#define CFG_EDCA_BE_CWMIN_VALUE_DEFAULT   (4)
+
+/* Cwmax value for EDCA_AC_VO. CWVomax = 2^gEdcaVoCwmax -1 */
+#define CFG_EDCA_VO_CWMAX_VALUE_NAME      "gEdcaVoCwmax"
+#define CFG_EDCA_VO_CWMAX_VALUE_MIN       (0)
+#define CFG_EDCA_VO_CWMAX_VALUE_MAX       (15)
+#define CFG_EDCA_VO_CWMAX_VALUE_DEFAULT   (3)
+
+/* Cwmax value for EDCA_AC_VI. CWVimax = 2^gEdcaViCwmax -1 */
+#define CFG_EDCA_VI_CWMAX_VALUE_NAME      "gEdcaViCwmax"
+#define CFG_EDCA_VI_CWMAX_VALUE_MIN       (0)
+#define CFG_EDCA_VI_CWMAX_VALUE_MAX       (15)
+#define CFG_EDCA_VI_CWMAX_VALUE_DEFAULT   (4)
+
+/* Cwmax value for EDCA_AC_BK. CWBkmax = 2^gEdcaBkCwmax -1 */
+#define CFG_EDCA_BK_CWMAX_VALUE_NAME      "gEdcaBkCwmax"
+#define CFG_EDCA_BK_CWMAX_VALUE_MIN       (0)
+#define CFG_EDCA_BK_CWMAX_VALUE_MAX       (15)
+#define CFG_EDCA_BK_CWMAX_VALUE_DEFAULT   (10)
+
+/* Cwmax value for EDCA_AC_BE. CWBemax = 2^gEdcaBeCwmax -1 */
+#define CFG_EDCA_BE_CWMAX_VALUE_NAME      "gEdcaBeCwmax"
+#define CFG_EDCA_BE_CWMAX_VALUE_MIN       (0)
+#define CFG_EDCA_BE_CWMAX_VALUE_MAX       (15)
+#define CFG_EDCA_BE_CWMAX_VALUE_DEFAULT   (10)
+
+/* Aifs value for EDCA_AC_VO.*/
+#define CFG_EDCA_VO_AIFS_VALUE_NAME       "gEdcaVoAifs"
+#define CFG_EDCA_VO_AIFS_VALUE_MIN        (0)
+#define CFG_EDCA_VO_AIFS_VALUE_MAX        (15)
+#define CFG_EDCA_VO_AIFS_VALUE_DEFAULT    (2)
+
+/* Aifs value for EDCA_AC_VI.*/
+#define CFG_EDCA_VI_AIFS_VALUE_NAME       "gEdcaViAifs"
+#define CFG_EDCA_VI_AIFS_VALUE_MIN        (0)
+#define CFG_EDCA_VI_AIFS_VALUE_MAX        (15)
+#define CFG_EDCA_VI_AIFS_VALUE_DEFAULT    (2)
+
+/* Aifs value for EDCA_AC_BK.*/
+#define CFG_EDCA_BK_AIFS_VALUE_NAME       "gEdcaBkAifs"
+#define CFG_EDCA_BK_AIFS_VALUE_MIN        (0)
+#define CFG_EDCA_BK_AIFS_VALUE_MAX        (15)
+#define CFG_EDCA_BK_AIFS_VALUE_DEFAULT    (7)
+
+/* Aifs value for EDCA_AC_BE.*/
+#define CFG_EDCA_BE_AIFS_VALUE_NAME       "gEdcaBeAifs"
+#define CFG_EDCA_BE_AIFS_VALUE_MIN        (0)
+#define CFG_EDCA_BE_AIFS_VALUE_MAX        (15)
+#define CFG_EDCA_BE_AIFS_VALUE_DEFAULT    (3)
+
 /*---------------------------------------------------------------------------
    Type declarations
    -------------------------------------------------------------------------*/
@@ -3627,6 +3711,19 @@ struct hdd_config {
 	uint32_t roam_dense_rssi_thresh_offset;
 	bool ignore_peer_ht_opmode;
 	uint32_t roam_dense_min_aps;
+	bool enable_edca_params;
+	uint32_t edca_vo_cwmin;
+	uint32_t edca_vi_cwmin;
+	uint32_t edca_bk_cwmin;
+	uint32_t edca_be_cwmin;
+	uint32_t edca_vo_cwmax;
+	uint32_t edca_vi_cwmax;
+	uint32_t edca_bk_cwmax;
+	uint32_t edca_be_cwmax;
+	uint32_t edca_vo_aifs;
+	uint32_t edca_vi_aifs;
+	uint32_t edca_bk_aifs;
+	uint32_t edca_be_aifs;
 	bool enable_fatal_event;
 	bool bpf_enabled;
 };

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

@@ -3795,6 +3795,109 @@ REG_TABLE_ENTRY g_registry_table[] = {
 			CFG_ENABLE_FATAL_EVENT_TRIGGER_MIN,
 			CFG_ENABLE_FATAL_EVENT_TRIGGER_MAX),
 
+	REG_VARIABLE(CFG_ENABLE_EDCA_INI_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, enable_edca_params,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_ENABLE_EDCA_INI_DEFAULT,
+			CFG_ENABLE_EDCA_INI_MIN,
+			CFG_ENABLE_EDCA_INI_MAX),
+
+	REG_VARIABLE(CFG_EDCA_VO_CWMIN_VALUE_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, edca_vo_cwmin,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_EDCA_VO_CWMIN_VALUE_DEFAULT,
+			CFG_EDCA_VO_CWMIN_VALUE_MIN,
+			CFG_EDCA_VO_CWMIN_VALUE_MAX),
+
+	REG_VARIABLE(CFG_EDCA_VI_CWMIN_VALUE_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, edca_vi_cwmin,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_EDCA_VI_CWMIN_VALUE_DEFAULT,
+			CFG_EDCA_VI_CWMIN_VALUE_MIN,
+			CFG_EDCA_VI_CWMIN_VALUE_MAX),
+
+	REG_VARIABLE(CFG_EDCA_BK_CWMIN_VALUE_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, edca_bk_cwmin,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_EDCA_BK_CWMIN_VALUE_DEFAULT,
+			CFG_EDCA_BK_CWMIN_VALUE_MIN,
+			CFG_EDCA_BK_CWMIN_VALUE_MAX),
+
+	REG_VARIABLE(CFG_EDCA_BE_CWMIN_VALUE_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, edca_be_cwmin,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_EDCA_BE_CWMIN_VALUE_DEFAULT,
+			CFG_EDCA_BE_CWMIN_VALUE_MIN,
+			CFG_EDCA_BE_CWMIN_VALUE_MAX),
+
+	REG_VARIABLE(CFG_EDCA_VO_CWMAX_VALUE_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, edca_vo_cwmax,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_EDCA_VO_CWMAX_VALUE_DEFAULT,
+			CFG_EDCA_VO_CWMAX_VALUE_MIN,
+			CFG_EDCA_VO_CWMAX_VALUE_MAX),
+
+	REG_VARIABLE(CFG_EDCA_VI_CWMAX_VALUE_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, edca_vi_cwmax,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_EDCA_VI_CWMAX_VALUE_DEFAULT,
+			CFG_EDCA_VI_CWMAX_VALUE_MIN,
+			CFG_EDCA_VI_CWMAX_VALUE_MAX),
+
+	REG_VARIABLE(CFG_EDCA_BK_CWMAX_VALUE_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, edca_bk_cwmax,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_EDCA_BK_CWMAX_VALUE_DEFAULT,
+			CFG_EDCA_BK_CWMAX_VALUE_MIN,
+			CFG_EDCA_BK_CWMAX_VALUE_MAX),
+
+	REG_VARIABLE(CFG_EDCA_BE_CWMAX_VALUE_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, edca_be_cwmax,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_EDCA_BE_CWMAX_VALUE_DEFAULT,
+			CFG_EDCA_BE_CWMAX_VALUE_MIN,
+			CFG_EDCA_BE_CWMAX_VALUE_MAX),
+
+	REG_VARIABLE(CFG_EDCA_VO_AIFS_VALUE_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, edca_vo_aifs,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_EDCA_VO_AIFS_VALUE_DEFAULT,
+			CFG_EDCA_VO_AIFS_VALUE_MIN,
+			CFG_EDCA_VO_AIFS_VALUE_MAX),
+
+	REG_VARIABLE(CFG_EDCA_VI_AIFS_VALUE_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, edca_vi_aifs,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_EDCA_VI_AIFS_VALUE_DEFAULT,
+			CFG_EDCA_VI_AIFS_VALUE_MIN,
+			CFG_EDCA_VI_AIFS_VALUE_MAX),
+
+	REG_VARIABLE(CFG_EDCA_BK_AIFS_VALUE_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, edca_bk_aifs,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_EDCA_BK_AIFS_VALUE_DEFAULT,
+			CFG_EDCA_BK_AIFS_VALUE_MIN,
+			CFG_EDCA_BK_AIFS_VALUE_MAX),
+
+	REG_VARIABLE(CFG_EDCA_BE_AIFS_VALUE_NAME, WLAN_PARAM_Integer,
+			struct hdd_config, edca_be_aifs,
+			VAR_FLAGS_OPTIONAL |
+			VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+			CFG_EDCA_BE_AIFS_VALUE_DEFAULT,
+			CFG_EDCA_BE_AIFS_VALUE_MIN,
+			CFG_EDCA_BE_AIFS_VALUE_MAX),
 
 };
 
@@ -5399,6 +5502,49 @@ void hdd_cfg_print(hdd_context_t *pHddCtx)
 		CFG_IDLE_TIME_NAME,
 		pHddCtx->config->idle_time_conc);
 
+
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_ENABLE_EDCA_INI_NAME,
+		pHddCtx->config->enable_edca_params);
+
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_EDCA_VO_CWMIN_VALUE_NAME,
+		pHddCtx->config->edca_vo_cwmin);
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_EDCA_VI_CWMIN_VALUE_NAME,
+		pHddCtx->config->edca_vi_cwmin);
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_EDCA_BK_CWMIN_VALUE_NAME,
+		pHddCtx->config->edca_bk_cwmin);
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_EDCA_BE_CWMIN_VALUE_NAME,
+		pHddCtx->config->edca_be_cwmin);
+
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_EDCA_VO_CWMAX_VALUE_NAME,
+		pHddCtx->config->edca_vo_cwmax);
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_EDCA_VI_CWMAX_VALUE_NAME,
+		pHddCtx->config->edca_vi_cwmax);
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_EDCA_BK_CWMAX_VALUE_NAME,
+		pHddCtx->config->edca_bk_cwmax);
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_EDCA_BE_CWMAX_VALUE_NAME,
+		pHddCtx->config->edca_be_cwmax);
+
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_EDCA_VO_AIFS_VALUE_NAME,
+		pHddCtx->config->edca_vo_aifs);
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_EDCA_VI_AIFS_VALUE_NAME,
+		pHddCtx->config->edca_vi_aifs);
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_EDCA_BK_AIFS_VALUE_NAME,
+		pHddCtx->config->edca_bk_aifs);
+	hdd_info("Name = [%s] Value = [%u]",
+		CFG_EDCA_BE_AIFS_VALUE_NAME,
+		pHddCtx->config->edca_be_aifs);
 }
 
 
@@ -6909,6 +7055,36 @@ QDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx)
 	smeConfig->csrConfig.enable_fatal_event =
 			pConfig->enable_fatal_event;
 
+	smeConfig->csrConfig.enable_edca_params =
+			pConfig->enable_edca_params;
+
+	smeConfig->csrConfig.edca_vo_cwmin =
+			pConfig->edca_vo_cwmin;
+	smeConfig->csrConfig.edca_vi_cwmin =
+			pConfig->edca_vi_cwmin;
+	smeConfig->csrConfig.edca_bk_cwmin =
+			pConfig->edca_bk_cwmin;
+	smeConfig->csrConfig.edca_be_cwmin =
+			pConfig->edca_be_cwmin;
+
+	smeConfig->csrConfig.edca_vo_cwmax =
+			pConfig->edca_vo_cwmax;
+	smeConfig->csrConfig.edca_vi_cwmax =
+			pConfig->edca_vi_cwmax;
+	smeConfig->csrConfig.edca_bk_cwmax =
+			pConfig->edca_bk_cwmax;
+	smeConfig->csrConfig.edca_be_cwmax =
+			pConfig->edca_be_cwmax;
+
+	smeConfig->csrConfig.edca_vo_aifs =
+			pConfig->edca_vo_aifs;
+	smeConfig->csrConfig.edca_vi_aifs =
+			pConfig->edca_vi_aifs;
+	smeConfig->csrConfig.edca_bk_aifs =
+			pConfig->edca_bk_aifs;
+	smeConfig->csrConfig.edca_be_aifs =
+			pConfig->edca_be_aifs;
+
 	status = sme_update_config(pHddCtx->hHal, smeConfig);
 	if (!QDF_IS_STATUS_SUCCESS(status)) {
 		hddLog(LOGE, "sme_update_config() return failure %d",

+ 36 - 6
core/mac/src/pe/sch/sch_beacon_process.c

@@ -924,15 +924,44 @@ sch_beacon_edca_process(tpAniSirGlobal pMac, tSirMacEdcaParamSetIE *edca,
 	host_log_qos_edca_pkt_type *log_ptr = NULL;
 #endif /* FEATURE_WLAN_DIAG_SUPPORT */
 
-	PELOG1(sch_log(pMac, LOG1,
+	sch_log(pMac, LOG2,
 		FL("Updating parameter set count: Old %d ---> new %d"),
-		session->gLimEdcaParamSetCount, edca->qosInfo.count);)
+		session->gLimEdcaParamSetCount, edca->qosInfo.count);
 
 	session->gLimEdcaParamSetCount = edca->qosInfo.count;
 	session->gLimEdcaParams[EDCA_AC_BE] = edca->acbe;
 	session->gLimEdcaParams[EDCA_AC_BK] = edca->acbk;
 	session->gLimEdcaParams[EDCA_AC_VI] = edca->acvi;
 	session->gLimEdcaParams[EDCA_AC_VO] = edca->acvo;
+
+	if (pMac->roam.configParam.enable_edca_params) {
+		session->gLimEdcaParams[EDCA_AC_VO].aci.aifsn =
+			pMac->roam.configParam.edca_vo_aifs;
+		session->gLimEdcaParams[EDCA_AC_VI].aci.aifsn =
+			pMac->roam.configParam.edca_vi_aifs;
+		session->gLimEdcaParams[EDCA_AC_BK].aci.aifsn =
+			pMac->roam.configParam.edca_bk_aifs;
+		session->gLimEdcaParams[EDCA_AC_BE].aci.aifsn =
+			pMac->roam.configParam.edca_be_aifs;
+
+		session->gLimEdcaParams[EDCA_AC_VO].cw.min =
+			pMac->roam.configParam.edca_vo_cwmin;
+		session->gLimEdcaParams[EDCA_AC_VI].cw.min =
+			pMac->roam.configParam.edca_vi_cwmin;
+		session->gLimEdcaParams[EDCA_AC_BK].cw.min =
+			pMac->roam.configParam.edca_bk_cwmin;
+		session->gLimEdcaParams[EDCA_AC_BE].cw.min =
+			pMac->roam.configParam.edca_be_cwmin;
+
+		session->gLimEdcaParams[EDCA_AC_VO].cw.max =
+			pMac->roam.configParam.edca_vo_cwmax;
+		session->gLimEdcaParams[EDCA_AC_VI].cw.max =
+			pMac->roam.configParam.edca_vi_cwmax;
+		session->gLimEdcaParams[EDCA_AC_BK].cw.max =
+			pMac->roam.configParam.edca_bk_cwmax;
+		session->gLimEdcaParams[EDCA_AC_BE].cw.max =
+			pMac->roam.configParam.edca_be_cwmax;
+	}
 #ifdef FEATURE_WLAN_DIAG_SUPPORT
 	WLAN_HOST_DIAG_LOG_ALLOC(log_ptr, host_log_qos_edca_pkt_type,
 				 LOG_WLAN_QOS_EDCA_C);
@@ -967,16 +996,17 @@ sch_beacon_edca_process(tpAniSirGlobal pMac, tSirMacEdcaParamSetIE *edca,
 	}
 	WLAN_HOST_DIAG_LOG_REPORT(log_ptr);
 #endif /* FEATURE_WLAN_DIAG_SUPPORT */
-	PELOG1(sch_log(pMac, LOGE,
-	       FL("Updating Local EDCA Params(gLimEdcaParams) to: "));)
+	sch_log(pMac, LOG1,
+		FL("Edsa param enabled in ini %d. Updating Local EDCA Params(gLimEdcaParams) to: "),
+		pMac->roam.configParam.enable_edca_params);
 	for (i = 0; i < MAX_NUM_AC; i++) {
-		PELOG1(sch_log(pMac, LOG1,
+		sch_log(pMac, LOG1,
 		       FL("AC[%d]:  AIFSN: %d, ACM %d, CWmin %d, CWmax %d, TxOp %d"),
 		       i, session->gLimEdcaParams[i].aci.aifsn,
 		       session->gLimEdcaParams[i].aci.acm,
 		       session->gLimEdcaParams[i].cw.min,
 		       session->gLimEdcaParams[i].cw.max,
-		       session->gLimEdcaParams[i].txoplimit);)
+		       session->gLimEdcaParams[i].txoplimit);
 	}
 	return eSIR_SUCCESS;
 }

+ 13 - 0
core/sme/inc/csr_api.h

@@ -1230,6 +1230,19 @@ typedef struct tagCsrConfigParam {
 	uint32_t obss_active_dwelltime;
 	uint32_t obss_passive_dwelltime;
 	bool ignore_peer_ht_opmode;
+	bool enable_edca_params;
+	uint32_t edca_vo_cwmin;
+	uint32_t edca_vi_cwmin;
+	uint32_t edca_bk_cwmin;
+	uint32_t edca_be_cwmin;
+	uint32_t edca_vo_cwmax;
+	uint32_t edca_vi_cwmax;
+	uint32_t edca_bk_cwmax;
+	uint32_t edca_be_cwmax;
+	uint32_t edca_vo_aifs;
+	uint32_t edca_vi_aifs;
+	uint32_t edca_bk_aifs;
+	uint32_t edca_be_aifs;
 	bool enable_fatal_event;
 } tCsrConfigParam;
 

+ 13 - 0
core/sme/inc/csr_internal.h

@@ -649,6 +649,19 @@ typedef struct tagCsrConfig {
 	uint32_t obss_active_dwelltime;
 	uint32_t obss_passive_dwelltime;
 	bool ignore_peer_ht_opmode;
+	bool enable_edca_params;
+	uint32_t edca_vo_cwmin;
+	uint32_t edca_vi_cwmin;
+	uint32_t edca_bk_cwmin;
+	uint32_t edca_be_cwmin;
+	uint32_t edca_vo_cwmax;
+	uint32_t edca_vi_cwmax;
+	uint32_t edca_bk_cwmax;
+	uint32_t edca_be_cwmax;
+	uint32_t edca_vo_aifs;
+	uint32_t edca_vi_aifs;
+	uint32_t edca_bk_aifs;
+	uint32_t edca_be_aifs;
 	bool enable_fatal_event;
 } tCsrConfig;
 

+ 34 - 0
core/sme/src/csr/csr_api_roam.c

@@ -2356,6 +2356,23 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac,
 			pParam->early_stop_scan_min_threshold;
 		pMac->roam.configParam.early_stop_scan_max_threshold =
 			pParam->early_stop_scan_max_threshold;
+		pMac->roam.configParam.enable_edca_params =
+			pParam->enable_edca_params;
+		pMac->roam.configParam.edca_vo_cwmin = pParam->edca_vo_cwmin;
+		pMac->roam.configParam.edca_vi_cwmin = pParam->edca_vi_cwmin;
+		pMac->roam.configParam.edca_bk_cwmin = pParam->edca_bk_cwmin;
+		pMac->roam.configParam.edca_be_cwmin = pParam->edca_be_cwmin;
+
+		pMac->roam.configParam.edca_vo_cwmax = pParam->edca_vo_cwmax;
+		pMac->roam.configParam.edca_vi_cwmax = pParam->edca_vi_cwmax;
+		pMac->roam.configParam.edca_bk_cwmax = pParam->edca_bk_cwmax;
+		pMac->roam.configParam.edca_be_cwmax = pParam->edca_be_cwmax;
+
+		pMac->roam.configParam.edca_vo_aifs = pParam->edca_vo_aifs;
+		pMac->roam.configParam.edca_vi_aifs = pParam->edca_vi_aifs;
+		pMac->roam.configParam.edca_bk_aifs = pParam->edca_bk_aifs;
+		pMac->roam.configParam.edca_be_aifs = pParam->edca_be_aifs;
+
 		pMac->roam.configParam.enable_fatal_event =
 			pParam->enable_fatal_event;
 
@@ -2543,6 +2560,23 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam)
 	pParam->enableHtSmps = pMac->roam.configParam.enableHtSmps;
 	pParam->htSmps = pMac->roam.configParam.htSmps;
 	pParam->send_smps_action = pMac->roam.configParam.send_smps_action;
+
+	pParam->enable_edca_params =
+		pMac->roam.configParam.enable_edca_params;
+	pParam->edca_vo_cwmin = pMac->roam.configParam.edca_vo_cwmin;
+	pParam->edca_vi_cwmin = pMac->roam.configParam.edca_vi_cwmin;
+	pParam->edca_bk_cwmin = pMac->roam.configParam.edca_bk_cwmin;
+	pParam->edca_be_cwmin = pMac->roam.configParam.edca_be_cwmin;
+
+	pParam->edca_vo_cwmax = pMac->roam.configParam.edca_vo_cwmax;
+	pParam->edca_vi_cwmax = pMac->roam.configParam.edca_vi_cwmax;
+	pParam->edca_bk_cwmax = pMac->roam.configParam.edca_bk_cwmax;
+	pParam->edca_be_cwmax = pMac->roam.configParam.edca_be_cwmax;
+
+	pParam->edca_vo_aifs = pMac->roam.configParam.edca_vo_aifs;
+	pParam->edca_vi_aifs = pMac->roam.configParam.edca_vi_aifs;
+	pParam->edca_bk_aifs = pMac->roam.configParam.edca_bk_aifs;
+	pParam->edca_be_aifs = pMac->roam.configParam.edca_be_aifs;
 	pParam->enable_fatal_event =
 		pMac->roam.configParam.enable_fatal_event;