xref: /wlan-dirver/qca-wifi-host-cmn/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h (revision 6d768494e5ce14eb1603a695c86739d12ecc6ec2)
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_TGT_API_H_
26 #define _WLAN_DFS_TGT_API_H_
27 
28 #include <wlan_dfs_public_struct.h>
29 
30 #define WLAN_DFS_RESET_TIME_S 7
31 #define WLAN_DFS_WAIT (60 + WLAN_DFS_RESET_TIME_S) /* 60 seconds */
32 #define WLAN_DFS_WAIT_MS ((WLAN_DFS_WAIT) * 1000)  /*in MS*/
33 
34 /* Command id to send test radar to firmware */
35 #define DFS_PHYERR_OFFLOAD_TEST_SET_RADAR 0
36 
37 /* Segment ID corresponding to primary segment */
38 #define SEG_ID_PRIMARY 0
39 
40 /* Segment ID corresponding to secondary segment */
41 #define SEG_ID_SECONDARY 1
42 
43 /* dfs_radar_args_for_unit_test: Radar parameters to be sent in unit test cmd.
44  * @IDX_CMD_ID:          Index id pointing to command id value
45  * @IDX_PDEV_ID:         Index id pointing to pdev id value
46  * @IDX_RADAR_PARAM1_ID: Index pointing to packed arguments value that includes
47  *                         1). Segment ID,
48  *                         2). Chirp information (is chirp or non chirp),
49  *                         3). Frequency offset.
50  *                         4). Detector ID.
51  *
52  * The packed argument structure is:
53  *
54  * ------------------------------32 bits arg----------------------------
55  *
56  * ------------19 bits-------|--2 bits-|-------8 bits------|1 bit|2 bits|
57  * ______________________________________________________________________
58  *|                          |   | |   | | | | | | | | | | |     |   |   |
59  *|------19 Unused bits------| x | | x |x|x|x| |x|x|x|x| |x|  x  | x | x |
60  *|__________________________|___|_|___|_|_|_|_|_|_|_|_|_|_|_____|___|___|
61  *
62  *                           |_________|___________________|_____|_______|
63  *                              det.ID     freq.offset      Chirp  seg.ID
64  *
65  * @DFS_UNIT_TEST_NUM_ARGS:     Number of arguments for bangradar unit test
66  *                              command.
67  * @DFS_MAX_NUM_UNIT_TEST_ARGS: Maximum number of arguments for unit test
68  *                              command in radar simulation.
69  */
70 enum {
71 	IDX_CMD_ID = 0,
72 	IDX_PDEV_ID,
73 	IDX_RADAR_PARAM1_ID,
74 	DFS_UNIT_TEST_NUM_ARGS,
75 	DFS_MAX_NUM_UNIT_TEST_ARGS = DFS_UNIT_TEST_NUM_ARGS
76 };
77 
78 #define SEG_ID_SHIFT         0
79 #define IS_CHIRP_SHIFT       2
80 #define FREQ_OFF_SHIFT       3
81 #define DET_ID_SHIFT        11
82 #define SEG_ID_MASK       0x03
83 #define IS_CHIRP_MASK     0x01
84 #define FREQ_OFFSET_MASK  0xFF
85 #define DET_ID_MASK       0x03
86 
87 /**
88  * struct dfs_emulate_bang_radar_test_cmd - Unit test command structure to send
89  *                                          WMI command to firmware from host
90  *                                          and simulate bangradar event.
91  * @vdev_id: vdev id
92  * @num_args: number of arguments
93  * @args: arguments
94  */
95 struct dfs_emulate_bang_radar_test_cmd {
96 	uint32_t vdev_id;
97 	uint32_t num_args;
98 	uint32_t args[DFS_MAX_NUM_UNIT_TEST_ARGS];
99 };
100 
101 /**
102  * struct vdev_adfs_complete_status - OCAC complete status event param
103  * @vdev_id: Physical device identifier
104  * @chan_freq: Channel number
105  * @chan_width: Channel Width
106  * @center_freq1 : For 20/40/80/160Mhz, it is the center of the corresponding
107  * band. For 80P80/165MHz, it is the center of the left 80MHz.
108  * @center_freq2 : It is valid and non-zero only for 80P80/165MHz. It indicates
109  * the Center Frequency of the right 80MHz segment.
110  * @ocac_status: off channel cac status
111  */
112 struct vdev_adfs_complete_status {
113 	uint32_t vdev_id;
114 	uint32_t chan_freq;
115 	uint32_t chan_width;
116 	uint32_t center_freq1;
117 	uint32_t center_freq2;
118 	uint32_t ocac_status;
119 };
120 
121 extern struct dfs_to_mlme global_dfs_to_mlme;
122 
123 /**
124  * tgt_dfs_set_current_channel() - Fill dfs channel structure from
125  *                                 dfs_channel structure.
126  * @pdev: Pointer to DFS pdev object.
127  * @dfs_ch_freq: Frequency in Mhz.
128  * @dfs_ch_flags: Channel flags.
129  * @dfs_ch_flagext: Extended channel flags.
130  * @dfs_ch_ieee: IEEE channel number.
131  * @dfs_ch_vhtop_ch_freq_seg1: Channel Center frequency1.
132  * @dfs_ch_vhtop_ch_freq_seg2: Channel Center frequency2.
133  */
134 #ifdef DFS_COMPONENT_ENABLE
135 #ifdef CONFIG_CHAN_NUM_API
136 QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev,
137 		uint16_t dfs_ch_freq,
138 		uint64_t dfs_ch_flags,
139 		uint16_t dfs_ch_flagext,
140 		uint8_t dfs_ch_ieee,
141 		uint8_t dfs_ch_vhtop_ch_freq_seg1,
142 		uint8_t dfs_ch_vhtop_ch_freq_seg2);
143 #endif
144 
145 /**
146  * tgt_dfs_set_current_channel_for_freq() - Fill dfs channel structure from
147  *                                          dfs_channel structure.
148  * @pdev: Pointer to DFS pdev object.
149  * @dfs_ch_freq: Frequency in Mhz.
150  * @dfs_ch_flags: Channel flags.
151  * @dfs_ch_flagext: Extended channel flags.
152  * @dfs_ch_ieee: IEEE channel number.
153  * @dfs_ch_vhtop_ch_freq_seg1: Channel Center frequency1.
154  * @dfs_ch_vhtop_ch_freq_seg2: Channel Center frequency2.
155  * @dfs_ch_mhz_freq_seg1:  Channel center frequency of primary segment in MHZ.
156  * @dfs_ch_mhz_freq_seg2:  Channel center frequency of secondary segment in MHZ
157  *                         applicable only for 80+80MHZ mode of operation.
158  * @is_channel_updated: Boolean to represent channel update.
159  */
160 #ifdef CONFIG_CHAN_FREQ_API
161 QDF_STATUS
162 tgt_dfs_set_current_channel_for_freq(struct wlan_objmgr_pdev *pdev,
163 				     uint16_t dfs_ch_freq,
164 				     uint64_t dfs_ch_flags,
165 				     uint16_t dfs_ch_flagext,
166 				     uint8_t dfs_ch_ieee,
167 				     uint8_t dfs_ch_vhtop_ch_freq_seg1,
168 				     uint8_t dfs_ch_vhtop_ch_freq_seg2,
169 				     uint16_t dfs_ch_mhz_freq_seg1,
170 				     uint16_t dfs_ch_mhz_freq_seg2,
171 				     bool *is_channel_updated);
172 #endif
173 
174 /**
175  * tgt_dfs_radar_enable() - Enables the radar.
176  * @pdev: Pointer to DFS pdev object.
177  * @no_cac: If no_cac is 0, it cancels the CAC.
178  * @enable: disable/enable radar
179  *
180  * This is called each time a channel change occurs, to (potentially) enable
181  * the radar code.
182  */
183 QDF_STATUS tgt_dfs_radar_enable(
184 	struct wlan_objmgr_pdev *pdev,
185 	int no_cac, uint32_t opmode, bool enable);
186 
187 /**
188  * tgt_dfs_control()- Used to process ioctls related to DFS.
189  * @pdev: Pointer to DFS pdev object.
190  * @id: Command type.
191  * @indata: Input buffer.
192  * @insize: size of the input buffer.
193  * @outdata: A buffer for the results.
194  * @outsize: Size of the output buffer.
195  */
196 QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev,
197 	u_int id,
198 	void *indata,
199 	uint32_t insize,
200 	void *outdata,
201 	uint32_t *outsize,
202 	int *error);
203 
204 /**
205  * tgt_dfs_get_radars() - Based on the chipset, calls init radar table functions
206  * @pdev: Pointer to DFS pdev object.
207  *
208  * Wrapper function for dfs_get_radars(). This function called from
209  * outside of DFS component.
210  */
211 QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev);
212 
213 /**
214  * tgt_dfs_process_radar_ind() - Process radar found indication.
215  * @pdev: Pointer to DFS pdev object.
216  * @radar_found: radar found info.
217  *
218  * Process radar found indication.
219  *
220  * Return QDF_STATUS.
221  */
222 QDF_STATUS tgt_dfs_process_radar_ind(struct wlan_objmgr_pdev *pdev,
223 		struct radar_found_info *radar_found);
224 #else
225 static inline QDF_STATUS tgt_dfs_set_current_channel(
226 		struct wlan_objmgr_pdev *pdev,
227 		uint16_t dfs_ch_freq,
228 		uint64_t dfs_ch_flags,
229 		uint16_t dfs_ch_flagext,
230 		uint8_t dfs_ch_ieee,
231 		uint8_t dfs_ch_vhtop_ch_freq_seg1,
232 		uint8_t dfs_ch_vhtop_ch_freq_seg2)
233 {
234 	return QDF_STATUS_SUCCESS;
235 }
236 
237 static inline QDF_STATUS tgt_dfs_radar_enable(
238 	struct wlan_objmgr_pdev *pdev,
239 	int no_cac, uint32_t opmode, bool enable)
240 {
241 	return QDF_STATUS_SUCCESS;
242 }
243 
244 static inline QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev,
245 	u_int id,
246 	void *indata,
247 	uint32_t insize,
248 	void *outdata,
249 	uint32_t *outsize,
250 	int *error)
251 {
252 	return QDF_STATUS_SUCCESS;
253 }
254 
255 static inline QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev)
256 {
257 	return QDF_STATUS_SUCCESS;
258 }
259 
260 static inline QDF_STATUS tgt_dfs_process_radar_ind(
261 		struct wlan_objmgr_pdev *pdev,
262 		struct radar_found_info *radar_found)
263 {
264 	return QDF_STATUS_SUCCESS;
265 }
266 #endif
267 
268 /**
269  * tgt_dfs_process_phyerr() - Process phyerr.
270  * @pdev: Pointer to DFS pdev object.
271  * @buf: Phyerr buffer.
272  * @datalen: phyerr buffer length.
273  * @r_rssi: RSSI.
274  * @r_ext_rssi: Extension channel RSSI.
275  * @r_rs_tstamp: Timestamp.
276  * @r_fulltsf: TSF64.
277  *
278  * Wrapper function for dfs_process_phyerr(). This function called from
279  * outside of DFS component.
280  */
281 QDF_STATUS tgt_dfs_process_phyerr(struct wlan_objmgr_pdev *pdev,
282 	void *buf,
283 	uint16_t datalen,
284 	uint8_t r_rssi,
285 	uint8_t r_ext_rssi,
286 	uint32_t r_rs_tstamp,
287 	uint64_t r_fulltsf);
288 
289 /**
290  * tgt_dfs_process_phyerr_filter_offload() - Process radar event.
291  * Wrapper function for dfs_process_phyerr_filter_offload(). This function
292  * called from outside of DFS component.
293  * @pdev: Pointer to DFS pdev object.
294  * @wlan_radar_event: pointer to radar_event_info.
295  *
296  * Return: QDF_STATUS
297  */
298 QDF_STATUS tgt_dfs_process_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev,
299 	struct radar_event_info *wlan_radar_event);
300 
301 /**
302  * tgt_dfs_is_phyerr_filter_offload() - Is phyerr filter offload.
303  * @psoc: Pointer to psoc object.
304  * @is_phyerr_filter_offload: Pointer to is_phyerr_filter_offload.
305  *
306  * Return: QDF_STATUS
307  */
308 QDF_STATUS tgt_dfs_is_phyerr_filter_offload(struct wlan_objmgr_psoc *psoc,
309 					    bool *is_phyerr_filter_offload);
310 
311 /**
312  * tgt_dfs_destroy_object() - Destroys the DFS object.
313  * @pdev: Pointer to DFS pdev object.
314  *
315  * Wrapper function for  dfs_destroy_object(). This function called from
316  * outside of DFS component.
317  */
318 QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev);
319 
320 #ifdef QCA_MCL_DFS_SUPPORT
321 /**
322  * tgt_dfs_set_tx_leakage_threshold() - set tx_leakage_threshold.
323  * @pdev: Pointer to DFS pdev object.
324  *
325  * Return QDF_STATUS.
326  */
327 QDF_STATUS tgt_dfs_set_tx_leakage_threshold(struct wlan_objmgr_pdev *pdev);
328 #else
329 static inline QDF_STATUS tgt_dfs_set_tx_leakage_threshold
330 		(struct wlan_objmgr_pdev *pdev)
331 {
332 	return QDF_STATUS_SUCCESS;
333 }
334 #endif
335 
336 /**
337  * tgt_dfs_is_precac_timer_running() - Check whether precac timer is running.
338  * @pdev: Pointer to DFS pdev object.
339  * @is_precac_timer_running: Pointer to save precac timer value.
340  *
341  * Wrapper function for dfs_is_precac_timer_running(). This function called from
342  * outside of DFS component.
343  */
344 QDF_STATUS tgt_dfs_is_precac_timer_running(struct wlan_objmgr_pdev *pdev,
345 	bool *is_precac_timer_running);
346 
347 /**
348  * tgt_dfs_set_agile_precac_state() - set state for Agile Precac.
349  *
350  * @pdev: Pointer to DFS pdev object.
351  * @agile_precac_state: Agile Precac state
352  *
353  * wrapper function for  dfs_set_agile_precac_state.
354  * This function called from outside of dfs component.
355  */
356 QDF_STATUS tgt_dfs_set_agile_precac_state(struct wlan_objmgr_pdev *pdev,
357 					  int agile_precac_state);
358 
359 /**
360  * tgt_dfs_agile_precac_start() - Start agile precac
361  *
362  * @pdev: Pointer to DFS pdev object.
363  *
364  * wrapper function for  dfs_set_agile_precac_state.
365  * This function called from outside of dfs component.
366  */
367 QDF_STATUS tgt_dfs_agile_precac_start(struct wlan_objmgr_pdev *pdev);
368 
369 /**
370  * tgt_dfs_ocac_complete() - Process off channel cac complete indication.
371  * @pdev: Pointer to DFS pdev object.
372  * @vdev_adfs_complete_status: Off channel CAC complete status.
373  *
374  * wrapper function for  dfs_set_agile_precac_state.
375  * This function called from outside of dfs component.
376  */
377 QDF_STATUS tgt_dfs_ocac_complete(struct wlan_objmgr_pdev *pdev,
378 				 struct vdev_adfs_complete_status *ocac_status);
379 
380 /**
381  * utils_dfs_find_vht80_chan_for_precac() - Find VHT80 channel for precac.
382  * @pdev: Pointer to DFS pdev object.
383  * @chan_mode: Channel mode.
384  * @ch_freq_seg1: Segment1 channel freq.
385  * @cfreq1: cfreq1.
386  * @cfreq2: cfreq2.
387  * @phy_mode: Precac phymode.
388  * @dfs_set_cfreq2: Precac cfreq2
389  * @set_agile: Agile mode flag.
390  *
391  * wrapper function for  dfs_find_vht80_chan_for_precacdfs_cancel_cac_timer().
392  * This function called from outside of dfs component.
393  */
394 #ifdef CONFIG_CHAN_NUM_API
395 QDF_STATUS tgt_dfs_find_vht80_chan_for_precac(struct wlan_objmgr_pdev *pdev,
396 		uint32_t chan_mode,
397 		uint8_t ch_freq_seg1,
398 		uint32_t *cfreq1,
399 		uint32_t *cfreq2,
400 		uint32_t *phy_mode,
401 		bool *dfs_set_cfreq2,
402 		bool *set_agile);
403 #endif
404 
405 /**
406  * tgt_dfs_find_vht80_precac_chan_freq() - Find VHT80 channel for precac
407  * @pdev: Pointer to DFS pdev object.
408  * @chan_mode: Channel mode.
409  * @ch_freq_seg1_mhz: Segment1 channel freq in MHZ.
410  * @cfreq1: cfreq1.
411  * @cfreq2: cfreq2.
412  * @phy_mode: Precac phymode.
413  * @dfs_set_cfreq2: Precac cfreq2
414  * @set_agile: Agile mode flag.
415  *
416  * wrapper function for  dfs_find_vht80_chan_for_precac_for_freq().
417  */
418 #ifdef CONFIG_CHAN_FREQ_API
419 QDF_STATUS
420 tgt_dfs_find_vht80_precac_chan_freq(struct wlan_objmgr_pdev *pdev,
421 				    uint32_t chan_mode,
422 				    uint16_t ch_freq_mhz_seg1,
423 				    uint32_t *cfreq1,
424 				    uint32_t *cfreq2,
425 				    uint32_t *phy_mode,
426 				    bool *dfs_set_cfreq2,
427 				    bool *set_agile);
428 #endif
429 
430 /**
431  * tgt_dfs_cac_complete() - Process cac complete indication.
432  * @pdev: Pointer to DFS pdev object.
433  * @vdev_id: vdev id.
434  *
435  * Process cac complete indication from firmware.
436  *
437  * Return QDF_STATUS.
438  */
439 QDF_STATUS tgt_dfs_cac_complete(struct wlan_objmgr_pdev *pdev,
440 		uint32_t vdev_id);
441 
442 /**
443  * tgt_dfs_reg_ev_handler() - Register dfs events.
444  * @psoc: Pointer to psoc.
445  *
446  * Register dfs events.
447  *
448  * Return: QDF_STATUS.
449  */
450 QDF_STATUS tgt_dfs_reg_ev_handler(struct wlan_objmgr_psoc *psoc);
451 
452 /**
453  * tgt_dfs_stop() - Clear dfs timers.
454  * @dfs: Pointer to wlan_dfs structure.
455  */
456 QDF_STATUS tgt_dfs_stop(struct wlan_objmgr_pdev *pdev);
457 
458 /**
459 * tgt_dfs_process_emulate_bang_radar_cmd() - Process to emulate dfs bangradar
460 *                                            command.
461 * @pdev: Pointer to DFS pdev object.
462 *
463 * Process  to emulate dfs bangradar command.
464 *
465 * Return: QDF_STATUS.
466 */
467 QDF_STATUS tgt_dfs_process_emulate_bang_radar_cmd(struct wlan_objmgr_pdev *pdev,
468 		struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test);
469 
470 #ifdef QCA_MCL_DFS_SUPPORT
471 /**
472  * tgt_dfs_set_phyerr_filter_offload() - config phyerr filter offload
473  * @pdev: Pointer to DFS pdev object.
474  *
475  * Return: QDF_STATUS
476  */
477 QDF_STATUS tgt_dfs_set_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev);
478 #else
479 static inline QDF_STATUS tgt_dfs_set_phyerr_filter_offload
480 	(struct wlan_objmgr_pdev *pdev)
481 {
482 	return QDF_STATUS_SUCCESS;
483 }
484 #endif
485 
486 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
487 /**
488  * tgt_dfs_send_avg_params_to_fw() - send average radar parameters to fw.
489  * @pdev: Pointer to DFS pdev object.
490  * @params: Pointer to dfs radar average parameters.
491  *
492  * Return: QDF_STATUS
493  */
494 QDF_STATUS
495 tgt_dfs_send_avg_params_to_fw(struct wlan_objmgr_pdev *pdev,
496 			      struct dfs_radar_found_params *params);
497 #endif
498 
499 /**
500  * tgt_dfs_action_on_status_from_fw() - trigger the action to be taken based on
501  * host dfs status received from fw.
502  * @pdev: Pointer to pdev object.
503  * @status: Pointer to the host dfs status received from fw.
504  *
505  * Return: QDF_STATUS
506  */
507 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
508 QDF_STATUS tgt_dfs_action_on_status_from_fw(struct wlan_objmgr_pdev *pdev,
509 					    uint32_t *status);
510 #else
511 static inline
512 QDF_STATUS tgt_dfs_action_on_status_from_fw(struct wlan_objmgr_pdev *pdev,
513 					    uint32_t *status)
514 {
515 	return QDF_STATUS_SUCCESS;
516 }
517 #endif
518 
519 /**
520  * tgt_dfs_is_radar_enabled() - checks if radar detection is enabled.
521  * @pdev: Pointer to pdev object.
522  * @ignore_dfs: Pointer to check the value. If 1, radar detection is disabled.
523  */
524 void tgt_dfs_is_radar_enabled(struct wlan_objmgr_pdev *pdev, int *ignore_dfs);
525 
526 /**
527  * tgt_dfs_reset_spoof_test() - reset the dfs spoof check variables
528  * @pdev: Pointer to pdev object.
529  *
530  * Return: QDF_STATUS
531  */
532 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
533 QDF_STATUS tgt_dfs_reset_spoof_test(struct wlan_objmgr_pdev *pdev);
534 #else
535 static inline
536 QDF_STATUS tgt_dfs_reset_spoof_test(struct wlan_objmgr_pdev *pdev)
537 {
538 	return QDF_STATUS_SUCCESS;
539 }
540 #endif
541 
542 /**
543  * tgt_dfs_enable_stadfs() - Enable/Disable STADFS capability.
544  * @pdev: Pointer to DFS pdev object.
545  * @val: input value.
546  */
547 void tgt_dfs_enable_stadfs(struct wlan_objmgr_pdev *pdev, bool val);
548 
549 /**
550  * tgt_dfs_is_stadfs_enabled() - Get STADFS capability
551  * @pdev: Pointer to DFS pdev object.
552  *
553  * Return: true if STADFS is enabled, else false.
554  */
555 bool tgt_dfs_is_stadfs_enabled(struct wlan_objmgr_pdev *pdev);
556 
557 /**
558  * tgt_dfs_is_pdev_5ghz() - Check if the input pdev is 5GHZ.
559  * @pdev: Pointer to DFS pdev object.
560  *
561  * Return: true if the pdev supports 5GHz, else false.
562  */
563 bool tgt_dfs_is_pdev_5ghz(struct wlan_objmgr_pdev *pdev);
564 
565 #if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
566 /**
567  * tgt_dfs_send_usenol_pdev_param() - Send usenol pdev param to FW.
568  * @pdev: Pointer to pdev object.
569  * @usenol: Value of usenol
570  *
571  * Return: QDF_STATUS
572  */
573 QDF_STATUS tgt_dfs_send_usenol_pdev_param(struct wlan_objmgr_pdev *pdev,
574 					  bool usenol);
575 
576 /**
577  * tgt_dfs_send_subchan_marking() - Send subchannel marking pdev param to FW.
578  * @pdev: Pointer to pdev object.
579  * @subchanmark: Value of subchannel_marking.
580  *
581  * Return: QDF_STATUS
582  */
583 QDF_STATUS tgt_dfs_send_subchan_marking(struct wlan_objmgr_pdev *pdev,
584 					bool subchanmark);
585 #else
586 static inline
587 QDF_STATUS tgt_dfs_send_usenol_pdev_param(struct wlan_objmgr_pdev *pdev,
588 					  bool usenol)
589 {
590 	return QDF_STATUS_SUCCESS;
591 }
592 
593 static inline QDF_STATUS
594 tgt_dfs_send_subchan_marking(struct wlan_objmgr_pdev *pdev, bool subchanmark)
595 {
596 	return QDF_STATUS_SUCCESS;
597 }
598 #endif
599 #ifdef QCA_SUPPORT_AGILE_DFS
600 /**
601  * tgt_dfs_set_fw_adfs_support() - Set FW aDFS support in dfs object.
602  * @pdev: Pointer to pdev object.
603  * @fw_adfs_support_160: aDFS enabled when pdev is on 160/80P80MHz.
604  * @fw_adfs_support_non_160: aDFS enabled when pdev is on 20/40/80MHz.
605  *
606  * Return: void.
607  */
608 void tgt_dfs_set_fw_adfs_support(struct wlan_objmgr_pdev *pdev,
609 				 bool fw_adfs_support_160,
610 				 bool fw_adfs_support_non_160);
611 #else
612 static inline
613 void tgt_dfs_set_fw_adfs_support(struct wlan_objmgr_pdev *pdev,
614 				 bool fw_adfs_support_160,
615 				 bool fw_adfs_support_non_160)
616 {
617 }
618 #endif
619 
620 /**
621  * tgt_dfs_init_tmp_psoc_nol() - Init temporary psoc NOL structure.
622  * @pdev: Pointer to pdev object.
623  * @num_radios: Number of radios in the psoc.
624  *
625  * Return: void.
626  */
627 void tgt_dfs_init_tmp_psoc_nol(struct wlan_objmgr_pdev *pdev,
628 			       uint8_t num_radios);
629 
630 /**
631  * tgt_dfs_deinit_tmp_psoc_nol() - De-init temporary psoc NOL structure.
632  * @pdev: Pointer to pdev object.
633  *
634  * Return: void.
635  */
636 void tgt_dfs_deinit_tmp_psoc_nol(struct wlan_objmgr_pdev *pdev);
637 
638 /**
639  * tgt_dfs_save_dfs_nol_in_psoc() - Save NOL data of given pdev.
640  * @pdev: Pointer to pdev object.
641  * @pdev_id: The pdev ID which will have the NOL data.
642  *
643  * Based on the frequency of the NOL channel, copy it to the target pdev_id
644  * structure in psoc.
645  *
646  * Return: void.
647  */
648 void tgt_dfs_save_dfs_nol_in_psoc(struct wlan_objmgr_pdev *pdev,
649 				  uint8_t pdev_id);
650 
651 /**
652  * tgt_dfs_reinit_nol_from_psoc_copy() - Reinit saved NOL data to corresponding
653  * pdevs.
654  * @pdev: Pointer to pdev object.
655  * @pdev_id: pdev_id of the given pdev.
656  * @low_5ghz_freq: The low 5GHz frequency value of the target pdev id.
657  * @high_5ghz_freq: The high 5GHz frequency value of the target pdev id.
658  *
659  * Return: void.
660  */
661 void tgt_dfs_reinit_nol_from_psoc_copy(struct wlan_objmgr_pdev *pdev,
662 				       uint8_t pdev_id,
663 				       uint16_t low_5ghz_freq,
664 				       uint16_t high_5ghz_freq);
665 
666 /**
667  * tgt_dfs_reinit_precac_lists() - Reinit preCAC lists.
668  * @src_pdev: Source pdev object from which the preCAC list is copied.
669  * @dest_pdev: Destination pdev object to which the preCAC list is copied.
670  * @low_5g_freq: Low 5G frequency value of the destination DFS.
671  * @high_5g_freq: High 5G frequency value of the destination DFS.
672  *
673  * Copy all the preCAC list entries from the source pdev object to the
674  * destination pdev object which fall within the frequency range of
675  * low_5g_freq and high_5g_freq.
676  *
677  * Return: None (void).
678  */
679 void tgt_dfs_reinit_precac_lists(struct wlan_objmgr_pdev *src_pdev,
680 				 struct wlan_objmgr_pdev *dest_pdev,
681 				 uint16_t low_5g_freq,
682 				 uint16_t high_5g_freq);
683 
684 /**
685  * tgt_dfs_complete_deferred_tasks() - Process HW mode switch completion and
686  * handle deferred tasks.
687  * @pdev: Pointer to primary pdev object.
688  *
689  * Return: void.
690  */
691 void tgt_dfs_complete_deferred_tasks(struct wlan_objmgr_pdev *pdev);
692 #endif /* _WLAN_DFS_TGT_API_H_ */
693