xref: /wlan-driver/qca-wifi-host-cmn/spectral/dispatcher/inc/wlan_spectral_utils_api.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2017-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_SPECTRAL_UTILS_API_H_
21*5113495bSYour Name #define _WLAN_SPECTRAL_UTILS_API_H_
22*5113495bSYour Name #ifdef WLAN_CONV_SPECTRAL_ENABLE
23*5113495bSYour Name #include <wlan_objmgr_cmn.h>
24*5113495bSYour Name #include <wlan_lmac_if_def.h>
25*5113495bSYour Name 
26*5113495bSYour Name /* Forward declaration */
27*5113495bSYour Name struct direct_buf_rx_data;
28*5113495bSYour Name struct spectral_wmi_ops;
29*5113495bSYour Name struct spectral_tgt_ops;
30*5113495bSYour Name 
31*5113495bSYour Name /**
32*5113495bSYour Name  * wlan_spectral_is_feature_disabled_pdev() - Check if spectral feature
33*5113495bSYour Name  * is disabled for a given pdev
34*5113495bSYour Name  * @pdev: pointer to pdev
35*5113495bSYour Name  *
36*5113495bSYour Name  * Return : true if spectral is disabled, else false.
37*5113495bSYour Name  */
38*5113495bSYour Name bool wlan_spectral_is_feature_disabled_pdev(struct wlan_objmgr_pdev *pdev);
39*5113495bSYour Name 
40*5113495bSYour Name /**
41*5113495bSYour Name  * wlan_spectral_is_feature_disabled_ini() - Check if spectral feature
42*5113495bSYour Name  * is disabled in INI
43*5113495bSYour Name  * @psoc: pointer to psoc
44*5113495bSYour Name  *
45*5113495bSYour Name  * Return : true if spectral is disabled, else false.
46*5113495bSYour Name  */
47*5113495bSYour Name bool wlan_spectral_is_feature_disabled_ini(struct wlan_objmgr_psoc *psoc);
48*5113495bSYour Name 
49*5113495bSYour Name /**
50*5113495bSYour Name  * wlan_spectral_is_feature_disabled_psoc() - Check if spectral feature
51*5113495bSYour Name  * is disabled for a given psoc
52*5113495bSYour Name  * @psoc: pointer to psoc
53*5113495bSYour Name  *
54*5113495bSYour Name  * Return : true if spectral is disabled, else false.
55*5113495bSYour Name  */
56*5113495bSYour Name bool wlan_spectral_is_feature_disabled_psoc(struct wlan_objmgr_psoc *psoc);
57*5113495bSYour Name 
58*5113495bSYour Name /**
59*5113495bSYour Name  * wlan_spectral_is_mode_disabled_pdev() - Check if a given spectral mode
60*5113495bSYour Name  * is disabled for a given pdev
61*5113495bSYour Name  * @pdev: pointer to pdev
62*5113495bSYour Name  * @smode: spectral scan mode
63*5113495bSYour Name  *
64*5113495bSYour Name  * Return : true if spectral mode is disabled, else false.
65*5113495bSYour Name  */
66*5113495bSYour Name bool wlan_spectral_is_mode_disabled_pdev(struct wlan_objmgr_pdev *pdev,
67*5113495bSYour Name 					 enum spectral_scan_mode smode);
68*5113495bSYour Name 
69*5113495bSYour Name /**
70*5113495bSYour Name  * wlan_spectral_init() - API to init spectral component
71*5113495bSYour Name  *
72*5113495bSYour Name  * This API is invoked from dispatcher init during all component init.
73*5113495bSYour Name  * This API will register all required handlers for pdev and peer object
74*5113495bSYour Name  * create/delete notification.
75*5113495bSYour Name  *
76*5113495bSYour Name  * Return: SUCCESS,
77*5113495bSYour Name  *         Failure
78*5113495bSYour Name  */
79*5113495bSYour Name QDF_STATUS wlan_spectral_init(void);
80*5113495bSYour Name 
81*5113495bSYour Name /**
82*5113495bSYour Name  * wlan_spectral_deinit() - API to deinit spectral component
83*5113495bSYour Name  *
84*5113495bSYour Name  * This API is invoked from dispatcher deinit during all component deinit.
85*5113495bSYour Name  * This API will unregister all registered handlers for pdev and peer object
86*5113495bSYour Name  * create/delete notification.
87*5113495bSYour Name  *
88*5113495bSYour Name  * Return: SUCCESS,
89*5113495bSYour Name  *         Failure
90*5113495bSYour Name  */
91*5113495bSYour Name QDF_STATUS wlan_spectral_deinit(void);
92*5113495bSYour Name 
93*5113495bSYour Name /**
94*5113495bSYour Name  * wlan_lmac_if_sptrl_register_rx_ops() - Register lmac interface Rx operations
95*5113495bSYour Name  * @rx_ops: Pointer to lmac interface Rx operations structure
96*5113495bSYour Name  *
97*5113495bSYour Name  * API to register spectral related lmac interface Rx operations
98*5113495bSYour Name  *
99*5113495bSYour Name  * Return: None
100*5113495bSYour Name  */
101*5113495bSYour Name void
102*5113495bSYour Name wlan_lmac_if_sptrl_register_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops);
103*5113495bSYour Name 
104*5113495bSYour Name /**
105*5113495bSYour Name  * wlan_register_spectral_wmi_ops() - Register Spectral WMI operations
106*5113495bSYour Name  * @psoc: Pointer to psoc object
107*5113495bSYour Name  * @wmi_ops: pointer to the structure holding the Spectral WMI
108*5113495bSYour Name  *            operations
109*5113495bSYour Name  *
110*5113495bSYour Name  * API to register Spectral WMI operations
111*5113495bSYour Name  *
112*5113495bSYour Name  * Return: QDF_STATUS
113*5113495bSYour Name */
114*5113495bSYour Name QDF_STATUS
115*5113495bSYour Name wlan_register_spectral_wmi_ops(struct wlan_objmgr_psoc *psoc,
116*5113495bSYour Name 			       struct spectral_wmi_ops *wmi_ops);
117*5113495bSYour Name 
118*5113495bSYour Name /**
119*5113495bSYour Name  * wlan_register_spectral_tgt_ops() - Register Spectral target operations
120*5113495bSYour Name  * @psoc: Pointer to psoc object
121*5113495bSYour Name  * @tgt_ops: pointer to the structure holding the Spectral target
122*5113495bSYour Name  *            operations
123*5113495bSYour Name  *
124*5113495bSYour Name  * API to register Spectral target operations
125*5113495bSYour Name  *
126*5113495bSYour Name  * Return: QDF_STATUS
127*5113495bSYour Name  */
128*5113495bSYour Name QDF_STATUS
129*5113495bSYour Name wlan_register_spectral_tgt_ops(struct wlan_objmgr_psoc *psoc,
130*5113495bSYour Name 			       struct spectral_tgt_ops *tgt_ops);
131*5113495bSYour Name 
132*5113495bSYour Name /**
133*5113495bSYour Name  * struct spectral_legacy_cbacks - Spectral legacy callbacks
134*5113495bSYour Name  * @vdev_get_chan_freq:          Get channel frequency
135*5113495bSYour Name  * @vdev_get_chan_freq_seg2:     Get secondary 80 center frequency
136*5113495bSYour Name  * @vdev_get_ch_width:           Get channel width
137*5113495bSYour Name  * @vdev_get_sec20chan_freq_mhz: Get secondary 20 frequency
138*5113495bSYour Name  */
139*5113495bSYour Name struct spectral_legacy_cbacks {
140*5113495bSYour Name 	int16_t (*vdev_get_chan_freq)(struct wlan_objmgr_vdev *vdev);
141*5113495bSYour Name 	int16_t (*vdev_get_chan_freq_seg2)(struct wlan_objmgr_vdev *vdev);
142*5113495bSYour Name 	enum phy_ch_width (*vdev_get_ch_width)(struct wlan_objmgr_vdev *vdev);
143*5113495bSYour Name 	int (*vdev_get_sec20chan_freq_mhz)(struct wlan_objmgr_vdev *vdev,
144*5113495bSYour Name 					   uint16_t *sec20chan_freq);
145*5113495bSYour Name };
146*5113495bSYour Name 
147*5113495bSYour Name /**
148*5113495bSYour Name  * spectral_vdev_get_chan_freq() - Get vdev channel frequency
149*5113495bSYour Name  * @vdev:          vdev object
150*5113495bSYour Name  *
151*5113495bSYour Name  * Return: vdev operating frequency
152*5113495bSYour Name  */
153*5113495bSYour Name int16_t spectral_vdev_get_chan_freq(struct wlan_objmgr_vdev *vdev);
154*5113495bSYour Name 
155*5113495bSYour Name /**
156*5113495bSYour Name  * spectral_vdev_get_chan_freq_seg2() - Get vdev's secondary 80 center frequency
157*5113495bSYour Name  * @vdev: vdev object
158*5113495bSYour Name  *
159*5113495bSYour Name  * Return: vdev secondary 80 center frequency
160*5113495bSYour Name  */
161*5113495bSYour Name int16_t spectral_vdev_get_chan_freq_seg2(struct wlan_objmgr_vdev *vdev);
162*5113495bSYour Name 
163*5113495bSYour Name /**
164*5113495bSYour Name  * spectral_vdev_get_sec20chan_freq_mhz() - Get vdev secondary channel frequency
165*5113495bSYour Name  * @vdev:   vdev object
166*5113495bSYour Name  * @sec20chan_freq: secondary channel frequency
167*5113495bSYour Name  *
168*5113495bSYour Name  * Return: secondary channel freq
169*5113495bSYour Name  */
170*5113495bSYour Name int spectral_vdev_get_sec20chan_freq_mhz(struct wlan_objmgr_vdev *vdev,
171*5113495bSYour Name 					uint16_t *sec20chan_freq);
172*5113495bSYour Name 
173*5113495bSYour Name /**
174*5113495bSYour Name  * spectral_register_legacy_cb() - Register spectral legacy callbacks
175*5113495bSYour Name  * commands on spectral parameters
176*5113495bSYour Name  * @psoc: the physical device object
177*5113495bSYour Name  * @legacy_cbacks: Reference to struct spectral_legacy_cbacks from which
178*5113495bSYour Name  * function pointers need to be copied
179*5113495bSYour Name  *
180*5113495bSYour Name  * API to register spectral related legacy callbacks
181*5113495bSYour Name  *
182*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS upon successful registration,
183*5113495bSYour Name  *         QDF_STATUS_E_FAILURE upon failure
184*5113495bSYour Name  */
185*5113495bSYour Name QDF_STATUS spectral_register_legacy_cb(
186*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc,
187*5113495bSYour Name 	struct spectral_legacy_cbacks *legacy_cbacks);
188*5113495bSYour Name 
189*5113495bSYour Name /**
190*5113495bSYour Name  * spectral_vdev_get_ch_width() - Get the channel bandwidth
191*5113495bSYour Name  * @vdev: Pointer to vdev
192*5113495bSYour Name  *
193*5113495bSYour Name  * API to get the channel bandwidth of a given vdev
194*5113495bSYour Name  *
195*5113495bSYour Name  * Return: Enumeration corresponding to the channel bandwidth
196*5113495bSYour Name  */
197*5113495bSYour Name enum phy_ch_width
198*5113495bSYour Name spectral_vdev_get_ch_width(struct wlan_objmgr_vdev *vdev);
199*5113495bSYour Name 
200*5113495bSYour Name /**
201*5113495bSYour Name  * spectral_pdev_open() - Spectral pdev open handler
202*5113495bSYour Name  * @pdev:  pointer to pdev object
203*5113495bSYour Name  *
204*5113495bSYour Name  * API to execute operations on pdev open
205*5113495bSYour Name  *
206*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS upon successful registration,
207*5113495bSYour Name  *         QDF_STATUS_E_FAILURE upon failure
208*5113495bSYour Name  */
209*5113495bSYour Name QDF_STATUS spectral_pdev_open(struct wlan_objmgr_pdev *pdev);
210*5113495bSYour Name 
211*5113495bSYour Name /**
212*5113495bSYour Name  * wlan_spectral_psoc_open() - Spectral psoc open handler
213*5113495bSYour Name  * @psoc:  pointer to psoc object
214*5113495bSYour Name  *
215*5113495bSYour Name  * API to execute operations on psoc open
216*5113495bSYour Name  *
217*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS upon successful registration,
218*5113495bSYour Name  *         QDF_STATUS_E_FAILURE upon failure
219*5113495bSYour Name  */
220*5113495bSYour Name QDF_STATUS wlan_spectral_psoc_open(struct wlan_objmgr_psoc *psoc);
221*5113495bSYour Name 
222*5113495bSYour Name /**
223*5113495bSYour Name  * wlan_spectral_psoc_close() - Spectral psoc close handler
224*5113495bSYour Name  * @psoc:  pointer to psoc object
225*5113495bSYour Name  *
226*5113495bSYour Name  * API to execute operations on psoc close
227*5113495bSYour Name  *
228*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS upon successful registration,
229*5113495bSYour Name  *         QDF_STATUS_E_FAILURE upon failure
230*5113495bSYour Name  */
231*5113495bSYour Name QDF_STATUS wlan_spectral_psoc_close(struct wlan_objmgr_psoc *psoc);
232*5113495bSYour Name 
233*5113495bSYour Name /**
234*5113495bSYour Name  * wlan_spectral_psoc_enable() - Spectral psoc enable handler
235*5113495bSYour Name  * @psoc:  pointer to psoc object
236*5113495bSYour Name  *
237*5113495bSYour Name  * API to execute operations on psoc enable
238*5113495bSYour Name  *
239*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS upon successful registration,
240*5113495bSYour Name  *         QDF_STATUS_E_FAILURE upon failure
241*5113495bSYour Name  */
242*5113495bSYour Name QDF_STATUS wlan_spectral_psoc_enable(struct wlan_objmgr_psoc *psoc);
243*5113495bSYour Name 
244*5113495bSYour Name /**
245*5113495bSYour Name  * wlan_spectral_psoc_disable() - Spectral psoc disable handler
246*5113495bSYour Name  * @psoc:  pointer to psoc object
247*5113495bSYour Name  *
248*5113495bSYour Name  * API to execute operations on psoc disable
249*5113495bSYour Name  *
250*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS upon successful registration,
251*5113495bSYour Name  *         QDF_STATUS_E_FAILURE upon failure
252*5113495bSYour Name  */
253*5113495bSYour Name QDF_STATUS wlan_spectral_psoc_disable(struct wlan_objmgr_psoc *psoc);
254*5113495bSYour Name 
255*5113495bSYour Name /**
256*5113495bSYour Name  * spectral_register_dbr() - register Spectral event handler with DDMA
257*5113495bSYour Name  * @pdev:  pointer to pdev object
258*5113495bSYour Name  *
259*5113495bSYour Name  * API to register event handler with Direct DMA
260*5113495bSYour Name  *
261*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS upon successful registration,
262*5113495bSYour Name  *         QDF_STATUS_E_FAILURE upon failure
263*5113495bSYour Name  */
264*5113495bSYour Name 
265*5113495bSYour Name QDF_STATUS spectral_register_dbr(struct wlan_objmgr_pdev *pdev);
266*5113495bSYour Name 
267*5113495bSYour Name /**
268*5113495bSYour Name  * spectral_unregister_dbr() - unregister Spectral event handler with DDMA
269*5113495bSYour Name  * @pdev:  pointer to pdev object
270*5113495bSYour Name  *
271*5113495bSYour Name  * API to unregister event handler with Direct DMA
272*5113495bSYour Name  *
273*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS upon successful unregistration,
274*5113495bSYour Name  *         QDF_STATUS_E_FAILURE upon failure
275*5113495bSYour Name  */
276*5113495bSYour Name QDF_STATUS spectral_unregister_dbr(struct wlan_objmgr_pdev *pdev);
277*5113495bSYour Name 
278*5113495bSYour Name /**
279*5113495bSYour Name  * wlan_spectral_init_pdev_feature_caps() - API to initialize
280*5113495bSYour Name  * spectral pdev feature caps
281*5113495bSYour Name  * @pdev:  pointer to pdev object
282*5113495bSYour Name  *
283*5113495bSYour Name  * API to initialize Spectral feature caps for a given pdev.
284*5113495bSYour Name  *
285*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS upon successful initialization,
286*5113495bSYour Name  *         QDF_STATUS_E_FAILURE upon failure
287*5113495bSYour Name  */
288*5113495bSYour Name QDF_STATUS wlan_spectral_init_pdev_feature_caps(struct wlan_objmgr_pdev *pdev);
289*5113495bSYour Name 
290*5113495bSYour Name /**
291*5113495bSYour Name  * wlan_spectral_init_psoc_feature_cap() - API to initialize
292*5113495bSYour Name  * spectral psoc feature caps
293*5113495bSYour Name  * @psoc:  pointer to psoc object
294*5113495bSYour Name  *
295*5113495bSYour Name  * API to initialize Spectral feature caps for a given psoc.
296*5113495bSYour Name  *
297*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS upon successful initialization,
298*5113495bSYour Name  *         QDF_STATUS_E_FAILURE upon failure
299*5113495bSYour Name  */
300*5113495bSYour Name QDF_STATUS wlan_spectral_init_psoc_feature_cap(struct wlan_objmgr_psoc *psoc);
301*5113495bSYour Name 
302*5113495bSYour Name /**
303*5113495bSYour Name  * wlan_spectral_pdev_get_lmac_if_txops() - API to get pointer
304*5113495bSYour Name  * to Spectral txops structure
305*5113495bSYour Name  * @pdev:  pointer to pdev object
306*5113495bSYour Name  *
307*5113495bSYour Name  * API to get pointer to Spectral txops structure
308*5113495bSYour Name  *
309*5113495bSYour Name  * Return: Pointer to Spectral txops structure, NULL in case of
310*5113495bSYour Name  *         error.
311*5113495bSYour Name  */
312*5113495bSYour Name struct wlan_lmac_if_sptrl_tx_ops *
313*5113495bSYour Name wlan_spectral_pdev_get_lmac_if_txops(struct wlan_objmgr_pdev *pdev);
314*5113495bSYour Name 
315*5113495bSYour Name #ifdef DIRECT_BUF_RX_ENABLE
316*5113495bSYour Name /**
317*5113495bSYour Name  * spectral_dbr_event_handler() - Spectral dbr event handler
318*5113495bSYour Name  * @pdev:  pointer to pdev object
319*5113495bSYour Name  * @payload: dbr event buffer
320*5113495bSYour Name  *
321*5113495bSYour Name  * API to handle spectral dbr event
322*5113495bSYour Name  *
323*5113495bSYour Name  * Return: true to release buf
324*5113495bSYour Name  */
325*5113495bSYour Name bool spectral_dbr_event_handler(struct wlan_objmgr_pdev *pdev,
326*5113495bSYour Name 				struct direct_buf_rx_data *payload);
327*5113495bSYour Name #endif
328*5113495bSYour Name #endif /* WLAN_CONV_SPECTRAL_ENABLE */
329*5113495bSYour Name #endif /* _WLAN_SPECTRAL_UTILS_API_H_*/
330