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