xref: /wlan-dirver/qca-wifi-host-cmn/umac/cfr/dispatcher/inc/wlan_cfr_ucfg_api.h (revision 2f4b444fb7e689b83a4ab0e7b3b38f0bf4def8e0)
1 /*
2  * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #ifndef _WLAN_CFR_UCFG_API_H_
20 #define _WLAN_CFR_UCFG_API_H_
21 
22 #include <wlan_objmgr_peer_obj.h>
23 #include <wlan_objmgr_pdev_obj.h>
24 #include <wlan_cfr_public_structs.h>
25 #include <wlan_cfr_utils_api.h>
26 
27 /**
28  * ucfg_cfr_start_capture() - function to start cfr capture for connected client
29  * @pdev: pointer to pdev object
30  * @peer: pointer to peer object
31  * @cfr_params: config params to cfr capture
32  *
33  * Return: status of start capture.
34  */
35 int ucfg_cfr_start_capture(struct wlan_objmgr_pdev *pdev,
36 			   struct wlan_objmgr_peer *peer,
37 			   struct cfr_capture_params *cfr_params);
38 
39 /**
40  * ucfg_cfr_get_capture_status() - function to populate capture status
41  * @pdev: pointer to pdev object
42  * @status: capture status
43  *
44  * Return: none
45  */
46 void ucfg_cfr_get_capture_status(struct wlan_objmgr_pdev *pdev,
47 				 enum cfr_capt_status *status);
48 
49 /**
50  * ucfg_cfr_stop_capture() - function to stop cfr capture for connected client
51  * @pdev: pointer to pdev object
52  * @peer: pointer to peer object
53  *
54  * Return: status of stop capture.
55  */
56 int ucfg_cfr_stop_capture(struct wlan_objmgr_pdev *pdev,
57 			  struct wlan_objmgr_peer *peer);
58 
59 /**
60  * ucfg_cfr_start_capture_probe_req() - function to start cfr capture for
61  *					unassociated clients
62  * @pdev: pointer to pdev object
63  * @unassoc_mac: mac address of un-associated client
64  * @cfr_params: config params to cfr capture
65  *
66  * Return: status of start capture.
67  */
68 int ucfg_cfr_start_capture_probe_req(struct wlan_objmgr_pdev *pdev,
69 				     struct qdf_mac_addr *unassoc_mac,
70 				     struct cfr_capture_params *params);
71 
72 /**
73  * ucfg_cfr_stop_capture_probe_req() - function to stop cfr capture for
74  *				       unassociated cleints
75  * @pdev: pointer to pdev object
76  * @unassoc_mac: mac address of un-associated client
77  *
78  * Return: status of stop capture.
79  */
80 int ucfg_cfr_stop_capture_probe_req(struct wlan_objmgr_pdev *pdev,
81 				    struct qdf_mac_addr *unassoc_mac);
82 
83 /**
84  * ucfg_cfr_list_peers() - Lists total number of peers with cfr capture enabled
85  * @pdev: pointer to pdev object
86  *
87  * Return: number of peers with cfr capture enabled
88  */
89 int ucfg_cfr_list_peers(struct wlan_objmgr_pdev *pdev);
90 
91 /**
92  * ucfg_cfr_set_timer() - function to enable cfr timer
93  * @pdev: pointer to pdev object
94  * @value: value to be set
95  *
96  * Return: status of timer enable
97  */
98 int ucfg_cfr_set_timer(struct wlan_objmgr_pdev *pdev, uint32_t value);
99 
100 /**
101  * ucfg_cfr_get_timer() - function to get cfr_timer_enable
102  * @pdev: pointer to pdev object
103  *
104  * Return: value of cfr_timer_enable
105  */
106 int ucfg_cfr_get_timer(struct wlan_objmgr_pdev *pdev);
107 
108 /**
109  * ucfg_cfr_stop_indication() - User space API to write cfr stop string
110  * @vdev - pointer to vdev object
111  *
112  * Write stop string and indicate to up layer.
113  *
114  * Return: status of write CFR stop string
115  */
116 QDF_STATUS ucfg_cfr_stop_indication(struct wlan_objmgr_vdev *vdev);
117 
118 #ifdef WLAN_CFR_ADRASTEA
119 /**
120  * ucfg_cfr_capture_data() - API called when HTT msg for CFR dump ind received
121  * @psoc: pointer to psoc object
122  * @vdev_id : vdev id
123  * @hdr: CFR header
124  * @mem_index: start offset index of dump in mem
125  *
126  * Return: None
127  */
128 void ucfg_cfr_capture_data(struct wlan_objmgr_psoc *psoc, uint32_t vdev_id,
129 			   struct csi_cfr_header *hdr, uint32_t mem_index);
130 #else
131 static inline
132 void ucfg_cfr_capture_data(struct wlan_objmgr_psoc *psoc, uint32_t vdev_id,
133 			   struct csi_cfr_header *hdr, uint32_t mem_index)
134 {
135 }
136 #endif
137 
138 #ifdef WLAN_ENH_CFR_ENABLE
139 /* Channel capture recipe filters */
140 enum capture_type {
141 	RCC_DIRECTED_FTM_FILTER,
142 	RCC_ALL_FTM_ACK_FILTER,
143 	RCC_DIRECTED_NDPA_NDP_FILTER,
144 	RCC_NDPA_NDP_ALL_FILTER,
145 	RCC_TA_RA_FILTER,
146 	RCC_ALL_PACKET_FILTER,
147 	RCC_DIS_ALL_MODE,
148 };
149 
150 /**
151  * ucfg_cfr_set_rcc_mode() - function to set RCC mode
152  * @vdev: pointer to vdev object
153  * @mode: capture type passed by user
154  * @value: Enable/Disable capture mode
155  *
156  * Return: status if the mode is set or not
157  */
158 QDF_STATUS ucfg_cfr_set_rcc_mode(struct wlan_objmgr_vdev *vdev,
159 				 enum capture_type mode, uint8_t value);
160 
161 /**
162  * ucfg_cfr_get_rcc_enabled() - function to get RCC mode
163  * @vdev: pointer to vdev object
164  *
165  * Return: if the rcc is enabled or not
166  */
167 bool ucfg_cfr_get_rcc_enabled(struct wlan_objmgr_vdev *vdev);
168 
169 /**
170  * ucfg_cfr_set_tara_config() - function to configure TA/RA address and mask
171  * @vdev: pointer to vdev object
172  * @params: user config
173  *
174  * Return: status
175  */
176 QDF_STATUS ucfg_cfr_set_tara_config(struct wlan_objmgr_vdev *vdev,
177 				    struct cfr_wlanconfig_param *params);
178 
179 /**
180  * ucfg_cfr_set_bw_nss() - function to configure nss and bandwidth
181  * @vdev: pointer to vdev object
182  * @params: user config
183  *
184  * Return: status
185  */
186 QDF_STATUS ucfg_cfr_set_bw_nss(struct wlan_objmgr_vdev *vdev,
187 			       struct cfr_wlanconfig_param *params);
188 
189 /**
190  * ucfg_cfr_set_frame_type_subtype() - function to configure frame type/subtype
191  * @vdev: pointer to vdev object
192  * @params: user config
193  *
194  * Return: status
195  */
196 QDF_STATUS
197 ucfg_cfr_set_frame_type_subtype(struct wlan_objmgr_vdev *vdev,
198 				struct cfr_wlanconfig_param *params);
199 
200 /**
201  * ucfg_cfr_set_capture_duration() - function to configure capture duration
202  * @vdev: pointer to vdev object
203  * @params: user config
204  *
205  * Return: status
206  */
207 QDF_STATUS
208 ucfg_cfr_set_capture_duration(struct wlan_objmgr_vdev *vdev,
209 			      struct cfr_wlanconfig_param *params);
210 
211 /**
212  * ucfg_cfr_set_capture_interval() - function to configure capture interval
213  * @vdev: pointer to vdev object
214  * @params: user config
215  *
216  * Return: status
217  */
218 QDF_STATUS
219 ucfg_cfr_set_capture_interval(struct wlan_objmgr_vdev *vdev,
220 			      struct cfr_wlanconfig_param *params);
221 
222 /**
223  * ucfg_cfr_set_tara_filterin_as_fp() - function to FP/MO filtering for m_TA_RA
224  * @vdev: pointer to vdev object
225  * @params: user config
226  *
227  * Return: status
228  */
229 QDF_STATUS
230 ucfg_cfr_set_tara_filterin_as_fp(struct wlan_objmgr_vdev *vdev,
231 				 struct cfr_wlanconfig_param *params);
232 
233 /**
234  * ucfg_cfr_set_capture_count() - function to configure capture count
235  * @vdev: pointer to vdev object
236  * @params: user config
237  *
238  * Return: status
239  */
240 QDF_STATUS
241 ucfg_cfr_set_capture_count(struct wlan_objmgr_vdev *vdev,
242 			   struct cfr_wlanconfig_param *params);
243 
244 /**
245  * ucfg_cfr_set_capture_interval_mode_sel() - function to configure capture
246  *					      interval mode nob
247  * @vdev: pointer to vdev object
248  * @params: user confi
249  *
250  * Return: status
251  */
252 QDF_STATUS
253 ucfg_cfr_set_capture_interval_mode_sel(struct wlan_objmgr_vdev *vdev,
254 				       struct cfr_wlanconfig_param *params);
255 
256 /**
257  * ucfg_cfr_set_en_bitmap() - function to configure 16-bit bitmap in TA_RA mode
258  * @vdev: pointer to vdev object
259  * @params: user config
260  *
261  * Return: status
262  */
263 QDF_STATUS ucfg_cfr_set_en_bitmap(struct wlan_objmgr_vdev *vdev,
264 				  struct cfr_wlanconfig_param *params);
265 
266 /**
267  * ucfg_cfr_set_reset_bitmap() - function to clear all 9 params for all 16
268  * groups in TA_RA mode
269  * @vdev: pointer to vdev object
270  * @params: user config
271  *
272  * Return: status
273  */
274 QDF_STATUS ucfg_cfr_set_reset_bitmap(struct wlan_objmgr_vdev *vdev,
275 				     struct cfr_wlanconfig_param *params);
276 
277 /**
278  * ucfg_cfr_set_ul_mu_user_mask() - function to configure UL MU user mask
279  * @vdev: pointer to vdev object
280  * @params: user config
281  *
282  * Return: status
283  */
284 QDF_STATUS
285 ucfg_cfr_set_ul_mu_user_mask(struct wlan_objmgr_vdev *vdev,
286 			     struct cfr_wlanconfig_param *params);
287 
288 /**
289  * ucfg_cfr_set_freeze_tlv_delay_cnt() - function to configure freeze TLV delay
290  * count threshold
291  * @vdev: pointer to vdev object
292  * @params: user config
293  *
294  * Return: status
295  */
296 QDF_STATUS
297 ucfg_cfr_set_freeze_tlv_delay_cnt(struct wlan_objmgr_vdev *vdev,
298 				  struct cfr_wlanconfig_param *params);
299 
300 /**
301  * ucfg_cfr_committed_rcc_config() - function to commit user config
302  * @vdev: pointer to vdev object
303  *
304  * Return: status
305  */
306 QDF_STATUS ucfg_cfr_committed_rcc_config(struct wlan_objmgr_vdev *vdev);
307 
308 /**
309  * ucfg_cfr_get_cfg() - function to display user config
310  * @vdev: pointer to vdev object
311  *
312  * Return: status
313  */
314 QDF_STATUS ucfg_cfr_get_cfg(struct wlan_objmgr_vdev *vdev);
315 
316 /**
317  * ucfg_cfr_rcc_dump_dbg_counters() - function to display PPDU counters
318  * @vdev: pointer to vdev object
319  *
320  * Return: status
321  */
322 QDF_STATUS ucfg_cfr_rcc_dump_dbg_counters(struct wlan_objmgr_vdev *vdev);
323 
324 /**
325  * ucfg_cfr_rcc_clr_dbg_counters() - function to clear CFR PPDU counters
326  * @vdev: pointer to vdev object
327  *
328  * Return: status
329  */
330 QDF_STATUS ucfg_cfr_rcc_clr_dbg_counters(struct wlan_objmgr_vdev *vdev);
331 
332 /**
333  * ucfg_cfr_rcc_dump_lut() - function to display lookup table
334  * @vdev: pointer to vdev object
335  *
336  * Return: status
337  */
338 QDF_STATUS ucfg_cfr_rcc_dump_lut(struct wlan_objmgr_vdev *vdev);
339 
340 /**
341  * ucfg_cfr_subscribe_ppdu_desc() - User space interface to
342  * subscribe/unsubscribe WDI PPDU desc event
343  * @pdev: pointer to pdev_object
344  * @is_subscribe: subscribe or unsubscribei
345  *
346  * return QDF status
347  */
348 QDF_STATUS ucfg_cfr_subscribe_ppdu_desc(struct wlan_objmgr_pdev *pdev,
349 					bool is_subscribe);
350 
351 #ifdef WLAN_CFR_PM
352 /**
353  * ucfg_cfr_suspend() - User space interface to
354  * set suspend status to CFR
355  * @pdev: pointer to pdev_object
356  *
357  * return QDF status
358  */
359 QDF_STATUS ucfg_cfr_suspend(struct wlan_objmgr_pdev *pdev);
360 
361 /**
362  * ucfg_cfr_resume() - User space interface to
363  * set resume status to CFR
364  * @pdev: pointer to pdev_object
365  *
366  * return QDF status
367  */
368 QDF_STATUS ucfg_cfr_resume(struct wlan_objmgr_pdev *pdev);
369 #else
370 static inline QDF_STATUS
371 ucfg_cfr_suspend(struct wlan_objmgr_pdev *pdev)
372 {
373 	return QDF_STATUS_E_NOSUPPORT;
374 }
375 
376 static inline QDF_STATUS
377 ucfg_cfr_resume(struct wlan_objmgr_pdev *pdev)
378 {
379 	return QDF_STATUS_E_NOSUPPORT;
380 }
381 #endif /* end of WLAN_CFR_PM */
382 #endif
383 #endif
384