diff options
| author | lifeng <lifeng@codeaurora.org> | 2017-02-24 13:05:02 +0800 |
|---|---|---|
| committer | Sandeep Puligilla <spuligil@codeaurora.org> | 2017-04-11 04:36:54 -0700 |
| commit | 6e9cc13b040e26831fd9748dd36d1e0c83102800 (patch) | |
| tree | 6f1578dec4d0f42422461be11353d5d2c772459b | |
| parent | aab489eb886b52b1ed6ced40ea2a8ee5ad3ae056 (diff) | |
qcacld-3.0: Add ini to configure SAP 11n max mcs
qcacld-2.0 to qcacld-3.0 propagation
Add support for configure host init SAP HT rate
upper bound.
Change-Id: If749f8a036d98d9070cb05170fa1e612fcb30e8a
CRs-Fixed: 1091897
| -rw-r--r-- | core/hdd/inc/wlan_hdd_cfg.h | 18 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_cfg.c | 14 | ||||
| -rw-r--r-- | core/mac/inc/wni_cfg.h | 5 | ||||
| -rw-r--r-- | core/mac/src/cfg/cfg_param_name.c | 4 | ||||
| -rw-r--r-- | core/mac/src/cfg/cfg_proc_msg.c | 7 | ||||
| -rw-r--r-- | core/wma/src/wma_dev_if.c | 42 |
6 files changed, 89 insertions, 1 deletions
diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 603682eb7780..ad84660aec37 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -10593,6 +10593,23 @@ enum dot11p_mode { #define CFG_MAX_MPDUS_IN_AMPDU_MAX (64) #define CFG_MAX_MPDUS_IN_AMPDU_DEFAULT (0) +/* + * gSapMaxMCSForTxData - sap 11n max mcs + * @Min: 0 + * @Max: 383 + * @Default: 0 + * + * This ini configure SAP 11n max mcs + * + * Usage: External + * + * </ini> + */ +#define CFG_SAP_MAX_MCS_FOR_TX_DATA "gSapMaxMCSForTxData" +#define CFG_SAP_MAX_MCS_FOR_TX_DATA_MIN (0) +#define CFG_SAP_MAX_MCS_FOR_TX_DATA_MAX (383) +#define CFG_SAP_MAX_MCS_FOR_TX_DATA_DEFAULT (0) + /*--------------------------------------------------------------------------- Type declarations -------------------------------------------------------------------------*/ @@ -11353,6 +11370,7 @@ struct hdd_config { bool ani_enabled; uint8_t enable_rts_sifsbursting; uint8_t max_mpdus_inampdu; + uint16_t sap_max_mcs_txdata; }; #define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var)) diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index df13dd9ad90a..03fb36326cfe 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -4542,6 +4542,13 @@ struct reg_table_entry g_registry_table[] = { CFG_MAX_MPDUS_IN_AMPDU_DEFAULT, CFG_MAX_MPDUS_IN_AMPDU_MIN, CFG_MAX_MPDUS_IN_AMPDU_MAX), + + REG_VARIABLE(CFG_SAP_MAX_MCS_FOR_TX_DATA, WLAN_PARAM_Integer, + struct hdd_config, sap_max_mcs_txdata, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_SAP_MAX_MCS_FOR_TX_DATA_DEFAULT, + CFG_SAP_MAX_MCS_FOR_TX_DATA_MIN, + CFG_SAP_MAX_MCS_FOR_TX_DATA_MAX), }; /** @@ -7193,6 +7200,13 @@ bool hdd_update_config_cfg(hdd_context_t *hdd_ctx) hdd_err("Couldn't pass on WNI_CFG_RATE_FOR_TX_MGMT to CCM"); } + if (sme_cfg_set_int(hdd_ctx->hHal, WNI_CFG_SAP_MAX_MCS_DATA, + config->sap_max_mcs_txdata) == + QDF_STATUS_E_FAILURE) { + status = false; + hdd_err("Could not pass on WNI_CFG_SAP_MAX_MCS_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 824789b091af..0a743ac3fc1b 100644 --- a/core/mac/inc/wni_cfg.h +++ b/core/mac/inc/wni_cfg.h @@ -253,6 +253,7 @@ enum { WNI_CFG_MAX_HT_MCS_TX_DATA, WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA, WNI_CFG_RATE_FOR_TX_MGMT, + WNI_CFG_SAP_MAX_MCS_DATA, /* Any new items to be added should be above this strictly */ CFG_PARAM_MAX_NUM }; @@ -1270,6 +1271,10 @@ enum { #define WNI_CFG_RATE_FOR_TX_MGMT_STAMAX 0xFF #define WNI_CFG_RATE_FOR_TX_MGMT_STADEF 0xFF +#define WNI_CFG_SAP_MAX_MCS_DATA_STAMIN 0x0 +#define WNI_CFG_SAP_MAX_MCS_DATA_STAMAX 0x17f +#define WNI_CFG_SAP_MAX_MCS_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 0e67f6bbf00f..670ae07611d0 100644 --- a/core/mac/src/cfg/cfg_param_name.c +++ b/core/mac/src/cfg/cfg_param_name.c @@ -326,4 +326,8 @@ unsigned char *g_cfg_param_name[] = { (unsigned char *)"MAX_HT_MCS_TX_DATA", (unsigned char *)"DISABLE_ABG_RATE_TX_DATA", (unsigned char *)"RATE_FOR_TX_MGMT", + (unsigned char *)"TGT_GTX_USR_CFG", + (unsigned char *)"ASSOC_STA_LIMIT_GO", + (unsigned char *)"ASSOC_STA_LIMIT_AP", + (unsigned char *)"SAP_MAX_MCS_DATA", }; diff --git a/core/mac/src/cfg/cfg_proc_msg.c b/core/mac/src/cfg/cfg_proc_msg.c index 3815ab191ad2..6c95796594f7 100644 --- a/core/mac/src/cfg/cfg_proc_msg.c +++ b/core/mac/src/cfg/cfg_proc_msg.c @@ -1188,7 +1188,12 @@ cgstatic cfg_static[CFG_PARAM_MAX_NUM] = { CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT, WNI_CFG_RATE_FOR_TX_MGMT_STAMIN, WNI_CFG_RATE_FOR_TX_MGMT_STAMAX, - WNI_CFG_RATE_FOR_TX_MGMT_STADEF} + WNI_CFG_RATE_FOR_TX_MGMT_STADEF}, + {WNI_CFG_SAP_MAX_MCS_DATA, + CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT, + WNI_CFG_SAP_MAX_MCS_DATA_STAMIN, + WNI_CFG_SAP_MAX_MCS_DATA_STAMAX, + WNI_CFG_SAP_MAX_MCS_DATA_STADEF}, }; diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 2d3a7ebf1f4a..7a41a49e914a 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -3687,6 +3687,8 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta) struct wma_txrx_node *iface = NULL; struct wma_target_req *msg; bool peer_assoc_cnf = false; + uint32_t mcs_limit, i, j; + uint8_t *rate_pos; pdev = cds_get_context(QDF_MODULE_ID_TXRX); @@ -3764,6 +3766,46 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta) wmi_unified_send_txbf(wma, add_sta); + /* + * 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. + */ +#define CFG_CTRL_MASK 0xFF00 +#define CFG_DATA_MASK 0x00FF + + if (wlan_cfg_get_int(wma->mac_context, WNI_CFG_SAP_MAX_MCS_DATA, + &mcs_limit) != eSIR_SUCCESS) { + mcs_limit = WNI_CFG_SAP_MAX_MCS_DATA_STADEF; + } + + if (mcs_limit & CFG_CTRL_MASK) { + WMA_LOGD("%s: set mcs_limit %x", __func__, mcs_limit); + + mcs_limit &= CFG_DATA_MASK; + rate_pos = (u_int8_t *)add_sta->supportedRates.supportedMCSSet; + 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; + } + } + } + if (WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap, WMI_SERVICE_PEER_ASSOC_CONF)) { peer_assoc_cnf = true; |
