xref: /wlan-driver/qca-wifi-host-cmn/spectral/dispatcher/inc/wlan_spectral_tgt_api.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2017-2020 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_TGT_API_H_
21*5113495bSYour Name #define _WLAN_SPECTRAL_TGT_API_H_
22*5113495bSYour Name 
23*5113495bSYour Name #include <wlan_objmgr_cmn.h>
24*5113495bSYour Name #include <qdf_types.h>
25*5113495bSYour Name #include "../../core/spectral_cmn_api_i.h"
26*5113495bSYour Name 
27*5113495bSYour Name /**
28*5113495bSYour Name  * tgt_get_pdev_target_handle() - Get pdev target_if handle
29*5113495bSYour Name  * @pdev: Pointer to pdev
30*5113495bSYour Name  *
31*5113495bSYour Name  * Get handle to pdev target_if internal Spectral data
32*5113495bSYour Name  *
33*5113495bSYour Name  * Return: Handle to pdev target_if internal Spectral data on success, NULL on
34*5113495bSYour Name  * failure
35*5113495bSYour Name  */
36*5113495bSYour Name void *tgt_get_pdev_target_handle(struct wlan_objmgr_pdev *pdev);
37*5113495bSYour Name 
38*5113495bSYour Name /**
39*5113495bSYour Name  * tgt_get_psoc_target_handle() - Get psoc target_if handle
40*5113495bSYour Name  * @psoc: Pointer to psoc
41*5113495bSYour Name  *
42*5113495bSYour Name  * Get handle to psoc target_if internal Spectral data
43*5113495bSYour Name  *
44*5113495bSYour Name  * Return: Handle to psoc target_if internal Spectral data on success, NULL on
45*5113495bSYour Name  * failure
46*5113495bSYour Name  */
47*5113495bSYour Name void *tgt_get_psoc_target_handle(struct wlan_objmgr_psoc *psoc);
48*5113495bSYour Name 
49*5113495bSYour Name /**
50*5113495bSYour Name  * tgt_spectral_control()- handler for demultiplexing requests from higher layer
51*5113495bSYour Name  * @pdev: Reference to global pdev object
52*5113495bSYour Name  * @sscan_req: pointer to Spectral scan request
53*5113495bSYour Name  *
54*5113495bSYour Name  * This function processes the spectral config command
55*5113495bSYour Name  * and appropriate handlers are invoked.
56*5113495bSYour Name  *
57*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS/QDF_STATUS_E_FAILURE
58*5113495bSYour Name  */
59*5113495bSYour Name QDF_STATUS tgt_spectral_control(struct wlan_objmgr_pdev *pdev,
60*5113495bSYour Name 				struct spectral_cp_request *sscan_req);
61*5113495bSYour Name 
62*5113495bSYour Name /**
63*5113495bSYour Name  * tgt_pdev_spectral_init() - implementation for spectral init
64*5113495bSYour Name  * @pdev: Pointer to pdev
65*5113495bSYour Name  *
66*5113495bSYour Name  * Return: On success, pointer to Spectral target_if internal private data, on
67*5113495bSYour Name  * failure, NULL
68*5113495bSYour Name  */
69*5113495bSYour Name void *tgt_pdev_spectral_init(struct wlan_objmgr_pdev *pdev);
70*5113495bSYour Name 
71*5113495bSYour Name /**
72*5113495bSYour Name  * tgt_pdev_spectral_deinit() - implementation for spectral de-init
73*5113495bSYour Name  * @pdev: Pointer to pdev
74*5113495bSYour Name  *
75*5113495bSYour Name  * Return: None
76*5113495bSYour Name  */
77*5113495bSYour Name void tgt_pdev_spectral_deinit(struct wlan_objmgr_pdev *pdev);
78*5113495bSYour Name 
79*5113495bSYour Name /**
80*5113495bSYour Name  * tgt_psoc_spectral_init() - implementation for spectral init
81*5113495bSYour Name  * @psoc: Pointer to psoc
82*5113495bSYour Name  *
83*5113495bSYour Name  * Return: On success, pointer to Spectral psoc target_if internal private data,
84*5113495bSYour Name  * on failure, NULL
85*5113495bSYour Name  */
86*5113495bSYour Name void *tgt_psoc_spectral_init(struct wlan_objmgr_psoc *psoc);
87*5113495bSYour Name 
88*5113495bSYour Name /**
89*5113495bSYour Name  * tgt_psoc_spectral_deinit() - implementation for spectral de-init
90*5113495bSYour Name  * @psoc: Pointer to psoc
91*5113495bSYour Name  *
92*5113495bSYour Name  * Return: None
93*5113495bSYour Name  */
94*5113495bSYour Name void tgt_psoc_spectral_deinit(struct wlan_objmgr_psoc *psoc);
95*5113495bSYour Name 
96*5113495bSYour Name /**
97*5113495bSYour Name  * tgt_set_spectral_config() - Set spectral config
98*5113495bSYour Name  * @pdev: Pointer to pdev object
99*5113495bSYour Name  * @param: Pointer object describing Spectral parameter
100*5113495bSYour Name  * @smode: Spectral scan mode
101*5113495bSYour Name  * @err: Spectral control path error code
102*5113495bSYour Name  *
103*5113495bSYour Name  * Implementation for setting spectral config
104*5113495bSYour Name  *
105*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE
106*5113495bSYour Name  */
107*5113495bSYour Name QDF_STATUS tgt_set_spectral_config(struct wlan_objmgr_pdev *pdev,
108*5113495bSYour Name 				   const struct spectral_cp_param *param,
109*5113495bSYour Name 				   const enum spectral_scan_mode smode,
110*5113495bSYour Name 				   enum spectral_cp_error_code *err);
111*5113495bSYour Name 
112*5113495bSYour Name /**
113*5113495bSYour Name  * tgt_get_spectral_config() - Get spectral configuration
114*5113495bSYour Name  * @pdev: Pointer to pdev object
115*5113495bSYour Name  * @sptrl_config: Pointer to spectral_config structure in which the
116*5113495bSYour Name  *                configuration should be returned
117*5113495bSYour Name  * @smode: Spectral scan mode
118*5113495bSYour Name  *
119*5113495bSYour Name  * Implementation for getting the current spectral configuration
120*5113495bSYour Name  *
121*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE
122*5113495bSYour Name  */
123*5113495bSYour Name QDF_STATUS tgt_get_spectral_config(struct wlan_objmgr_pdev *pdev,
124*5113495bSYour Name 				   struct spectral_config *sptrl_config,
125*5113495bSYour Name 				   const enum spectral_scan_mode smode);
126*5113495bSYour Name 
127*5113495bSYour Name /**
128*5113495bSYour Name  * tgt_start_spectral_scan() - Start spectral scan
129*5113495bSYour Name  * @pdev: Pointer to pdev object
130*5113495bSYour Name  * @vdev_id: VDEV id
131*5113495bSYour Name  * @smode: Spectral scan mode
132*5113495bSYour Name  * @err: Spectral control path error code
133*5113495bSYour Name  *
134*5113495bSYour Name  * Implementation for starting spectral scan
135*5113495bSYour Name  *
136*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE
137*5113495bSYour Name  */
138*5113495bSYour Name QDF_STATUS tgt_start_spectral_scan(struct wlan_objmgr_pdev *pdev,
139*5113495bSYour Name 				   uint8_t vdev_id,
140*5113495bSYour Name 				   enum spectral_scan_mode smode,
141*5113495bSYour Name 				   enum spectral_cp_error_code *err);
142*5113495bSYour Name 
143*5113495bSYour Name /**
144*5113495bSYour Name  * tgt_stop_spectral_scan() - Stop spectral scan
145*5113495bSYour Name  * @pdev: Pointer to pdev object
146*5113495bSYour Name  * @smode: Spectral scan mode
147*5113495bSYour Name  * @err: Spectral control path error code
148*5113495bSYour Name  *
149*5113495bSYour Name  * Implementation for stop spectral scan
150*5113495bSYour Name  *
151*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE
152*5113495bSYour Name  */
153*5113495bSYour Name QDF_STATUS tgt_stop_spectral_scan(struct wlan_objmgr_pdev *pdev,
154*5113495bSYour Name 				  enum spectral_scan_mode smode,
155*5113495bSYour Name 				  enum spectral_cp_error_code *err);
156*5113495bSYour Name 
157*5113495bSYour Name /**
158*5113495bSYour Name  * tgt_is_spectral_active() - Get whether Spectral is active
159*5113495bSYour Name  * @pdev: Pointer to pdev object
160*5113495bSYour Name  * @smode: Spectral scan mode
161*5113495bSYour Name  *
162*5113495bSYour Name  * Implementation to get whether Spectral is active
163*5113495bSYour Name  *
164*5113495bSYour Name  * Return: True if Spectral is active, false if Spectral is not active
165*5113495bSYour Name  */
166*5113495bSYour Name bool tgt_is_spectral_active(struct wlan_objmgr_pdev *pdev,
167*5113495bSYour Name 			    enum spectral_scan_mode smode);
168*5113495bSYour Name 
169*5113495bSYour Name /**
170*5113495bSYour Name  * tgt_is_spectral_enabled() - Get whether Spectral is active
171*5113495bSYour Name  * @pdev: Pointer to pdev object
172*5113495bSYour Name  * @smode: Spectral scan mode
173*5113495bSYour Name  *
174*5113495bSYour Name  * Implementation to get whether Spectral is active
175*5113495bSYour Name  *
176*5113495bSYour Name  * Return: True if Spectral is active, false if Spectral is not active
177*5113495bSYour Name  */
178*5113495bSYour Name bool tgt_is_spectral_enabled(struct wlan_objmgr_pdev *pdev,
179*5113495bSYour Name 			     enum spectral_scan_mode smode);
180*5113495bSYour Name 
181*5113495bSYour Name /**
182*5113495bSYour Name  * tgt_set_debug_level() - Set debug level for Spectral
183*5113495bSYour Name  * @pdev: Pointer to pdev object
184*5113495bSYour Name  * @debug_level: Debug level
185*5113495bSYour Name  *
186*5113495bSYour Name  * Implementation to set the debug level for Spectral
187*5113495bSYour Name  *
188*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE
189*5113495bSYour Name  */
190*5113495bSYour Name QDF_STATUS tgt_set_debug_level(struct wlan_objmgr_pdev *pdev,
191*5113495bSYour Name 			       u_int32_t debug_level);
192*5113495bSYour Name 
193*5113495bSYour Name /**
194*5113495bSYour Name  * tgt_get_debug_level() - Get debug level for Spectral
195*5113495bSYour Name  * @pdev: Pointer to pdev object
196*5113495bSYour Name  *
197*5113495bSYour Name  * Implementation to get the debug level for Spectral
198*5113495bSYour Name  *
199*5113495bSYour Name  * Return: Current debug level
200*5113495bSYour Name  */
201*5113495bSYour Name uint32_t tgt_get_debug_level(struct wlan_objmgr_pdev *pdev);
202*5113495bSYour Name 
203*5113495bSYour Name /**
204*5113495bSYour Name  * tgt_get_spectral_capinfo() - Get Spectral capability information
205*5113495bSYour Name  * @pdev: Pointer to pdev object
206*5113495bSYour Name  * @scaps: Buffer into which data should be copied
207*5113495bSYour Name  *
208*5113495bSYour Name  * Implementation to get the spectral capability information
209*5113495bSYour Name  *
210*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE
211*5113495bSYour Name  */
212*5113495bSYour Name QDF_STATUS tgt_get_spectral_capinfo(struct wlan_objmgr_pdev *pdev,
213*5113495bSYour Name 				    struct spectral_caps *scaps);
214*5113495bSYour Name 
215*5113495bSYour Name /**
216*5113495bSYour Name  * tgt_get_spectral_diagstats() - Get Spectral diagnostic statistics
217*5113495bSYour Name  * @pdev:  Pointer to pdev object
218*5113495bSYour Name  * @stats: Buffer into which data should be copied
219*5113495bSYour Name  *
220*5113495bSYour Name  * Implementation to get the spectral diagnostic statistics
221*5113495bSYour Name  *
222*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE
223*5113495bSYour Name  */
224*5113495bSYour Name QDF_STATUS tgt_get_spectral_diagstats(struct wlan_objmgr_pdev *pdev,
225*5113495bSYour Name 				      struct spectral_diag_stats *stats);
226*5113495bSYour Name 
227*5113495bSYour Name /**
228*5113495bSYour Name  * tgt_register_spectral_wmi_ops() - Register Spectral WMI operations
229*5113495bSYour Name  * @psoc: Pointer to psoc object
230*5113495bSYour Name  * @wmi_ops: Pointer to the structure having Spectral WMI operations
231*5113495bSYour Name  *
232*5113495bSYour Name  * Implementation to register Spectral WMI operations in spectral
233*5113495bSYour Name  * internal data structure
234*5113495bSYour Name  *
235*5113495bSYour Name  * Return: QDF_STATUS
236*5113495bSYour Name  */
237*5113495bSYour Name QDF_STATUS tgt_register_spectral_wmi_ops(struct wlan_objmgr_psoc *psoc,
238*5113495bSYour Name 					 struct spectral_wmi_ops *wmi_ops);
239*5113495bSYour Name 
240*5113495bSYour Name /**
241*5113495bSYour Name  * tgt_register_spectral_tgt_ops() - Register Spectral target operations
242*5113495bSYour Name  * @psoc: Pointer to psoc object
243*5113495bSYour Name  * @tgt_ops: Pointer to the structure having Spectral target operations
244*5113495bSYour Name  *
245*5113495bSYour Name  * Implementation to register Spectral target operations in spectral
246*5113495bSYour Name  * internal data structure
247*5113495bSYour Name  *
248*5113495bSYour Name  * Return: QDF_STATUS
249*5113495bSYour Name  */
250*5113495bSYour Name QDF_STATUS tgt_register_spectral_tgt_ops(struct wlan_objmgr_psoc *psoc,
251*5113495bSYour Name 					 struct spectral_tgt_ops *tgt_ops);
252*5113495bSYour Name 
253*5113495bSYour Name /**
254*5113495bSYour Name  * tgt_spectral_register_nl_cb() - Register Netlink callbacks
255*5113495bSYour Name  * @pdev: Pointer to pdev object
256*5113495bSYour Name  * @nl_cb: Netlink callbacks to register
257*5113495bSYour Name  *
258*5113495bSYour Name  * Return: void
259*5113495bSYour Name  */
260*5113495bSYour Name void tgt_spectral_register_nl_cb(struct wlan_objmgr_pdev *pdev,
261*5113495bSYour Name 				 struct spectral_nl_cb *nl_cb);
262*5113495bSYour Name 
263*5113495bSYour Name /**
264*5113495bSYour Name  * tgt_spectral_use_nl_bcast() - Get whether to use broadcast/unicast while
265*5113495bSYour Name  * sending Netlink messages to the application layer
266*5113495bSYour Name  * @pdev: Pointer to pdev object
267*5113495bSYour Name  *
268*5113495bSYour Name  * Return: true for broadcast, false for unicast
269*5113495bSYour Name  */
270*5113495bSYour Name bool tgt_spectral_use_nl_bcast(struct wlan_objmgr_pdev *pdev);
271*5113495bSYour Name 
272*5113495bSYour Name /**
273*5113495bSYour Name  * tgt_spectral_deregister_nl_cb() - De-register Netlink callbacks
274*5113495bSYour Name  * @pdev: Pointer to pdev object
275*5113495bSYour Name  *
276*5113495bSYour Name  * Return: void
277*5113495bSYour Name  */
278*5113495bSYour Name void tgt_spectral_deregister_nl_cb(struct wlan_objmgr_pdev *pdev);
279*5113495bSYour Name 
280*5113495bSYour Name /**
281*5113495bSYour Name  * tgt_spectral_process_report() - Process spectral report
282*5113495bSYour Name  * @pdev: Pointer to pdev object
283*5113495bSYour Name  * @payload: Pointer to spectral report buffer
284*5113495bSYour Name  *
285*5113495bSYour Name  * Return: status
286*5113495bSYour Name  */
287*5113495bSYour Name int
288*5113495bSYour Name tgt_spectral_process_report(struct wlan_objmgr_pdev *pdev,
289*5113495bSYour Name 			    void *payload);
290*5113495bSYour Name 
291*5113495bSYour Name /**
292*5113495bSYour Name  * tgt_spectral_register_to_dbr() - Register to direct DMA
293*5113495bSYour Name  * @pdev: Pointer to pdev object
294*5113495bSYour Name  *
295*5113495bSYour Name  * Return: QDF_STATUS
296*5113495bSYour Name  */
297*5113495bSYour Name QDF_STATUS
298*5113495bSYour Name tgt_spectral_register_to_dbr(struct wlan_objmgr_pdev *pdev);
299*5113495bSYour Name 
300*5113495bSYour Name /**
301*5113495bSYour Name  * tgt_spectral_unregister_to_dbr() - Register to direct DMA
302*5113495bSYour Name  * @pdev: Pointer to pdev object
303*5113495bSYour Name  *
304*5113495bSYour Name  * Return: QDF_STATUS
305*5113495bSYour Name  */
306*5113495bSYour Name QDF_STATUS
307*5113495bSYour Name tgt_spectral_unregister_to_dbr(struct wlan_objmgr_pdev *pdev);
308*5113495bSYour Name 
309*5113495bSYour Name /**
310*5113495bSYour Name  * tgt_spectral_get_target_type() - Get target type
311*5113495bSYour Name  * @psoc: Pointer to psoc object
312*5113495bSYour Name  *
313*5113495bSYour Name  * Return: target type
314*5113495bSYour Name  */
315*5113495bSYour Name uint32_t
316*5113495bSYour Name tgt_spectral_get_target_type(struct wlan_objmgr_psoc *psoc);
317*5113495bSYour Name 
318*5113495bSYour Name /**
319*5113495bSYour Name  * tgt_set_spectral_dma_debug() - Set DMA debug for Spectral
320*5113495bSYour Name  * @pdev: Pointer to pdev object
321*5113495bSYour Name  * @dma_debug_type: Type of Spectral DMA debug i.e., ring or buffer debug
322*5113495bSYour Name  * @dma_debug_enable: Value to be set for @dma_debug_type
323*5113495bSYour Name  *
324*5113495bSYour Name  * Return: QDF_STATUS of operation
325*5113495bSYour Name  */
326*5113495bSYour Name QDF_STATUS tgt_set_spectral_dma_debug(struct wlan_objmgr_pdev *pdev,
327*5113495bSYour Name 				      enum spectral_dma_debug dma_debug_type,
328*5113495bSYour Name 				      bool dma_debug_enable);
329*5113495bSYour Name 
330*5113495bSYour Name /**
331*5113495bSYour Name  * tgt_spectral_register_events() - Register Spectral WMI event handlers
332*5113495bSYour Name  * @psoc: Pointer to psoc object
333*5113495bSYour Name  *
334*5113495bSYour Name  * Return: QDF_STATUS of operation
335*5113495bSYour Name  */
336*5113495bSYour Name QDF_STATUS
337*5113495bSYour Name tgt_spectral_register_events(struct wlan_objmgr_psoc *psoc);
338*5113495bSYour Name 
339*5113495bSYour Name /**
340*5113495bSYour Name  * tgt_spectral_unregister_events() - Unregister Spectral WMI event handlers
341*5113495bSYour Name  * @psoc: Pointer to psoc object
342*5113495bSYour Name  *
343*5113495bSYour Name  * Return: QDF_STATUS of operation
344*5113495bSYour Name  */
345*5113495bSYour Name QDF_STATUS
346*5113495bSYour Name tgt_spectral_unregister_events(struct wlan_objmgr_psoc *psoc);
347*5113495bSYour Name 
348*5113495bSYour Name /**
349*5113495bSYour Name  * tgt_spectral_init_pdev_feature_caps() - Init pdev spectral feature caps
350*5113495bSYour Name  * @pdev: pdev handle
351*5113495bSYour Name  *
352*5113495bSYour Name  * Return: QDF_STATUS
353*5113495bSYour Name  */
354*5113495bSYour Name QDF_STATUS
355*5113495bSYour Name tgt_spectral_init_pdev_feature_caps(struct wlan_objmgr_pdev *pdev);
356*5113495bSYour Name #endif /* _WLAN_SPECTRAL_TGT_API_H_ */
357