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