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