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