diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 744acb5e840c..180bcb0ddd95 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -5098,6 +5098,24 @@ enum hdd_link_speed_rpt_type { #define CFG_CHANGE_CHANNEL_BANDWIDTH_MAX (1) #define CFG_CHANGE_CHANNEL_BANDWIDTH_DEFAULT (0) +/* + * + * gRemoveTimeStampSyncCmd - Enable/Disable to remove time stamp sync cmd + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to enable/disable the removal of time stamp sync cmd + * + * Usage: External + * + * + */ +#define CFG_REMOVE_TIME_STAMP_SYNC_CMD_NAME "gRemoveTimeStampSyncCmd" +#define CFG_REMOVE_TIME_STAMP_SYNC_CMD_MIN (0) +#define CFG_REMOVE_TIME_STAMP_SYNC_CMD_MAX (1) +#define CFG_REMOVE_TIME_STAMP_SYNC_CMD_DEFAULT (0) + /* * Type declarations */ @@ -5481,6 +5499,7 @@ struct hdd_config { uint8_t num_vdevs; uint8_t enable_concurrent_sta[CFG_CONCURRENT_IFACE_MAX_LEN]; uint8_t dbs_scan_selection[CFG_DBS_SCAN_PARAM_LENGTH]; + uint8_t remove_time_stamp_sync_cmd; }; #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 60bcbfc21ba6..c17f84136049 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -1434,6 +1434,13 @@ struct reg_table_entry g_registry_table[] = { CFG_MWS_COEX_5G_NR_PWR_LIMIT_MIN, CFG_MWS_COEX_5G_NR_PWR_LIMIT_MAX), #endif + + REG_VARIABLE(CFG_REMOVE_TIME_STAMP_SYNC_CMD_NAME, WLAN_PARAM_Integer, + struct hdd_config, remove_time_stamp_sync_cmd, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_REMOVE_TIME_STAMP_SYNC_CMD_DEFAULT, + CFG_REMOVE_TIME_STAMP_SYNC_CMD_MIN, + CFG_REMOVE_TIME_STAMP_SYNC_CMD_MAX), }; @@ -2753,6 +2760,15 @@ bool hdd_update_config_cfg(struct hdd_context *hdd_ctx) status = false; hdd_err("Couldn't pass on WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED to CFG"); } + + if (sme_cfg_set_int(mac_handle, + WNI_CFG_REMOVE_TIME_SYNC_CMD, + config->remove_time_stamp_sync_cmd) + == QDF_STATUS_E_FAILURE) { + status = false; + hdd_err("Couldn't pass on WNI_CFG_REMOVE_TIME_SYNC_CMD to CFG"); + } + return status; } diff --git a/core/mac/inc/wni_cfg.h b/core/mac/inc/wni_cfg.h index e8453af3eae0..b0f084fd219e 100644 --- a/core/mac/inc/wni_cfg.h +++ b/core/mac/inc/wni_cfg.h @@ -49,6 +49,7 @@ enum { WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT, WNI_CFG_OBSS_DETECTION_OFFLOAD, WNI_CFG_OBSS_COLOR_COLLISION_OFFLOAD, + WNI_CFG_REMOVE_TIME_SYNC_CMD, /* Any new items to be added should be above this strictly */ CFG_PARAM_MAX_NUM }; @@ -418,6 +419,10 @@ enum { #define WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT_STAMAX 255 #define WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT_STADEF 50 +#define WNI_CFG_REMOVE_TIME_SYNC_CMD_STAMIN 0 +#define WNI_CFG_REMOVE_TIME_SYNC_CMD_STAMAX 1 +#define WNI_CFG_REMOVE_TIME_SYNC_CMD_STADEF 0 + #define CFG_STA_MAGIC_DWORD 0xbeefbeef #endif diff --git a/core/mac/src/cfg/cfg_proc_msg.c b/core/mac/src/cfg/cfg_proc_msg.c index 1a916a3c971a..5ec531c1c116 100644 --- a/core/mac/src/cfg/cfg_proc_msg.c +++ b/core/mac/src/cfg/cfg_proc_msg.c @@ -142,6 +142,11 @@ cgstatic cfg_static[CFG_PARAM_MAX_NUM] = { {WNI_CFG_OBSS_COLOR_COLLISION_OFFLOAD, CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT, 0, 1, 0}, + {WNI_CFG_REMOVE_TIME_SYNC_CMD, + CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT, + WNI_CFG_REMOVE_TIME_SYNC_CMD_STAMIN, + WNI_CFG_REMOVE_TIME_SYNC_CMD_STAMAX, + WNI_CFG_REMOVE_TIME_SYNC_CMD_STADEF}, }; diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index c82f6f333725..190cebdbb0fb 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -4298,6 +4298,8 @@ QDF_STATUS wma_start(void) tp_wma_handle wma_handle; int status; struct wmi_unified *wmi_handle; + struct mac_context *mac = NULL; + uint32_t cfg_val; WMA_LOGD("%s: Enter", __func__); @@ -4316,6 +4318,12 @@ QDF_STATUS wma_start(void) goto end; } + mac = cds_get_context(QDF_MODULE_ID_PE); + if (!mac) { + WMA_LOGE("%s: Invalid mac context", __func__); + goto end; + } + status = wmi_unified_register_event_handler(wmi_handle, wmi_roam_event_id, wma_roam_event_callback, @@ -4455,22 +4463,25 @@ QDF_STATUS wma_start(void) goto end; } - if (cds_get_conparam() != QDF_GLOBAL_FTM_MODE) { - /* Initialize firmware time stamp sync timer */ - qdf_status = - qdf_mc_timer_init(&wma_handle->wma_fw_time_sync_timer, - QDF_TIMER_TYPE_SW, - wma_send_time_stamp_sync_cmd, - wma_handle); - if (QDF_IS_STATUS_ERROR(qdf_status)) { - WMA_LOGE(FL("Failed to initialize firmware time stamp sync timer")); - goto end; + if (wlan_cfg_get_int(mac, WNI_CFG_REMOVE_TIME_SYNC_CMD, + &cfg_val) == QDF_STATUS_SUCCESS) { + if (cfg_val == 0 && cds_get_conparam() != QDF_GLOBAL_FTM_MODE) { + /* Initialize firmware time stamp sync timer */ + qdf_status = + qdf_mc_timer_init( + &wma_handle->wma_fw_time_sync_timer, + QDF_TIMER_TYPE_SW, + wma_send_time_stamp_sync_cmd, + wma_handle); + if (QDF_IS_STATUS_ERROR(qdf_status)) { + WMA_LOGE("Failed to init fw time sync timer"); + goto end; + } + + /* Start firmware time stamp sync timer */ + wma_send_time_stamp_sync_cmd(wma_handle); } - - /* Start firmware time stamp sync timer */ - wma_send_time_stamp_sync_cmd(wma_handle); } - /* Initialize log completion timeout */ qdf_status = qdf_mc_timer_init(&wma_handle->log_completion_timer, QDF_TIMER_TYPE_SW, @@ -4570,6 +4581,8 @@ QDF_STATUS wma_stop(void) tp_wma_handle wma_handle; QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; int i; + struct mac_context *mac = NULL; + uint32_t cfg_val; wma_handle = cds_get_context(QDF_MODULE_ID_WMA); WMA_LOGD("%s: Enter", __func__); @@ -4579,6 +4592,11 @@ QDF_STATUS wma_stop(void) qdf_status = QDF_STATUS_E_INVAL; goto end; } + mac = cds_get_context(QDF_MODULE_ID_PE); + if (!mac) { + WMA_LOGE("%s: Invalid mac context", __func__); + goto end; + } #ifdef QCA_WIFI_FTM /* * Tx mgmt detach requires TXRX context which is not created @@ -4611,12 +4629,15 @@ QDF_STATUS wma_stop(void) } } - if (cds_get_conparam() != QDF_GLOBAL_FTM_MODE) { - /* Destroy firmware time stamp sync timer */ - qdf_status = qdf_mc_timer_destroy( + if (wlan_cfg_get_int(mac, WNI_CFG_REMOVE_TIME_SYNC_CMD, + &cfg_val) == QDF_STATUS_SUCCESS) { + if (cfg_val == 0 && cds_get_conparam() != QDF_GLOBAL_FTM_MODE) { + /* Destroy firmware time stamp sync timer */ + qdf_status = qdf_mc_timer_destroy( &wma_handle->wma_fw_time_sync_timer); - if (QDF_IS_STATUS_ERROR(qdf_status)) - WMA_LOGE(FL("Failed to destroy the fw time sync timer")); + if (QDF_IS_STATUS_ERROR(qdf_status)) + WMA_LOGE("Failed to destory fw sync timer"); + } } qdf_status = wma_tx_detach(wma_handle);