Browse Source

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
Ashish Kumar Dhanotiya 7 years ago
parent
commit
48dac7d63b
3 changed files with 39 additions and 0 deletions
  1. 18 0
      core/hdd/inc/wlan_hdd_cfg.h
  2. 11 0
      core/hdd/src/wlan_hdd_cfg.c
  3. 10 0
      core/hdd/src/wlan_hdd_main.c

+ 18 - 0
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)
 
+/*
+ * <ini>
+ * gTxSchDelay - Enable/Disable Tx sch delay
+ * @Min: 0
+ * @Max: 1
+ * @Default: 1
+ *
+ * Usage: Internal/External
+ *
+ * </ini>
+ */
+
+#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))

+ 11 - 0
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]",

+ 10 - 0
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,