diff options
| author | Mushtaq A Mujale <mmujale@qca.qualcomm.com> | 2013-09-23 18:28:37 -0700 |
|---|---|---|
| committer | Madan Mohan Koyyalamudi <mkoyyala@qca.qualcomm.com> | 2013-10-23 20:05:44 -0700 |
| commit | 51f2db7c1ea52905f0afc3d434b09846677de2ae (patch) | |
| tree | c162fb1e93e7762a809fdd487ee56ce69d74f3cd | |
| parent | 242b3e4a4436951e2d549cb20f1c3604687cead9 (diff) | |
cld: wlan: Add knobs to control 11AC params.
ini params gEnableTXSTBC/gEnableRXLDPC to enable/disable ldpc coding,
TxSTBC. By default they are enabled.
ini params gVhtMpduLen to set Max MPDU len, default is 11454 octets
CRs-Fixed: 553214
Change-Id: Ic9f81e8de6a60d3d59f9f13acf586abd310edbb4
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_cfg.h | 18 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg.c | 47 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_main.c | 22 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/wmi_unified.h | 1 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 37 | ||||
| -rw-r--r-- | firmware_bin/WCNSS_qcom_cfg.ini | 11 |
6 files changed, 128 insertions, 8 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index 7eb062ee29f6..f057b32c98b9 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -1576,6 +1576,16 @@ typedef enum #define CFG_ENABLE_RX_STBC_MAX ( 1 ) #define CFG_ENABLE_RX_STBC_DEFAULT ( 1 ) +#define CFG_ENABLE_TX_STBC "gEnableTXSTBC" +#define CFG_ENABLE_TX_STBC_MIN ( 0 ) +#define CFG_ENABLE_TX_STBC_MAX ( 1 ) +#define CFG_ENABLE_TX_STBC_DEFAULT ( 0 ) + +#define CFG_ENABLE_RX_LDPC "gEnableRXLDPC" +#define CFG_ENABLE_RX_LDPC_MIN ( 0 ) +#define CFG_ENABLE_RX_LDPC_MAX ( 1 ) +#define CFG_ENABLE_RX_LDPC_DEFAULT ( 0 ) + /* * Enable/Disable vsta based on MAX Assoc limit * defined in WCNSS_qcom_cfg.ini. @@ -1791,6 +1801,11 @@ typedef enum #define CFG_VHT_AMPDU_LEN_EXPONENT_MIN ( 0 ) #define CFG_VHT_AMPDU_LEN_EXPONENT_MAX ( 7 ) #define CFG_VHT_AMPDU_LEN_EXPONENT_DEFAULT ( 3 ) + +#define CFG_VHT_MPDU_LEN_NAME "gVhtMpduLen" +#define CFG_VHT_MPDU_LEN_MIN ( 0 ) +#define CFG_VHT_MPDU_LEN_MAX ( 2 ) +#define CFG_VHT_MPDU_LEN_DEFAULT ( 0 ) #endif /*--------------------------------------------------------------------------- @@ -2138,6 +2153,8 @@ typedef struct v_U16_t configMccParam; v_U32_t numBuffAdvert; v_BOOL_t enableRxSTBC; + v_BOOL_t enableTxSTBC; + v_BOOL_t enableRxLDPC; #ifdef FEATURE_WLAN_TDLS v_BOOL_t fEnableTDLSSupport; v_BOOL_t fEnableTDLSImplicitTrigger; @@ -2178,6 +2195,7 @@ typedef struct v_BOOL_t fP2pListenOffload; #ifdef WLAN_FEATURE_11AC v_U8_t fVhtAmpduLenExponent; + v_U32_t vhtMpduLen; #endif } hdd_config_t; /*--------------------------------------------------------------------------- diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index 44f9f4ca192e..8877642f5c2d 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -2044,6 +2044,20 @@ REG_VARIABLE( CFG_ENABLE_RX_STBC, WLAN_PARAM_Integer, CFG_ENABLE_RX_STBC_DEFAULT, CFG_ENABLE_RX_STBC_MIN, CFG_ENABLE_RX_STBC_MAX ), +REG_VARIABLE( CFG_ENABLE_TX_STBC, WLAN_PARAM_Integer, + hdd_config_t, enableTxSTBC, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_TX_STBC_DEFAULT, + CFG_ENABLE_TX_STBC_MIN, + CFG_ENABLE_TX_STBC_MAX ), + +REG_VARIABLE( CFG_ENABLE_RX_LDPC, WLAN_PARAM_Integer, + hdd_config_t, enableRxLDPC, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_RX_LDPC_DEFAULT, + CFG_ENABLE_RX_LDPC_MIN, + CFG_ENABLE_RX_LDPC_MAX ), + #ifdef FEATURE_WLAN_TDLS REG_VARIABLE( CFG_TDLS_SUPPORT_ENABLE, WLAN_PARAM_Integer, hdd_config_t, fEnableTDLSSupport, @@ -2296,6 +2310,13 @@ REG_VARIABLE( CFG_VHT_AMPDU_LEN_EXPONENT_NAME, WLAN_PARAM_Integer, CFG_VHT_AMPDU_LEN_EXPONENT_DEFAULT, CFG_VHT_AMPDU_LEN_EXPONENT_MIN, CFG_VHT_AMPDU_LEN_EXPONENT_MAX), + +REG_VARIABLE( CFG_VHT_MPDU_LEN_NAME, WLAN_PARAM_Integer, + hdd_config_t, vhtMpduLen, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK , + CFG_VHT_MPDU_LEN_DEFAULT, + CFG_VHT_MPDU_LEN_MIN, + CFG_VHT_MPDU_LEN_MAX), #endif }; @@ -3794,6 +3815,14 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) } } } + if(ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_VHT_MAX_MPDU_LENGTH, + pConfig->vhtMpduLen, NULL, + eANI_BOOLEAN_FALSE) + == eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_VHT_MAX_MPDU_LENGTH to CCM\n"); + } } } #endif @@ -3817,6 +3846,8 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) val16 = (tANI_U16)val; phtCapInfo = (tSirMacHTCapabilityInfo *)&val16; phtCapInfo->rxSTBC = pConfig->enableRxSTBC; + phtCapInfo->txSTBC = pConfig->enableTxSTBC; + phtCapInfo->advCodingCap = pConfig->enableRxLDPC; if(ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_HT_CAP_INFO, *(tANI_U16 *)phtCapInfo, NULL, eANI_BOOLEAN_FALSE) @@ -3834,6 +3865,22 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) hddLog(LOGE, "Could not pass on WNI_CFG_VHT_RXSTBC to CCM\n"); } + if(ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_VHT_TXSTBC, + pConfig->enableTxSTBC, NULL, eANI_BOOLEAN_FALSE) + ==eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_VHT_TXSTBC to CCM\n"); + } + + if(ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_VHT_LDPC_CODING_CAP, + pConfig->enableRxLDPC, NULL, eANI_BOOLEAN_FALSE) + ==eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_VHT_LDPC_CODING_CAP to CCM\n"); + } + #ifdef WLAN_SOFTAP_VSTA_FEATURE if(pConfig->fEnableVSTASupport) { diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 75198dfa9ee6..e6385ca90322 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -2085,6 +2085,17 @@ static void hdd_update_tgt_vht_cap(hdd_context_t *hdd_ctx, if (pconfig->enableTxBF && !cfg->vht_su_bformee) pconfig->enableTxBF = cfg->vht_su_bformee; + status = ccmCfgSetInt(hdd_ctx->hHal, + WNI_CFG_VHT_SU_BEAMFORMEE_CAP, + pconfig->enableTxBF, NULL, + eANI_BOOLEAN_FALSE); + + if (status == eHAL_STATUS_FAILURE) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "%s: could not set VHT SU BEAMFORMEE CAP", + __func__); + } + /* Get VHT MU Beamformer cap */ status = ccmCfgGetInt(hdd_ctx->hHal, WNI_CFG_VHT_MU_BEAMFORMER_CAP, &value); @@ -2146,8 +2157,15 @@ static void hdd_update_tgt_vht_cap(hdd_context_t *hdd_ctx, value = 0; } - /* set VHT MAX AMPDU Len exp */ - if (value && !cfg->vht_max_ampdu_len_exp) { + /* + * VHT max AMPDU len exp: + * override if user configured value is too high + * that the target cannot support. + * Even though Rome publish ampdu_len=7, it can + * only support 4 because of some h/w bug. + */ + + if (value > cfg->vht_max_ampdu_len_exp) { status = ccmCfgSetInt(hdd_ctx->hHal, WNI_CFG_VHT_AMPDU_LEN_EXPONENT, cfg->vht_max_ampdu_len_exp, NULL, diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h index 041f358c374c..ca4e00735d4e 100644 --- a/CORE/SERVICES/COMMON/wmi_unified.h +++ b/CORE/SERVICES/COMMON/wmi_unified.h @@ -3765,6 +3765,7 @@ typedef struct { #define WMI_RC_HT_FLAG 0x08 /* HT */ #define WMI_RC_RTSCTS_FLAG 0x10 /* RTS-CTS */ #define WMI_RC_TX_STBC_FLAG 0x20 /* TX STBC */ +#define WMI_RC_TX_STBC_FLAG_S 5 /* TX STBC */ #define WMI_RC_RX_STBC_FLAG 0xC0 /* RX STBC ,2 bits */ #define WMI_RC_RX_STBC_FLAG_S 6 /* RX STBC ,2 bits */ #define WMI_RC_WEP_TKIP_FLAG 0x100 /* WEP/TKIP encryption */ diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 07e5ab4619bb..051273c4b9ed 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -2780,7 +2780,7 @@ static int32_t wmi_unified_send_peer_assoc(tp_wma_handle wma, wmi_buf_t buf; int32_t len; int32_t ret, max_rates, i; - u_int8_t rx_stbc; + u_int8_t rx_stbc, tx_stbc; u_int8_t *rate_pos, *buf_ptr; wmi_rate_set peer_legacy_rates, peer_ht_rates; wmi_vht_rate_set *mcs; @@ -2918,6 +2918,13 @@ static int32_t wmi_unified_send_peer_assoc(tp_wma_handle wma, cmd->peer_rate_caps |= (rx_stbc << WMI_RC_RX_STBC_FLAG_S); } + tx_stbc = (params->ht_caps & IEEE80211_HTCAP_C_TXSTBC) >> + IEEE80211_HTCAP_C_TXSTBC_S; + if (tx_stbc) { + cmd->peer_flags |= WMI_PEER_STBC; + cmd->peer_rate_caps |= (tx_stbc << WMI_RC_TX_STBC_FLAG_S); + } + if (params->htLdpcCapable || params->vhtLdpcCapable) cmd->peer_flags |= WMI_PEER_LDPC; @@ -7734,6 +7741,14 @@ static inline void wma_update_target_ht_cap(tp_wma_handle wh, /* RF chains */ cfg->num_rf_chains = wh->num_rf_chains; + + WMA_LOGD("\n%s: ht_cap_info - %x ht_rx_stbc - %d, ht_tx_stbc - %d\n\ + mpdu_density - %d ht_rx_ldpc - %d ht_sgi_20 - %d\n\ + ht_sgi_40 - %d num_rf_chains - %d \n", __func__, + wh->ht_cap_info, cfg->ht_rx_stbc, cfg->ht_tx_stbc, + cfg->mpdu_density, cfg->ht_rx_ldpc, cfg->ht_sgi_20, + cfg->ht_sgi_40, cfg->num_rf_chains); + } #ifdef WLAN_FEATURE_11AC @@ -7742,11 +7757,11 @@ static inline void wma_update_target_vht_cap(tp_wma_handle wh, { /* Max MPDU length */ if (wh->vht_cap_info & IEEE80211_VHTCAP_MAX_MPDU_LEN_3839) - cfg->vht_max_mpdu = 3839; + cfg->vht_max_mpdu = 0; else if (wh->vht_cap_info & IEEE80211_VHTCAP_MAX_MPDU_LEN_7935) - cfg->vht_max_mpdu = 7935; + cfg->vht_max_mpdu = 1; else if (wh->vht_cap_info & IEEE80211_VHTCAP_MAX_MPDU_LEN_11454) - cfg->vht_max_mpdu = 11454; + cfg->vht_max_mpdu = 2; else cfg->vht_max_mpdu = 0; @@ -7776,7 +7791,11 @@ static inline void wma_update_target_vht_cap(tp_wma_handle wh, cfg->vht_tx_stbc = wh->vht_cap_info & IEEE80211_VHTCAP_TX_STBC; /* RX STBC capability */ - cfg->vht_rx_stbc = wh->vht_cap_info & IEEE80211_VHTCAP_RX_STBC; + cfg->vht_rx_stbc = wh->vht_cap_info & IEEE80211_VHTCAP_RX_STBC; + + cfg->vht_max_ampdu_len_exp = (wh->vht_cap_info & + IEEE80211_VHTCAP_MAX_AMPDU_LEN_EXP) + >> IEEE80211_VHTCAP_MAX_AMPDU_LEN_EXP_S; /* SU beamformer cap */ cfg->vht_su_bformer = wh->vht_cap_info & IEEE80211_VHTCAP_SU_BFORMER; @@ -7796,6 +7815,14 @@ static inline void wma_update_target_vht_cap(tp_wma_handle wh, /* VHT TXOP PS cap */ cfg->vht_txop_ps = wh->vht_cap_info & IEEE80211_VHTCAP_TXOP_PS; + + WMA_LOGD("\n %s: max_mpdu %d supp_chan_width %x rx_ldpc %x\n \ + short_gi_80 %x tx_stbc %x rx_stbc %x txop_ps %x\n \ + su_bformee %x mu_bformee %x max_ampdu_len_exp %d\n", + __func__, cfg->vht_max_mpdu, cfg->supp_chan_width, + cfg->vht_rx_ldpc, cfg->vht_short_gi_80, cfg->vht_tx_stbc, + cfg->vht_rx_stbc, cfg->vht_txop_ps, cfg->vht_su_bformee, + cfg->vht_mu_bformee, cfg->vht_max_ampdu_len_exp); } #endif /* #ifdef WLAN_FEATURE_11AC */ diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini index 881ef79cf4e2..abefd0d77da8 100644 --- a/firmware_bin/WCNSS_qcom_cfg.ini +++ b/firmware_bin/WCNSS_qcom_cfg.ini @@ -379,9 +379,15 @@ gNumChanCombinedConc=1 #If set to 0, MCC is not allowed. gEnableMCCMode=1 -# 1=enable STBC; 0=disable STBC +# 1=enable STBC; 0=disable STBC gEnableRXSTBC=1 +# 1=enable tx STBC; 0=disable +gEnableTXSTBC=1 + +# 1=enable rx LDPC; 0=disable +gEnableRXLDPC=1 + # Enable Active mode offload gEnableActiveModeOffload=1 @@ -419,6 +425,9 @@ gEnableP2pListenOffload=1 # Maximum Receive AMPDU size (VHT only. Valid values: 0->8k 1->16k 2->32k 3->64k 4->128k) gVhtAmpduLenExponent=4 +# Maximum MPDU length (VHT only. Valid values: 0->3895 octets, 1->7991 octets, 2->11454 octets) +gVhtMpduLen=2 + END # Note: Configuration parser would not read anything past the END marker |
