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