xref: /wlan-dirver/qca-wifi-host-cmn/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h (revision a175314c51a4ce5cec2835cc8a8c7dc0c1810915)
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_TGT_API_H_
26 #define _WLAN_DFS_TGT_API_H_
27 
28 #include <wlan_dfs_public_struct.h>
29 
30 /* Max number arguments for DFS unit test command */
31 #define DFS_MAX_NUM_UNIT_TEST_ARGS 3
32 
33 /* Command id to send test radar to firmware */
34 #define DFS_PHYERR_OFFLOAD_TEST_SET_RADAR 0
35 
36 /* Number of arguments for  DFS unit test command */
37 #define DFS_UNIT_TEST_NUM_ARGS 3
38 
39 /* Segment ID corresponding to primary segment */
40 #define SEG_ID_PRIMARY 0
41 
42 /* Segment ID corresponding to secondary segment */
43 #define SEG_ID_SECONDARY 1
44 
45 /* Index id pointing to command id value */
46 #define IDX_CMD_ID 0
47 
48 /* Index id pointing to pdev id value */
49 #define IDX_PDEV_ID 1
50 
51 /* Index pointing to segment id value */
52 #define IDX_SEG_ID 2
53 
54 /**
55  * struct dfs_emulate_bang_radar_test_cmd - Unit test command structure to send
56  *                                          WMI command to firmware from host
57  *                                          and simulate bangradar event.
58  * @vdev_id: vdev id
59  * @num_args: number of arguments
60  * @args: arguments
61  */
62 struct dfs_emulate_bang_radar_test_cmd {
63 	uint32_t vdev_id;
64 	uint32_t num_args;
65 	uint32_t args[DFS_MAX_NUM_UNIT_TEST_ARGS];
66 };
67 
68 extern struct dfs_to_mlme global_dfs_to_mlme;
69 
70 /**
71  * tgt_dfs_set_current_channel() - Fill dfs channel structure from
72  *                                 dfs_channel structure.
73  * @pdev: Pointer to DFS pdev object.
74  * @dfs_ch_freq: Frequency in Mhz.
75  * @dfs_ch_flags: Channel flags.
76  * @dfs_ch_flagext: Extended channel flags.
77  * @dfs_ch_ieee: IEEE channel number.
78  * @dfs_ch_vhtop_ch_freq_seg1: Channel Center frequency1.
79  * @dfs_ch_vhtop_ch_freq_seg2: Channel Center frequency2.
80  */
81 #ifdef DFS_COMPONENT_ENABLE
82 QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev,
83 		uint16_t dfs_ch_freq,
84 		uint64_t dfs_ch_flags,
85 		uint16_t dfs_ch_flagext,
86 		uint8_t dfs_ch_ieee,
87 		uint8_t dfs_ch_vhtop_ch_freq_seg1,
88 		uint8_t dfs_ch_vhtop_ch_freq_seg2);
89 
90 /**
91  * tgt_dfs_radar_enable() - Enables the radar.
92  * @pdev: Pointer to DFS pdev object.
93  * @no_cac: If no_cac is 0, it cancels the CAC.
94  *
95  * This is called each time a channel change occurs, to (potentially) enable
96  * the radar code.
97  */
98 QDF_STATUS tgt_dfs_radar_enable(struct wlan_objmgr_pdev *pdev,
99 	int no_cac, uint32_t opmode);
100 
101 /**
102  * tgt_dfs_control()- Used to process ioctls related to DFS.
103  * @pdev: Pointer to DFS pdev object.
104  * @id: Command type.
105  * @indata: Input buffer.
106  * @insize: size of the input buffer.
107  * @outdata: A buffer for the results.
108  * @outsize: Size of the output buffer.
109  */
110 QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev,
111 	u_int id,
112 	void *indata,
113 	uint32_t insize,
114 	void *outdata,
115 	uint32_t *outsize,
116 	int *error);
117 
118 /**
119  * tgt_dfs_get_radars() - Based on the chipset, calls init radar table functions
120  * @pdev: Pointer to DFS pdev object.
121  *
122  * Wrapper function for dfs_get_radars(). This function called from
123  * outside of DFS component.
124  */
125 QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev);
126 
127 /**
128  * tgt_dfs_process_radar_ind() - Process radar found indication.
129  * @pdev: Pointer to DFS pdev object.
130  * @radar_found: radar found info.
131  *
132  * Process radar found indication.
133  *
134  * Return QDF_STATUS.
135  */
136 QDF_STATUS tgt_dfs_process_radar_ind(struct wlan_objmgr_pdev *pdev,
137 		struct radar_found_info *radar_found);
138 #else
139 static inline QDF_STATUS tgt_dfs_set_current_channel(
140 		struct wlan_objmgr_pdev *pdev,
141 		uint16_t dfs_ch_freq,
142 		uint64_t dfs_ch_flags,
143 		uint16_t dfs_ch_flagext,
144 		uint8_t dfs_ch_ieee,
145 		uint8_t dfs_ch_vhtop_ch_freq_seg1,
146 		uint8_t dfs_ch_vhtop_ch_freq_seg2)
147 {
148 	return QDF_STATUS_SUCCESS;
149 }
150 
151 static inline QDF_STATUS tgt_dfs_radar_enable(struct wlan_objmgr_pdev *pdev,
152 	int no_cac, uint32_t opmode)
153 {
154 	return QDF_STATUS_SUCCESS;
155 }
156 
157 static inline QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev,
158 	u_int id,
159 	void *indata,
160 	uint32_t insize,
161 	void *outdata,
162 	uint32_t *outsize,
163 	int *error)
164 {
165 	return QDF_STATUS_SUCCESS;
166 }
167 
168 static inline QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev)
169 {
170 	return QDF_STATUS_SUCCESS;
171 }
172 
173 static inline QDF_STATUS tgt_dfs_process_radar_ind(
174 		struct wlan_objmgr_pdev *pdev,
175 		struct radar_found_info *radar_found)
176 {
177 	return QDF_STATUS_SUCCESS;
178 }
179 #endif
180 
181 /**
182  * tgt_dfs_process_phyerr() - Process phyerr.
183  * @pdev: Pointer to DFS pdev object.
184  * @buf: Phyerr buffer.
185  * @datalen: phyerr buffer length.
186  * @r_rssi: RSSI.
187  * @r_ext_rssi: Extension channel RSSI.
188  * @r_rs_tstamp: Timestamp.
189  * @r_fulltsf: TSF64.
190  *
191  * Wrapper function for dfs_process_phyerr(). This function called from
192  * outside of DFS component.
193  */
194 QDF_STATUS tgt_dfs_process_phyerr(struct wlan_objmgr_pdev *pdev,
195 	void *buf,
196 	uint16_t datalen,
197 	uint8_t r_rssi,
198 	uint8_t r_ext_rssi,
199 	uint32_t r_rs_tstamp,
200 	uint64_t r_fulltsf);
201 
202 /**
203  * tgt_dfs_process_phyerr_filter_offload() - Process radar event.
204  * Wrapper function for dfs_process_phyerr_filter_offload(). This function
205  * called from outside of DFS component.
206  * @pdev: Pointer to DFS pdev object.
207  * @wlan_radar_event: pointer to radar_event_info.
208  *
209  * Return: QDF_STATUS
210  */
211 QDF_STATUS tgt_dfs_process_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev,
212 	struct radar_event_info *wlan_radar_event);
213 
214 /**
215  * tgt_dfs_is_phyerr_filter_offload() - Is phyerr filter offload.
216  * @psoc: Pointer to psoc object.
217  * @is_phyerr_filter_offload: Pointer to is_phyerr_filter_offload.
218  *
219  * Return: QDF_STATUS
220  */
221 QDF_STATUS tgt_dfs_is_phyerr_filter_offload(struct wlan_objmgr_psoc *psoc,
222 					    bool *is_phyerr_filter_offload);
223 
224 /**
225  * tgt_dfs_destroy_object() - Destroys the DFS object.
226  * @pdev: Pointer to DFS pdev object.
227  *
228  * Wrapper function for  dfs_destroy_object(). This function called from
229  * outside of DFS component.
230  */
231 QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev);
232 
233 #ifdef QCA_MCL_DFS_SUPPORT
234 /**
235  * tgt_dfs_set_tx_leakage_threshold() - set tx_leakage_threshold.
236  * @pdev: Pointer to DFS pdev object.
237  * @tx_leakage_threshold: tx leakage threshold for dfs.
238  *
239  * Return QDF_STATUS.
240  */
241 QDF_STATUS tgt_dfs_set_tx_leakage_threshold(struct wlan_objmgr_pdev *pdev,
242 		uint16_t tx_leakage_threshold);
243 #else
244 static inline QDF_STATUS tgt_dfs_set_tx_leakage_threshold
245 		(struct wlan_objmgr_pdev *pdev,
246 		uint16_t tx_leakage_threshold)
247 {
248 	return QDF_STATUS_SUCCESS;
249 }
250 #endif
251 
252 /**
253  * tgt_dfs_is_precac_timer_running() - Check whether precac timer is running.
254  * @pdev: Pointer to DFS pdev object.
255  * @is_precac_timer_running: Pointer to save precac timer value.
256  *
257  * Wrapper function for dfs_is_precac_timer_running(). This function called from
258  * outside of DFS component.
259  */
260 QDF_STATUS tgt_dfs_is_precac_timer_running(struct wlan_objmgr_pdev *pdev,
261 	bool *is_precac_timer_running);
262 
263 /**
264  * utils_dfs_find_vht80_chan_for_precac() - Find VHT80 channel for precac.
265  * @pdev: Pointer to DFS pdev object.
266  * @chan_mode: Channel mode.
267  * @ch_freq_seg1: Segment1 channel freq.
268  * @cfreq1: cfreq1.
269  * @cfreq2: cfreq2.
270  * @phy_mode: Precac phymode.
271  * @dfs_set_cfreq2: Precac cfreq2
272  * @set_agile: Agile mode flag.
273  *
274  * wrapper function for  dfs_find_vht80_chan_for_precacdfs_cancel_cac_timer().
275  * This function called from outside of dfs component.
276  */
277 QDF_STATUS tgt_dfs_find_vht80_chan_for_precac(struct wlan_objmgr_pdev *pdev,
278 		uint32_t chan_mode,
279 		uint8_t ch_freq_seg1,
280 		uint32_t *cfreq1,
281 		uint32_t *cfreq2,
282 		uint32_t *phy_mode,
283 		bool *dfs_set_cfreq2,
284 		bool *set_agile);
285 
286 /**
287  * tgt_dfs_cac_complete() - Process cac complete indication.
288  * @pdev: Pointer to DFS pdev object.
289  * @vdev_id: vdev id.
290  *
291  * Process cac complete indication from firmware.
292  *
293  * Return QDF_STATUS.
294  */
295 QDF_STATUS tgt_dfs_cac_complete(struct wlan_objmgr_pdev *pdev,
296 		uint32_t vdev_id);
297 
298 /**
299  * tgt_dfs_reg_ev_handler() - Register dfs events.
300  * @psoc: Pointer to psoc.
301  *
302  * Register dfs events.
303  *
304  * Return: QDF_STATUS.
305  */
306 QDF_STATUS tgt_dfs_reg_ev_handler(struct wlan_objmgr_psoc *psoc);
307 
308 /**
309  * tgt_dfs_stop() - Clear dfs timers.
310  * @dfs: Pointer to wlan_dfs structure.
311  */
312 QDF_STATUS tgt_dfs_stop(struct wlan_objmgr_pdev *pdev);
313 
314 /**
315 * tgt_dfs_process_emulate_bang_radar_cmd() - Process to emulate dfs bangradar
316 *                                            command.
317 * @pdev: Pointer to DFS pdev object.
318 *
319 * Process  to emulate dfs bangradar command.
320 *
321 * Return: QDF_STATUS.
322 */
323 QDF_STATUS tgt_dfs_process_emulate_bang_radar_cmd(struct wlan_objmgr_pdev *pdev,
324 		struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test);
325 
326 #ifdef QCA_MCL_DFS_SUPPORT
327 /**
328  * tgt_dfs_set_phyerr_filter_offload() - config phyerr filter offload
329  * @pdev: Pointer to DFS pdev object.
330  *
331  * Return: QDF_STATUS
332  */
333 QDF_STATUS tgt_dfs_set_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev);
334 #else
335 static inline QDF_STATUS tgt_dfs_set_phyerr_filter_offload
336 	(struct wlan_objmgr_pdev *pdev)
337 {
338 	return QDF_STATUS_SUCCESS;
339 }
340 #endif
341 
342 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
343 /**
344  * tgt_dfs_send_avg_params_to_fw() - send average radar parameters to fw.
345  * @pdev: Pointer to DFS pdev object.
346  * @params: Pointer to dfs radar average parameters.
347  *
348  * Return: QDF_STATUS
349  */
350 QDF_STATUS
351 tgt_dfs_send_avg_params_to_fw(struct wlan_objmgr_pdev *pdev,
352 			      struct dfs_radar_found_params *params);
353 #endif
354 
355 /**
356  * tgt_dfs_action_on_status_from_fw() - trigger the action to be taken based on
357  * host dfs status received from fw.
358  * @pdev: Pointer to pdev object.
359  * @status: Pointer to the host dfs status received from fw.
360  *
361  * Return: QDF_STATUS
362  */
363 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
364 QDF_STATUS tgt_dfs_action_on_status_from_fw(struct wlan_objmgr_pdev *pdev,
365 					    uint32_t *status);
366 #else
367 static inline
368 QDF_STATUS tgt_dfs_action_on_status_from_fw(struct wlan_objmgr_pdev *pdev,
369 					    uint32_t *status)
370 {
371 	return QDF_STATUS_SUCCESS;
372 }
373 #endif
374 
375 /**
376  * tgt_dfs_is_radar_enabled() - checks if radar detection is enabled.
377  * @pdev: Pointer to pdev object.
378  * @ignore_dfs: Pointer to check the value. If 1, radar detection is disabled.
379  */
380 void tgt_dfs_is_radar_enabled(struct wlan_objmgr_pdev *pdev, int *ignore_dfs);
381 
382 /**
383  * tgt_dfs_reset_spoof_test() - reset the dfs spoof check variables
384  * @pdev: Pointer to pdev object.
385  *
386  * Return: QDF_STATUS
387  */
388 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
389 QDF_STATUS tgt_dfs_reset_spoof_test(struct wlan_objmgr_pdev *pdev);
390 #else
391 static inline
392 QDF_STATUS tgt_dfs_reset_spoof_test(struct wlan_objmgr_pdev *pdev)
393 {
394 	return QDF_STATUS_SUCCESS;
395 }
396 #endif
397 #endif /* _WLAN_DFS_TGT_API_H_ */
398