xref: /wlan-dirver/qca-wifi-host-cmn/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h (revision ef615e7655641c631b491672197920d85ac046d8)
1 /*
2  * Copyright (c) 2016-2017 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 /* Max number arguments for DFS unit test command */
29 #define DFS_MAX_NUM_UNIT_TEST_ARGS 3
30 
31 /* Command id to send test radar to firmware */
32 #define DFS_PHYERR_OFFLOAD_TEST_SET_RADAR 0
33 
34 /* Number of arguments for  DFS unit test command */
35 #define DFS_UNIT_TEST_NUM_ARGS 3
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 /* Index id pointing to command id value */
44 #define IDX_CMD_ID 0
45 
46 /* Index id pointing to pdev id value */
47 #define IDX_PDEV_ID 1
48 
49 /* Index pointing to segment id value */
50 #define IDX_SEG_ID 2
51 
52 /**
53  * struct dfs_emulate_bang_radar_test_cmd - Unit test command structure to send
54  *                                          WMI command to firmware from host
55  *                                          and simulate bangradar event.
56  * @vdev_id: vdev id
57  * @num_args: number of arguments
58  * @args: arguments
59  */
60 struct dfs_emulate_bang_radar_test_cmd {
61 	uint32_t vdev_id;
62 	uint32_t num_args;
63 	uint32_t args[DFS_MAX_NUM_UNIT_TEST_ARGS];
64 };
65 
66 extern struct dfs_to_mlme global_dfs_to_mlme;
67 
68 /**
69  * tgt_dfs_set_current_channel() - Fill dfs channel structure from
70  *                                 dfs_ieee80211_channel structure.
71  * @pdev: Pointer to DFS pdev object.
72  * @dfs_ch_freq: Frequency in Mhz.
73  * @dfs_ch_flags: Channel flags.
74  * @dfs_ch_flagext: Extended channel flags.
75  * @dfs_ch_ieee: IEEE channel number.
76  * @dfs_ch_vhtop_ch_freq_seg1: Channel Center frequency1.
77  * @dfs_ch_vhtop_ch_freq_seg2: Channel Center frequency2.
78  */
79 QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev,
80 		uint16_t dfs_ch_freq,
81 		uint64_t dfs_ch_flags,
82 		uint16_t dfs_ch_flagext,
83 		uint8_t dfs_ch_ieee,
84 		uint8_t dfs_ch_vhtop_ch_freq_seg1,
85 		uint8_t dfs_ch_vhtop_ch_freq_seg2);
86 
87 /**
88  * tgt_dfs_get_radars() - Based on the chipset, calls init radar table functions
89  * @pdev: Pointer to DFS pdev object.
90  *
91  * Wrapper function for dfs_get_radars(). This function called from
92  * outside of DFS component.
93  */
94 QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev);
95 
96 /**
97  * tgt_dfs_process_phyerr() - Process phyerr.
98  * @pdev: Pointer to DFS pdev object.
99  * @buf: Phyerr buffer.
100  * @datalen: phyerr buffer length.
101  * @r_rssi: RSSI.
102  * @r_ext_rssi: Extension channel RSSI.
103  * @r_rs_tstamp: Timestamp.
104  * @r_fulltsf: TSF64.
105  *
106  * Wrapper function for dfs_process_phyerr(). This function called from
107  * outside of DFS component.
108  */
109 QDF_STATUS tgt_dfs_process_phyerr(struct wlan_objmgr_pdev *pdev,
110 	void *buf,
111 	uint16_t datalen,
112 	uint8_t r_rssi,
113 	uint8_t r_ext_rssi,
114 	uint32_t r_rs_tstamp,
115 	uint64_t r_fulltsf);
116 
117 /**
118  * tgt_dfs_destroy_object() - Destroys the DFS object.
119  * @pdev: Pointer to DFS pdev object.
120  *
121  * Wrapper function for  dfs_destroy_object(). This function called from
122  * outside of DFS component.
123  */
124 QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev);
125 
126 /**
127  * tgt_dfs_radar_enable() - Enables the radar.
128  * @pdev: Pointer to DFS pdev object.
129  * @no_cac: If no_cac is 0, it cancels the CAC.
130  *
131  * This is called each time a channel change occurs, to (potentially) enable
132  * the radar code.
133  */
134 QDF_STATUS tgt_dfs_radar_enable(struct wlan_objmgr_pdev *pdev,
135 	int no_cac, uint32_t opmode);
136 
137 /**
138  * tgt_dfs_control()- Used to process ioctls related to DFS.
139  * @pdev: Pointer to DFS pdev object.
140  * @id: Command type.
141  * @indata: Input buffer.
142  * @insize: size of the input buffer.
143  * @outdata: A buffer for the results.
144  * @outsize: Size of the output buffer.
145  */
146 QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev,
147 	u_int id,
148 	void *indata,
149 	uint32_t insize,
150 	void *outdata,
151 	uint32_t *outsize,
152 	int *error);
153 
154 /**
155  * tgt_dfs_is_precac_timer_running() - Check whether precac timer is running.
156  * @pdev: Pointer to DFS pdev object.
157  * @is_precac_timer_running: Pointer to save precac timer value.
158  *
159  * Wrapper function for dfs_is_precac_timer_running(). This function called from
160  * outside of DFS component.
161  */
162 QDF_STATUS tgt_dfs_is_precac_timer_running(struct wlan_objmgr_pdev *pdev,
163 	bool *is_precac_timer_running);
164 
165 /**
166  * utils_dfs_find_vht80_chan_for_precac() - Find VHT80 channel for precac.
167  * @pdev: Pointer to DFS pdev object.
168  * @chan_mode: Channel mode.
169  * @ch_freq_seg1: Segment1 channel freq.
170  * @cfreq1: cfreq1.
171  * @cfreq2: cfreq2.
172  * @phy_mode: Precac phymode.
173  * @dfs_set_cfreq2: Precac cfreq2
174  * @set_agile: Agile mode flag.
175  *
176  * wrapper function for  dfs_find_vht80_chan_for_precacdfs_cancel_cac_timer().
177  * This function called from outside of dfs component.
178  */
179 QDF_STATUS tgt_dfs_find_vht80_chan_for_precac(struct wlan_objmgr_pdev *pdev,
180 		uint32_t chan_mode,
181 		uint8_t ch_freq_seg1,
182 		uint32_t *cfreq1,
183 		uint32_t *cfreq2,
184 		uint32_t *phy_mode,
185 		bool *dfs_set_cfreq2,
186 		bool *set_agile);
187 
188 /**
189  * tgt_dfs_process_radar_ind() - Process radar found indication.
190  * @pdev: Pointer to DFS pdev object.
191  * @radar_found: radar found info.
192  *
193  * Process radar found indication.
194  *
195  * Return QDF_STATUS.
196  */
197 QDF_STATUS tgt_dfs_process_radar_ind(struct wlan_objmgr_pdev *pdev,
198 		struct radar_found_info *radar_found);
199 
200 /**
201  * tgt_dfs_cac_complete() - Process cac complete indication.
202  * @pdev: Pointer to DFS pdev object.
203  * @vdev_id: vdev id.
204  *
205  * Process cac complete indication from firmware.
206  *
207  * Return QDF_STATUS.
208  */
209 QDF_STATUS tgt_dfs_cac_complete(struct wlan_objmgr_pdev *pdev,
210 		uint32_t vdev_id);
211 
212 /**
213  * tgt_dfs_reg_ev_handler() - Register dfs events.
214  * @psoc: Pointer to psoc.
215  * @dfs_offload: phy err processing offloaded to firmware.
216  *
217  * Register dfs events.
218  *
219  * Return: QDF_STATUS.
220  */
221 QDF_STATUS tgt_dfs_reg_ev_handler(struct wlan_objmgr_psoc *psoc,
222 		bool dfs_offload);
223 
224 /**
225  * tgt_dfs_stop() - Clear dfs timers.
226  * @dfs: Pointer to wlan_dfs structure.
227  */
228 QDF_STATUS tgt_dfs_stop(struct wlan_objmgr_pdev *pdev);
229 
230 /**
231 * tgt_dfs_process_emulate_bang_radar_cmd() - Process to emulate dfs bangradar
232 *                                            command.
233 * @pdev: Pointer to DFS pdev object.
234 *
235 * Process  to emulate dfs bangradar command.
236 *
237 * Return: QDF_STATUS.
238 */
239 QDF_STATUS tgt_dfs_process_emulate_bang_radar_cmd(struct wlan_objmgr_pdev *pdev,
240 		struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test);
241 
242 #endif /* _WLAN_DFS_TGT_API_H_ */
243