diff --git a/core/hdd/src/wlan_hdd_tsf.c b/core/hdd/src/wlan_hdd_tsf.c index 1702fb8a7d..9210c12696 100644 --- a/core/hdd/src/wlan_hdd_tsf.c +++ b/core/hdd/src/wlan_hdd_tsf.c @@ -436,7 +436,6 @@ void hdd_tsf_ext_gpio_sync_work(void *data) if (status != QDF_STATUS_SUCCESS) { hdd_err("cap tsf fail"); qdf_mc_timer_stop(&adapter->tsf.host_capture_req_timer); - qdf_mc_timer_destroy(&adapter->tsf.host_capture_req_timer); } } @@ -558,7 +557,6 @@ hdd_capture_tsf_internal_via_wmi(struct hdd_adapter *adapter, uint32_t *buf, hddctx->tsf.cap_tsf_context = NULL; qdf_atomic_set(&hddctx->tsf.cap_tsf_flag, 0); qdf_mc_timer_stop(&adapter->tsf.host_capture_req_timer); - qdf_mc_timer_destroy(&adapter->tsf.host_capture_req_timer); } return HDD_TSF_OP_SUCC; } @@ -630,7 +628,6 @@ wlan_hdd_tsf_reg_process_report(struct hdd_adapter *adapter, struct hdd_tsf_report *tsf_report) { struct hdd_vdev_tsf *tsf; - QDF_STATUS status; QDF_TIMER_STATE capture_req_timer_status; qdf_mc_timer_t *capture_timer; @@ -656,10 +653,6 @@ wlan_hdd_tsf_reg_process_report(struct hdd_adapter *adapter, } qdf_mc_timer_stop(capture_timer); - status = qdf_mc_timer_destroy(capture_timer); - if (status != QDF_STATUS_SUCCESS) - hdd_warn("destroy cap req timer fail, ret: %d", status); - tsf->cur_target_time = tsf_report->tsf; tsf->cur_tsf_sync_soc_time = tsf_report->tsf_sync_soc_time * NSEC_PER_USEC; @@ -753,9 +746,6 @@ static enum hdd_tsf_op_result hdd_capture_tsf_internal( hdd_info("+ioctl issue cap tsf cmd"); cap_timer = &adapter->tsf.host_capture_req_timer; - qdf_mc_timer_init(cap_timer, QDF_TIMER_TYPE_SW, - hdd_capture_req_timer_expired_handler, - (void *)adapter); qdf_mc_timer_start(cap_timer, WLAN_HDD_CAPTURE_TSF_REQ_TIMEOUT_MS); /* Reset TSF value for new capture */ @@ -902,9 +892,16 @@ enum hdd_tsf_op_result __hdd_stop_tsf_sync(struct hdd_adapter *adapter) ret = qdf_mc_timer_stop(&adapter->tsf.host_target_sync_timer); if (ret != QDF_STATUS_SUCCESS) { - hdd_err("Failed to stop timer, ret: %d", ret); + hdd_err("Failed to stop target timer, ret: %d", ret); return HDD_TSF_OP_FAIL; } + + ret = qdf_mc_timer_stop(&adapter->tsf.host_capture_req_timer); + if (ret != QDF_STATUS_SUCCESS) { + hdd_err("Failed to stop capture timer, ret: %d", ret); + return HDD_TSF_OP_FAIL; + } + hdd_tsf_stop_ext_gpio_sync(adapter); hdd_tsf_gpio_sync_work_deinit(adapter); return HDD_TSF_OP_SUCC; @@ -1653,7 +1650,6 @@ void hdd_capture_req_timer_expired_handler(void *arg) } tsf = &adapter->tsf; if (!hdd_tsf_is_initialized(adapter)) { - qdf_mc_timer_destroy(&tsf->host_capture_req_timer); hdd_warn("tsf not init"); return; } @@ -1669,7 +1665,6 @@ void hdd_capture_req_timer_expired_handler(void *arg) hdd_ctx->tsf.cap_tsf_context = NULL; qdf_atomic_set(&hdd_ctx->tsf.cap_tsf_flag, 0); - qdf_mc_timer_destroy(&tsf->host_capture_req_timer); sync_timer = &tsf->host_target_sync_timer; capture_req_timer_status = @@ -2062,7 +2057,17 @@ static enum hdd_tsf_op_result hdd_tsf_sync_init(struct hdd_adapter *adapter) hdd_capture_tsf_timer_expired_handler, (void *)adapter); if (ret != QDF_STATUS_SUCCESS) { - hdd_err("Failed to init timer, ret: %d", ret); + hdd_err("Failed to init target timer, ret: %d", ret); + goto fail; + } + + ret = qdf_mc_timer_init(&adapter->tsf.host_capture_req_timer, + QDF_TIMER_TYPE_SW, + hdd_capture_req_timer_expired_handler, + (void *)adapter); + if (ret != QDF_STATUS_SUCCESS) { + hdd_err("Failed to init capture timer, ret: %d", ret); + qdf_mc_timer_destroy(&adapter->tsf.host_target_sync_timer); goto fail; } @@ -2105,7 +2110,11 @@ static enum hdd_tsf_op_result hdd_tsf_sync_deinit(struct hdd_adapter *adapter) ret = qdf_mc_timer_destroy(&adapter->tsf.host_target_sync_timer); if (ret != QDF_STATUS_SUCCESS) - hdd_err("Failed to destroy timer, ret: %d", ret); + hdd_err("Failed to destroy target timer, ret: %d", ret); + + ret = qdf_mc_timer_destroy(&adapter->tsf.host_capture_req_timer); + if (ret != QDF_STATUS_SUCCESS) + hdd_err("Failed to destroy capture timer, ret: %d", ret); hddctx = WLAN_HDD_GET_CTX(adapter); @@ -2508,35 +2517,7 @@ enum hdd_tsf_op_result wlan_hdd_tsf_plus_init(struct hdd_context *hdd_ctx) static inline enum hdd_tsf_op_result wlan_hdd_tsf_plus_deinit(struct hdd_context *hdd_ctx) { - QDF_STATUS status; - QDF_TIMER_STATE capture_req_timer_status; - qdf_mc_timer_t *cap_timer; - struct hdd_adapter *adapter, *adapternode_ptr, *next_ptr; - wlan_hdd_tsf_plus_sock_ts_deinit(hdd_ctx); - - status = hdd_get_front_adapter(hdd_ctx, &adapternode_ptr); - - while (adapternode_ptr && QDF_STATUS_SUCCESS == status) { - adapter = adapternode_ptr; - status = - hdd_get_next_adapter(hdd_ctx, adapternode_ptr, &next_ptr); - adapternode_ptr = next_ptr; - if (adapter->tsf.host_capture_req_timer.state == 0) - continue; - cap_timer = &adapter->tsf.host_capture_req_timer; - capture_req_timer_status = - qdf_mc_timer_get_current_state(cap_timer); - - if (capture_req_timer_status != QDF_TIMER_STATE_UNUSED) { - qdf_mc_timer_stop(cap_timer); - status = - qdf_mc_timer_destroy(cap_timer); - if (status != QDF_STATUS_SUCCESS) - hdd_err("remove timer failed: %d", status); - } - } - return HDD_TSF_OP_SUCC; } @@ -2695,33 +2676,6 @@ enum hdd_tsf_op_result wlan_hdd_tsf_plus_init(struct hdd_context *hdd_ctx) static inline enum hdd_tsf_op_result wlan_hdd_tsf_plus_deinit(struct hdd_context *hdd_ctx) { - QDF_STATUS status; - QDF_TIMER_STATE capture_req_timer_status; - qdf_mc_timer_t *cap_timer; - struct hdd_adapter *adapter, *adapternode_ptr, *next_ptr; - - status = hdd_get_front_adapter(hdd_ctx, &adapternode_ptr); - - while (adapternode_ptr && QDF_STATUS_SUCCESS == status) { - adapter = adapternode_ptr; - status = - hdd_get_next_adapter(hdd_ctx, adapternode_ptr, &next_ptr); - adapternode_ptr = next_ptr; - if (adapter->tsf.host_capture_req_timer.state == 0) - continue; - cap_timer = &adapter->tsf.host_capture_req_timer; - capture_req_timer_status = - qdf_mc_timer_get_current_state(cap_timer); - - if (capture_req_timer_status != QDF_TIMER_STATE_UNUSED) { - qdf_mc_timer_stop(cap_timer); - status = - qdf_mc_timer_destroy(cap_timer); - if (status != QDF_STATUS_SUCCESS) - hdd_err_rl("remove timer failed: %d", status); - } - } - return HDD_TSF_OP_SUCC; } #else @@ -3182,7 +3136,6 @@ int hdd_get_tsf_cb(void *pcb_cxt, struct stsf *ptsf) struct hdd_adapter *adapter; int ret; uint64_t tsf_sync_soc_time; - QDF_STATUS status; QDF_TIMER_STATE capture_req_timer_status; qdf_mc_timer_t *capture_timer; struct hdd_vdev_tsf *tsf; @@ -3232,10 +3185,6 @@ int hdd_get_tsf_cb(void *pcb_cxt, struct stsf *ptsf) } qdf_mc_timer_stop(capture_timer); - status = qdf_mc_timer_destroy(capture_timer); - if (status != QDF_STATUS_SUCCESS) - hdd_warn("destroy cap req timer fail, ret: %d", status); - tsf->cur_target_time = ((uint64_t)ptsf->tsf_high << 32 | ptsf->tsf_low);