xref: /wlan-dirver/qca-wifi-host-cmn/umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h (revision 8b7e2ee3720101d16dde046b0345f866abb7a5d8)
1 /*
2  * Copyright (c) 2016-2018 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_UTILS_API_H_
26 #define _WLAN_DFS_UTILS_API_H_
27 
28 #include "wlan_dfs_ucfg_api.h"
29 #include "wlan_reg_services_api.h"
30 
31 /* Add channel to nol */
32 #define DFS_NOL_SET                  1
33 
34 /* Remove channel from nol */
35 #define DFS_NOL_RESET                0
36 
37 /* Max nol channels */
38 #define DFS_MAX_NOL_CHANNEL         80
39 
40 /* WLAN 2.4GHz start freq */
41 #define DFS_24_GHZ_BASE_FREQ     (2407)
42 
43 /* WLAN 5GHz start freq */
44 #define DFS_5_GHZ_BASE_FREQ      (5000)
45 
46 /* WLAN 2.4 GHz channel number 6 */
47 #define DFS_24_GHZ_CHANNEL_6        (6)
48 
49 /* WLAN 2.4 GHz channel number 14 */
50 #define DFS_24_GHZ_CHANNEL_14      (14)
51 
52 /* WLAN 2.4 GHz channel number 15 */
53 #define DFS_24_GHZ_CHANNEL_15      (15)
54 
55 /* WLAN 2.4 GHz channel number 27 */
56 #define DFS_24_GHZ_CHANNEL_27      (27)
57 
58 /* WLAN 5GHz channel number 170 */
59 #define DFS_5_GHZ_CHANNEL_170     (170)
60 
61 /* WLAN 5MHz channel spacing */
62 #define DFS_CHAN_SPACING_5MHZ       (5)
63 
64 /* WLAN 20Hz channel spacing */
65 #define DFS_CHAN_SPACING_20MHZ     (20)
66 
67 /* WLAN 2.4GHz channel number 14 freq */
68 #define DFS_CHAN_14_FREQ         (2484)
69 
70 /* WLAN 2.4GHz channel number 15 freq */
71 #define DFS_CHAN_15_FREQ         (2512)
72 
73 /* WLAN 5GHz channel number 170 freq */
74 #define DFS_CHAN_170_FREQ        (5852)
75 
76 
77 
78 extern struct dfs_to_mlme global_dfs_to_mlme;
79 
80 /**
81  * utils_dfs_cac_valid_reset() - Cancels the dfs_cac_valid_timer timer.
82  * @pdev: Pointer to DFS pdev object.
83  * @prevchan_ieee: Prevchan number.
84  * @prevchan_flags: Prevchan flags.
85  *
86  * Wrapper function for dfs_cac_valid_reset(). This function called from
87  * outside of DFS component.
88  */
89 
90 QDF_STATUS utils_dfs_cac_valid_reset(struct wlan_objmgr_pdev *pdev,
91 		uint8_t prevchan_ieee,
92 		uint32_t prevchan_flags);
93 
94 /**
95  * utils_dfs_reset() - Reset DFS members.
96  * @pdev: Pointer to DFS pdev object.
97  */
98 QDF_STATUS utils_dfs_reset(struct wlan_objmgr_pdev *pdev);
99 
100 /**
101  * utils_dfs_freq_is_in_nol() -  check if given channel in nol list
102  * @pdev: Pointer to DFS pdev object
103  * @freq: channel frequency
104  *
105  * check if given channel in nol list.
106  *
107  * Return: true if channel in nol, false else
108  */
109 bool utils_dfs_freq_is_in_nol(struct wlan_objmgr_pdev *pdev, uint32_t freq);
110 
111 /**
112  * utils_dfs_reset_precaclists() - Clears and initiakizes precac_required_list,
113  *                                 precac_done_list and precac_nol_list.
114  * @pdev: Pointer to DFS pdev object.
115  *
116  * Wrapper function for dfs_reset_precaclists(). This function called from
117  * outside of DFS component.
118  */
119 QDF_STATUS utils_dfs_reset_precaclists(struct wlan_objmgr_pdev *pdev);
120 
121 /**
122  * utils_dfs_reset_etsi_precaclists() - Clears and initializes etsi
123  *                                      precac_required_list,
124  *                                      etsi precac_done_list and
125  *                                      etsi precac_nol_list.
126  * @pdev: Pointer to DFS pdev object.
127  *
128  * Wrapper function for dfs_reset_etsiprecaclists(). This function called from
129  * outside of DFS component.
130  */
131 #ifdef QCA_SUPPORT_ETSI_PRECAC_DFS
132 QDF_STATUS utils_dfs_reset_etsi_precaclists(struct wlan_objmgr_pdev *pdev);
133 #else
134 static inline QDF_STATUS utils_dfs_reset_etsi_precaclists(
135 		struct wlan_objmgr_pdev *pdev)
136 {
137 	return QDF_STATUS_SUCCESS;
138 }
139 #endif
140 
141 /**
142  * utils_dfs_cancel_precac_timer() - Cancel the precac timer.
143  * @pdev: Pointer to DFS pdev object.
144  *
145  * wrapper function for dfs_cancel_precac_timer(). this function called from
146  * outside of dfs component.
147  */
148 QDF_STATUS utils_dfs_cancel_precac_timer(struct wlan_objmgr_pdev *pdev);
149 
150 /**
151  * utils_dfs_start_precac_timer() - Start the precac timer.
152  * @pdev: Pointer to DFS pdev object.
153  *
154  * Wrapper function for dfs_start_precac_timer(). This function called from
155  * outside of dfs component.
156  *
157  * Return:
158  * * QDF_STATUS_E_FAILURE: Failed to start timer.
159  * * QDF_STATUS_SUCCESS: Timer started successfully.
160  */
161 QDF_STATUS utils_dfs_start_precac_timer(struct wlan_objmgr_pdev *pdev);
162 
163 /**
164  * utils_dfs_is_precac_done() - Is precac done.
165  * @pdev: Pointer to DFS pdev object.
166  *
167  * wrapper function for dfs_is_precac_done(). this
168  * function called from outside of dfs component.
169  */
170 QDF_STATUS utils_dfs_is_precac_done(struct wlan_objmgr_pdev *pdev,
171 		bool *is_precac_done);
172 
173 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
174 /**
175  * utils_dfs_precac_decide_pref_chan() - Choose preferred channel
176  * @pdev: Pointer to DFS pdev object.
177  * @ch_ieee: Pointer to channel number
178 
179  * Wrapper function for dfs_decide_precac_preferred_chan(). This
180  * function called from outside of dfs component.
181  *
182  * Return:
183  * * QDF_STATUS_E_FAILURE: Failed to decide preferred channel.
184  * * QDF_STATUS_SUCCESS: Set preferred channel successfully.
185  */
186 QDF_STATUS utils_dfs_precac_decide_pref_chan(struct wlan_objmgr_pdev *pdev,
187 					     uint8_t *ch_ieee);
188 #endif
189 
190 /**
191  * utils_dfs_is_esti_precac_done() - Is ETSI precac done.
192  * @pdev: Pointer to DFS pdev object.
193  *
194  * wrapper function for dfs_is_etsi_precac_done(). This
195  * function called from outside of dfs component.
196  */
197 #ifdef QCA_SUPPORT_ETSI_PRECAC_DFS
198 QDF_STATUS utils_dfs_is_etsi_precac_done(struct wlan_objmgr_pdev *pdev,
199 					 bool *is_etsi_precac_done);
200 #else
201 static inline QDF_STATUS utils_dfs_is_etsi_precac_done(
202 		struct wlan_objmgr_pdev *pdev,
203 		bool *is_etsi_precac_done)
204 {
205 	return QDF_STATUS_SUCCESS;
206 }
207 #endif
208 
209 /**
210  * utils_dfs_cancel_cac_timer() - Cancels the CAC timer.
211  * @pdev: Pointer to DFS pdev object.
212  *
213  * wrapper function for dfs_cancel_cac_timer(). this
214  * function called from outside of dfs component.
215  */
216 QDF_STATUS utils_dfs_cancel_cac_timer(struct wlan_objmgr_pdev *pdev);
217 
218 /**
219  * utils_dfs_start_cac_timer() - Starts the CAC timer.
220  * @pdev: Pointer to DFS pdev object.
221  *
222  * wrapper function for dfs_start_cac_timer(). this
223  * function called from outside of dfs component.
224  */
225 QDF_STATUS utils_dfs_start_cac_timer(struct wlan_objmgr_pdev *pdev);
226 
227 /**
228  * utils_dfs_cac_stop() - Clear the AP CAC timer.
229  * @pdev: Pointer to DFS pdev object.
230  *
231  * wrapper function for dfs_cac_stop(). this
232  * function called from outside of dfs component.
233  */
234 QDF_STATUS utils_dfs_cac_stop(struct wlan_objmgr_pdev *pdev);
235 
236 /**
237  * utils_dfs_stacac_stop() - Clear the STA CAC timer.
238  * @pdev: Pointer to DFS pdev object.
239  *
240  * wrapper function for dfs_stacac_stop(). this
241  * function called from outside of dfs component.
242  */
243 QDF_STATUS utils_dfs_stacac_stop(struct wlan_objmgr_pdev *pdev);
244 
245 /**
246  * utils_dfs_is_curchan_subset_of_cac_started_chan() - Check if the dfs current
247  * channel is subset of cac started channel.
248  * @pdev: Pointer to DFS pdev object.
249  *
250  * wrapper function for dfs_is_curchan_subset_of_cac_started_chan(). this
251  * function called from outside of dfs component.
252  *
253  * Return: true if current channel is same or subset of  cac started channel,
254  * else false.
255  */
256 bool utils_dfs_is_curchan_subset_of_cac_started_chan(
257 		struct wlan_objmgr_pdev *pdev);
258 
259 /**
260  * utils_dfs_is_cac_aborted() - Check if previous CAC was aborted.
261  * @pdev: Pointer to DFS pdev object.
262  *
263  * Return: true if previous CAC was aborted, else false.
264  */
265 bool utils_dfs_is_cac_aborted(struct wlan_objmgr_pdev *pdev);
266 
267 /**
268  * utils_dfs_clear_cac_started_chan() - Clear dfs cac started channel.
269  * @pdev: Pointer to DFS pdev object.
270  */
271 void utils_dfs_clear_cac_started_chan(struct wlan_objmgr_pdev *pdev);
272 
273 /**
274  * utils_dfs_get_usenol() - Returns use_nol flag.
275  * @pdev: Pointer to DFS pdev object.
276  * @usenol: Pointer to usenol value.
277  *
278  * wrapper function for dfs_get_usenol(). this
279  * function called from outside of dfs component.
280  */
281 QDF_STATUS utils_dfs_get_usenol(struct wlan_objmgr_pdev *pdev,
282 		uint16_t *usenol);
283 
284 /**
285  * utils_dfs_radar_disable() - Disables the radar.
286  * @pdev: Pointer to DFS pdev object.
287  *
288  * wrapper function for  dfs_radar_disable(). this
289  * function called from outside of dfs component.
290  */
291 QDF_STATUS utils_dfs_radar_disable(struct wlan_objmgr_pdev *pdev);
292 
293 /**
294  * utils_dfs_set_update_nol_flag() - Sets update_nol flag.
295  * @pdev: Pointer to DFS pdev object.
296  * @val: update_nol flag.
297  *
298  * wrapper function for dfs_set_update_nol_flag(). this
299  * function called from outside of dfs component.
300  */
301 QDF_STATUS utils_dfs_set_update_nol_flag(struct wlan_objmgr_pdev *pdev,
302 		bool val);
303 
304 /**
305  * utils_dfs_get_update_nol_flag() - Returns update_nol flag.
306  * @pdev: Pointer to DFS pdev object.
307  * @nol_flag: Fill nol_flag in this variable.
308  *
309  * wrapper function for dfs_get_update_nol_flag(). this
310  * function called from outside of dfs component.
311  */
312 QDF_STATUS utils_dfs_get_update_nol_flag(struct wlan_objmgr_pdev *pdev,
313 		bool *nol_flag);
314 
315 /**
316  * utils_dfs_get_dfs_use_nol() - Get usenol.
317  * @pdev: Pointer to DFS pdev object.
318  * @dfs_use_nol: Pointer to dfs_use_nol.
319  *
320  * wrapper function for dfs_get_dfs_use_nol(). this
321  * function called from outside of dfs component.
322  */
323 QDF_STATUS utils_dfs_get_dfs_use_nol(struct wlan_objmgr_pdev *pdev,
324 		int *dfs_use_nol);
325 
326 /**
327  * utils_dfs_get_nol_timeout() - Get NOL timeout.
328  * @pdev: Pointer to DFS pdev object.
329  * @dfs_nol_timeout: Pointer to dfs_nol_timeout.
330  *
331  * wrapper function for dfs_get_nol_timeout(). this
332  * function called from outside of dfs component.
333  */
334 QDF_STATUS utils_dfs_get_nol_timeout(struct wlan_objmgr_pdev *pdev,
335 		int *dfs_nol_timeout);
336 
337 /**
338  * utils_dfs_nol_addchan() - Add channel to NOL.
339  * @pdev: Pointer to DFS pdev object.
340  * @chan: channel t o add NOL.
341  * @dfs_nol_timeout: NOL timeout.
342  *
343  * wrapper function for dfs_nol_addchan(). this
344  * function called from outside of dfs component.
345  */
346 QDF_STATUS utils_dfs_nol_addchan(struct wlan_objmgr_pdev *pdev,
347 		uint16_t freq,
348 		uint32_t dfs_nol_timeout);
349 
350 /**
351  * utils_dfs_nol_update() - NOL update
352  * @pdev: Pointer to DFS pdev object.
353  *
354  * wrapper function for dfs_nol_update(). this
355  * function called from outside of dfs component.
356  */
357 QDF_STATUS utils_dfs_nol_update(struct wlan_objmgr_pdev *pdev);
358 
359 /**
360  * utils_dfs_second_segment_radar_disable() - Disables the second segment radar.
361  * @pdev: Pointer to DFS pdev object.
362  *
363  * This is called when AP detects the radar, to (potentially) disable
364  * the radar code.
365  */
366 QDF_STATUS utils_dfs_second_segment_radar_disable(
367 		struct wlan_objmgr_pdev *pdev);
368 
369 /**
370  * utils_dfs_is_ignore_dfs() - Get Ignore DFS value.
371  * @pdev: Pointer to DFS pdev object.
372  * @ignore_dfs: Fill ignore_dfs value in this variable.
373  */
374 QDF_STATUS utils_dfs_is_ignore_dfs(struct wlan_objmgr_pdev *pdev,
375 		bool *ignore_dfs);
376 
377 /**
378  * utils_dfs_is_cac_valid() - Gets the value of is_cac_valid.
379  * @pdev: Pointer to DFS pdev object.
380  * @is_cac_valid: Fill is_cac_valid in this variable.
381  */
382 QDF_STATUS utils_dfs_is_cac_valid(struct wlan_objmgr_pdev *pdev,
383 		bool *is_cac_valid);
384 
385 /**
386  * utils_dfs_is_ignore_cac() - Gets the value of is_ignore_cac.
387  * @pdev: Pointer to DFS pdev object.
388  * @ignore_cac: Fill ignore_cac value in this variable.
389  */
390 QDF_STATUS utils_dfs_is_ignore_cac(struct wlan_objmgr_pdev *pdev,
391 		bool *ignore_cac);
392 
393 /**
394  * utils_dfs_set_cac_timer_running() - Sets the cac timer running.
395  * @pdev: Pointer to DFS pdev object.
396  * @val: Set this value to dfs_cac_timer_running variable.
397  */
398 QDF_STATUS utils_dfs_set_cac_timer_running(struct wlan_objmgr_pdev *pdev,
399 		int val);
400 
401 /**
402  * utils_dfs_get_nol_chfreq_and_chwidth() - Sets the cac timer running.
403  * @pdev: Pointer to DFS pdev object.
404  * @nollist: Pointer to NOL channel entry.
405  * @nol_chfreq: Pointer to save channel frequency.
406  * @nol_chwidth: Pointer to save channel width.
407  * @index: Index into nol list.
408  */
409 QDF_STATUS utils_dfs_get_nol_chfreq_and_chwidth(struct wlan_objmgr_pdev *pdev,
410 		void *nollist,
411 		uint32_t *nol_chfreq,
412 		uint32_t *nol_chwidth,
413 		int index);
414 
415 /**
416  * utils_dfs_get_random_channel() - Get random channel.
417  * @pdev: Pointer to DFS pdev object.
418  * @flags: random channel selection flags.
419  * @ch_params: current channel params.
420  * @hw_mode: current operating mode.
421  * @target_chan: Pointer to target_chan.
422  * @acs_info: acs range info.
423  *
424  * wrapper function for get_random_chan(). this
425  * function called from outside of dfs component.
426  *
427  * Return: QDF_STATUS
428  */
429 QDF_STATUS utils_dfs_get_random_channel(struct wlan_objmgr_pdev *pdev,
430 		uint16_t flags, struct ch_params *ch_params,
431 		uint32_t *hw_mode, uint8_t *target_chan,
432 		struct dfs_acs_info *acs_info);
433 
434 /**
435  * utils_dfs_bw_reduced_channel() - Get BW reduced channel.
436  * @pdev: Pointer to DFS pdev object.
437  * @flags: Reduced bandwidth channel flags.
438  * @ch_params: current channel params.
439  * @hw_mode: current operating mode.
440  * @target_chan: Pointer to target_chan.
441  *
442  * wrapper function for get bw_reduced_channel. this
443  * function called from outside of dfs component.
444  *
445  * Return: QDF_STATUS
446  */
447 QDF_STATUS utils_dfs_bw_reduced_channel(struct wlan_objmgr_pdev *pdev,
448 					uint16_t flags,
449 					struct ch_params *ch_params,
450 					uint32_t *hw_mode,
451 					uint8_t *target_chan);
452 /**
453  * utils_dfs_init_nol() - Initialize nol from platform driver.
454  * @pdev: pdev handler.
455  *
456  * Initialize nol from platform driver.
457  *
458  * Return: None
459  */
460 #ifdef QCA_DFS_NOL_PLATFORM_DRV_SUPPORT
461 void utils_dfs_init_nol(struct wlan_objmgr_pdev *pdev);
462 #else
463 static inline void utils_dfs_init_nol(struct wlan_objmgr_pdev *pdev)
464 {
465 }
466 #endif
467 /**
468  * utils_dfs_save_nol() - save nol list to platform driver.
469  * @pdev: pdev handler.
470  *
471  * Save nol list to platform driver.
472  *
473  * Return: None
474  */
475 void utils_dfs_save_nol(struct wlan_objmgr_pdev *pdev);
476 
477 /**
478  * utils_dfs_print_nol_channels() - log nol channels.
479  * @pdev: pdev handler.
480  *
481  * log nol channels.
482  *
483  * Return: None
484  */
485 #ifdef DFS_COMPONENT_ENABLE
486 void utils_dfs_print_nol_channels(struct wlan_objmgr_pdev *pdev);
487 #else
488 static inline void utils_dfs_print_nol_channels(struct wlan_objmgr_pdev *pdev)
489 {
490 }
491 #endif
492 
493 /**
494  * utils_dfs_clear_nol_channels() - clear nol list.
495  * @pdev: pdev handler.
496  *
497  * log nol channels.
498  *
499  * Return: None
500  */
501 void utils_dfs_clear_nol_channels(struct wlan_objmgr_pdev *pdev);
502 
503 /**
504  * utils_is_dfs_ch() - is channel dfs.
505  * @pdev: pdev handler.
506  *
507  * is channel dfs.
508  *
509  * Return: True if channel dfs, else false.
510  */
511 static inline bool utils_is_dfs_ch(struct wlan_objmgr_pdev *pdev, uint32_t chan)
512 {
513 	return wlan_reg_is_dfs_ch(pdev, chan);
514 }
515 /**
516  * utils_dfs_reg_update_nol_ch() - set nol channel
517  *
518  * @pdev: pdev ptr
519  * @ch_list: channel list to be returned
520  * @num_ch: number of channels
521  * @nol_ch: nol flag
522  *
523  * Return: void
524  */
525 void utils_dfs_reg_update_nol_ch(struct wlan_objmgr_pdev *pdev,
526 		uint8_t *ch_list,
527 		uint8_t num_ch,
528 		bool nol_ch);
529 
530 /**
531  * utils_dfs_freq_to_chan () - convert channel freq to channel number
532  * @freq: frequency
533  *
534  * Return: channel number
535  */
536 uint8_t utils_dfs_freq_to_chan(uint32_t freq);
537 
538 /**
539  * utils_dfs_chan_to_freq () - convert channel number to frequency
540  * @chan: channel number
541  *
542  * Return: frequency
543  */
544 #ifdef DFS_COMPONENT_ENABLE
545 uint32_t utils_dfs_chan_to_freq(uint8_t chan);
546 #else
547 static inline uint32_t utils_dfs_chan_to_freq(uint8_t chan)
548 {
549 	return 0;
550 }
551 #endif
552 /**
553  * utils_dfs_update_cur_chan_flags() - Update DFS channel flag and flagext.
554  * @pdev: Pointer to DFS pdev object.
555  * @flags: New channel flags
556  * @flagext: New Extended flags
557  *
558  * Return: QDF_STATUS
559  */
560 QDF_STATUS utils_dfs_update_cur_chan_flags(struct wlan_objmgr_pdev *pdev,
561 		uint64_t flags,
562 		uint16_t flagext);
563 
564 #ifdef QCA_MCL_DFS_SUPPORT
565 /**
566  * utils_dfs_mark_leaking_ch() - to mark channel leaking in to nol
567  * @pdev: Pointer to pdev structure.
568  * @ch_width: channel width
569  * @temp_ch_lst_sz: the target channel list
570  * @temp_ch_lst: the target channel list
571  *
572  * This function removes the channels from temp channel list that
573  * (if selected as target channel) will cause leakage in one of
574  * the NOL channels
575  *
576  * Return: QDF_STATUS
577  */
578 QDF_STATUS utils_dfs_mark_leaking_ch(struct wlan_objmgr_pdev *pdev,
579 	enum phy_ch_width ch_width,
580 	uint8_t temp_ch_lst_sz,
581 	uint8_t *temp_ch_lst);
582 #else
583 static inline QDF_STATUS utils_dfs_mark_leaking_ch
584 	(struct wlan_objmgr_pdev *pdev,
585 	enum phy_ch_width ch_width,
586 	uint8_t temp_ch_lst_sz,
587 	uint8_t *temp_ch_lst)
588 {
589 	return QDF_STATUS_SUCCESS;
590 }
591 #endif
592 /**
593  * utils_get_dfsdomain() - Get DFS domain.
594  * @pdev: Pointer to PDEV structure.
595  *
596  * Return: DFS domain.
597  */
598 int utils_get_dfsdomain(struct wlan_objmgr_pdev *pdev);
599 
600 /**
601  * utils_dfs_get_cur_rd() - Get current regdomain.
602  * @pdev: pdev ptr
603  *
604  * Return: Regdomain pair id.
605  */
606 uint16_t utils_dfs_get_cur_rd(struct wlan_objmgr_pdev *pdev);
607 
608 /**
609  * utils_dfs_is_spoof_check_failed() - get spoof check status.
610  * @pdev: pdev ptr
611  * @is_spoof_check_failed: pointer containing the status.
612  *
613  * Return: QDF_STATUS.
614  */
615 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
616 QDF_STATUS utils_dfs_is_spoof_check_failed(struct wlan_objmgr_pdev *pdev,
617 					   bool *is_spoof_check_failed);
618 #else
619 static inline
620 QDF_STATUS utils_dfs_is_spoof_check_failed(struct wlan_objmgr_pdev *pdev,
621 					   bool *is_spoof_check_failed)
622 {
623 	return QDF_STATUS_SUCCESS;
624 }
625 #endif
626 #endif /* _WLAN_DFS_UTILS_API_H_ */
627