xref: /wlan-dirver/qca-wifi-host-cmn/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h (revision 2888b71da71bce103343119fa1b31f4a0cee07c8)
1 /*
2  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  *
6  * Permission to use, copy, modify, and/or distribute this software for
7  * any purpose with or without fee is hereby granted, provided that the
8  * above copyright notice and this permission notice appear in all
9  * copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
12  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
13  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
14  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
15  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
16  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
17  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
18  * PERFORMANCE OF THIS SOFTWARE.
19  */
20 
21 /**
22  * DOC: This file has the DFS dispatcher API which is exposed to outside of DFS
23  * component.
24  */
25 
26 #ifndef _WLAN_DFS_UCFG_API_H_
27 #define _WLAN_DFS_UCFG_API_H_
28 
29 #include <wlan_objmgr_psoc_obj.h>
30 #include <wlan_objmgr_pdev_obj.h>
31 #include <wlan_dfs_ioctl.h>
32 #include <wlan_dfs_public_struct.h>
33 
34 /**
35  * struct dfs_to_mlme - These are MLME function pointer used by DFS component.
36  * @pdev_component_obj_attach:         Attach DFS object to PDEV.
37  * @pdev_component_obj_detach:         Detach DFS object from PDEV.
38  * @pdev_get_comp_private_obj:         Get DFS object from PDEV.
39  * @dfs_start_rcsa:                    Send RCSA to RootAP.
40  * @mlme_proc_cac:                     Process the CAC completion event.
41  * @mlme_deliver_event_up_after_cac:   Send a CAC timeout, VAP up event to user
42  *                                     space
43  * @mlme_set_no_chans_available:       Sets no_chans_available flag.
44  * @mlme_ieee2mhz:                     Gets Channel freq from ieee number.
45  * @mlme_dfs_ch_flags_ext:             Gets channel extension flag.
46  * @mlme_channel_change_by_precac:     Channel change triggered by PreCAC.
47  * @mlme_nol_timeout_notification:     NOL timeout notification.
48  * @mlme_clist_update:                 Updates the channel list.
49  * @mlme_is_opmode_sta:                Check if pdev opmode is STA.
50  * @mlme_rebuild_chan_list_with_non_dfs_channel: Rebuild channels with non-dfs
51  *                                     channels.
52  * @mlme_restart_vaps_with_non_dfs_chan: Restart vaps with non-dfs channel.
53  * @mlme_check_allowed_prim_chanlist:  Check whether the given channel is
54  *                                     present in the primary allowed channel
55  *                                     list or not.
56  * @mlme_update_scan_channel_list:     Update the scan channel list sent to FW.
57  * @mlme_bringdown_vaps:               Bringdown vaps if no chans is present.
58  * @mlme_dfs_deliver_event:            Deliver DFS events to user space
59  * @mlme_precac_chan_change_csa_for_freq:Channel change triggered by PrCAC using
60  *                                     Channel Switch Announcement.
61  * @mlme_postnol_chan_switch:          Channel change post NOL using Channel
62  *                                     Switch Announcement.
63  * @mlme_mark_dfs:                     Mark DFS channel frequency as radar.
64  * @mlme_get_extchan_for_freq:         Get the extension channel.
65  * @mlme_find_dot11_chan_for_freq:     Find a channel pointer.
66  * @mlme_get_dfs_channels_for_freq:    Get DFS channels from current channel
67  *                                     list.
68  * @mlme_get_cac_timeout_for_freq:     Get CAC timeout for a given channel
69  *                                     frequency.
70  * @mlme_acquire_radar_mode_switch_lock: Acquire lock for radar processing over
71  *                                     mode switch.
72  * @mlme_release_radar_mode_switch_lock: Release lock taken for radar processing
73  *                                     over mode switch.
74  */
75 struct dfs_to_mlme {
76 	QDF_STATUS (*pdev_component_obj_attach)(struct wlan_objmgr_pdev *pdev,
77 			enum wlan_umac_comp_id id,
78 			void *comp_priv_obj,
79 			QDF_STATUS status);
80 	QDF_STATUS (*pdev_component_obj_detach)(struct wlan_objmgr_pdev *pdev,
81 			enum wlan_umac_comp_id id,
82 			void *comp_priv_obj);
83 	QDF_STATUS (*dfs_start_rcsa)(struct wlan_objmgr_pdev *pdev,
84 			bool *wait_for_csa);
85 	QDF_STATUS (*mlme_mark_dfs)(struct wlan_objmgr_pdev *pdev,
86 			uint8_t ieee,
87 			uint16_t freq,
88 			uint16_t vhtop_ch_freq_seg2,
89 			uint64_t flags,
90 			uint16_t dfs_radar_bitmap);
91 #ifdef CONFIG_CHAN_FREQ_API
92 	QDF_STATUS (*mlme_start_csa_for_freq)(struct wlan_objmgr_pdev *pdev,
93 					      uint8_t ieee_chan, uint16_t freq,
94 					      uint16_t cfreq2, uint64_t flags);
95 #endif
96 
97 	QDF_STATUS (*mlme_proc_cac)(struct wlan_objmgr_pdev *pdev);
98 	QDF_STATUS (*mlme_deliver_event_up_after_cac)(
99 			struct wlan_objmgr_pdev *pdev);
100 #ifdef CONFIG_CHAN_FREQ_API
101 	QDF_STATUS (*mlme_get_extchan_for_freq)(struct wlan_objmgr_pdev *pdev,
102 						uint16_t *dfs_ch_freq,
103 						uint64_t *dfs_ch_flags,
104 						uint16_t *dfs_ch_flagext,
105 						uint8_t *dfs_ch_ieee,
106 						uint8_t *dfs_vhtop_ch_freq_seg1,
107 						uint8_t *dfs_vhtop_ch_freq_seg2,
108 						uint16_t *dfs_ch_mhz_freq_seg1,
109 						uint16_t *dfs_ch_mhz_freq_seg2);
110 #endif
111 	QDF_STATUS (*mlme_set_no_chans_available)(struct wlan_objmgr_pdev *pdev,
112 			int val);
113 	QDF_STATUS (*mlme_ieee2mhz)(struct wlan_objmgr_pdev *pdev,
114 			int ieee,
115 			uint64_t flag,
116 			int *freq);
117 #ifdef CONFIG_CHAN_FREQ_API
118 	QDF_STATUS (*mlme_find_dot11_chan_for_freq)(struct wlan_objmgr_pdev *,
119 						    uint16_t freq,
120 						    uint16_t des_cfreq2_mhz,
121 						    int mode,
122 						    uint16_t *dfs_ch_freq,
123 						    uint64_t *dfs_ch_flags,
124 						    uint16_t *dfs_ch_flagext,
125 						    uint8_t *dfs_ch_ieee,
126 						    uint8_t *dfs_ch_freq_seg1,
127 						    uint8_t *dfs_ch_freq_seg2,
128 						    uint16_t *dfs_cfreq1_mhz,
129 						    uint16_t *dfs_cfreq2_mhz);
130 #endif
131 #ifdef CONFIG_CHAN_FREQ_API
132 	QDF_STATUS (*mlme_get_dfs_channels_for_freq)(
133 			struct wlan_objmgr_pdev *pdev,
134 			uint16_t *dfs_chan_freq,
135 			uint64_t *dfs_chan_flags,
136 			uint16_t *dfs_chan_flagext,
137 			uint8_t *dfs_chan_ieee,
138 			uint8_t *dfs_chan_vhtop_ch_freq_seg1,
139 			uint8_t *dfs_chan_vhtop_ch_freq_seg2,
140 			uint16_t *dfs_chan_mhz_freq_seg1,
141 			uint16_t *dfs_chan_mhz_freq_seg2,
142 			int index);
143 #endif
144 	QDF_STATUS (*mlme_dfs_ch_flags_ext)(struct wlan_objmgr_pdev *pdev,
145 			uint16_t *flag_ext);
146 	QDF_STATUS (*mlme_channel_change_by_precac)(
147 			struct wlan_objmgr_pdev *pdev);
148 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
149 #ifdef CONFIG_CHAN_FREQ_API
150 	QDF_STATUS
151 	    (*mlme_precac_chan_change_csa_for_freq)(struct wlan_objmgr_pdev *,
152 						    uint16_t des_chan_freq,
153 						    uint16_t des_cfreq2,
154 						    enum wlan_phymode des_mode);
155 #endif
156 #endif
157 #if defined(QCA_SUPPORT_DFS_CHAN_POSTNOL) || defined(QCA_DFS_BW_EXPAND)
158 	QDF_STATUS
159 	(*mlme_postnol_chan_switch)(struct wlan_objmgr_pdev *pdev,
160 				    qdf_freq_t des_chan_freq,
161 				    qdf_freq_t des_cfreq2,
162 				    enum wlan_phymode des_mode);
163 #endif
164 	QDF_STATUS (*mlme_nol_timeout_notification)(
165 			struct wlan_objmgr_pdev *pdev);
166 	QDF_STATUS (*mlme_clist_update)(struct wlan_objmgr_pdev *pdev,
167 			void *nollist,
168 			int nentries);
169 	bool (*mlme_is_opmode_sta)(struct wlan_objmgr_pdev *pdev);
170 #ifdef CONFIG_CHAN_FREQ_API
171 	QDF_STATUS
172 	    (*mlme_get_cac_timeout_for_freq)(struct wlan_objmgr_pdev *pdev,
173 					     uint16_t dfs_ch_freq,
174 					     uint16_t c_vhtop_ch_freq_seg2,
175 					     uint64_t dfs_ch_flags,
176 					     int *cac_timeout);
177 #endif
178 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
179 	QDF_STATUS (*mlme_rebuild_chan_list_with_non_dfs_channels)
180 			(struct wlan_objmgr_pdev *pdev);
181 #endif
182 	QDF_STATUS (*mlme_restart_vaps_with_non_dfs_chan)
183 			(struct wlan_objmgr_pdev *pdev, int no_chans_avail);
184 	bool (*mlme_check_allowed_prim_chanlist)
185 			(struct wlan_objmgr_pdev *pdev, uint32_t chan);
186 	QDF_STATUS (*mlme_update_scan_channel_list)
187 			(struct wlan_objmgr_pdev *pdev);
188 	QDF_STATUS (*mlme_bringdown_vaps)
189 			(struct wlan_objmgr_pdev *pdev);
190 	void (*mlme_dfs_deliver_event)
191 			(struct wlan_objmgr_pdev *pdev,
192 			 uint16_t freq,
193 			 enum WLAN_DFS_EVENTS event);
194 	bool (*mlme_is_inter_band_chan_switch_allowed)
195 			(struct wlan_objmgr_pdev *pdev);
196 	void (*mlme_acquire_radar_mode_switch_lock)
197 			(struct wlan_objmgr_pdev *pdev);
198 	void (*mlme_release_radar_mode_switch_lock)
199 			(struct wlan_objmgr_pdev *pdev);
200 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
201 	QDF_STATUS (*mlme_proc_spoof_success)
202 			(struct wlan_objmgr_pdev *pdev);
203 #endif
204 };
205 
206 extern struct dfs_to_mlme global_dfs_to_mlme;
207 
208 /**
209  * wlan_dfs_pdev_obj_create_notification() - DFS pdev object create handler.
210  * @pdev: Pointer to DFS pdev object.
211  */
212 QDF_STATUS wlan_dfs_pdev_obj_create_notification(struct wlan_objmgr_pdev *pdev,
213 		void *arg);
214 
215 /**
216  * wlan_dfs_pdev_obj_destroy_notification() - DFS pdev object delete handler.
217  * @pdev: Pointer to DFS pdev object.
218  */
219 QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev,
220 		void *arg);
221 
222 /**
223  * ucfg_dfs_is_ap_cac_timer_running() - Returns the dfs cac timer.
224  * @pdev: Pointer to DFS pdev object.
225  * @is_ap_cac_timer_running: Pointer to save dfs_cac_timer_running value.
226  *
227  * Wrapper function for dfs_is_ap_cac_timer_running().
228  * This function called from outside of dfs component.
229  */
230 QDF_STATUS ucfg_dfs_is_ap_cac_timer_running(struct wlan_objmgr_pdev *pdev,
231 		int *is_ap_cac_timer_running);
232 
233 /**
234  * ucfg_dfs_getnol() - Wrapper function for dfs_get_nol()
235  * @pdev: Pointer to DFS pdev object.
236  * @dfs_nolinfo: Pointer to dfsreq_nolinfo structure.
237  *
238  * Wrapper function for dfs_getnol().
239  * This function called from outside of dfs component.
240  */
241 QDF_STATUS ucfg_dfs_getnol(struct wlan_objmgr_pdev *pdev, void *dfs_nolinfo);
242 
243 /**
244  * ucfg_dfs_override_cac_timeout() -  Override the default CAC timeout.
245  * @pdev: Pointer to DFS pdev object.
246  * @cac_timeout: CAC timeout value.
247  *
248  * Wrapper function for dfs_override_cac_timeout().
249  * This function called from outside of dfs component.
250  */
251 QDF_STATUS ucfg_dfs_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
252 		int cac_timeout, int *status);
253 
254 /**
255  * ucfg_dfs_get_override_cac_timeout() -  Get override CAC timeout value.
256  * @pdev: Pointer to DFS pdev object.
257  * @cac_timeout: Pointer to save the CAC timeout value.
258  *
259  * Wrapper function for dfs_get_override_cac_timeout().
260  * This function called from outside of dfs component.
261  */
262 QDF_STATUS ucfg_dfs_get_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
263 		int *cac_timeout, int *status);
264 
265 /**
266  * ucfg_dfs_get_override_precac_timeout() - Get precac timeout.
267  * @pdev: Pointer to DFS pdev object.
268  * @precac_timeout: Get precac timeout value in this variable.
269  *
270  * Wrapper function for dfs_get_override_precac_timeout().
271  * This function called from outside of dfs component.
272  */
273 QDF_STATUS ucfg_dfs_get_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
274 		int *precac_timeout);
275 
276 /**
277  * ucfg_dfs_override_precac_timeout() - Override the default precac timeout.
278  * @pdev: Pointer to DFS pdev object.
279  * @precac_timeout: Precac timeout value.
280  *
281  * Wrapper function for dfs_override_precac_timeout().
282  * This function called from outside of dfs component.
283  */
284 QDF_STATUS ucfg_dfs_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
285 		int precac_timeout);
286 
287 /**
288  * ucfg_dfs_set_precac_enable() - Set precac enable flag.
289  * @pdev: Pointer to DFS pdev object.
290  * @value: input value for dfs_legacy_precac_ucfg flag.
291  *
292  * Wrapper function for dfs_set_precac_enable().
293  * This function called from outside of dfs component.
294  */
295 QDF_STATUS ucfg_dfs_set_precac_enable(struct wlan_objmgr_pdev *pdev,
296 				      uint32_t value);
297 
298 /**
299  * ucfg_dfs_get_agile_precac_enable() - Get agile precac enable flag.
300  * @pdev: Pointer to DFS pdev object.
301  * @buff: Pointer to save dfs_agile_precac_ucfg value.
302  *
303  * Wrapper function for dfs_is_legacy_precac_enabled().
304  * This function called from outside of dfs component.
305  *
306  * Return:
307  * * QDF_STATUS_SUCCESS: Successfully able to get agile precac flag.
308  * * QDF_STATUS_E_FAILURE: Failed to get agile precac flag.
309  */
310 QDF_STATUS ucfg_dfs_get_agile_precac_enable(struct wlan_objmgr_pdev *pdev,
311 					    bool *buff);
312 
313 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
314 /**
315  * ucfg_dfs_set_precac_intermediate_chan() - Set intermediate channel
316  *                                           for preCAC.
317  * @pdev: Pointer to DFS pdev object.
318  * @value: Channel number of intermediate channel
319  *
320  * Wrapper function for dfs_set_precac_intermediate_chan().
321  * This function is called from outside of dfs component.
322  *
323  * Return:
324  * * QDF_STATUS_SUCCESS  : Successfully set intermediate channel.
325  * * QDF_STATUS_E_FAILURE: Failed to set intermediate channel.
326  */
327 QDF_STATUS ucfg_dfs_set_precac_intermediate_chan(struct wlan_objmgr_pdev *pdev,
328 						 uint32_t value);
329 
330 /**
331  * ucfg_dfs_get_precac_intermediate_chan() - Get intermediate channel
332  *						for preCAC.
333  * @pdev: Pointer to DFS pdev object.
334  * @buff: Pointer to Channel number of intermediate channel.
335  *
336  * Wrapper function for dfs_get_precac_intermediate_chan().
337  * This function is called from outside of dfs component.
338  *
339  * Return: Configured intermediate precac channel.
340  */
341 QDF_STATUS ucfg_dfs_get_precac_intermediate_chan(struct wlan_objmgr_pdev *pdev,
342 						 int *buff);
343 
344 /**
345  * ucfg_dfs_get_precac_chan_state_for_freq() - Get precac status for the
346  * given channel.
347  * @pdev: Pointer to DFS pdev object.
348  * @precac_chan: Channel frequency for which precac state needs to be
349  *               determined.
350  *
351  * Wrapper function for dfs_get_precac_chan_state_for_freq().
352  * This function called from outside of dfs component.
353  *
354  * Return: Precac state of the given channel.
355  */
356 #ifdef CONFIG_CHAN_FREQ_API
357 enum precac_chan_state
358 ucfg_dfs_get_precac_chan_state_for_freq(struct wlan_objmgr_pdev *pdev,
359 					uint16_t precac_freq);
360 #endif
361 
362 #endif
363 
364 #ifdef MOBILE_DFS_SUPPORT
365 /**
366  * ucfg_dfs_update_config() - Update DFS user config.
367  * @psoc: Pointer to psoc.
368  * @req: DFS user config.
369  *
370  * Return: QDF_STATUS
371  */
372 QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc,
373 		struct dfs_user_config *req);
374 #else
375 static inline QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc,
376 		struct dfs_user_config *req)
377 {
378 	return QDF_STATUS_SUCCESS;
379 }
380 #endif
381 
382 /**
383  * ucfg_dfs_set_override_status_timeout() - override the value of host dfs
384  * status wait timeout.
385  * @pdev: Pointer to DFS pdev object.
386  * @status_timeout: timeout value.
387  *
388  * Wrapper function for dfs_set_override_status_timeout().
389  * This function called from outside of dfs component.
390  *
391  * Return: QDF_STATUS
392  */
393 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
394 QDF_STATUS ucfg_dfs_set_override_status_timeout(struct wlan_objmgr_pdev *pdev,
395 					    int status_timeout);
396 #else
397 static inline
398 QDF_STATUS ucfg_dfs_set_override_status_timeout(struct wlan_objmgr_pdev *pdev,
399 					    int status_timeout)
400 {
401 	return QDF_STATUS_SUCCESS;
402 }
403 #endif
404 
405 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(WLAN_DFS_SYNTHETIC_RADAR)
406 /**
407  * ucfg_dfs_allow_hw_pulses() - Set or unset dfs-allow_hw_pulses
408  * which isolates synthetic radar pulse detection from actual radar detection.
409  * @pdev: Pointer to DFS pdev object.
410  * @allow_hw_pulses: Allow synthetic pulse detection true/false.
411  *
412  * Wrapper function for dfs_set_allow_hw_pulses().
413  * This function called from outside of dfs component.
414  *
415  * Return: void
416  */
417 void ucfg_dfs_allow_hw_pulses(struct wlan_objmgr_pdev *pdev,
418 			      bool allow_hw_pulses);
419 
420 /**
421  * ucfg_dfs_is_hw_pulses_allowed() - Check if actual radar detection is allowed
422  * or synthetic pulse detection is enabled.
423  * @pdev: Pointer to DFS pdev object.
424  *
425  * Wrapper function for dfs_is_hw_pulses_allowed().
426  * This function called from outside of dfs component.
427  *
428  * Return: bool
429  */
430 bool ucfg_dfs_is_hw_pulses_allowed(struct wlan_objmgr_pdev *pdev);
431 #else
432 static inline
433 void ucfg_dfs_allow_hw_pulses(struct wlan_objmgr_pdev *pdev,
434 			      bool allow_hw_pulses)
435 {
436 }
437 
438 static inline
439 bool ucfg_dfs_is_hw_pulses_allowed(struct wlan_objmgr_pdev *pdev)
440 {
441 	return true;
442 }
443 #endif
444 
445 /**
446  * ucfg_dfs_get_override_status_timeout() - Get the value of host dfs status
447  * wait timeout.
448  * @pdev: Pointer to DFS pdev object.
449  * @status_timeout: Pointer to save the timeout value.
450  *
451  * Wrapper function for dfs_get_override_status_timeout().
452  * This function called from outside of dfs component.
453  *
454  * Return: QDF_STATUS
455  */
456 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
457 QDF_STATUS ucfg_dfs_get_override_status_timeout(struct wlan_objmgr_pdev *pdev,
458 						int *status_timeout);
459 #else
460 static inline
461 QDF_STATUS ucfg_dfs_get_override_status_timeout(struct wlan_objmgr_pdev *pdev,
462 						int *status_timeout)
463 {
464 	return QDF_STATUS_SUCCESS;
465 }
466 #endif
467 
468 /**
469  * ucfg_dfs_set_nol_subchannel_marking() - Set or unset NOL subchannel marking.
470  * @pdev: Pointer to DFS pdev object.
471  * @nol_subchannel_marking: Set NOL subchannel marking based on this value.
472  *
473  * Wrapper function for dfs_set_nol_subchannel_marking().
474  * This function is called from outside of dfs component.
475  *
476  * Return: QDF_STATUS
477  */
478 QDF_STATUS ucfg_dfs_set_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev,
479 					       bool nol_subchannel_marking);
480 
481 /**
482  * ucfg_dfs_get_nol_subchannel_marking() - Get the value of NOL subchannel
483  * marking.
484  * @pdev: Pointer to DFS pdev object.
485  * @nol_subchannel_marking: Store the value of  NOL subchannel marking.
486  *
487  * Wrapper function for dfs_get_nol_subchannel_marking().
488  * This function is called from outside of dfs component.
489  *
490  * Return: QDF_STATUS
491  */
492 QDF_STATUS ucfg_dfs_get_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev,
493 					       bool *nol_subchannel_marking);
494 /**
495  * ucfg_dfs_reinit_timers() - Init DFS timers.
496  * @pdev: Pointer to wlan_objmgr_pdev structure.
497  *
498  * Wrapper function to reset CAC, NOL, DFS Test Timer and ZeroCAC Timer.
499  * This is invoked per pdev to reinitialize timers after HW Mode Switch is
500  * triggered.
501  */
502 QDF_STATUS ucfg_dfs_reinit_timers(struct wlan_objmgr_pdev *pdev);
503 
504 /**
505  * ucfg_dfs_reset_agile_config() - Reset ADFS config.
506  * @pdev: Pointer to wlan_objmgr_pdev structure.
507  *
508  * Wrapper function to reset Agile DFS config such as the variables which hold
509  * information about the state of the preCAC timer, active precac
510  * dfs index and OCAC status. It is invoked before HW Mode switch is triggered
511  * to ensure ADFS config is in a well known consistent state.
512  */
513 #ifdef QCA_SUPPORT_AGILE_DFS
514 QDF_STATUS ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc *psoc);
515 #else
516 static inline QDF_STATUS ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc
517 						    *psoc)
518 {
519 	return QDF_STATUS_SUCCESS;
520 }
521 #endif
522 
523 /**
524  * ucfg_dfs_set_rcac_enable() - Set rcac enable flag.
525  * @pdev: Pointer to DFS pdev object.
526  * @rcac_en: User input value to enable/disable rolling cac feature.
527  *
528  */
529 #ifdef QCA_SUPPORT_ADFS_RCAC
530 QDF_STATUS ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev *pdev,
531 				    bool rcac_en);
532 #else
533 static inline QDF_STATUS
534 ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev *pdev,
535 			 bool rcac_en)
536 {
537 	return QDF_STATUS_SUCCESS;
538 }
539 #endif
540 
541 /**
542  * ucfg_dfs_get_rcac_enable() - Get rcac enable flag.
543  * @pdev: Pointer to DFS pdev object.
544  * @rcac_en: Pointer to hold the "rcac" config.
545  *
546  */
547 #ifdef QCA_SUPPORT_ADFS_RCAC
548 QDF_STATUS ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev,
549 				    bool *rcac_en);
550 #else
551 static inline QDF_STATUS
552 ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev,
553 			 bool *rcac_en)
554 {
555 	return QDF_STATUS_SUCCESS;
556 }
557 #endif
558 
559 /**
560  * ucfg_dfs_set_rcac_freq() - Set rcac freq.
561  * @pdev: Pointer to DFS pdev object.
562  * @rcac_freq: User configured rcac freq in MHZ.
563  *
564  */
565 #ifdef QCA_SUPPORT_ADFS_RCAC
566 QDF_STATUS ucfg_dfs_set_rcac_freq(struct wlan_objmgr_pdev *pdev,
567 				  qdf_freq_t rcac_freq);
568 #else
569 static inline QDF_STATUS
570 ucfg_dfs_set_rcac_freq(struct wlan_objmgr_pdev *pdev,
571 		       qdf_freq_t rcac_freq)
572 {
573 	return QDF_STATUS_SUCCESS;
574 }
575 #endif
576 
577 /**
578  * ucfg_dfs_get_rcac_freq() - Get rcac freq.
579  * @pdev: Pointer to DFS pdev object.
580  * @rcac_freq: Pointer to store the user configured rcac freq in MHZ.
581  *
582  */
583 #ifdef QCA_SUPPORT_ADFS_RCAC
584 QDF_STATUS ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev *pdev,
585 				  qdf_freq_t *rcac_freq);
586 #else
587 static inline QDF_STATUS
588 ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev *pdev,
589 		       qdf_freq_t *rcac_freq)
590 {
591 	return QDF_STATUS_SUCCESS;
592 }
593 #endif
594 
595 /**
596  * ucfg_dfs_is_agile_rcac_enabled() - Determine if Rolling CAC is supported
597  * or not.
598  * @pdev: Pointer to struct wlan_objmgr_pdev.
599  *
600  * Following are the conditions needed to assertain that rolling CAC
601  * is enabled:
602  * 1. DFS domain of the PDEV must be FCC or MKK.
603  * 2. User has enabled Rolling CAC configuration.
604  * 3. FW capability to support ADFS.
605  *
606  * Return: True if RCAC support is enabled, false otherwise.
607  */
608 #ifdef QCA_SUPPORT_ADFS_RCAC
609 bool ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev *pdev);
610 #else
611 static inline bool
612 ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev *pdev)
613 {
614 	return false;
615 }
616 #endif
617 
618 #endif /* _WLAN_DFS_UCFG_API_H_ */
619