xref: /wlan-dirver/qca-wifi-host-cmn/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h (revision 3149adf58a329e17232a4c0e58d460d025edd55a)
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 QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev,
82 		uint16_t dfs_ch_freq,
83 		uint64_t dfs_ch_flags,
84 		uint16_t dfs_ch_flagext,
85 		uint8_t dfs_ch_ieee,
86 		uint8_t dfs_ch_vhtop_ch_freq_seg1,
87 		uint8_t dfs_ch_vhtop_ch_freq_seg2);
88 
89 /**
90  * tgt_dfs_get_radars() - Based on the chipset, calls init radar table functions
91  * @pdev: Pointer to DFS pdev object.
92  *
93  * Wrapper function for dfs_get_radars(). This function called from
94  * outside of DFS component.
95  */
96 QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev);
97 
98 /**
99  * tgt_dfs_process_phyerr() - Process phyerr.
100  * @pdev: Pointer to DFS pdev object.
101  * @buf: Phyerr buffer.
102  * @datalen: phyerr buffer length.
103  * @r_rssi: RSSI.
104  * @r_ext_rssi: Extension channel RSSI.
105  * @r_rs_tstamp: Timestamp.
106  * @r_fulltsf: TSF64.
107  *
108  * Wrapper function for dfs_process_phyerr(). This function called from
109  * outside of DFS component.
110  */
111 QDF_STATUS tgt_dfs_process_phyerr(struct wlan_objmgr_pdev *pdev,
112 	void *buf,
113 	uint16_t datalen,
114 	uint8_t r_rssi,
115 	uint8_t r_ext_rssi,
116 	uint32_t r_rs_tstamp,
117 	uint64_t r_fulltsf);
118 
119 /**
120  * tgt_dfs_process_phyerr_filter_offload() - Process radar event.
121  * Wrapper function for dfs_process_phyerr_filter_offload(). This function
122  * called from outside of DFS component.
123  * @pdev: Pointer to DFS pdev object.
124  * @wlan_radar_event: pointer to radar_event_info.
125  *
126  * Return: QDF_STATUS
127  */
128 QDF_STATUS tgt_dfs_process_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev,
129 	struct radar_event_info *wlan_radar_event);
130 
131 /**
132  * tgt_dfs_is_phyerr_filter_offload() - Is phyerr filter offload.
133  * @psoc: Pointer to psoc object.
134  * @is_phyerr_filter_offload: Pointer to is_phyerr_filter_offload.
135  *
136  * Return: QDF_STATUS
137  */
138 QDF_STATUS tgt_dfs_is_phyerr_filter_offload(struct wlan_objmgr_psoc *psoc,
139 					    bool *is_phyerr_filter_offload);
140 
141 /**
142  * tgt_dfs_destroy_object() - Destroys the DFS object.
143  * @pdev: Pointer to DFS pdev object.
144  *
145  * Wrapper function for  dfs_destroy_object(). This function called from
146  * outside of DFS component.
147  */
148 QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev);
149 
150 /**
151  * tgt_dfs_radar_enable() - Enables the radar.
152  * @pdev: Pointer to DFS pdev object.
153  * @no_cac: If no_cac is 0, it cancels the CAC.
154  *
155  * This is called each time a channel change occurs, to (potentially) enable
156  * the radar code.
157  */
158 QDF_STATUS tgt_dfs_radar_enable(struct wlan_objmgr_pdev *pdev,
159 	int no_cac, uint32_t opmode);
160 
161 #ifdef QCA_MCL_DFS_SUPPORT
162 /**
163  * tgt_dfs_set_tx_leakage_threshold() - set tx_leakage_threshold.
164  * @pdev: Pointer to DFS pdev object.
165  * @tx_leakage_threshold: tx leakage threshold for dfs.
166  *
167  * Return QDF_STATUS.
168  */
169 QDF_STATUS tgt_dfs_set_tx_leakage_threshold(struct wlan_objmgr_pdev *pdev,
170 		uint16_t tx_leakage_threshold);
171 #endif
172 
173 /**
174  * tgt_dfs_control()- Used to process ioctls related to DFS.
175  * @pdev: Pointer to DFS pdev object.
176  * @id: Command type.
177  * @indata: Input buffer.
178  * @insize: size of the input buffer.
179  * @outdata: A buffer for the results.
180  * @outsize: Size of the output buffer.
181  */
182 QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev,
183 	u_int id,
184 	void *indata,
185 	uint32_t insize,
186 	void *outdata,
187 	uint32_t *outsize,
188 	int *error);
189 
190 /**
191  * tgt_dfs_is_precac_timer_running() - Check whether precac timer is running.
192  * @pdev: Pointer to DFS pdev object.
193  * @is_precac_timer_running: Pointer to save precac timer value.
194  *
195  * Wrapper function for dfs_is_precac_timer_running(). This function called from
196  * outside of DFS component.
197  */
198 QDF_STATUS tgt_dfs_is_precac_timer_running(struct wlan_objmgr_pdev *pdev,
199 	bool *is_precac_timer_running);
200 
201 /**
202  * utils_dfs_find_vht80_chan_for_precac() - Find VHT80 channel for precac.
203  * @pdev: Pointer to DFS pdev object.
204  * @chan_mode: Channel mode.
205  * @ch_freq_seg1: Segment1 channel freq.
206  * @cfreq1: cfreq1.
207  * @cfreq2: cfreq2.
208  * @phy_mode: Precac phymode.
209  * @dfs_set_cfreq2: Precac cfreq2
210  * @set_agile: Agile mode flag.
211  *
212  * wrapper function for  dfs_find_vht80_chan_for_precacdfs_cancel_cac_timer().
213  * This function called from outside of dfs component.
214  */
215 QDF_STATUS tgt_dfs_find_vht80_chan_for_precac(struct wlan_objmgr_pdev *pdev,
216 		uint32_t chan_mode,
217 		uint8_t ch_freq_seg1,
218 		uint32_t *cfreq1,
219 		uint32_t *cfreq2,
220 		uint32_t *phy_mode,
221 		bool *dfs_set_cfreq2,
222 		bool *set_agile);
223 
224 /**
225  * tgt_dfs_process_radar_ind() - Process radar found indication.
226  * @pdev: Pointer to DFS pdev object.
227  * @radar_found: radar found info.
228  *
229  * Process radar found indication.
230  *
231  * Return QDF_STATUS.
232  */
233 QDF_STATUS tgt_dfs_process_radar_ind(struct wlan_objmgr_pdev *pdev,
234 		struct radar_found_info *radar_found);
235 
236 /**
237  * tgt_dfs_cac_complete() - Process cac complete indication.
238  * @pdev: Pointer to DFS pdev object.
239  * @vdev_id: vdev id.
240  *
241  * Process cac complete indication from firmware.
242  *
243  * Return QDF_STATUS.
244  */
245 QDF_STATUS tgt_dfs_cac_complete(struct wlan_objmgr_pdev *pdev,
246 		uint32_t vdev_id);
247 
248 /**
249  * tgt_dfs_reg_ev_handler() - Register dfs events.
250  * @psoc: Pointer to psoc.
251  * @dfs_offload: phy err processing offloaded to firmware.
252  *
253  * Register dfs events.
254  *
255  * Return: QDF_STATUS.
256  */
257 QDF_STATUS tgt_dfs_reg_ev_handler(struct wlan_objmgr_psoc *psoc,
258 		bool dfs_offload);
259 
260 /**
261  * tgt_dfs_stop() - Clear dfs timers.
262  * @dfs: Pointer to wlan_dfs structure.
263  */
264 QDF_STATUS tgt_dfs_stop(struct wlan_objmgr_pdev *pdev);
265 
266 /**
267 * tgt_dfs_process_emulate_bang_radar_cmd() - Process to emulate dfs bangradar
268 *                                            command.
269 * @pdev: Pointer to DFS pdev object.
270 *
271 * Process  to emulate dfs bangradar command.
272 *
273 * Return: QDF_STATUS.
274 */
275 QDF_STATUS tgt_dfs_process_emulate_bang_radar_cmd(struct wlan_objmgr_pdev *pdev,
276 		struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test);
277 
278 #ifdef QCA_MCL_DFS_SUPPORT
279 /**
280  * tgt_dfs_set_phyerr_filter_offload() - config phyerr filter offload
281  * @pdev: Pointer to DFS pdev object.
282  *
283  * Return: QDF_STATUS
284  */
285 QDF_STATUS tgt_dfs_set_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev);
286 #endif
287 #endif /* _WLAN_DFS_TGT_API_H_ */
288