xref: /wlan-dirver/qca-wifi-host-cmn/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h (revision d0c05845839e5f2ba5a8dcebe0cd3e4cd4e8dfcf)
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 #ifdef CONFIG_CHAN_FREQ_API
91 	QDF_STATUS (*mlme_start_csa_for_freq)(struct wlan_objmgr_pdev *pdev,
92 					      uint8_t ieee_chan, uint16_t freq,
93 					      uint16_t cfreq2, uint64_t flags);
94 #endif
95 
96 	QDF_STATUS (*mlme_proc_cac)(struct wlan_objmgr_pdev *pdev);
97 	QDF_STATUS (*mlme_deliver_event_up_after_cac)(
98 			struct wlan_objmgr_pdev *pdev);
99 #ifdef CONFIG_CHAN_FREQ_API
100 	QDF_STATUS (*mlme_get_extchan_for_freq)(struct wlan_objmgr_pdev *pdev,
101 						uint16_t *dfs_ch_freq,
102 						uint64_t *dfs_ch_flags,
103 						uint16_t *dfs_ch_flagext,
104 						uint8_t *dfs_ch_ieee,
105 						uint8_t *dfs_vhtop_ch_freq_seg1,
106 						uint8_t *dfs_vhtop_ch_freq_seg2,
107 						uint16_t *dfs_ch_mhz_freq_seg1,
108 						uint16_t *dfs_ch_mhz_freq_seg2);
109 #endif
110 	QDF_STATUS (*mlme_set_no_chans_available)(struct wlan_objmgr_pdev *pdev,
111 			int val);
112 	QDF_STATUS (*mlme_ieee2mhz)(struct wlan_objmgr_pdev *pdev,
113 			int ieee,
114 			uint64_t flag,
115 			int *freq);
116 #ifdef CONFIG_CHAN_FREQ_API
117 	QDF_STATUS (*mlme_find_dot11_chan_for_freq)(struct wlan_objmgr_pdev *,
118 						    uint16_t freq,
119 						    uint16_t des_cfreq2_mhz,
120 						    int mode,
121 						    uint16_t *dfs_ch_freq,
122 						    uint64_t *dfs_ch_flags,
123 						    uint16_t *dfs_ch_flagext,
124 						    uint8_t *dfs_ch_ieee,
125 						    uint8_t *dfs_ch_freq_seg1,
126 						    uint8_t *dfs_ch_freq_seg2,
127 						    uint16_t *dfs_cfreq1_mhz,
128 						    uint16_t *dfs_cfreq2_mhz);
129 #endif
130 #ifdef CONFIG_CHAN_FREQ_API
131 	QDF_STATUS (*mlme_get_dfs_channels_for_freq)(
132 			struct wlan_objmgr_pdev *pdev,
133 			uint16_t *dfs_chan_freq,
134 			uint64_t *dfs_chan_flags,
135 			uint16_t *dfs_chan_flagext,
136 			uint8_t *dfs_chan_ieee,
137 			uint8_t *dfs_chan_vhtop_ch_freq_seg1,
138 			uint8_t *dfs_chan_vhtop_ch_freq_seg2,
139 			uint16_t *dfs_chan_mhz_freq_seg1,
140 			uint16_t *dfs_chan_mhz_freq_seg2,
141 			int index);
142 #endif
143 	QDF_STATUS (*mlme_dfs_ch_flags_ext)(struct wlan_objmgr_pdev *pdev,
144 			uint16_t *flag_ext);
145 	QDF_STATUS (*mlme_channel_change_by_precac)(
146 			struct wlan_objmgr_pdev *pdev);
147 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
148 #ifdef CONFIG_CHAN_FREQ_API
149 	QDF_STATUS
150 	    (*mlme_precac_chan_change_csa_for_freq)(struct wlan_objmgr_pdev *,
151 						    uint16_t des_chan_freq,
152 						    uint16_t des_cfreq2,
153 						    enum wlan_phymode des_mode);
154 #endif
155 #endif
156 #if defined(QCA_SUPPORT_DFS_CHAN_POSTNOL) || defined(QCA_DFS_BW_EXPAND)
157 	QDF_STATUS
158 	(*mlme_postnol_chan_switch)(struct wlan_objmgr_pdev *pdev,
159 				    qdf_freq_t des_chan_freq,
160 				    qdf_freq_t des_cfreq2,
161 				    enum wlan_phymode des_mode);
162 #endif
163 	QDF_STATUS (*mlme_nol_timeout_notification)(
164 			struct wlan_objmgr_pdev *pdev);
165 	QDF_STATUS (*mlme_clist_update)(struct wlan_objmgr_pdev *pdev,
166 			void *nollist,
167 			int nentries);
168 	bool (*mlme_is_opmode_sta)(struct wlan_objmgr_pdev *pdev);
169 #ifdef CONFIG_CHAN_FREQ_API
170 	QDF_STATUS
171 	    (*mlme_get_cac_timeout_for_freq)(struct wlan_objmgr_pdev *pdev,
172 					     uint16_t dfs_ch_freq,
173 					     uint16_t c_vhtop_ch_freq_seg2,
174 					     uint64_t dfs_ch_flags,
175 					     int *cac_timeout);
176 #endif
177 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
178 	QDF_STATUS (*mlme_rebuild_chan_list_with_non_dfs_channels)
179 			(struct wlan_objmgr_pdev *pdev);
180 #endif
181 	QDF_STATUS (*mlme_restart_vaps_with_non_dfs_chan)
182 			(struct wlan_objmgr_pdev *pdev, int no_chans_avail);
183 	bool (*mlme_check_allowed_prim_chanlist)
184 			(struct wlan_objmgr_pdev *pdev, uint32_t chan);
185 	QDF_STATUS (*mlme_update_scan_channel_list)
186 			(struct wlan_objmgr_pdev *pdev);
187 	QDF_STATUS (*mlme_bringdown_vaps)
188 			(struct wlan_objmgr_pdev *pdev);
189 	void (*mlme_dfs_deliver_event)
190 			(struct wlan_objmgr_pdev *pdev,
191 			 uint16_t freq,
192 			 enum WLAN_DFS_EVENTS event);
193 	bool (*mlme_is_inter_band_chan_switch_allowed)
194 			(struct wlan_objmgr_pdev *pdev);
195 	void (*mlme_acquire_radar_mode_switch_lock)
196 			(struct wlan_objmgr_pdev *pdev);
197 	void (*mlme_release_radar_mode_switch_lock)
198 			(struct wlan_objmgr_pdev *pdev);
199 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
200 	QDF_STATUS (*mlme_proc_spoof_success)
201 			(struct wlan_objmgr_pdev *pdev);
202 #endif
203 };
204 
205 extern struct dfs_to_mlme global_dfs_to_mlme;
206 
207 /**
208  * wlan_dfs_pdev_obj_create_notification() - DFS pdev object create handler.
209  * @pdev: Pointer to DFS pdev object.
210  */
211 QDF_STATUS wlan_dfs_pdev_obj_create_notification(struct wlan_objmgr_pdev *pdev,
212 		void *arg);
213 
214 /**
215  * wlan_dfs_pdev_obj_destroy_notification() - DFS pdev object delete handler.
216  * @pdev: Pointer to DFS pdev object.
217  */
218 QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev,
219 		void *arg);
220 
221 /**
222  * ucfg_dfs_is_ap_cac_timer_running() - Returns the dfs cac timer.
223  * @pdev: Pointer to DFS pdev object.
224  * @is_ap_cac_timer_running: Pointer to save dfs_cac_timer_running value.
225  *
226  * Wrapper function for dfs_is_ap_cac_timer_running().
227  * This function called from outside of dfs component.
228  */
229 QDF_STATUS ucfg_dfs_is_ap_cac_timer_running(struct wlan_objmgr_pdev *pdev,
230 		int *is_ap_cac_timer_running);
231 
232 /**
233  * ucfg_dfs_getnol() - Wrapper function for dfs_get_nol()
234  * @pdev: Pointer to DFS pdev object.
235  * @dfs_nolinfo: Pointer to dfsreq_nolinfo structure.
236  *
237  * Wrapper function for dfs_getnol().
238  * This function called from outside of dfs component.
239  */
240 QDF_STATUS ucfg_dfs_getnol(struct wlan_objmgr_pdev *pdev, void *dfs_nolinfo);
241 
242 /**
243  * ucfg_dfs_override_cac_timeout() -  Override the default CAC timeout.
244  * @pdev: Pointer to DFS pdev object.
245  * @cac_timeout: CAC timeout value.
246  *
247  * Wrapper function for dfs_override_cac_timeout().
248  * This function called from outside of dfs component.
249  */
250 QDF_STATUS ucfg_dfs_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
251 		int cac_timeout, int *status);
252 
253 /**
254  * ucfg_dfs_get_override_cac_timeout() -  Get override CAC timeout value.
255  * @pdev: Pointer to DFS pdev object.
256  * @cac_timeout: Pointer to save the CAC timeout value.
257  *
258  * Wrapper function for dfs_get_override_cac_timeout().
259  * This function called from outside of dfs component.
260  */
261 QDF_STATUS ucfg_dfs_get_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
262 		int *cac_timeout, int *status);
263 
264 /**
265  * ucfg_dfs_get_override_precac_timeout() - Get precac timeout.
266  * @pdev: Pointer to DFS pdev object.
267  * @precac_timeout: Get precac timeout value in this variable.
268  *
269  * Wrapper function for dfs_get_override_precac_timeout().
270  * This function called from outside of dfs component.
271  */
272 QDF_STATUS ucfg_dfs_get_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
273 		int *precac_timeout);
274 
275 /**
276  * ucfg_dfs_override_precac_timeout() - Override the default precac timeout.
277  * @pdev: Pointer to DFS pdev object.
278  * @precac_timeout: Precac timeout value.
279  *
280  * Wrapper function for dfs_override_precac_timeout().
281  * This function called from outside of dfs component.
282  */
283 QDF_STATUS ucfg_dfs_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
284 		int precac_timeout);
285 
286 /**
287  * ucfg_dfs_set_precac_enable() - Set precac enable flag.
288  * @pdev: Pointer to DFS pdev object.
289  * @value: input value for dfs_legacy_precac_ucfg flag.
290  *
291  * Wrapper function for dfs_set_precac_enable().
292  * This function called from outside of dfs component.
293  */
294 QDF_STATUS ucfg_dfs_set_precac_enable(struct wlan_objmgr_pdev *pdev,
295 				      uint32_t value);
296 
297 /**
298  * ucfg_dfs_get_agile_precac_enable() - Get agile precac enable flag.
299  * @pdev: Pointer to DFS pdev object.
300  * @buff: Pointer to save dfs_agile_precac_ucfg value.
301  *
302  * Wrapper function for dfs_is_legacy_precac_enabled().
303  * This function called from outside of dfs component.
304  *
305  * Return:
306  * * QDF_STATUS_SUCCESS: Successfully able to get agile precac flag.
307  * * QDF_STATUS_E_FAILURE: Failed to get agile precac flag.
308  */
309 QDF_STATUS ucfg_dfs_get_agile_precac_enable(struct wlan_objmgr_pdev *pdev,
310 					    bool *buff);
311 
312 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
313 /**
314  * ucfg_dfs_set_precac_intermediate_chan() - Set intermediate channel
315  *                                           for preCAC.
316  * @pdev: Pointer to DFS pdev object.
317  * @value: Channel number of intermediate channel
318  *
319  * Wrapper function for dfs_set_precac_intermediate_chan().
320  * This function is called from outside of dfs component.
321  *
322  * Return:
323  * * QDF_STATUS_SUCCESS  : Successfully set intermediate channel.
324  * * QDF_STATUS_E_FAILURE: Failed to set intermediate channel.
325  */
326 QDF_STATUS ucfg_dfs_set_precac_intermediate_chan(struct wlan_objmgr_pdev *pdev,
327 						 uint32_t value);
328 
329 /**
330  * ucfg_dfs_get_precac_intermediate_chan() - Get intermediate channel
331  *						for preCAC.
332  * @pdev: Pointer to DFS pdev object.
333  * @buff: Pointer to Channel number of intermediate channel.
334  *
335  * Wrapper function for dfs_get_precac_intermediate_chan().
336  * This function is called from outside of dfs component.
337  *
338  * Return: Configured intermediate precac channel.
339  */
340 QDF_STATUS ucfg_dfs_get_precac_intermediate_chan(struct wlan_objmgr_pdev *pdev,
341 						 int *buff);
342 
343 /**
344  * ucfg_dfs_get_precac_chan_state_for_freq() - Get precac status for the
345  * given channel.
346  * @pdev: Pointer to DFS pdev object.
347  * @precac_chan: Channel frequency for which precac state needs to be
348  *               determined.
349  *
350  * Wrapper function for dfs_get_precac_chan_state_for_freq().
351  * This function called from outside of dfs component.
352  *
353  * Return: Precac state of the given channel.
354  */
355 #ifdef CONFIG_CHAN_FREQ_API
356 enum precac_chan_state
357 ucfg_dfs_get_precac_chan_state_for_freq(struct wlan_objmgr_pdev *pdev,
358 					uint16_t precac_freq);
359 #endif
360 
361 #endif
362 
363 #ifdef MOBILE_DFS_SUPPORT
364 /**
365  * ucfg_dfs_update_config() - Update DFS user config.
366  * @psoc: Pointer to psoc.
367  * @req: DFS user config.
368  *
369  * Return: QDF_STATUS
370  */
371 QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc,
372 		struct dfs_user_config *req);
373 #else
374 static inline QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc,
375 		struct dfs_user_config *req)
376 {
377 	return QDF_STATUS_SUCCESS;
378 }
379 #endif
380 
381 /**
382  * ucfg_dfs_set_override_status_timeout() - override the value of host dfs
383  * status wait timeout.
384  * @pdev: Pointer to DFS pdev object.
385  * @status_timeout: timeout value.
386  *
387  * Wrapper function for dfs_set_override_status_timeout().
388  * This function called from outside of dfs component.
389  *
390  * Return: QDF_STATUS
391  */
392 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
393 QDF_STATUS ucfg_dfs_set_override_status_timeout(struct wlan_objmgr_pdev *pdev,
394 					    int status_timeout);
395 #else
396 static inline
397 QDF_STATUS ucfg_dfs_set_override_status_timeout(struct wlan_objmgr_pdev *pdev,
398 					    int status_timeout)
399 {
400 	return QDF_STATUS_SUCCESS;
401 }
402 #endif
403 
404 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(WLAN_DFS_SYNTHETIC_RADAR)
405 /**
406  * ucfg_dfs_allow_hw_pulses() - Set or unset dfs-allow_hw_pulses
407  * which isolates synthetic radar pulse detection from actual radar detection.
408  * @pdev: Pointer to DFS pdev object.
409  * @allow_hw_pulses: Allow synthetic pulse detection true/false.
410  *
411  * Wrapper function for dfs_set_allow_hw_pulses().
412  * This function called from outside of dfs component.
413  *
414  * Return: void
415  */
416 void ucfg_dfs_allow_hw_pulses(struct wlan_objmgr_pdev *pdev,
417 			      bool allow_hw_pulses);
418 
419 /**
420  * ucfg_dfs_is_hw_pulses_allowed() - Check if actual radar detection is allowed
421  * or synthetic pulse detection is enabled.
422  * @pdev: Pointer to DFS pdev object.
423  *
424  * Wrapper function for dfs_is_hw_pulses_allowed().
425  * This function called from outside of dfs component.
426  *
427  * Return: bool
428  */
429 bool ucfg_dfs_is_hw_pulses_allowed(struct wlan_objmgr_pdev *pdev);
430 #else
431 static inline
432 void ucfg_dfs_allow_hw_pulses(struct wlan_objmgr_pdev *pdev,
433 			      bool allow_hw_pulses)
434 {
435 }
436 
437 static inline
438 bool ucfg_dfs_is_hw_pulses_allowed(struct wlan_objmgr_pdev *pdev)
439 {
440 	return true;
441 }
442 #endif
443 
444 /**
445  * ucfg_dfs_get_override_status_timeout() - Get the value of host dfs status
446  * wait timeout.
447  * @pdev: Pointer to DFS pdev object.
448  * @status_timeout: Pointer to save the timeout value.
449  *
450  * Wrapper function for dfs_get_override_status_timeout().
451  * This function called from outside of dfs component.
452  *
453  * Return: QDF_STATUS
454  */
455 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
456 QDF_STATUS ucfg_dfs_get_override_status_timeout(struct wlan_objmgr_pdev *pdev,
457 						int *status_timeout);
458 #else
459 static inline
460 QDF_STATUS ucfg_dfs_get_override_status_timeout(struct wlan_objmgr_pdev *pdev,
461 						int *status_timeout)
462 {
463 	return QDF_STATUS_SUCCESS;
464 }
465 #endif
466 
467 /**
468  * ucfg_dfs_set_nol_subchannel_marking() - Set or unset NOL subchannel marking.
469  * @pdev: Pointer to DFS pdev object.
470  * @nol_subchannel_marking: Set NOL subchannel marking based on this value.
471  *
472  * Wrapper function for dfs_set_nol_subchannel_marking().
473  * This function is called from outside of dfs component.
474  *
475  * Return: QDF_STATUS
476  */
477 QDF_STATUS ucfg_dfs_set_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev,
478 					       bool nol_subchannel_marking);
479 
480 /**
481  * ucfg_dfs_get_nol_subchannel_marking() - Get the value of NOL subchannel
482  * marking.
483  * @pdev: Pointer to DFS pdev object.
484  * @nol_subchannel_marking: Store the value of  NOL subchannel marking.
485  *
486  * Wrapper function for dfs_get_nol_subchannel_marking().
487  * This function is called from outside of dfs component.
488  *
489  * Return: QDF_STATUS
490  */
491 QDF_STATUS ucfg_dfs_get_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev,
492 					       bool *nol_subchannel_marking);
493 /**
494  * ucfg_dfs_reinit_timers() - Init DFS timers.
495  * @pdev: Pointer to wlan_objmgr_pdev structure.
496  *
497  * Wrapper function to reset CAC, NOL, DFS Test Timer and ZeroCAC Timer.
498  * This is invoked per pdev to reinitialize timers after HW Mode Switch is
499  * triggered.
500  */
501 QDF_STATUS ucfg_dfs_reinit_timers(struct wlan_objmgr_pdev *pdev);
502 
503 /**
504  * ucfg_dfs_reset_agile_config() - Reset ADFS config.
505  * @pdev: Pointer to wlan_objmgr_pdev structure.
506  *
507  * Wrapper function to reset Agile DFS config such as the variables which hold
508  * information about the state of the preCAC timer, active precac
509  * dfs index and OCAC status. It is invoked before HW Mode switch is triggered
510  * to ensure ADFS config is in a well known consistent state.
511  */
512 #ifdef QCA_SUPPORT_AGILE_DFS
513 QDF_STATUS ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc *psoc);
514 #else
515 static inline QDF_STATUS ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc
516 						    *psoc)
517 {
518 	return QDF_STATUS_SUCCESS;
519 }
520 #endif
521 
522 /**
523  * ucfg_dfs_set_rcac_enable() - Set rcac enable flag.
524  * @pdev: Pointer to DFS pdev object.
525  * @rcac_en: User input value to enable/disable rolling cac feature.
526  *
527  */
528 #ifdef QCA_SUPPORT_ADFS_RCAC
529 QDF_STATUS ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev *pdev,
530 				    bool rcac_en);
531 #else
532 static inline QDF_STATUS
533 ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev *pdev,
534 			 bool rcac_en)
535 {
536 	return QDF_STATUS_SUCCESS;
537 }
538 #endif
539 
540 /**
541  * ucfg_dfs_get_rcac_enable() - Get rcac enable flag.
542  * @pdev: Pointer to DFS pdev object.
543  * @rcac_en: Pointer to hold the "rcac" config.
544  *
545  */
546 #ifdef QCA_SUPPORT_ADFS_RCAC
547 QDF_STATUS ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev,
548 				    bool *rcac_en);
549 #else
550 static inline QDF_STATUS
551 ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev,
552 			 bool *rcac_en)
553 {
554 	return QDF_STATUS_SUCCESS;
555 }
556 #endif
557 
558 /**
559  * ucfg_dfs_set_rcac_freq() - Set rcac freq.
560  * @pdev: Pointer to DFS pdev object.
561  * @rcac_freq: User configured rcac freq in MHZ.
562  *
563  */
564 #ifdef QCA_SUPPORT_ADFS_RCAC
565 QDF_STATUS ucfg_dfs_set_rcac_freq(struct wlan_objmgr_pdev *pdev,
566 				  qdf_freq_t rcac_freq);
567 #else
568 static inline QDF_STATUS
569 ucfg_dfs_set_rcac_freq(struct wlan_objmgr_pdev *pdev,
570 		       qdf_freq_t rcac_freq)
571 {
572 	return QDF_STATUS_SUCCESS;
573 }
574 #endif
575 
576 /**
577  * ucfg_dfs_get_rcac_freq() - Get rcac freq.
578  * @pdev: Pointer to DFS pdev object.
579  * @rcac_freq: Pointer to store the user configured rcac freq in MHZ.
580  *
581  */
582 #ifdef QCA_SUPPORT_ADFS_RCAC
583 QDF_STATUS ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev *pdev,
584 				  qdf_freq_t *rcac_freq);
585 #else
586 static inline QDF_STATUS
587 ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev *pdev,
588 		       qdf_freq_t *rcac_freq)
589 {
590 	return QDF_STATUS_SUCCESS;
591 }
592 #endif
593 
594 /**
595  * ucfg_dfs_is_agile_rcac_enabled() - Determine if Rolling CAC is supported
596  * or not.
597  * @pdev: Pointer to struct wlan_objmgr_pdev.
598  *
599  * Following are the conditions needed to assertain that rolling CAC
600  * is enabled:
601  * 1. DFS domain of the PDEV must be FCC or MKK.
602  * 2. User has enabled Rolling CAC configuration.
603  * 3. FW capability to support ADFS.
604  *
605  * Return: True if RCAC support is enabled, false otherwise.
606  */
607 #ifdef QCA_SUPPORT_ADFS_RCAC
608 bool ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev *pdev);
609 #else
610 static inline bool
611 ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev *pdev)
612 {
613 	return false;
614 }
615 #endif
616 
617 #endif /* _WLAN_DFS_UCFG_API_H_ */
618