diff --git a/mlme/core/src/wlan_mlme_main.c b/mlme/core/src/wlan_mlme_main.c index 80a194c7e3..c262c535d2 100644 --- a/mlme/core/src/wlan_mlme_main.c +++ b/mlme/core/src/wlan_mlme_main.c @@ -148,6 +148,20 @@ static void mlme_update_ht_cap_in_cfg(struct wlan_objmgr_psoc *psoc, *ht_cap_info = u.default_ht_cap_info; } +static void mlme_update_rates_in_cfg(struct wlan_objmgr_psoc *psoc, + struct wlan_mlme_rates *rates) +{ + rates->cfp_period = cfg_default(CFG_CFP_PERIOD); + rates->cfp_max_duration = cfg_default(CFG_CFP_MAX_DURATION); + rates->max_htmcs_txdata = cfg_get(psoc, CFG_INI_MAX_HT_MCS_FOR_TX_DATA); + rates->disable_abg_rate_txdata = cfg_get(psoc, + CFG_INI_DISABLE_ABG_RATE_FOR_TX_DATA); + rates->sap_max_mcs_txdata = cfg_get(psoc, + CFG_INI_SAP_MAX_MCS_FOR_TX_DATA); + rates->disable_high_ht_mcs_2x2 = cfg_get(psoc, + CFG_INI_DISABLE_HIGH_HT_RX_MCS_2x2); +} + QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) { struct wlan_mlme_psoc_obj *mlme_obj; @@ -162,6 +176,7 @@ QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) mlme_cfg = &mlme_obj->cfg; mlme_update_ht_cap_in_cfg(psoc, &mlme_cfg->ht_caps.ht_cap_info); + mlme_update_rates_in_cfg(psoc, &mlme_cfg->rates); return status; } diff --git a/mlme/dispatcher/inc/cfg_mlme.h b/mlme/dispatcher/inc/cfg_mlme.h index 2bd5c94ee8..a3ed947fe7 100644 --- a/mlme/dispatcher/inc/cfg_mlme.h +++ b/mlme/dispatcher/inc/cfg_mlme.h @@ -25,10 +25,12 @@ #include "cfg_mlme_ht_caps.h" #include "cfg_mlme_vht_caps.h" +#include "cfg_mlme_rates.h" #define CFG_MLME_ALL \ CFG_HT_CAPS_ALL \ - CFG_VHT_CAPS_ALL + CFG_VHT_CAPS_ALL \ + CFG_RATES_ALL #endif /* __CFG_MLME_H */ diff --git a/mlme/dispatcher/inc/cfg_mlme_rates.h b/mlme/dispatcher/inc/cfg_mlme_rates.h new file mode 100644 index 0000000000..b3d1b6dd91 --- /dev/null +++ b/mlme/dispatcher/inc/cfg_mlme_rates.h @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2012-2018 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 + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/** + * DOC: This file contains centralized definitions of converged configuration. + */ + +#ifndef __CFG_MLME_RATES_H +#define __CFG_MLME_RATES_H + +/* + * + * gMaxHTMCSForTxData - max HT mcs for TX + * @Min: 0 + * @Max: 383 + * @Default: 0 + * + * This ini is used to configure the max HT mcs + * for tx data. + * + * Usage: External + * + * bits 0-15: max HT mcs + * bits 16-31: zero to disable, otherwise enable. + * + * + */ +#define CFG_INI_MAX_HT_MCS_FOR_TX_DATA CFG_INI_UINT( \ + "gMaxHTMCSForTxData", \ + 0, \ + 0x17f, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "Max HT Mcs for Tx Data") + +/* + * + * gDisableABGRateForTxData - disable abg rate for tx data + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to disable abg rate for tx data. + * + * Usage: External + * + * + */ +#define CFG_INI_DISABLE_ABG_RATE_FOR_TX_DATA CFG_INI_BOOL( \ + "gDisableABGRateForTxData", \ + 0, \ + "Disable ABG RATE for TX Data") + +/* + * gSapMaxMCSForTxData - sap 11n max mcs + * @Min: 0 + * @Max: 383 + * @Default: 0 + * + * This ini configure SAP 11n max mcs + * + * Usage: External + * + * + */ +#define CFG_INI_SAP_MAX_MCS_FOR_TX_DATA CFG_INI_UINT( \ + "gSapMaxMCSForTxData", \ + 0, \ + 383, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "SAP Max MCS for TX Data") + +/* + * + * disable_high_ht_mcs_2x2 - disable high mcs index for 2nd stream in 2.4G + * @Min: 0 + * @Max: 8 + * @Default: 0 + * + * This ini is used to disable high HT MCS index for 2.4G STA connection. + * It has been introduced to resolve IOT issue with one of the vendor. + * + * Note: This INI is not useful with 1x1 setting. If some platform supports + * only 1x1 then this INI is not useful. + * + * 0 - It won't disable any HT MCS index (just like normal HT MCS) + * 1 - It will disable 15th bit from HT RX MCS set (from 8-15 bits slot) + * 2 - It will disable 14th & 15th bits from HT RX MCS set + * 3 - It will disable 13th, 14th, & 15th bits from HT RX MCS set + * and so on. + * + * Related: STA + * + * Supported Feature: 11n + * + * Usage: External + */ +#define CFG_INI_DISABLE_HIGH_HT_RX_MCS_2x2 CFG_INI_UINT( \ + "disable_high_ht_mcs_2x2", \ + 0, \ + 8, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "Disable high MCS index for 2x2") + +#define CFG_CFP_PERIOD CFG_UINT( \ + "cfpPeriod", \ + 0, \ + 255, \ + 1, \ + CFG_VALUE_OR_DEFAULT, \ + "CFP Period") + +#define CFG_CFP_MAX_DURATION CFG_UINT( \ + "cfpMaxDuration", \ + 0, \ + 65535, \ + 30000, \ + CFG_VALUE_OR_DEFAULT, \ + "CFP Max Duration") + +#define CFG_RATES_ALL \ + CFG(CFG_INI_MAX_HT_MCS_FOR_TX_DATA) \ + CFG(CFG_INI_DISABLE_ABG_RATE_FOR_TX_DATA) \ + CFG(CFG_INI_SAP_MAX_MCS_FOR_TX_DATA) \ + CFG(CFG_INI_DISABLE_HIGH_HT_RX_MCS_2x2) \ + CFG(CFG_CFP_PERIOD) \ + CFG(CFG_CFP_MAX_DURATION) + +#endif /* __CFG_MLME_RATES_H */ diff --git a/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 73eea29825..71f7f852f6 100644 --- a/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -90,14 +90,34 @@ struct wlan_mlme_vht_caps { /* VHT related configs */ }; +/** + * struct wlan_mlme_rates - RATES related config items + * @cfpPeriod: cfp period info + * @cfpMaxDuration: cfp Max duration info + * @max_htmcs_txdata: max HT mcs info for Tx + * @disable_abg_rate_txdata: disable abg rate info for tx data + * @sap_max_mcs_txdata: sap max mcs info + * @disable_high_ht_mcs_2x2: disable high mcs for 2x2 info + */ +struct wlan_mlme_rates { + uint8_t cfp_period; + uint16_t cfp_max_duration; + uint16_t max_htmcs_txdata; + bool disable_abg_rate_txdata; + uint16_t sap_max_mcs_txdata; + uint8_t disable_high_ht_mcs_2x2; +}; + /** * struct wlan_mlme_cfg - MLME config items * @ht_cfg: HT related CFG Items * @vht_cfg: VHT related CFG Items + * @rates: Rates related cfg items */ struct wlan_mlme_cfg { struct wlan_mlme_ht_caps ht_caps; struct wlan_mlme_vht_caps vht_caps; + struct wlan_mlme_rates rates; }; #endif