qcacmn: Replace qdf timers with HR timer for preCAC timeout

Replace qdf timers with HR timer for pre CAC timeout and process
the preCAC completion work in workqueuecontext.

Since preCAC expiry is processed in H/W interrupt context
(while using HR timers), no other timer cancellation is allowed
('qdf_hrtimer_cancel' function will wait for the handler finish)

But if we  process the preCAC timer completion work in H/W context,
other timer cancellation will take time. To fix this, process the
preCAC completion work in workqueue context to allow other timer
cancellation.

CRs-Fixed: 3185213
Change-Id: Iaa24055e0d485f613e16d6110d22002fecf10821
此提交包含在:
Jithender Miryala
2022-03-10 17:27:16 +05:30
提交者 Madan Koyyalamudi
父節點 8b89b06a6a
當前提交 dccc154314

查看文件

@@ -1337,6 +1337,7 @@ struct wlan_dfs_priv {
* @cur_dfs_index: index of the current dfs object using the Agile Engine.
* It is used to index struct wlan_dfs_priv dfs_priv[] array.
* @dfs_precac_timer: agile precac timer
* @dfs_precac_completion_work: workqueue to process the precac timeout.
* @dfs_precac_timer_running: precac timer running flag
* @ocac_status: Off channel CAC complete status
* @dfs_nol_ctx: dfs NOL data for all radios.
@@ -1354,7 +1355,8 @@ struct dfs_soc_priv_obj {
struct wlan_dfs_priv dfs_priv[WLAN_UMAC_MAX_PDEVS];
uint8_t num_dfs_privs;
uint8_t cur_agile_dfs_index;
qdf_timer_t dfs_precac_timer;
qdf_hrtimer_data_t dfs_precac_timer;
qdf_work_t dfs_precac_completion_work;
uint8_t dfs_precac_timer_running;
bool precac_state_started;
bool ocac_status;
@@ -2959,6 +2961,14 @@ void dfs_complete_deferred_tasks(struct wlan_dfs *dfs);
*/
void dfs_process_cac_completion(void *context);
/**
* dfs_process_precac_completion() - Process DFS preCAC completion event.
* @dfs_soc_obj: Pointer to dfs_soc_obj object.
*
* Return: void.
*/
void dfs_process_precac_completion(void *context);
#ifdef WLAN_DFS_TRUE_160MHZ_SUPPORT
/**
* dfs_is_true_160mhz_supported() - Find if true 160MHz is supported.