xref: /wlan-driver/qca-wifi-host-cmn/ipa/core/inc/wlan_ipa_main.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2024 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  * DOC: declare various api which shall be used by
21*5113495bSYour Name  * IPA user configuration and target interface
22*5113495bSYour Name  */
23*5113495bSYour Name 
24*5113495bSYour Name #ifndef _WLAN_IPA_MAIN_H_
25*5113495bSYour Name #define _WLAN_IPA_MAIN_H_
26*5113495bSYour Name 
27*5113495bSYour Name #ifdef IPA_OFFLOAD
28*5113495bSYour Name 
29*5113495bSYour Name #include <wlan_objmgr_psoc_obj.h>
30*5113495bSYour Name #include <wlan_objmgr_pdev_obj.h>
31*5113495bSYour Name #include <wlan_ipa_public_struct.h>
32*5113495bSYour Name #include <wlan_ipa_priv.h>
33*5113495bSYour Name #include "cfg_ucfg_api.h"
34*5113495bSYour Name 
35*5113495bSYour Name /* Declare a variable for IPA instancess added based on pdev */
36*5113495bSYour Name extern uint8_t g_instances_added;
37*5113495bSYour Name #define IPA_INVALID_HDL 0xFF
38*5113495bSYour Name #define IPA_OFFLOAD_CFG 0x7D
39*5113495bSYour Name 
40*5113495bSYour Name #define INTRL_MODE_DISABLE 0xEEEEEEEE
41*5113495bSYour Name #define INTRL_MODE_ENABLE 0x27D
42*5113495bSYour Name 
43*5113495bSYour Name #define ipa_fatal(params...) \
44*5113495bSYour Name 	QDF_TRACE_FATAL(QDF_MODULE_ID_IPA, params)
45*5113495bSYour Name #define ipa_err(params...) \
46*5113495bSYour Name 	QDF_TRACE_ERROR(QDF_MODULE_ID_IPA, params)
47*5113495bSYour Name #define ipa_warn(params...) \
48*5113495bSYour Name 	QDF_TRACE_WARN(QDF_MODULE_ID_IPA, params)
49*5113495bSYour Name #define ipa_info(params...) \
50*5113495bSYour Name 	QDF_TRACE_INFO(QDF_MODULE_ID_IPA, params)
51*5113495bSYour Name #define ipa_debug(params...) \
52*5113495bSYour Name 	QDF_TRACE_DEBUG(QDF_MODULE_ID_IPA, params)
53*5113495bSYour Name 
54*5113495bSYour Name #define ipa_nofl_fatal(params...) \
55*5113495bSYour Name 	QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_IPA, params)
56*5113495bSYour Name #define ipa_nofl_err(params...) \
57*5113495bSYour Name 	QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_IPA, params)
58*5113495bSYour Name #define ipa_nofl_warn(params...) \
59*5113495bSYour Name 	QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_IPA, params)
60*5113495bSYour Name #define ipa_nofl_info(params...) \
61*5113495bSYour Name 	QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_IPA, params)
62*5113495bSYour Name #define ipa_nofl_debug(params...) \
63*5113495bSYour Name 	QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_IPA, params)
64*5113495bSYour Name 
65*5113495bSYour Name #define ipa_fatal_rl(params...) QDF_TRACE_FATAL_RL(QDF_MODULE_ID_IPA, params)
66*5113495bSYour Name #define ipa_err_rl(params...) QDF_TRACE_ERROR_RL(QDF_MODULE_ID_IPA, params)
67*5113495bSYour Name #define ipa_warn_rl(params...) QDF_TRACE_WARN_RL(QDF_MODULE_ID_IPA, params)
68*5113495bSYour Name #define ipa_info_rl(params...) QDF_TRACE_INFO_RL(QDF_MODULE_ID_IPA, params)
69*5113495bSYour Name #define ipa_debug_rl(params...) QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_IPA, params)
70*5113495bSYour Name 
71*5113495bSYour Name #define IPA_ENTER() \
72*5113495bSYour Name 	QDF_TRACE_ENTER(QDF_MODULE_ID_IPA, "enter")
73*5113495bSYour Name #define IPA_EXIT() \
74*5113495bSYour Name 	QDF_TRACE_EXIT(QDF_MODULE_ID_IPA, "exit")
75*5113495bSYour Name 
76*5113495bSYour Name /**
77*5113495bSYour Name  * ipa_set_cap_offload() - set IPA capability offload support
78*5113495bSYour Name  * @flag: flag to set
79*5113495bSYour Name  *
80*5113495bSYour Name  * Return: None
81*5113495bSYour Name  */
82*5113495bSYour Name void ipa_set_cap_offload(bool flag);
83*5113495bSYour Name 
84*5113495bSYour Name /**
85*5113495bSYour Name  * ipa_set_pld_enable() - set g_ipa_pld_enable
86*5113495bSYour Name  * @flag: flag to set g_ipa_pld_enable
87*5113495bSYour Name  *
88*5113495bSYour Name  * Return: None
89*5113495bSYour Name  */
90*5113495bSYour Name void ipa_set_pld_enable(bool flag);
91*5113495bSYour Name 
92*5113495bSYour Name /**
93*5113495bSYour Name  * ipa_get_pld_enable() - check if IPA is disabled in pld
94*5113495bSYour Name  *
95*5113495bSYour Name  * Return: g_ipa_pld_enable
96*5113495bSYour Name  */
97*5113495bSYour Name bool ipa_get_pld_enable(void);
98*5113495bSYour Name 
99*5113495bSYour Name /**
100*5113495bSYour Name  * ipa_check_hw_present() - get IPA hw status
101*5113495bSYour Name  *
102*5113495bSYour Name  * ipa_uc_reg_rdyCB is not directly designed to check
103*5113495bSYour Name  * ipa hw status. This is an undocumented function which
104*5113495bSYour Name  * has confirmed with IPA team.
105*5113495bSYour Name  *
106*5113495bSYour Name  * Return: true - ipa hw present
107*5113495bSYour Name  *         false - ipa hw not present
108*5113495bSYour Name  */
109*5113495bSYour Name bool ipa_check_hw_present(void);
110*5113495bSYour Name 
111*5113495bSYour Name /**
112*5113495bSYour Name  * ipa_pdev_get_priv_obj() - private API to get ipa pdev object
113*5113495bSYour Name  * @pdev: pdev object
114*5113495bSYour Name  *
115*5113495bSYour Name  * Return: ipa object
116*5113495bSYour Name  */
117*5113495bSYour Name static inline struct wlan_ipa_priv *
ipa_pdev_get_priv_obj(struct wlan_objmgr_pdev * pdev)118*5113495bSYour Name ipa_pdev_get_priv_obj(struct wlan_objmgr_pdev *pdev)
119*5113495bSYour Name {
120*5113495bSYour Name 	struct wlan_ipa_priv *pdev_obj;
121*5113495bSYour Name 
122*5113495bSYour Name 	pdev_obj = (struct wlan_ipa_priv *)
123*5113495bSYour Name 		wlan_objmgr_pdev_get_comp_private_obj(pdev,
124*5113495bSYour Name 				WLAN_UMAC_COMP_IPA);
125*5113495bSYour Name 
126*5113495bSYour Name 	return pdev_obj;
127*5113495bSYour Name }
128*5113495bSYour Name 
129*5113495bSYour Name /**
130*5113495bSYour Name  * get_ipa_config() - API to get IPAConfig INI
131*5113495bSYour Name  * @psoc : psoc handle
132*5113495bSYour Name  *
133*5113495bSYour Name  * Return: IPA config value
134*5113495bSYour Name  */
135*5113495bSYour Name uint32_t get_ipa_config(struct wlan_objmgr_psoc *psoc);
136*5113495bSYour Name 
137*5113495bSYour Name /**
138*5113495bSYour Name  * ipa_priv_obj_get_pdev() - API to get pdev from IPA object
139*5113495bSYour Name  * @ipa_obj: IPA object
140*5113495bSYour Name  *
141*5113495bSYour Name  * Return: pdev object
142*5113495bSYour Name  */
143*5113495bSYour Name static inline struct wlan_objmgr_pdev *
ipa_priv_obj_get_pdev(struct wlan_ipa_priv * ipa_obj)144*5113495bSYour Name ipa_priv_obj_get_pdev(struct wlan_ipa_priv *ipa_obj)
145*5113495bSYour Name {
146*5113495bSYour Name 	return ipa_obj->pdev;
147*5113495bSYour Name }
148*5113495bSYour Name 
149*5113495bSYour Name /**
150*5113495bSYour Name  * ipa_is_hw_support() - Is IPA HW support?
151*5113495bSYour Name  *
152*5113495bSYour Name  * Return: true if IPA HW  is present or false otherwise
153*5113495bSYour Name  */
154*5113495bSYour Name bool ipa_is_hw_support(void);
155*5113495bSYour Name 
156*5113495bSYour Name /**
157*5113495bSYour Name  * ipa_config_mem_alloc() - IPA config allocation
158*5113495bSYour Name  *
159*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success
160*5113495bSYour Name  */
161*5113495bSYour Name QDF_STATUS ipa_config_mem_alloc(void);
162*5113495bSYour Name 
163*5113495bSYour Name /**
164*5113495bSYour Name  * ipa_config_mem_free() - IPA config mem free
165*5113495bSYour Name  *
166*5113495bSYour Name  * Return: None
167*5113495bSYour Name  */
168*5113495bSYour Name void ipa_config_mem_free(void);
169*5113495bSYour Name 
170*5113495bSYour Name /**
171*5113495bSYour Name  * ipa_config_is_enabled() - Is IPA config enabled?
172*5113495bSYour Name  *
173*5113495bSYour Name  * Return: true if IPA is enabled in IPA config
174*5113495bSYour Name  */
175*5113495bSYour Name bool ipa_config_is_enabled(void);
176*5113495bSYour Name 
177*5113495bSYour Name /**
178*5113495bSYour Name  * ipa_config_is_uc_enabled() - Is IPA uC config enabled?
179*5113495bSYour Name  *
180*5113495bSYour Name  * Return: true if IPA uC is enabled in IPA config
181*5113495bSYour Name  */
182*5113495bSYour Name bool ipa_config_is_uc_enabled(void);
183*5113495bSYour Name 
184*5113495bSYour Name /**
185*5113495bSYour Name  * ipa_config_is_opt_wifi_dp_enabled() - Is IPA optional wifi dp enabled?
186*5113495bSYour Name  *
187*5113495bSYour Name  * Return: true if IPA opt wifi dp is enabled in IPA config
188*5113495bSYour Name  */
189*5113495bSYour Name bool ipa_config_is_opt_wifi_dp_enabled(void);
190*5113495bSYour Name 
191*5113495bSYour Name /**
192*5113495bSYour Name  * ipa_config_is_vlan_enabled() - Is IPA vlan config enabled?
193*5113495bSYour Name  *
194*5113495bSYour Name  * Return: true if IPA clan support is enabled in IPA config
195*5113495bSYour Name  */
196*5113495bSYour Name bool ipa_config_is_vlan_enabled(void);
197*5113495bSYour Name 
198*5113495bSYour Name /**
199*5113495bSYour Name  * ipa_obj_setup() - IPA obj initialization and setup
200*5113495bSYour Name  * @ipa_ctx: IPA obj context
201*5113495bSYour Name  *
202*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success
203*5113495bSYour Name  */
204*5113495bSYour Name QDF_STATUS ipa_obj_setup(struct wlan_ipa_priv *ipa_ctx);
205*5113495bSYour Name 
206*5113495bSYour Name /**
207*5113495bSYour Name  * ipa_obj_cleanup() - IPA obj cleanup
208*5113495bSYour Name  * @ipa_ctx: IPA obj context
209*5113495bSYour Name  *
210*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success
211*5113495bSYour Name  */
212*5113495bSYour Name QDF_STATUS ipa_obj_cleanup(struct wlan_ipa_priv *ipa_ctx);
213*5113495bSYour Name 
214*5113495bSYour Name /**
215*5113495bSYour Name  * ipa_send_uc_offload_enable_disable() - wdi enable/disable notify to fw
216*5113495bSYour Name  * @pdev: objmgr pdev object
217*5113495bSYour Name  * @req: ipa offload control request
218*5113495bSYour Name  *
219*5113495bSYour Name  * Return: QDF status success or failure
220*5113495bSYour Name  */
221*5113495bSYour Name QDF_STATUS ipa_send_uc_offload_enable_disable(struct wlan_objmgr_pdev *pdev,
222*5113495bSYour Name 				struct ipa_uc_offload_control_params *req);
223*5113495bSYour Name 
224*5113495bSYour Name /**
225*5113495bSYour Name  * ipa_send_intrabss_enable_disable() - wdi intrabss enable/disable notify to fw
226*5113495bSYour Name  * @pdev: objmgr pdev object
227*5113495bSYour Name  * @req: ipa intrabss control request
228*5113495bSYour Name  *
229*5113495bSYour Name  * Return: QDF status success or failure
230*5113495bSYour Name  */
231*5113495bSYour Name QDF_STATUS
232*5113495bSYour Name ipa_send_intrabss_enable_disable(struct wlan_objmgr_pdev *pdev,
233*5113495bSYour Name 				 struct ipa_intrabss_control_params *req);
234*5113495bSYour Name 
235*5113495bSYour Name /**
236*5113495bSYour Name  * ipa_set_dp_handle() - set dp soc handle
237*5113495bSYour Name  * @psoc: psoc handle
238*5113495bSYour Name  * @dp_soc: dp soc handle
239*5113495bSYour Name  *
240*5113495bSYour Name  * Return: None
241*5113495bSYour Name  */
242*5113495bSYour Name void ipa_set_dp_handle(struct wlan_objmgr_psoc *psoc, void *dp_soc);
243*5113495bSYour Name 
244*5113495bSYour Name /**
245*5113495bSYour Name  * ipa_set_pdev_id() - set dp pdev id
246*5113495bSYour Name  * @psoc: psoc handle
247*5113495bSYour Name  * @pdev_id: dp txrx physical device id
248*5113495bSYour Name  *
249*5113495bSYour Name  * Return: None
250*5113495bSYour Name  */
251*5113495bSYour Name void ipa_set_pdev_id(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id);
252*5113495bSYour Name 
253*5113495bSYour Name /**
254*5113495bSYour Name  * ipa_rm_set_perf_level() - set ipa rm perf level
255*5113495bSYour Name  * @pdev: pdev handle
256*5113495bSYour Name  * @tx_packets: packets transmitted in the last sample period
257*5113495bSYour Name  * @rx_packets: packets received in the last sample period
258*5113495bSYour Name  *
259*5113495bSYour Name  * Return: QDF_STATUS
260*5113495bSYour Name  */
261*5113495bSYour Name QDF_STATUS ipa_rm_set_perf_level(struct wlan_objmgr_pdev *pdev,
262*5113495bSYour Name 				 uint64_t tx_packets, uint64_t rx_packets);
263*5113495bSYour Name 
264*5113495bSYour Name /**
265*5113495bSYour Name  * ipa_uc_info() - Print IPA uC resource and session information
266*5113495bSYour Name  * @pdev: pdev obj
267*5113495bSYour Name  *
268*5113495bSYour Name  * Return: None
269*5113495bSYour Name  */
270*5113495bSYour Name void ipa_uc_info(struct wlan_objmgr_pdev *pdev);
271*5113495bSYour Name 
272*5113495bSYour Name /**
273*5113495bSYour Name  * ipa_uc_stat() - Print IPA uC stats
274*5113495bSYour Name  * @pdev: pdev obj
275*5113495bSYour Name  *
276*5113495bSYour Name  * Return: None
277*5113495bSYour Name  */
278*5113495bSYour Name void ipa_uc_stat(struct wlan_objmgr_pdev *pdev);
279*5113495bSYour Name 
280*5113495bSYour Name /**
281*5113495bSYour Name  * ipa_uc_rt_debug_host_dump() - IPA rt debug host dump
282*5113495bSYour Name  * @pdev: pdev obj
283*5113495bSYour Name  *
284*5113495bSYour Name  * Return: None
285*5113495bSYour Name  */
286*5113495bSYour Name void ipa_uc_rt_debug_host_dump(struct wlan_objmgr_pdev *pdev);
287*5113495bSYour Name 
288*5113495bSYour Name /**
289*5113495bSYour Name  * ipa_dump_info() - Dump IPA context information
290*5113495bSYour Name  * @pdev: pdev obj
291*5113495bSYour Name  *
292*5113495bSYour Name  * Return: None
293*5113495bSYour Name  */
294*5113495bSYour Name void ipa_dump_info(struct wlan_objmgr_pdev *pdev);
295*5113495bSYour Name 
296*5113495bSYour Name /**
297*5113495bSYour Name  * ipa_uc_stat_request() - Get IPA stats from IPA.
298*5113495bSYour Name  * @pdev: pdev obj
299*5113495bSYour Name  * @reason: STAT REQ Reason
300*5113495bSYour Name  *
301*5113495bSYour Name  * Return: None
302*5113495bSYour Name  */
303*5113495bSYour Name void ipa_uc_stat_request(struct wlan_objmgr_pdev *pdev,
304*5113495bSYour Name 			 uint8_t reason);
305*5113495bSYour Name 
306*5113495bSYour Name /**
307*5113495bSYour Name  * ipa_uc_stat_query() - Query the IPA stats
308*5113495bSYour Name  * @pdev: pdev obj
309*5113495bSYour Name  * @ipa_tx_diff: tx packet count diff from previous tx packet count
310*5113495bSYour Name  * @ipa_rx_diff: rx packet count diff from previous rx packet count
311*5113495bSYour Name  *
312*5113495bSYour Name  * Return: None
313*5113495bSYour Name  */
314*5113495bSYour Name void ipa_uc_stat_query(struct wlan_objmgr_pdev *pdev,
315*5113495bSYour Name 		       uint32_t *ipa_tx_diff, uint32_t *ipa_rx_diff);
316*5113495bSYour Name 
317*5113495bSYour Name /**
318*5113495bSYour Name  * ipa_reg_sap_xmit_cb() - Register upper layer SAP cb to transmit
319*5113495bSYour Name  * @pdev: pdev obj
320*5113495bSYour Name  * @cb: callback
321*5113495bSYour Name  *
322*5113495bSYour Name  * Return: None
323*5113495bSYour Name  */
324*5113495bSYour Name void ipa_reg_sap_xmit_cb(struct wlan_objmgr_pdev *pdev,
325*5113495bSYour Name 			 wlan_ipa_softap_xmit cb);
326*5113495bSYour Name 
327*5113495bSYour Name /**
328*5113495bSYour Name  * ipa_reg_send_to_nw_cb() - Register cb to send IPA Rx packet to network
329*5113495bSYour Name  * @pdev: pdev obj
330*5113495bSYour Name  * @cb: callback
331*5113495bSYour Name  *
332*5113495bSYour Name  * Return: None
333*5113495bSYour Name  */
334*5113495bSYour Name void ipa_reg_send_to_nw_cb(struct wlan_objmgr_pdev *pdev,
335*5113495bSYour Name 			   wlan_ipa_send_to_nw cb);
336*5113495bSYour Name 
337*5113495bSYour Name #if defined(QCA_CONFIG_RPS) && !defined(MDM_PLATFORM)
338*5113495bSYour Name /**
339*5113495bSYour Name  * ipa_reg_rps_enable_cb() - Register cb to enable RPS
340*5113495bSYour Name  * @pdev: pdev obj
341*5113495bSYour Name  * @cb: callback
342*5113495bSYour Name  *
343*5113495bSYour Name  * Return: None
344*5113495bSYour Name  */
345*5113495bSYour Name void ipa_reg_rps_enable_cb(struct wlan_objmgr_pdev *pdev,
346*5113495bSYour Name 			   wlan_ipa_rps_enable cb);
347*5113495bSYour Name #endif
348*5113495bSYour Name 
349*5113495bSYour Name /**
350*5113495bSYour Name  * ipa_reg_is_driver_unloading_cb() - Register cb to check if driver is
351*5113495bSYour Name  *                                    unloading
352*5113495bSYour Name  * @pdev: pdev obj
353*5113495bSYour Name  * @cb: callback
354*5113495bSYour Name  *
355*5113495bSYour Name  * Return: None
356*5113495bSYour Name  */
357*5113495bSYour Name void ipa_reg_is_driver_unloading_cb(struct wlan_objmgr_pdev *pdev,
358*5113495bSYour Name 				    wlan_ipa_driver_unloading cb);
359*5113495bSYour Name /**
360*5113495bSYour Name  * ipa_set_mcc_mode() - Set MCC mode
361*5113495bSYour Name  * @pdev: pdev obj
362*5113495bSYour Name  * @mcc_mode: 0=MCC/1=SCC
363*5113495bSYour Name  *
364*5113495bSYour Name  * Return: void
365*5113495bSYour Name  */
366*5113495bSYour Name void ipa_set_mcc_mode(struct wlan_objmgr_pdev *pdev, bool mcc_mode);
367*5113495bSYour Name 
368*5113495bSYour Name /**
369*5113495bSYour Name  * ipa_set_dfs_cac_tx() - Set DFS cac tx block
370*5113495bSYour Name  * @pdev: pdev obj
371*5113495bSYour Name  * @tx_block: dfs cac tx block
372*5113495bSYour Name  *
373*5113495bSYour Name  * Return: void
374*5113495bSYour Name  */
375*5113495bSYour Name void ipa_set_dfs_cac_tx(struct wlan_objmgr_pdev *pdev, bool tx_block);
376*5113495bSYour Name 
377*5113495bSYour Name /**
378*5113495bSYour Name  * ipa_set_ap_ibss_fwd() - Set AP intra bss forward
379*5113495bSYour Name  * @pdev: pdev obj
380*5113495bSYour Name  * @session_id: vdev id
381*5113495bSYour Name  * @intra_bss: enable or disable ap intra bss forward
382*5113495bSYour Name  *
383*5113495bSYour Name  * Return: void
384*5113495bSYour Name  */
385*5113495bSYour Name void ipa_set_ap_ibss_fwd(struct wlan_objmgr_pdev *pdev, uint8_t session_id,
386*5113495bSYour Name 			 bool intra_bss);
387*5113495bSYour Name 
388*5113495bSYour Name /**
389*5113495bSYour Name  * ipa_uc_force_pipe_shutdown() - Force IPA pipe shutdown
390*5113495bSYour Name  * @pdev: pdev obj
391*5113495bSYour Name  *
392*5113495bSYour Name  * Return: void
393*5113495bSYour Name  */
394*5113495bSYour Name void ipa_uc_force_pipe_shutdown(struct wlan_objmgr_pdev *pdev);
395*5113495bSYour Name 
396*5113495bSYour Name /**
397*5113495bSYour Name  * ipa_flush() - flush IPA exception path SKB's
398*5113495bSYour Name  * @pdev: pdev obj
399*5113495bSYour Name  *
400*5113495bSYour Name  * Return: None
401*5113495bSYour Name  */
402*5113495bSYour Name void ipa_flush(struct wlan_objmgr_pdev *pdev);
403*5113495bSYour Name 
404*5113495bSYour Name /**
405*5113495bSYour Name  * ipa_suspend() - Suspend IPA
406*5113495bSYour Name  * @pdev: pdev obj
407*5113495bSYour Name  *
408*5113495bSYour Name  * Return: QDF STATUS
409*5113495bSYour Name  */
410*5113495bSYour Name QDF_STATUS ipa_suspend(struct wlan_objmgr_pdev *pdev);
411*5113495bSYour Name 
412*5113495bSYour Name /**
413*5113495bSYour Name  * ipa_resume() - Resume IPA
414*5113495bSYour Name  * @pdev: pdev obj
415*5113495bSYour Name  *
416*5113495bSYour Name  * Return: None
417*5113495bSYour Name  */
418*5113495bSYour Name QDF_STATUS ipa_resume(struct wlan_objmgr_pdev *pdev);
419*5113495bSYour Name 
420*5113495bSYour Name /**
421*5113495bSYour Name  * ipa_uc_ol_init() - Initialize IPA uC offload
422*5113495bSYour Name  * @pdev: pdev obj
423*5113495bSYour Name  * @osdev: OS dev
424*5113495bSYour Name  *
425*5113495bSYour Name  * Return: QDF STATUS
426*5113495bSYour Name  */
427*5113495bSYour Name QDF_STATUS ipa_uc_ol_init(struct wlan_objmgr_pdev *pdev,
428*5113495bSYour Name 			  qdf_device_t osdev);
429*5113495bSYour Name 
430*5113495bSYour Name /**
431*5113495bSYour Name  * ipa_uc_ol_deinit() - Deinitialize IPA uC offload
432*5113495bSYour Name  * @pdev: pdev obj
433*5113495bSYour Name  *
434*5113495bSYour Name  * Return: QDF STATUS
435*5113495bSYour Name  */
436*5113495bSYour Name QDF_STATUS ipa_uc_ol_deinit(struct wlan_objmgr_pdev *pdev);
437*5113495bSYour Name 
438*5113495bSYour Name /**
439*5113495bSYour Name  * ipa_is_tx_pending() - Check if IPA WLAN TX completions are pending
440*5113495bSYour Name  * @pdev: pdev obj
441*5113495bSYour Name  *
442*5113495bSYour Name  * Return: bool if pending TX for IPA.
443*5113495bSYour Name  */
444*5113495bSYour Name bool ipa_is_tx_pending(struct wlan_objmgr_pdev *pdev);
445*5113495bSYour Name 
446*5113495bSYour Name /**
447*5113495bSYour Name  * ipa_send_mcc_scc_msg() - Send IPA WLAN_SWITCH_TO_MCC/SCC message
448*5113495bSYour Name  * @pdev: pdev obj
449*5113495bSYour Name  * @mcc_mode: 0=MCC/1=SCC
450*5113495bSYour Name  *
451*5113495bSYour Name  * Return: QDF STATUS
452*5113495bSYour Name  */
453*5113495bSYour Name QDF_STATUS ipa_send_mcc_scc_msg(struct wlan_objmgr_pdev *pdev,
454*5113495bSYour Name 				bool mcc_mode);
455*5113495bSYour Name 
456*5113495bSYour Name /**
457*5113495bSYour Name  * ipa_wlan_evt() - IPA event handler
458*5113495bSYour Name  * @pdev: pdev obj
459*5113495bSYour Name  * @net_dev: Interface net device
460*5113495bSYour Name  * @device_mode: Net interface device mode
461*5113495bSYour Name  * @session_id: session id for the event
462*5113495bSYour Name  * @ipa_event_type: event enum of type ipa_wlan_event
463*5113495bSYour Name  * @mac_addr: MAC address associated with the event
464*5113495bSYour Name  * @is_2g_iface: true if interface is operating on 2G band, otherwise false
465*5113495bSYour Name  *
466*5113495bSYour Name  * Return: QDF_STATUS
467*5113495bSYour Name  */
468*5113495bSYour Name QDF_STATUS ipa_wlan_evt(struct wlan_objmgr_pdev *pdev, qdf_netdev_t net_dev,
469*5113495bSYour Name 			uint8_t device_mode, uint8_t session_id,
470*5113495bSYour Name 			enum wlan_ipa_wlan_event ipa_event_type,
471*5113495bSYour Name 			const uint8_t *mac_addr, bool is_2g_iface);
472*5113495bSYour Name 
473*5113495bSYour Name /**
474*5113495bSYour Name  * ipa_uc_smmu_map() - Map / Unmap DMA buffer to IPA UC
475*5113495bSYour Name  * @map: Map / unmap operation
476*5113495bSYour Name  * @num_buf: Number of buffers in array
477*5113495bSYour Name  * @buf_arr: Buffer array of DMA mem mapping info
478*5113495bSYour Name  *
479*5113495bSYour Name  * Return: Status of map operation
480*5113495bSYour Name  */
481*5113495bSYour Name int ipa_uc_smmu_map(bool map, uint32_t num_buf, qdf_mem_info_t *buf_arr);
482*5113495bSYour Name 
483*5113495bSYour Name /**
484*5113495bSYour Name  * ipa_is_fw_wdi_activated - Is FW WDI activated?
485*5113495bSYour Name  * @pdev: pdev obj
486*5113495bSYour Name  *
487*5113495bSYour Name  * Return: true if FW WDI activated, false otherwise
488*5113495bSYour Name  */
489*5113495bSYour Name bool ipa_is_fw_wdi_activated(struct wlan_objmgr_pdev *pdev);
490*5113495bSYour Name 
491*5113495bSYour Name /**
492*5113495bSYour Name  * ipa_uc_cleanup_sta() - disconnect and cleanup sta iface
493*5113495bSYour Name  * @pdev: pdev obj
494*5113495bSYour Name  * @net_dev: Interface net device
495*5113495bSYour Name  * @session_id: vdev id
496*5113495bSYour Name  *
497*5113495bSYour Name  * Send disconnect sta event to IPA driver and cleanup IPA iface,
498*5113495bSYour Name  * if not yet done
499*5113495bSYour Name  *
500*5113495bSYour Name  * Return: void
501*5113495bSYour Name  */
502*5113495bSYour Name void ipa_uc_cleanup_sta(struct wlan_objmgr_pdev *pdev,
503*5113495bSYour Name 			qdf_netdev_t net_dev, uint8_t session_id);
504*5113495bSYour Name 
505*5113495bSYour Name /**
506*5113495bSYour Name  * ipa_uc_disconnect_ap() - send ap disconnect event
507*5113495bSYour Name  * @pdev: pdev obj
508*5113495bSYour Name  * @net_dev: Interface net device
509*5113495bSYour Name  *
510*5113495bSYour Name  * Send disconnect ap event to IPA driver
511*5113495bSYour Name  *
512*5113495bSYour Name  * Return: QDF_STATUS
513*5113495bSYour Name  */
514*5113495bSYour Name QDF_STATUS ipa_uc_disconnect_ap(struct wlan_objmgr_pdev *pdev,
515*5113495bSYour Name 				qdf_netdev_t net_dev);
516*5113495bSYour Name 
517*5113495bSYour Name /**
518*5113495bSYour Name  * ipa_cleanup_dev_iface() - Clean up net dev IPA interface
519*5113495bSYour Name  * @pdev: pdev obj
520*5113495bSYour Name  * @net_dev: Interface net device
521*5113495bSYour Name  * @session_id: vdev_id
522*5113495bSYour Name  *
523*5113495bSYour Name  * Return: None
524*5113495bSYour Name  */
525*5113495bSYour Name void ipa_cleanup_dev_iface(struct wlan_objmgr_pdev *pdev,
526*5113495bSYour Name 			   qdf_netdev_t net_dev, uint8_t session_id);
527*5113495bSYour Name 
528*5113495bSYour Name /**
529*5113495bSYour Name  * ipa_uc_ssr_cleanup() - handle IPA UC cleanup during SSR
530*5113495bSYour Name  * @pdev: pdev obj
531*5113495bSYour Name  *
532*5113495bSYour Name  * Return: None
533*5113495bSYour Name  */
534*5113495bSYour Name void ipa_uc_ssr_cleanup(struct wlan_objmgr_pdev *pdev);
535*5113495bSYour Name 
536*5113495bSYour Name /**
537*5113495bSYour Name  * ipa_fw_rejuvenate_send_msg() - send fw rejuvenate message to IPA driver
538*5113495bSYour Name  * @pdev: pdev obj
539*5113495bSYour Name  *
540*5113495bSYour Name  * Return: None
541*5113495bSYour Name  */
542*5113495bSYour Name void ipa_fw_rejuvenate_send_msg(struct wlan_objmgr_pdev *pdev);
543*5113495bSYour Name 
544*5113495bSYour Name /**
545*5113495bSYour Name  * ipa_component_config_update() - update ipa config from psoc
546*5113495bSYour Name  * @psoc: psoc obj
547*5113495bSYour Name  *
548*5113495bSYour Name  * Return: None
549*5113495bSYour Name  */
550*5113495bSYour Name void ipa_component_config_update(struct wlan_objmgr_psoc *psoc);
551*5113495bSYour Name 
552*5113495bSYour Name /**
553*5113495bSYour Name  * ipa_component_config_free() - Free ipa config
554*5113495bSYour Name  *
555*5113495bSYour Name  * Return: None
556*5113495bSYour Name  */
557*5113495bSYour Name void ipa_component_config_free(void);
558*5113495bSYour Name 
559*5113495bSYour Name /**
560*5113495bSYour Name  * ipa_get_tx_buf_count() - get IPA config tx buffer count
561*5113495bSYour Name  *
562*5113495bSYour Name  * Return: IPA config tx buffer count
563*5113495bSYour Name  */
564*5113495bSYour Name uint32_t ipa_get_tx_buf_count(void);
565*5113495bSYour Name 
566*5113495bSYour Name /**
567*5113495bSYour Name  * ipa_update_tx_stats() - Update embedded tx traffic in bytes to IPA
568*5113495bSYour Name  * @pdev: pdev obj
569*5113495bSYour Name  * @sta_tx: tx in bytes on sta vdev
570*5113495bSYour Name  * @ap_tx: tx in bytes on sap vdev
571*5113495bSYour Name  *
572*5113495bSYour Name  * Return: None
573*5113495bSYour Name  */
574*5113495bSYour Name void ipa_update_tx_stats(struct wlan_objmgr_pdev *pdev, uint64_t sta_tx,
575*5113495bSYour Name 			 uint64_t ap_tx);
576*5113495bSYour Name 
577*5113495bSYour Name /**
578*5113495bSYour Name  * ipa_flush_pending_vdev_events() - flush pending vdev wlan ipa events
579*5113495bSYour Name  * @pdev: pdev obj
580*5113495bSYour Name  * @vdev_id: vdev id
581*5113495bSYour Name  *
582*5113495bSYour Name  * Return: None
583*5113495bSYour Name  */
584*5113495bSYour Name void ipa_flush_pending_vdev_events(struct wlan_objmgr_pdev *pdev,
585*5113495bSYour Name 				   uint8_t vdev_id);
586*5113495bSYour Name 
587*5113495bSYour Name /**
588*5113495bSYour Name  * ipa_cb_is_ready() - Is IPA register callback is invoked
589*5113495bSYour Name  *
590*5113495bSYour Name  * Return: true if IPA register callback is invoked or false
591*5113495bSYour Name  * otherwise
592*5113495bSYour Name  */
593*5113495bSYour Name bool ipa_cb_is_ready(void);
594*5113495bSYour Name 
595*5113495bSYour Name /**
596*5113495bSYour Name  * ipa_init_deinit_lock() - lock ipa init deinit lock
597*5113495bSYour Name  *
598*5113495bSYour Name  * Return: None
599*5113495bSYour Name  */
600*5113495bSYour Name void ipa_init_deinit_lock(void);
601*5113495bSYour Name 
602*5113495bSYour Name /**
603*5113495bSYour Name  * ipa_init_deinit_unlock() - unlock ipa init deinit lock
604*5113495bSYour Name  *
605*5113495bSYour Name  * Return: None
606*5113495bSYour Name  */
607*5113495bSYour Name void ipa_init_deinit_unlock(void);
608*5113495bSYour Name 
609*5113495bSYour Name /**
610*5113495bSYour Name  * ipa_is_wds_enabled() - IPA wds status
611*5113495bSYour Name  *
612*5113495bSYour Name  * Return: true if WDS is enabled otherwise false
613*5113495bSYour Name  */
614*5113495bSYour Name bool ipa_is_wds_enabled(void);
615*5113495bSYour Name 
616*5113495bSYour Name /**
617*5113495bSYour Name  * ipa_get_alt_pipe() - Get alt_pipe for vdev_id
618*5113495bSYour Name  * @pdev: pdev obj
619*5113495bSYour Name  * @vdev_id: vdev_id of the target interface
620*5113495bSYour Name  * @alt_pipe: Boolean output to indicate if interface with @vdev_id
621*5113495bSYour Name  *	      is using alternate TX pipe or not.
622*5113495bSYour Name  *
623*5113495bSYour Name  * Return: QDF_STATUS
624*5113495bSYour Name  */
625*5113495bSYour Name QDF_STATUS ipa_get_alt_pipe(struct wlan_objmgr_pdev *pdev,
626*5113495bSYour Name 			    uint8_t vdev_id,
627*5113495bSYour Name 			    bool *alt_pipe);
628*5113495bSYour Name 
629*5113495bSYour Name /**
630*5113495bSYour Name  * ipa_set_perf_level_bw_enabled - Get bandwidth based IPA perf voting status
631*5113495bSYour Name  * @pdev: pdev objmgr pointer
632*5113495bSYour Name  *
633*5113495bSYour Name  * This function returns true or false for bandwidth based IPA perf level
634*5113495bSYour Name  * voting.
635*5113495bSYour Name  *
636*5113495bSYour Name  * Return: true - bandwidth based IPA perf voting is enabld. Otherwise false.
637*5113495bSYour Name  */
638*5113495bSYour Name bool ipa_set_perf_level_bw_enabled(struct wlan_objmgr_pdev *pdev);
639*5113495bSYour Name 
640*5113495bSYour Name /**
641*5113495bSYour Name  * ipa_set_perf_level_bw() - Set IPA perf level based on BW
642*5113495bSYour Name  * @pdev: pdev objmgr pointer
643*5113495bSYour Name  * @lvl: enum wlan_ipa_bw_level
644*5113495bSYour Name  *
645*5113495bSYour Name  * This routine is called to set IPA perf level based on max BW
646*5113495bSYour Name  * configured among in-use STA and SAP vdevs
647*5113495bSYour Name  *
648*5113495bSYour Name  * Return: None
649*5113495bSYour Name  */
650*5113495bSYour Name void ipa_set_perf_level_bw(struct wlan_objmgr_pdev *pdev,
651*5113495bSYour Name 			   enum wlan_ipa_bw_level lvl);
652*5113495bSYour Name 
653*5113495bSYour Name #else /* Not IPA_OFFLOAD */
654*5113495bSYour Name typedef QDF_STATUS (*wlan_ipa_softap_xmit)(qdf_nbuf_t nbuf, qdf_netdev_t dev);
655*5113495bSYour Name typedef void (*wlan_ipa_send_to_nw)(qdf_nbuf_t nbuf, qdf_netdev_t dev);
656*5113495bSYour Name typedef void (*wlan_ipa_rps_enable)(uint8_t vdev_id, bool enable);
657*5113495bSYour Name typedef bool (*wlan_ipa_driver_unloading)(void);
658*5113495bSYour Name 
659*5113495bSYour Name #endif /* IPA_OFFLOAD */
660*5113495bSYour Name #endif /* end  of _WLAN_IPA_MAIN_H_ */
661