From 48dac7d63b355ffc9152439c3658a511187c698a Mon Sep 17 00:00:00 2001 From: Ashish Kumar Dhanotiya Date: Wed, 28 Mar 2018 14:59:50 +0530 Subject: [PATCH] qcacld-3.0: Add host support to configure TX delay There is 1ms TX delay enabled in TX sch module if frames queued in FW SW queue are less than 32. This results in Tx delay in FW, and causes response time higher. Add ini configuration to enable/disable Tx delay. Change-Id: Ic180431ed2d0848df3dbb144f6b2bd70db61e5f4 CRs-Fixed: 2214307 --- core/hdd/inc/wlan_hdd_cfg.h | 18 ++++++++++++++++++ core/hdd/src/wlan_hdd_cfg.c | 11 +++++++++++ core/hdd/src/wlan_hdd_main.c | 10 ++++++++++ 3 files changed, 39 insertions(+) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 9f4f407eff68..4e6b4c697c26 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -14370,6 +14370,23 @@ enum hdd_external_acs_freq_band { #define CFG_CHANNEL_SELECT_LOGIC_CONC_MAX (0xFFFFFFFF) #define CFG_CHANNEL_SELECT_LOGIC_CONC_DEFAULT (0x00000003) +/* + * + * gTxSchDelay - Enable/Disable Tx sch delay + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * Usage: Internal/External + * + * + */ + +#define CFG_TX_SCH_DELAY_NAME "gTxSchDelay" +#define CFG_TX_SCH_DELAY_MIN (0) +#define CFG_TX_SCH_DELAY_MAX (1) +#define CFG_TX_SCH_DELAY_DEFAULT (1) + /* * Type declarations */ @@ -15285,6 +15302,7 @@ struct hdd_config { bool enable_dtim_selection_diversity; uint32_t channel_select_logic_conc; bool enable_bt_chain_separation; + bool enable_tx_sch_delay; }; #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 89ec7918eec8..48c79545c1c3 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -5545,6 +5545,14 @@ struct reg_table_entry g_registry_table[] = { CFG_CHANNEL_SELECT_LOGIC_CONC_DEFAULT, CFG_CHANNEL_SELECT_LOGIC_CONC_MIN, CFG_CHANNEL_SELECT_LOGIC_CONC_MAX), + + REG_VARIABLE(CFG_TX_SCH_DELAY_NAME, + WLAN_PARAM_Integer, + struct hdd_config, enable_tx_sch_delay, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_TX_SCH_DELAY_DEFAULT, + CFG_TX_SCH_DELAY_MIN, + CFG_TX_SCH_DELAY_MAX), }; @@ -7441,6 +7449,9 @@ void hdd_cfg_print(struct hdd_context *hdd_ctx) hdd_debug("Name = [%s] value = [%d]", CFG_DTIM_SELECTION_DIVERSITY_NAME, hdd_ctx->config->enable_dtim_selection_diversity); + hdd_debug("Name = [%s] value = [%d]", + CFG_TX_SCH_DELAY_NAME, + hdd_ctx->config->enable_tx_sch_delay); hdd_cfg_print_11k_offload_params(hdd_ctx); hdd_debug("Name = [%s] value = [0x%x]", diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 0dbd50b932e3..2b86a5c150f8 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -4474,6 +4474,16 @@ int hdd_set_fw_params(struct hdd_adapter *adapter) goto error; } + ret = sme_cli_set_command( + adapter->session_id, + WMI_PDEV_PARAM_TX_SCH_DELAY, + hdd_ctx->config->enable_tx_sch_delay, + PDEV_CMD); + if (ret) { + hdd_err("Failed to set WMI_PDEV_PARAM_TX_SCH_DELAY"); + goto error; + } + if (adapter->device_mode == QDF_STA_MODE) { sme_set_smps_cfg(adapter->session_id, HDD_STA_SMPS_PARAM_UPPER_BRSSI_THRESH,