From 3dc03f2b086e597881645b4b7cd51270010d8f67 Mon Sep 17 00:00:00 2001 From: Vignesh U Date: Thu, 3 Dec 2020 14:51:56 +0530 Subject: [PATCH] qca-wifi: Deliver PreCAC events to the user space Deliver the PreCAC event PRECAC_STARTED when the zero cac timer and the ADFS timer are started. Deliver the PreCAC event PRECAC_COMPLETED when the dfs channels are marked as PreCAC Done in the PreCAC tree. Change-Id: I47b2ab6914df0bdaad7d426a88ae05b65155eeb0 CRs-Fixed: 2823532 --- umac/dfs/core/src/misc/dfs_precac_list.c | 4 ++++ umac/dfs/core/src/misc/dfs_zero_cac.c | 27 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/umac/dfs/core/src/misc/dfs_precac_list.c b/umac/dfs/core/src/misc/dfs_precac_list.c index 57eb887e0d..46dd1979fa 100644 --- a/umac/dfs/core/src/misc/dfs_precac_list.c +++ b/umac/dfs/core/src/misc/dfs_precac_list.c @@ -1392,6 +1392,10 @@ void dfs_mark_precac_done_for_freq(struct wlan_dfs *dfs, (precac_entry->bw/2))) { dfs_mark_tree_node_as_cac_done_for_freq (dfs, precac_entry, channels[i]); + utils_dfs_deliver_event(dfs->dfs_pdev_obj, + channels[i], + WLAN_EV_PCAC_COMPLETED); + break; } } diff --git a/umac/dfs/core/src/misc/dfs_zero_cac.c b/umac/dfs/core/src/misc/dfs_zero_cac.c index f275b52661..e0ee100bab 100644 --- a/umac/dfs/core/src/misc/dfs_zero_cac.c +++ b/umac/dfs/core/src/misc/dfs_zero_cac.c @@ -1110,6 +1110,10 @@ void dfs_start_agile_precac_timer(struct wlan_dfs *dfs, enum phy_ch_width chwidth = adfs_param->precac_chwidth; uint32_t min_precac_timeout, max_precac_timeout; struct dfs_soc_priv_obj *dfs_soc_obj; + uint8_t n_sub_chans; + uint8_t i; + qdf_freq_t sub_chans[N_SUBCHANS_FOR_160BW]; + dfs_soc_obj = dfs->dfs_soc_obj; dfs_soc_obj->dfs_precac_timer_running = 1; @@ -1141,6 +1145,17 @@ void dfs_start_agile_precac_timer(struct wlan_dfs *dfs, * FW OCAC completion event and HOST timer firing at same time. */ if (min_precac_timeout) min_precac_timeout += EXTRA_TIME_IN_MS; + n_sub_chans = + dfs_find_subchannels_for_center_freq( + adfs_param->precac_center_freq_1, + adfs_param->precac_center_freq_2, + adfs_param->precac_chwidth, + sub_chans); + for (i = 0; i < n_sub_chans; i++) + utils_dfs_deliver_event(dfs->dfs_pdev_obj, + sub_chans[i], + WLAN_EV_PCAC_STARTED); + qdf_timer_mod(&dfs_soc_obj->dfs_precac_timer, min_precac_timeout); } #endif @@ -1160,6 +1175,9 @@ void dfs_start_precac_timer_for_freq(struct wlan_dfs *dfs, int secondary_cac_timeout; int precac_timeout; struct dfs_soc_priv_obj *dfs_soc_obj; + uint8_t n_sub_chans; + qdf_freq_t sub_chans[N_SUBCHANS_FOR_160BW]; + uint8_t i; dfs_soc_obj = dfs->dfs_soc_obj; dfs_soc_obj->cur_agile_dfs_index = dfs->dfs_psoc_idx; @@ -1226,6 +1244,15 @@ void dfs_start_precac_timer_for_freq(struct wlan_dfs *dfs, dfs_debug(dfs, WLAN_DEBUG_DFS, "precactimeout = %d", (precac_timeout)*1000); + n_sub_chans = dfs_find_subchannels_for_center_freq(precac_chan_freq, + 0, + CH_WIDTH_80MHZ, + sub_chans); + for (i = 0; i < n_sub_chans; i++) + utils_dfs_deliver_event(dfs->dfs_pdev_obj,\ + sub_chans[i], + WLAN_EV_PCAC_STARTED); + qdf_timer_mod(&dfs_soc_obj->dfs_precac_timer, (precac_timeout) * 1000); } #endif