diff options
| author | Paul Zhang <paulz@codeaurora.org> | 2019-10-14 14:06:34 +0800 |
|---|---|---|
| committer | nshrivas <nshrivas@codeaurora.org> | 2019-12-03 20:28:08 -0800 |
| commit | c134153efec09d752b23a44f917a54b0c4b3aecb (patch) | |
| tree | 5e8c13efbbd5fbaf4c8c597da4d0ea428942ff3a | |
| parent | 01b7ae36bb6f63756fea35e0289c300a8cda31b9 (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.h | 27 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_cfg.c | 42 | ||||
| -rw-r--r-- | core/mac/inc/ani_global.h | 4 | ||||
| -rw-r--r-- | core/mac/src/pe/sch/sch_beacon_process.c | 3 | ||||
| -rw-r--r-- | core/sme/src/csr/csr_api_roam.c | 9 |
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, |
