summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Zhang <paulz@codeaurora.org>2019-10-14 14:06:34 +0800
committernshrivas <nshrivas@codeaurora.org>2019-12-03 20:28:08 -0800
commitc134153efec09d752b23a44f917a54b0c4b3aecb (patch)
tree5e8c13efbbd5fbaf4c8c597da4d0ea428942ff3a
parent01b7ae36bb6f63756fea35e0289c300a8cda31b9 (diff)
qcacld-3.0: Add ini to disable aggressive EDCA config
Add action_oui ini gActionOUIDisableAggressiveEDCA to identify peers for which aggressive EDCA configuration causes some IOT issues. Change-Id: Ifea0c224cef2378727c9f78d8b571ea9c57bb662 CRs-Fixed: 2507191
-rw-r--r--core/hdd/inc/wlan_hdd_cfg.h27
-rw-r--r--core/hdd/src/wlan_hdd_cfg.c42
-rw-r--r--core/mac/inc/ani_global.h4
-rw-r--r--core/mac/src/pe/sch/sch_beacon_process.c3
-rw-r--r--core/sme/src/csr/csr_api_roam.c9
5 files changed, 69 insertions, 16 deletions
diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h
index 09b887cdb178..11817f9704af 100644
--- a/core/hdd/inc/wlan_hdd_cfg.h
+++ b/core/hdd/inc/wlan_hdd_cfg.h
@@ -12721,6 +12721,32 @@ enum hw_filter_mode {
#define CFG_ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN_NAME "gActionOUIConnect1x1with1TxRxChain"
#define CFG_ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN_DEFAULT "001018 06 02FFF0040000 BC 21 40 001018 06 02FFF0050000 BC 21 40 001018 06 02FFF4050000 BC 21 40"
+/*
+ * <ini>
+ * gActionOUIDisableAggressiveEDCA - Used to specify action OUIs to control
+ * EDCA configuration when join the candidate AP
+ *
+ * This ini is used to specify AP OUIs. The station's EDCA should follow the
+ * APs' when connecting to those AP, even if the gEnableEdcaParams is set.
+ * For example, it follows the AP's EDCA whose OUI is 0050F2 with the
+ * following setting:
+ * gActionOUIDisableAggressiveEDCA=0050F2 00 01
+ * Explain: 0050F2: OUI
+ * 00: data length is 0
+ * 01: info mask, only OUI present in Info mask
+ * Refer to gEnableActionOUI for more detail about the format.
+ *
+ * Related: gEnableEdcaParams, gEnableActionOUI
+ *
+ * Supported Feature: Action OUIs
+ *
+ * Usage: External
+ *
+ * </ini>
+ */
+#define CFG_ACTION_OUI_DISABLE_AGGRESSIVE_EDCA "gActionOUIDisableAggressiveEDCA"
+#define CFG_ACTION_OUI_DISABLE_AGGRESSIVE_EDCA_DEFAULT ""
+
/* End of action oui inis */
/*
@@ -16400,6 +16426,7 @@ struct hdd_config {
uint8_t action_oui_ito_alternate[MAX_ACTION_OUI_STRING_LEN];
uint8_t action_oui_switch_to_11n[MAX_ACTION_OUI_STRING_LEN];
uint8_t action_oui_connect_1x1_with_1_chain[MAX_ACTION_OUI_STRING_LEN];
+ uint8_t action_oui_disable_aggressive_edca[MAX_ACTION_OUI_STRING_LEN];
uint8_t rssi_weightage;
uint8_t ht_caps_weightage;
uint8_t vht_caps_weightage;
diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c
index 2f32051f1764..edda70828e15 100644
--- a/core/hdd/src/wlan_hdd_cfg.c
+++ b/core/hdd/src/wlan_hdd_cfg.c
@@ -5100,6 +5100,12 @@ struct reg_table_entry g_registry_table[] = {
VAR_FLAGS_OPTIONAL,
(void *)CFG_ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN_DEFAULT),
+ REG_VARIABLE_STRING(CFG_ACTION_OUI_DISABLE_AGGRESSIVE_EDCA,
+ WLAN_PARAM_String,
+ struct hdd_config, action_oui_disable_aggressive_edca,
+ VAR_FLAGS_OPTIONAL,
+ (void *)CFG_ACTION_OUI_DISABLE_AGGRESSIVE_EDCA_DEFAULT),
+
REG_VARIABLE(CFG_DTIM_1CHRX_ENABLE_NAME, WLAN_PARAM_Integer,
struct hdd_config, enable_dtim_1chrx,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -6829,32 +6835,36 @@ static void hdd_cfg_print_action_oui(hdd_context_t *hdd_ctx)
struct hdd_config *config = hdd_ctx->config;
hdd_debug("Name = [%s] value = [%u]",
- CFG_ENABLE_ACTION_OUI,
- config->enable_action_oui);
+ CFG_ENABLE_ACTION_OUI,
+ config->enable_action_oui);
hdd_debug("Name = [%s] value = [%s]",
- CFG_ACTION_OUI_CONNECT_1X1_NAME,
- config->action_oui_connect_1x1);
+ CFG_ACTION_OUI_CONNECT_1X1_NAME,
+ config->action_oui_connect_1x1);
hdd_debug("Name = [%s] value = [%s]",
- CFG_ACTION_OUI_ITO_EXTENSION_NAME,
- config->action_oui_ito_extension);
+ CFG_ACTION_OUI_ITO_EXTENSION_NAME,
+ config->action_oui_ito_extension);
hdd_debug("Name = [%s] value = [%s]",
- CFG_ACTION_OUI_CCKM_1X1_NAME,
- config->action_oui_cckm_1x1);
+ CFG_ACTION_OUI_CCKM_1X1_NAME,
+ config->action_oui_cckm_1x1);
hdd_debug("Name = [%s] value = [%s]",
- CFG_ACTION_OUI_ITO_ALTERNATE_NAME,
- config->action_oui_ito_alternate);
+ CFG_ACTION_OUI_ITO_ALTERNATE_NAME,
+ config->action_oui_ito_alternate);
hdd_debug("Name = [%s] value = [%s]",
- CFG_ACTION_OUI_SWITCH_TO_11N_MODE_NAME,
- config->action_oui_switch_to_11n);
+ CFG_ACTION_OUI_SWITCH_TO_11N_MODE_NAME,
+ config->action_oui_switch_to_11n);
hdd_debug("Name = [%s] value = [%s]",
- CFG_ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN_NAME,
- config->action_oui_connect_1x1_with_1_chain);
+ CFG_ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN_NAME,
+ config->action_oui_connect_1x1_with_1_chain);
+
+ hdd_debug("Name = [%s] value = [%s]",
+ CFG_ACTION_OUI_DISABLE_AGGRESSIVE_EDCA,
+ config->action_oui_disable_aggressive_edca);
}
@@ -9964,6 +9974,10 @@ void hdd_set_all_sme_action_ouis(hdd_context_t *hdd_ctx)
hdd_set_sme_action_oui(hdd_ctx, ini_string,
WMI_ACTION_OUI_CONNECT_1x1_WITH_1_CHAIN);
+ ini_string = config->action_oui_disable_aggressive_edca;
+ ini_string[MAX_ACTION_OUI_STRING_LEN - 1] = '\0';
+ hdd_set_sme_action_oui(hdd_ctx, ini_string,
+ WMI_ACTION_OUI_DISABLE_AGGRESSIVE_EDCA);
}
/* End of action oui functions */
diff --git a/core/mac/inc/ani_global.h b/core/mac/inc/ani_global.h
index bfb3d7cb2476..9e4866866985 100644
--- a/core/mac/inc/ani_global.h
+++ b/core/mac/inc/ani_global.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -1016,6 +1016,8 @@ typedef struct sAniSirGlobal {
/* 11k Offload Support */
bool is_11k_offload_supported;
+ /* if true, it is forced to follow the AP's edca */
+ bool follow_ap_edca;
uint32_t peer_rssi;
uint32_t peer_txrate;
uint32_t peer_rxrate;
diff --git a/core/mac/src/pe/sch/sch_beacon_process.c b/core/mac/src/pe/sch/sch_beacon_process.c
index 787e43a0a545..be88a0a11551 100644
--- a/core/mac/src/pe/sch/sch_beacon_process.c
+++ b/core/mac/src/pe/sch/sch_beacon_process.c
@@ -976,7 +976,8 @@ sch_beacon_edca_process(tpAniSirGlobal pMac, tSirMacEdcaParamSetIE *edca,
session->gLimEdcaParams[EDCA_AC_VI] = edca->acvi;
session->gLimEdcaParams[EDCA_AC_VO] = edca->acvo;
- if (pMac->roam.configParam.enable_edca_params) {
+ if (pMac->roam.configParam.enable_edca_params &&
+ !pMac->follow_ap_edca) {
session->gLimEdcaParams[EDCA_AC_VO].aci.aifsn =
pMac->roam.configParam.edca_vo_aifs;
session->gLimEdcaParams[EDCA_AC_VI].aci.aifsn =
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index debd009b3727..6d7f23d21bcb 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -16019,6 +16019,15 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
csr_dump_vendor_ies((uint8_t *)pBssDescription->ieFields,
ieLen);
+ is_vendor_ap_present = csr_check_vendor_ap_present(pMac,
+ pBssDescription,
+ ucDot11Mode, pIes, ieLen,
+ WMI_ACTION_OUI_DISABLE_AGGRESSIVE_EDCA);
+ if (is_vendor_ap_present)
+ pMac->follow_ap_edca = true;
+ else
+ pMac->follow_ap_edca = false;
+
is_vendor_ap_present = csr_check_vendor_ap_present(
pMac, pBssDescription,
ucDot11Mode, pIes, ieLen,