qcacld-3.0: Add configuration support for VHT20 MCS9

Add user configuration to enable/disable the MCS9 in VHT20
operation.

Change-Id: I1bf1156dbeb51a7850ef5a5b66295ecc0d007542
CRs-Fixed: 2217038
This commit is contained in:
Kiran Kumar Lokere 2018-03-30 18:54:25 -07:00 • committed by nshrivas
commit 0e255175b6
8 changed files with 81 additions and 0 deletions

View file

@ -5089,6 +5089,27 @@ enum hdd_link_speed_rpt_type {
#define CFG_VHT_ENABLE_TX_MCS2x2_8_9_MAX (2)
#define CFG_VHT_ENABLE_TX_MCS2x2_8_9_DEFAULT (0)
/*
* <ini>
* enable_vht20_mcs9 - Enables VHT MCS9 in 20M BW operation
* @Min: 0
* @Max: 1
* @Default: 1
*
* Related: NA
*
* Supported Feature: 11AC
*
* Usage: External
*
* </ini>
*/
#define CFG_ENABLE_VHT20_MCS9 "enable_vht20_mcs9"
#define CFG_ENABLE_VHT20_MCS9_MIN (0)
#define CFG_ENABLE_VHT20_MCS9_MAX (1)
#define CFG_ENABLE_VHT20_MCS9_DEFAULT (1)
/*
* <ini>
* gEnable2x2 - Enables/disables VHT Tx/Rx MCS values for 2x2
@ -14678,6 +14699,7 @@ struct hdd_config {
bool enableTxBF;
bool enable_subfee_vendor_vhtie;
bool enable_txbf_sap_mode;
bool enable_vht20_mcs9;
uint8_t txBFCsnValue;
bool enable_su_tx_bformer;
uint8_t vhtRxMCS2x2;

View file

@ -2128,6 +2128,13 @@ struct reg_table_entry g_registry_table[] = {
CFG_VHT_ENABLE_TX_MCS2x2_8_9_MIN,
CFG_VHT_ENABLE_TX_MCS2x2_8_9_MAX),
REG_VARIABLE(CFG_ENABLE_VHT20_MCS9, WLAN_PARAM_Integer,
struct hdd_config, enable_vht20_mcs9,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK,
CFG_ENABLE_VHT20_MCS9_DEFAULT,
CFG_ENABLE_VHT20_MCS9_MIN,
CFG_ENABLE_VHT20_MCS9_MAX),
REG_VARIABLE(CFG_VHT_ENABLE_2x2_CAP_FEATURE, WLAN_PARAM_Integer,
struct hdd_config, enable2x2,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@ -9067,6 +9074,7 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx)
smeConfig->csrConfig.enable_rx_ldpc = pConfig->enable_rx_ldpc;
smeConfig->csrConfig.disable_high_ht_mcs_2x2 =
pConfig->disable_high_ht_mcs_2x2;
smeConfig->csrConfig.enable_vht20_mcs9 = pConfig->enable_vht20_mcs9;
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
smeConfig->csrConfig.cc_switch_mode = pConfig->WlanMccToSccSwitchMode;
#endif

View file

@ -54,6 +54,14 @@
#define IS_5G_CH(__chNum) ((__chNum >= 36) && (__chNum <= 165))
#define IS_2X2_CHAIN(__chain) ((__chain & 0x3) == 0x3)
#define DISABLE_NSS2_MCS 0xC
#define VHT_1x1_MCS9_MAP 0x2
#define VHT_2x2_MCS9_MAP 0xA
#define VHT_1x1_MCS8_VAL 0xFFFD
#define VHT_2x2_MCS8_VAL 0xFFF5
#define VHT_1x1_MCS_MASK 0x3
#define VHT_2x2_MCS_MASK 0xF
#define DISABLE_VHT_MCS_9(mcs, nss) \
(mcs = (nss > 1) ? VHT_2x2_MCS8_VAL : VHT_1x1_MCS8_VAL)
#define NSS_1x1_MODE 1
#define NSS_2x2_MODE 2

View file

@ -1397,6 +1397,25 @@ tSirRetStatus lim_populate_vht_mcs_set(tpAniSirGlobal mac_ctx,
VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_1_1;
rates->vhtRxHighestDataRate =
VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_1_1;
if (!session_entry->ch_width &&
!mac_ctx->roam.configParam.enable_vht20_mcs9 &&
((rates->vhtRxMCSMap & VHT_1x1_MCS_MASK) ==
VHT_1x1_MCS9_MAP)) {
DISABLE_VHT_MCS_9(rates->vhtRxMCSMap,
NSS_1x1_MODE);
DISABLE_VHT_MCS_9(rates->vhtTxMCSMap,
NSS_1x1_MODE);
}
} else {
if (!session_entry->ch_width &&
!mac_ctx->roam.configParam.enable_vht20_mcs9 &&
((rates->vhtRxMCSMap & VHT_2x2_MCS_MASK) ==
VHT_2x2_MCS9_MAP)) {
DISABLE_VHT_MCS_9(rates->vhtRxMCSMap,
NSS_2x2_MODE);
DISABLE_VHT_MCS_9(rates->vhtTxMCSMap,
NSS_2x2_MODE);
}
}
if ((peer_vht_caps == NULL) || (!peer_vht_caps->present))

View file

@ -1071,6 +1071,25 @@ populate_dot11f_vht_caps(tpAniSirGlobal pMac,
VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_1_1;
pDot11f->rxHighSupDataRate =
VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_1_1;
if (!psessionEntry->ch_width &&
!pMac->roam.configParam.enable_vht20_mcs9 &&
((pDot11f->txMCSMap & VHT_1x1_MCS_MASK) ==
VHT_1x1_MCS9_MAP)) {
DISABLE_VHT_MCS_9(pDot11f->txMCSMap,
NSS_1x1_MODE);
DISABLE_VHT_MCS_9(pDot11f->rxMCSMap,
NSS_1x1_MODE);
}
} else {
if (!psessionEntry->ch_width &&
!pMac->roam.configParam.enable_vht20_mcs9 &&
((pDot11f->txMCSMap & VHT_2x2_MCS_MASK) ==
VHT_2x2_MCS9_MAP)) {
DISABLE_VHT_MCS_9(pDot11f->txMCSMap,
NSS_2x2_MODE);
DISABLE_VHT_MCS_9(pDot11f->rxMCSMap,
NSS_2x2_MODE);
}
}
}
lim_log_vht_cap(pMac, pDot11f);

View file

@ -1222,6 +1222,7 @@ typedef struct tagCsrConfigParam {
uint8_t enable_tx_ldpc;
uint8_t enable_rx_ldpc;
uint8_t disable_high_ht_mcs_2x2;
bool enable_vht20_mcs9;
uint8_t max_amsdu_num;
uint8_t nSelect5GHzMargin;
uint8_t isCoalesingInIBSSAllowed;

View file

@ -528,6 +528,7 @@ struct csr_config {
uint32_t nVhtChannelWidth;
bool enable_subfee_vendor_vhtie;
uint8_t enable_txbf_sap_mode;
bool enable_vht20_mcs9;
uint8_t enable2x2;
bool enableVhtFor24GHz;
uint8_t enableVhtpAid;

View file

@ -2928,6 +2928,8 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac,
pParam->enable_subfee_vendor_vhtie;
pMac->roam.configParam.enable_txbf_sap_mode =
pParam->enable_txbf_sap_mode;
pMac->roam.configParam.enable_vht20_mcs9 =
pParam->enable_vht20_mcs9;
pMac->roam.configParam.enable2x2 = pParam->enable2x2;
pMac->roam.configParam.enableVhtFor24GHz =
pParam->enableVhtFor24GHz;
@ -3250,6 +3252,7 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam)
cfg_params->enable_subfee_vendor_vhtie;
pParam->enable_txbf_sap_mode =
cfg_params->enable_txbf_sap_mode;
pParam->enable_vht20_mcs9 = cfg_params->enable_vht20_mcs9;
pParam->enableVhtFor24GHz = cfg_params->enableVhtFor24GHz;
pParam->ignore_peer_erp_info = cfg_params->ignore_peer_erp_info;
pParam->enable2x2 = cfg_params->enable2x2;