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