xref: /wlan-driver/qca-wifi-host-cmn/umac/dcs/dispatcher/inc/wlan_dcs_ucfg_api.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-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 any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name 
18*5113495bSYour Name /**
19*5113495bSYour Name  * DOC: This file has the dcs dispatcher API which is exposed to outside of dcs
20*5113495bSYour Name  * component.
21*5113495bSYour Name  */
22*5113495bSYour Name #ifndef _WLAN_DCS_UCFG_API_H_
23*5113495bSYour Name #define _WLAN_DCS_UCFG_API_H_
24*5113495bSYour Name 
25*5113495bSYour Name #include <qdf_status.h>
26*5113495bSYour Name #include <wlan_objmgr_pdev_obj.h>
27*5113495bSYour Name #include <wlan_dcs_public_structs.h>
28*5113495bSYour Name 
29*5113495bSYour Name /**
30*5113495bSYour Name  * typedef dcs_callback() - DCS callback
31*5113495bSYour Name  * @psoc: Pointer to psoc
32*5113495bSYour Name  * @mac_id: mac id
33*5113495bSYour Name  * @interference_type: interference type
34*5113495bSYour Name  * @arg: list of arguments
35*5113495bSYour Name  */
36*5113495bSYour Name typedef void (*dcs_callback)(
37*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
38*5113495bSYour Name 		uint8_t mac_id,
39*5113495bSYour Name 		uint8_t interference_type,
40*5113495bSYour Name 		void *arg);
41*5113495bSYour Name 
42*5113495bSYour Name /**
43*5113495bSYour Name  * typedef dcs_switch_chan_cb() - DCS callback for switching channel
44*5113495bSYour Name  * @vdev: Pointer to vdev
45*5113495bSYour Name  * @tgt_freq: target channel frequency
46*5113495bSYour Name  * @tgt_width: target channel width
47*5113495bSYour Name  */
48*5113495bSYour Name typedef QDF_STATUS (*dcs_switch_chan_cb)(struct wlan_objmgr_vdev *vdev,
49*5113495bSYour Name 					 qdf_freq_t tgt_freq,
50*5113495bSYour Name 					 enum phy_ch_width tgt_width);
51*5113495bSYour Name 
52*5113495bSYour Name /**
53*5113495bSYour Name  * typedef dcs_afc_select_chan_cb() - DCS callback for AFC channel selection
54*5113495bSYour Name  * @arg: pointer to argument
55*5113495bSYour Name  * @vdev_id: vdev id
56*5113495bSYour Name  * @cur_freq: current channel frequency
57*5113495bSYour Name  * @cur_bw: current channel bandwidth
58*5113495bSYour Name  * @pref_bw: pointer to bandwidth of prefer bandwidth when input, and target
59*5113495bSYour Name  *           bandwidth switch to when output
60*5113495bSYour Name  */
61*5113495bSYour Name typedef qdf_freq_t (*dcs_afc_select_chan_cb)(void *arg,
62*5113495bSYour Name 					     uint32_t vdev_id,
63*5113495bSYour Name 					     qdf_freq_t cur_freq,
64*5113495bSYour Name 					     enum phy_ch_width cur_bw,
65*5113495bSYour Name 					     enum phy_ch_width *pref_bw);
66*5113495bSYour Name 
67*5113495bSYour Name #ifdef DCS_INTERFERENCE_DETECTION
68*5113495bSYour Name /**
69*5113495bSYour Name  * ucfg_dcs_register_cb() - API to register dcs callback
70*5113495bSYour Name  * @psoc: pointer to psoc object
71*5113495bSYour Name  * @cbk: dcs callback to be registered
72*5113495bSYour Name  * @arg: argument
73*5113495bSYour Name  *
74*5113495bSYour Name  * This function gets called to register dcs callback function
75*5113495bSYour Name  *
76*5113495bSYour Name  * Return: None
77*5113495bSYour Name  */
78*5113495bSYour Name void ucfg_dcs_register_cb(
79*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
80*5113495bSYour Name 		dcs_callback cbk,
81*5113495bSYour Name 		void *arg);
82*5113495bSYour Name 
83*5113495bSYour Name /**
84*5113495bSYour Name  * ucfg_dcs_register_user_cb() - API to register dcs user callback
85*5113495bSYour Name  * @psoc: pointer to psoc object
86*5113495bSYour Name  * @mac_id: mac id
87*5113495bSYour Name  * @vdev_id: vdev id
88*5113495bSYour Name  * @cb: dcs user callback to be registered
89*5113495bSYour Name  *
90*5113495bSYour Name  * Return: None
91*5113495bSYour Name  */
92*5113495bSYour Name void ucfg_dcs_register_user_cb(struct wlan_objmgr_psoc *psoc,
93*5113495bSYour Name 			       uint8_t mac_id, uint8_t vdev_id,
94*5113495bSYour Name 			       void (*cb)(uint8_t vdev_id,
95*5113495bSYour Name 				      struct wlan_host_dcs_im_user_stats *stats,
96*5113495bSYour Name 				      int status));
97*5113495bSYour Name 
98*5113495bSYour Name /**
99*5113495bSYour Name  * ucfg_dcs_register_awgn_cb() - API to register dcs awgn callback
100*5113495bSYour Name  * @psoc: pointer to psoc object
101*5113495bSYour Name  * @cb: dcs switch channel callback to be registered
102*5113495bSYour Name  *
103*5113495bSYour Name  * Return: QDF_STATUS
104*5113495bSYour Name  */
105*5113495bSYour Name QDF_STATUS ucfg_dcs_register_awgn_cb(struct wlan_objmgr_psoc *psoc,
106*5113495bSYour Name 				     dcs_switch_chan_cb cb);
107*5113495bSYour Name 
108*5113495bSYour Name /**
109*5113495bSYour Name  * ucfg_dcs_register_afc_sel_chan_cb() - API to register SAP channel selection
110*5113495bSYour Name  *                                       callback for AFC DCS
111*5113495bSYour Name  * @psoc: pointer to psoc object
112*5113495bSYour Name  * @cb: dcs user callback to be registered
113*5113495bSYour Name  * @arg: argument
114*5113495bSYour Name  *
115*5113495bSYour Name  * Return: QDF_STATUS
116*5113495bSYour Name  */
117*5113495bSYour Name QDF_STATUS ucfg_dcs_register_afc_sel_chan_cb(struct wlan_objmgr_psoc *psoc,
118*5113495bSYour Name 					     dcs_afc_select_chan_cb cb,
119*5113495bSYour Name 					     void *arg);
120*5113495bSYour Name /**
121*5113495bSYour Name  * ucfg_wlan_dcs_cmd(): API to send dcs command
122*5113495bSYour Name  * @psoc: pointer to psoc object
123*5113495bSYour Name  * @mac_id: mac id
124*5113495bSYour Name  * @is_host_pdev_id: pdev_id is host id or not
125*5113495bSYour Name  *
126*5113495bSYour Name  * This function gets called to send dcs command
127*5113495bSYour Name  *
128*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
129*5113495bSYour Name  */
130*5113495bSYour Name QDF_STATUS
131*5113495bSYour Name ucfg_wlan_dcs_cmd(struct wlan_objmgr_psoc *psoc,
132*5113495bSYour Name 		  uint32_t mac_id,
133*5113495bSYour Name 		  bool is_host_pdev_id);
134*5113495bSYour Name 
135*5113495bSYour Name /**
136*5113495bSYour Name  * ucfg_config_dcs_enable() - API to config dcs enable
137*5113495bSYour Name  * @psoc: pointer to psoc object
138*5113495bSYour Name  * @mac_id: mac id
139*5113495bSYour Name  * @interference_type: type mask(WLAN_HOST_DCS_CWIM / WLAN_HOST_DCS_WLANIM)
140*5113495bSYour Name  *
141*5113495bSYour Name  * This function gets called to config dcs enable
142*5113495bSYour Name  *
143*5113495bSYour Name  * Return: None
144*5113495bSYour Name  */
145*5113495bSYour Name void ucfg_config_dcs_enable(struct wlan_objmgr_psoc *psoc,
146*5113495bSYour Name 			    uint32_t mac_id,
147*5113495bSYour Name 			    uint8_t interference_type);
148*5113495bSYour Name 
149*5113495bSYour Name /**
150*5113495bSYour Name  * ucfg_config_dcs_disable() - API to config dcs disable
151*5113495bSYour Name  * @psoc: pointer to psoc object
152*5113495bSYour Name  * @mac_id: mac id
153*5113495bSYour Name  * @interference_type: type mask(WLAN_HOST_DCS_CWIM / WLAN_HOST_DCS_WLANIM)
154*5113495bSYour Name  *
155*5113495bSYour Name  * This function gets called to config dcs disable
156*5113495bSYour Name  *
157*5113495bSYour Name  * Return: None
158*5113495bSYour Name  */
159*5113495bSYour Name void ucfg_config_dcs_disable(struct wlan_objmgr_psoc *psoc,
160*5113495bSYour Name 			     uint32_t mac_id,
161*5113495bSYour Name 			     uint8_t interference_type);
162*5113495bSYour Name 
163*5113495bSYour Name /**
164*5113495bSYour Name  * ucfg_get_dcs_enable() - API to get dcs enable
165*5113495bSYour Name  * @psoc: pointer to psoc object
166*5113495bSYour Name  * @mac_id: mac id
167*5113495bSYour Name  *
168*5113495bSYour Name  * This function gets called to get current host
169*5113495bSYour Name  * config dcs enable/disable status
170*5113495bSYour Name  *
171*5113495bSYour Name  * Return: WLANIM/CWIM enable status
172*5113495bSYour Name  */
173*5113495bSYour Name uint8_t ucfg_get_dcs_enable(struct wlan_objmgr_psoc *psoc, uint8_t mac_id);
174*5113495bSYour Name 
175*5113495bSYour Name /**
176*5113495bSYour Name  * ucfg_dcs_clear() - API to clear dcs related information
177*5113495bSYour Name  * @psoc: pointer to psoc object
178*5113495bSYour Name  * @mac_id: mac id
179*5113495bSYour Name  *
180*5113495bSYour Name  * This function gets called to clear dcs related information
181*5113495bSYour Name  *
182*5113495bSYour Name  * Return: None
183*5113495bSYour Name  */
184*5113495bSYour Name void ucfg_dcs_clear(struct wlan_objmgr_psoc *psoc, uint32_t mac_id);
185*5113495bSYour Name 
186*5113495bSYour Name /**
187*5113495bSYour Name  * ucfg_config_dcs_event_data() - config dcs event data to do algorithm
188*5113495bSYour Name  * process or not
189*5113495bSYour Name  * @psoc: psoc pointer
190*5113495bSYour Name  * @mac_id: mac id
191*5113495bSYour Name  * @dcs_algorithm_process: dcs algorithm process or not
192*5113495bSYour Name  *
193*5113495bSYour Name  * The function gets called to config dcs event data to do algorithm
194*5113495bSYour Name  * process or not
195*5113495bSYour Name  *
196*5113495bSYour Name  * Return: None
197*5113495bSYour Name  */
198*5113495bSYour Name void ucfg_config_dcs_event_data(struct wlan_objmgr_psoc *psoc, uint32_t mac_id,
199*5113495bSYour Name 				bool dcs_algorithm_process);
200*5113495bSYour Name 
201*5113495bSYour Name /*
202*5113495bSYour Name  * ucfg_dcs_reset_user_stats() - API to reset dcs user stats
203*5113495bSYour Name  * @psoc: pointer to psoc object
204*5113495bSYour Name  * @mac_id: mac id
205*5113495bSYour Name  *
206*5113495bSYour Name  * Return: None
207*5113495bSYour Name  */
208*5113495bSYour Name void ucfg_dcs_reset_user_stats(struct wlan_objmgr_psoc *psoc, uint8_t mac_id);
209*5113495bSYour Name 
210*5113495bSYour Name /**
211*5113495bSYour Name  * ucfg_dcs_set_user_request() - API to set dcs user stats request counter
212*5113495bSYour Name  * @psoc: pointer to psoc object
213*5113495bSYour Name  * @mac_id: mac id
214*5113495bSYour Name  * @user_request_count: user stats request counter
215*5113495bSYour Name  *
216*5113495bSYour Name  * Return: None
217*5113495bSYour Name  */
218*5113495bSYour Name void ucfg_dcs_set_user_request(struct wlan_objmgr_psoc *psoc, uint8_t mac_id,
219*5113495bSYour Name 			       uint32_t user_request_count);
220*5113495bSYour Name 
221*5113495bSYour Name /**
222*5113495bSYour Name  * ucfg_dcs_get_ch_util() - API to get channel interference values
223*5113495bSYour Name  * @psoc: pointer to psoc object
224*5113495bSYour Name  * @mac_id: mac id
225*5113495bSYour Name  * @dcs_stats: pointer to wlan_host_dcs_ch_util_stats
226*5113495bSYour Name  *
227*5113495bSYour Name  * Return: Integer
228*5113495bSYour Name  */
229*5113495bSYour Name QDF_STATUS ucfg_dcs_get_ch_util(struct wlan_objmgr_psoc *psoc, uint8_t mac_id,
230*5113495bSYour Name 				struct wlan_host_dcs_ch_util_stats *dcs_stats);
231*5113495bSYour Name /**
232*5113495bSYour Name  * ucfg_dcs_switch_chan() - switch channel for vdev
233*5113495bSYour Name  * @vdev: vdev ptr
234*5113495bSYour Name  * @tgt_freq: target frequency
235*5113495bSYour Name  * @tgt_width: target channel width
236*5113495bSYour Name  *
237*5113495bSYour Name  * Return: QDF_STATUS
238*5113495bSYour Name  */
239*5113495bSYour Name QDF_STATUS
240*5113495bSYour Name ucfg_dcs_switch_chan(struct wlan_objmgr_vdev *vdev, qdf_freq_t tgt_freq,
241*5113495bSYour Name 		     enum phy_ch_width tgt_width);
242*5113495bSYour Name #else
243*5113495bSYour Name static inline void
ucfg_dcs_register_cb(struct wlan_objmgr_psoc * psoc,dcs_callback cbk,void * arg)244*5113495bSYour Name ucfg_dcs_register_cb(struct wlan_objmgr_psoc *psoc, dcs_callback cbk, void *arg)
245*5113495bSYour Name {
246*5113495bSYour Name }
247*5113495bSYour Name 
248*5113495bSYour Name static inline void
ucfg_dcs_register_user_cb(struct wlan_objmgr_psoc * psoc,uint8_t mac_id,uint8_t vdev_id,void (* cb)(uint8_t vdev_id,struct wlan_host_dcs_im_user_stats * stats,int status))249*5113495bSYour Name ucfg_dcs_register_user_cb(struct wlan_objmgr_psoc *psoc,
250*5113495bSYour Name 			  uint8_t mac_id, uint8_t vdev_id,
251*5113495bSYour Name 			  void (*cb)(uint8_t vdev_id,
252*5113495bSYour Name 				     struct wlan_host_dcs_im_user_stats *stats,
253*5113495bSYour Name 				     int status))
254*5113495bSYour Name {
255*5113495bSYour Name }
256*5113495bSYour Name 
257*5113495bSYour Name static inline QDF_STATUS
ucfg_wlan_dcs_cmd(struct wlan_objmgr_psoc * psoc,uint32_t mac_id,bool is_host_pdev_id)258*5113495bSYour Name ucfg_wlan_dcs_cmd(struct wlan_objmgr_psoc *psoc, uint32_t mac_id,
259*5113495bSYour Name 		  bool is_host_pdev_id)
260*5113495bSYour Name {
261*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
262*5113495bSYour Name }
263*5113495bSYour Name 
264*5113495bSYour Name static inline void
ucfg_config_dcs_enable(struct wlan_objmgr_psoc * psoc,uint32_t mac_id,uint8_t interference_type)265*5113495bSYour Name ucfg_config_dcs_enable(struct wlan_objmgr_psoc *psoc, uint32_t mac_id,
266*5113495bSYour Name 		       uint8_t interference_type)
267*5113495bSYour Name {
268*5113495bSYour Name }
269*5113495bSYour Name 
270*5113495bSYour Name static inline void
ucfg_config_dcs_disable(struct wlan_objmgr_psoc * psoc,uint32_t mac_id,uint8_t interference_type)271*5113495bSYour Name ucfg_config_dcs_disable(struct wlan_objmgr_psoc *psoc, uint32_t mac_id,
272*5113495bSYour Name 			uint8_t interference_type)
273*5113495bSYour Name {
274*5113495bSYour Name }
275*5113495bSYour Name 
276*5113495bSYour Name static inline uint8_t
ucfg_get_dcs_enable(struct wlan_objmgr_psoc * psoc,uint8_t mac_id)277*5113495bSYour Name ucfg_get_dcs_enable(struct wlan_objmgr_psoc *psoc, uint8_t mac_id)
278*5113495bSYour Name {
279*5113495bSYour Name 	return 0;
280*5113495bSYour Name }
281*5113495bSYour Name 
282*5113495bSYour Name static inline void
ucfg_dcs_clear(struct wlan_objmgr_psoc * psoc,uint32_t mac_id)283*5113495bSYour Name ucfg_dcs_clear(struct wlan_objmgr_psoc *psoc, uint32_t mac_id)
284*5113495bSYour Name {
285*5113495bSYour Name }
286*5113495bSYour Name 
287*5113495bSYour Name static inline void
ucfg_config_dcs_event_data(struct wlan_objmgr_psoc * psoc,uint32_t mac_id,bool dcs_algorithm_process)288*5113495bSYour Name ucfg_config_dcs_event_data(struct wlan_objmgr_psoc *psoc, uint32_t mac_id,
289*5113495bSYour Name 			   bool dcs_algorithm_process)
290*5113495bSYour Name {
291*5113495bSYour Name }
292*5113495bSYour Name 
293*5113495bSYour Name static inline void
ucfg_dcs_reset_user_stats(struct wlan_objmgr_psoc * psoc,uint8_t mac_id)294*5113495bSYour Name ucfg_dcs_reset_user_stats(struct wlan_objmgr_psoc *psoc, uint8_t mac_id)
295*5113495bSYour Name {
296*5113495bSYour Name }
297*5113495bSYour Name 
298*5113495bSYour Name static inline void
ucfg_dcs_set_user_request(struct wlan_objmgr_psoc * psoc,uint8_t mac_id,uint32_t user_request_count)299*5113495bSYour Name ucfg_dcs_set_user_request(struct wlan_objmgr_psoc *psoc, uint8_t mac_id,
300*5113495bSYour Name 			  uint32_t user_request_count)
301*5113495bSYour Name {
302*5113495bSYour Name }
303*5113495bSYour Name 
304*5113495bSYour Name static inline QDF_STATUS
ucfg_dcs_get_ch_util(struct wlan_objmgr_psoc * psoc,uint8_t mac_id,struct wlan_host_dcs_ch_util_stats * dcs_stats)305*5113495bSYour Name ucfg_dcs_get_ch_util(struct wlan_objmgr_psoc *psoc, uint8_t mac_id,
306*5113495bSYour Name 		     struct wlan_host_dcs_ch_util_stats *dcs_stats)
307*5113495bSYour Name {
308*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
309*5113495bSYour Name }
310*5113495bSYour Name 
311*5113495bSYour Name static inline QDF_STATUS
ucfg_dcs_switch_chan(struct wlan_objmgr_vdev * vdev,qdf_freq_t tgt_freq,enum phy_ch_width tgt_width)312*5113495bSYour Name ucfg_dcs_switch_chan(struct wlan_objmgr_vdev *vdev, qdf_freq_t tgt_freq,
313*5113495bSYour Name 		     enum phy_ch_width tgt_width)
314*5113495bSYour Name {
315*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
316*5113495bSYour Name }
317*5113495bSYour Name 
318*5113495bSYour Name #endif
319*5113495bSYour Name #endif /* _WLAN_DCS_UCFG_API_H_ */
320