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