diff options
| author | Hong Shi <hongsh@codeaurora.org> | 2017-01-12 02:31:14 +0800 |
|---|---|---|
| committer | qcabuildsw <qcabuildsw@localhost> | 2017-02-28 11:47:29 -0800 |
| commit | 75c470094cb07d3ad94fab6cbfa6f4526ce1adc4 (patch) | |
| tree | 67776754e727b0fd863cf422cfc0fb7683341108 | |
| parent | 33955f7637051396bc9f4cfebb275f933d6970a4 (diff) | |
qcacld-3.0: add ini to configure HT max mcs
qcacld-2.0 to qcacld-3.0 propagation
Add support for configure host init HT rate upper bound.
CRs-Fixed: 1105357
Change-Id: Ic69a2d19ad1b3b835c83c7d666fb7821e42e8442
| -rw-r--r-- | core/hdd/inc/wlan_hdd_cfg.h | 23 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_cfg.c | 15 | ||||
| -rw-r--r-- | core/mac/inc/wni_cfg.h | 7 | ||||
| -rw-r--r-- | core/mac/src/cfg/cfg_param_name.c | 11 | ||||
| -rw-r--r-- | core/mac/src/cfg/cfg_proc_msg.c | 9 | ||||
| -rw-r--r-- | core/wma/src/wma_mgmt.c | 54 |
6 files changed, 115 insertions, 4 deletions
diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 42552d518fb5..19af0a33ede6 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -5668,6 +5668,28 @@ typedef enum { /* * <ini> + * 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. + * + * </ini> + */ +#define CFG_MAX_HT_MCS_FOR_TX_DATA "gMaxHTMCSForTxData" +#define CFG_MAX_HT_MCS_FOR_TX_DATA_MIN (WNI_CFG_MAX_HT_MCS_TX_DATA_STAMIN) +#define CFG_MAX_HT_MCS_FOR_TX_DATA_MAX (WNI_CFG_MAX_HT_MCS_TX_DATA_STAMAX) +#define CFG_MAX_HT_MCS_FOR_TX_DATA_DEFAULT (WNI_CFG_MAX_HT_MCS_TX_DATA_STADEF) + +/* + * <ini> * gTDLSTxPacketThreshold - Tx/Rx Packet threshold for initiating TDLS. * @Min: 0 * @Max: 4294967295 @@ -10072,6 +10094,7 @@ struct hdd_config { uint8_t gDisableDfsJapanW53; bool gEnableOverLapCh; bool fRegChangeDefCountry; + uint16_t max_ht_mcs_txdata; #ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL uint32_t TxFlowLowWaterMark; uint32_t TxFlowHighWaterMarkOffset; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 91ec80b5c791..e9caba5537fa 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -2171,6 +2171,14 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_DISABLE_DFS_JAPAN_W53_MIN, CFG_DISABLE_DFS_JAPAN_W53_MAX, ch_notify_set_g_disable_dfs_japan_w53, 0), + + REG_VARIABLE(CFG_MAX_HT_MCS_FOR_TX_DATA, WLAN_PARAM_HexInteger, + struct hdd_config, max_ht_mcs_txdata, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MAX_HT_MCS_FOR_TX_DATA_DEFAULT, + CFG_MAX_HT_MCS_FOR_TX_DATA_MIN, + CFG_MAX_HT_MCS_FOR_TX_DATA_MAX), + REG_VARIABLE(CFG_ENABLE_FIRST_SCAN_2G_ONLY_NAME, WLAN_PARAM_Integer, struct hdd_config, enableFirstScan2GOnly, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -6895,6 +6903,13 @@ bool hdd_update_config_cfg(hdd_context_t *hdd_ctx) status = false; hdd_err("Couldn't pass on WNI_CFG_TGT_GTX_USR_CFG to CCM"); } + + if (sme_cfg_set_int(hdd_ctx->hHal, WNI_CFG_MAX_HT_MCS_TX_DATA, + config->max_ht_mcs_txdata) == + QDF_STATUS_E_FAILURE) { + status = false; + hdd_err("Couldn't pass on WNI_CFG_MAX_HT_MCS_TX_DATA to CCM"); + } return status; } #ifdef FEATURE_WLAN_SCAN_PNO diff --git a/core/mac/inc/wni_cfg.h b/core/mac/inc/wni_cfg.h index 297bce90ea0b..c2c5785e71cb 100644 --- a/core/mac/inc/wni_cfg.h +++ b/core/mac/inc/wni_cfg.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -251,6 +251,7 @@ enum { WNI_CFG_OBSS_HT40_WIDTH_CH_TRANSITION_DELAY, WNI_CFG_OBSS_HT40_SCAN_ACTIVITY_THRESHOLD, WNI_CFG_TGT_GTX_USR_CFG, + WNI_CFG_MAX_HT_MCS_TX_DATA, /* Any new items to be added should be above this strictly */ CFG_PARAM_MAX_NUM }; @@ -1260,6 +1261,10 @@ enum { #define WNI_CFG_TGT_GTX_USR_CFG_STAMAX 32 #define WNI_CFG_TGT_GTX_USR_CFG_STADEF 32 +#define WNI_CFG_MAX_HT_MCS_TX_DATA_STAMIN 0x0 +#define WNI_CFG_MAX_HT_MCS_TX_DATA_STAMAX 0x17f +#define WNI_CFG_MAX_HT_MCS_TX_DATA_STADEF 0x0 + #define CFG_STA_MAGIC_DWORD 0xbeefbeef #endif diff --git a/core/mac/src/cfg/cfg_param_name.c b/core/mac/src/cfg/cfg_param_name.c index c724f10c1763..2ad7c69e0be2 100644 --- a/core/mac/src/cfg/cfg_param_name.c +++ b/core/mac/src/cfg/cfg_param_name.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -315,4 +315,13 @@ unsigned char *g_cfg_param_name[] = { (unsigned char *)"DFS_MASTER_ENABLED", (unsigned char *)"VHT_ENABLE_TXBF_20MHZ", (unsigned char *)"TDLS_WMM_MODE_ENABLED", + (unsigned char *)"OBSS_HT40_SCAN_PASSIVE_DWELL_TIME", + (unsigned char *)"OBSS_HT40_SCAN_ACTIVE_DWELL_TIME", + (unsigned char *)"OBSS_HT40_SCAN_WIDTH_TRIGGER_INTERVAL", + (unsigned char *)"OBSS_HT40_SCAN_PASSIVE_TOTAL_PER_CHANNEL", + (unsigned char *)"OBSS_HT40_SCAN_ACTIVE_TOTAL_PER_CHANNEL", + (unsigned char *)"OBSS_HT40_WIDTH_CH_TRANSITION_DELAY", + (unsigned char *)"OBSS_HT40_SCAN_ACTIVITY_THRESHOLD", + (unsigned char *)"TGT_GTX_USR_CFG", + (unsigned char *)"MAX_HT_MCS_TX_DATA", }; diff --git a/core/mac/src/cfg/cfg_proc_msg.c b/core/mac/src/cfg/cfg_proc_msg.c index 8be379c932cc..ff60742fad4b 100644 --- a/core/mac/src/cfg/cfg_proc_msg.c +++ b/core/mac/src/cfg/cfg_proc_msg.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -1178,7 +1178,12 @@ cgstatic cfg_static[CFG_PARAM_MAX_NUM] = { CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT, WNI_CFG_TGT_GTX_USR_CFG_STAMIN, WNI_CFG_TGT_GTX_USR_CFG_STAMAX, - WNI_CFG_TGT_GTX_USR_CFG_STADEF} + WNI_CFG_TGT_GTX_USR_CFG_STADEF}, + {WNI_CFG_MAX_HT_MCS_TX_DATA, + CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT, + WNI_CFG_MAX_HT_MCS_TX_DATA_STAMIN, + WNI_CFG_MAX_HT_MCS_TX_DATA_STAMAX, + WNI_CFG_MAX_HT_MCS_TX_DATA_STADEF} }; diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index 489c57e61c79..373f4450feda 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -818,6 +818,58 @@ wma_unified_peer_state_update( } #endif +#define CFG_CTRL_MASK 0xFF00 +#define CFG_DATA_MASK 0x00FF + +/** + * wma_mask_tx_ht_rate() - mask tx ht rate based on config + * @wma: wma handle + * @mcs_set mcs set buffer + * + * Return: None + */ +static void wma_mask_tx_ht_rate(tp_wma_handle wma, uint8_t *mcs_set) +{ + uint32_t mcs_limit, i, j; + uint8_t *rate_pos = mcs_set; + + /* + * Get MCS limit from ini configure, and map it to rate parameters + * This will limit HT rate upper bound. CFG_CTRL_MASK is used to + * check whether ini config is enabled and CFG_DATA_MASK to get the + * MCS value. + */ + if (wlan_cfg_get_int(wma->mac_context, WNI_CFG_MAX_HT_MCS_TX_DATA, + &mcs_limit) != eSIR_SUCCESS) { + mcs_limit = WNI_CFG_MAX_HT_MCS_TX_DATA_STADEF; + } + + if (mcs_limit & CFG_CTRL_MASK) { + WMA_LOGD("%s: set mcs_limit %x", __func__, mcs_limit); + + mcs_limit &= CFG_DATA_MASK; + for (i = 0, j = 0; i < MAX_SUPPORTED_RATES;) { + if (j < mcs_limit / 8) { + rate_pos[j] = 0xff; + j++; + i += 8; + } else if (j < mcs_limit / 8 + 1) { + if (i <= mcs_limit) + rate_pos[i / 8] |= 1 << (i % 8); + else + rate_pos[i / 8] &= ~(1 << (i % 8)); + i++; + + if (i >= (j + 1) * 8) + j++; + } else { + rate_pos[j++] = 0; + i += 8; + } + } + } +} + /** * wmi_unified_send_peer_assoc() - send peer assoc command to fw * @wma: wma handle @@ -862,6 +914,8 @@ QDF_STATUS wma_send_peer_assoc(tp_wma_handle wma, return QDF_STATUS_E_INVAL; } + wma_mask_tx_ht_rate(wma, params->supportedRates.supportedMCSSet); + qdf_mem_zero(&peer_legacy_rates, sizeof(wmi_rate_set)); qdf_mem_zero(&peer_ht_rates, sizeof(wmi_rate_set)); qdf_mem_zero(cmd, sizeof(struct peer_assoc_params)); |
