xref: /wlan-driver/qca-wifi-host-cmn/qdf/linux/src/i_qdf_ipa_wdi3.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 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: i_qdf_ipa_wdi3.h
20*5113495bSYour Name  * This file provides OS dependent IPA WDI APIs.
21*5113495bSYour Name  */
22*5113495bSYour Name 
23*5113495bSYour Name #ifndef I_QDF_IPA_WDI_H
24*5113495bSYour Name #define I_QDF_IPA_WDI_H
25*5113495bSYour Name 
26*5113495bSYour Name #ifdef IPA_OFFLOAD
27*5113495bSYour Name 
28*5113495bSYour Name #include <qdf_status.h>         /* QDF_STATUS */
29*5113495bSYour Name #include <linux/ipa_wdi3.h>
30*5113495bSYour Name #include <linux/version.h>
31*5113495bSYour Name 
32*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0)) || \
33*5113495bSYour Name 	defined(CONFIG_IPA_WDI_UNIFIED_API)
34*5113495bSYour Name 
35*5113495bSYour Name /**
36*5113495bSYour Name  * __qdf_ipa_wdi_version_t - IPA WDI version
37*5113495bSYour Name  */
38*5113495bSYour Name typedef enum ipa_wdi_version __qdf_ipa_wdi_version_t;
39*5113495bSYour Name 
40*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
41*5113495bSYour Name /**
42*5113495bSYour Name  * __qdf_ipa_wdi_hdl_t - IPA WDI hdl
43*5113495bSYour Name  */
44*5113495bSYour Name typedef ipa_wdi_hdl_t __qdf_ipa_wdi_hdl_t;
45*5113495bSYour Name 
46*5113495bSYour Name /**
47*5113495bSYour Name  * __qdf_ipa_wdi_capabilities_out_params_t - IPA WDI capabilities output params
48*5113495bSYour Name  */
49*5113495bSYour Name typedef struct ipa_wdi_capabilities_out_params \
50*5113495bSYour Name 		__qdf_ipa_wdi_capabilities_out_params_t;
51*5113495bSYour Name 
52*5113495bSYour Name #define __QDF_IPA_WDI_CAPABILITIES_OUT_PARAMS_NUM_INSTANCES(out_params)	\
53*5113495bSYour Name 	(((struct ipa_wdi_capabilities_out_params *)(out_params))->num_of_instances)
54*5113495bSYour Name 
55*5113495bSYour Name static inline
__qdf_ipa_wdi_get_capabilities(__qdf_ipa_wdi_capabilities_out_params_t * out)56*5113495bSYour Name int __qdf_ipa_wdi_get_capabilities(__qdf_ipa_wdi_capabilities_out_params_t *out)
57*5113495bSYour Name {
58*5113495bSYour Name 	return ipa_wdi_get_capabilities(out);
59*5113495bSYour Name }
60*5113495bSYour Name #else
61*5113495bSYour Name /**
62*5113495bSYour Name  * __qdf_ipa_wdi_hdl_t - IPA WDI hdl
63*5113495bSYour Name  */
64*5113495bSYour Name typedef unsigned int  __qdf_ipa_wdi_hdl_t;
65*5113495bSYour Name 
66*5113495bSYour Name /**
67*5113495bSYour Name  * ipa_wdi_capabilities_out_params - IPA WDI capabilities out params
68*5113495bSYour Name  */
69*5113495bSYour Name struct ipa_wdi_capabilities_out_params {
70*5113495bSYour Name 	uint8_t num_of_instances;
71*5113495bSYour Name };
72*5113495bSYour Name 
73*5113495bSYour Name /**
74*5113495bSYour Name  * __qdf_ipa_wdi_capabilities_out_params_t - IPA WDI capabilities output params
75*5113495bSYour Name  */
76*5113495bSYour Name typedef struct ipa_wdi_capabilities_out_params \
77*5113495bSYour Name 		__qdf_ipa_wdi_capabilities_out_params_t;
78*5113495bSYour Name 
79*5113495bSYour Name #define __QDF_IPA_WDI_CAPABILITIES_OUT_PARAMS_NUM_INSTANCES(out_params)	\
80*5113495bSYour Name 	(((struct ipa_wdi_capabilities_out_params *)(out_params))->num_of_instances)
81*5113495bSYour Name 
82*5113495bSYour Name static inline
__qdf_ipa_wdi_get_capabilities(__qdf_ipa_wdi_capabilities_out_params_t * out)83*5113495bSYour Name int __qdf_ipa_wdi_get_capabilities(__qdf_ipa_wdi_capabilities_out_params_t *out)
84*5113495bSYour Name {
85*5113495bSYour Name 	out->num_of_instances = 1;
86*5113495bSYour Name 	return 1;
87*5113495bSYour Name }
88*5113495bSYour Name 
89*5113495bSYour Name /**
90*5113495bSYour Name  * ipa_wdi_init_in_params_inst - IPA WDI init in params instance id
91*5113495bSYour Name  */
92*5113495bSYour Name struct ipa_wdi_init_in_params_inst {
93*5113495bSYour Name 	uint8_t inst_id;
94*5113495bSYour Name };
95*5113495bSYour Name 
96*5113495bSYour Name #define __QDF_IPA_WDI_INIT_IN_PARAMS_INSTANCE_ID(in_params)	\
97*5113495bSYour Name 	(((struct ipa_wdi_init_in_params_inst *)(in_params))->inst_id)
98*5113495bSYour Name 
99*5113495bSYour Name /**
100*5113495bSYour Name  * ipa_wdi_init_out_params_inst - IPA WDI init out params IPA handle
101*5113495bSYour Name  */
102*5113495bSYour Name struct ipa_wdi_init_out_params_inst {
103*5113495bSYour Name 	uint8_t hdl;
104*5113495bSYour Name };
105*5113495bSYour Name 
106*5113495bSYour Name #define __QDF_IPA_WDI_INIT_OUT_PARAMS_HANDLE(out_params)	\
107*5113495bSYour Name 	(((struct ipa_wdi_init_out_params_inst *)(out_params))->hdl)
108*5113495bSYour Name #endif
109*5113495bSYour Name 
110*5113495bSYour Name /**
111*5113495bSYour Name  * __qdf_ipa_wdi_init_in_params_t - wdi init input parameters
112*5113495bSYour Name  */
113*5113495bSYour Name typedef struct ipa_wdi_init_in_params __qdf_ipa_wdi_init_in_params_t;
114*5113495bSYour Name 
115*5113495bSYour Name #define __QDF_IPA_WDI_INIT_IN_PARAMS_WDI_VERSION(in_params)	\
116*5113495bSYour Name 	(((struct ipa_wdi_init_in_params *)(in_params))->wdi_version)
117*5113495bSYour Name #define __QDF_IPA_WDI_INIT_IN_PARAMS_NOTIFY(in_params)	\
118*5113495bSYour Name 	(((struct ipa_wdi_init_in_params *)(in_params))->notify)
119*5113495bSYour Name #define __QDF_IPA_WDI_INIT_IN_PARAMS_PRIV(in_params)	\
120*5113495bSYour Name 	(((struct ipa_wdi_init_in_params *)(in_params))->priv)
121*5113495bSYour Name #define __QDF_IPA_WDI_INIT_IN_PARAMS_WDI_NOTIFY(in_params)	\
122*5113495bSYour Name 	(((struct ipa_wdi_init_in_params *)(in_params))->wdi_notify)
123*5113495bSYour Name 
124*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
125*5113495bSYour Name #define __QDF_IPA_WDI_INIT_IN_PARAMS_INSTANCE_ID(in_params)	\
126*5113495bSYour Name 	(((struct ipa_wdi_init_in_params *)(in_params))->inst_id)
127*5113495bSYour Name #endif
128*5113495bSYour Name 
129*5113495bSYour Name #ifdef IPA_WDS_EASYMESH_FEATURE
130*5113495bSYour Name #define __QDF_IPA_WDI_INIT_IN_PARAMS_WDS_UPDATE(in_params)	\
131*5113495bSYour Name 	(((struct ipa_wdi_init_in_params *)(in_params))->ast_update)
132*5113495bSYour Name #endif
133*5113495bSYour Name 
134*5113495bSYour Name /**
135*5113495bSYour Name  * __qdf_ipa_wdi_init_out_params_t - wdi init output parameters
136*5113495bSYour Name  */
137*5113495bSYour Name typedef struct ipa_wdi_init_out_params __qdf_ipa_wdi_init_out_params_t;
138*5113495bSYour Name 
139*5113495bSYour Name #define __QDF_IPA_WDI_INIT_OUT_PARAMS_IS_UC_READY(out_params)	\
140*5113495bSYour Name 	(((struct ipa_wdi_init_out_params *)(out_params))->is_uC_ready)
141*5113495bSYour Name #define __QDF_IPA_WDI_INIT_OUT_PARAMS_IS_SMMU_ENABLED(out_params)	\
142*5113495bSYour Name 	(((struct ipa_wdi_init_out_params *)(out_params))->is_smmu_enabled)
143*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0))
144*5113495bSYour Name #define __QDF_IPA_WDI_INIT_OUT_PARAMS_OPT_WIFI_DP(out_params)	\
145*5113495bSYour Name 	(((struct ipa_wdi_init_out_params *)(out_params))->opt_wdi_dpath)
146*5113495bSYour Name #endif
147*5113495bSYour Name 
148*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
149*5113495bSYour Name #define __QDF_IPA_WDI_INIT_OUT_PARAMS_HANDLE(out_params)	\
150*5113495bSYour Name 	(((struct ipa_wdi_init_out_params *)(out_params))->hdl)
151*5113495bSYour Name #endif
152*5113495bSYour Name 
153*5113495bSYour Name #if (defined(IPA_WDI3_GSI)) || (defined(IPA_WDI2_GSI))
154*5113495bSYour Name #define QDF_IPA_WDI_INIT_OUT_PARAMS_IS_OVER_GSI(out_params)	\
155*5113495bSYour Name 	(((struct ipa_wdi_init_out_params *)(out_params))->is_over_gsi)
156*5113495bSYour Name #else
157*5113495bSYour Name #define QDF_IPA_WDI_INIT_OUT_PARAMS_IS_OVER_GSI(out_params)	\
158*5113495bSYour Name 	false
159*5113495bSYour Name #endif
160*5113495bSYour Name 
161*5113495bSYour Name /**
162*5113495bSYour Name  * __qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW
163*5113495bSYour Name  */
164*5113495bSYour Name typedef struct ipa_wdi_hdr_info  __qdf_ipa_wdi_hdr_info_t;
165*5113495bSYour Name 
166*5113495bSYour Name #define __QDF_IPA_WDI_HDR_INFO_HDR(hdr_info)	\
167*5113495bSYour Name 	(((struct ipa_wdi_hdr_info *)(hdr_info))->hdr)
168*5113495bSYour Name #define __QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info)	\
169*5113495bSYour Name 	(((struct ipa_wdi_hdr_info *)(hdr_info))->hdr_len)
170*5113495bSYour Name #define __QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info)	\
171*5113495bSYour Name 	(((struct ipa_wdi_hdr_info *)(hdr_info))->dst_mac_addr_offset)
172*5113495bSYour Name #define __QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info)	\
173*5113495bSYour Name 	(((struct ipa_wdi_hdr_info *)(hdr_info))->hdr_type)
174*5113495bSYour Name 
175*5113495bSYour Name /**
176*5113495bSYour Name  * __qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload
177*5113495bSYour Name  *	interface registration
178*5113495bSYour Name  */
179*5113495bSYour Name typedef struct ipa_wdi_reg_intf_in_params  __qdf_ipa_wdi_reg_intf_in_params_t;
180*5113495bSYour Name 
181*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in)	\
182*5113495bSYour Name 	(((struct ipa_wdi_reg_intf_in_params *)(in))->netdev_name)
183*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in)	\
184*5113495bSYour Name 	(((struct ipa_wdi_reg_intf_in_params *)(in))->hdr_info)
185*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_ALT_DST_PIPE(in)	\
186*5113495bSYour Name 	(((struct ipa_wdi_reg_intf_in_params *)(in))->alt_dst_pipe)
187*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in)	\
188*5113495bSYour Name 	(((struct ipa_wdi_reg_intf_in_params *)(in))->is_meta_data_valid)
189*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in)	\
190*5113495bSYour Name 	(((struct ipa_wdi_reg_intf_in_params *)(in))->meta_data)
191*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in)	\
192*5113495bSYour Name 	(((struct ipa_wdi_reg_intf_in_params *)(in))->meta_data_mask)
193*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HANDLE(in)	\
194*5113495bSYour Name 	(((struct ipa_wdi_reg_intf_in_params *)(in))->hdl)
195*5113495bSYour Name #ifdef IPA_WDI3_TX_TWO_PIPES
196*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_TX1_USED(in)	\
197*5113495bSYour Name 	(((struct ipa_wdi_reg_intf_in_params *)(in))->is_tx1_used)
198*5113495bSYour Name #endif
199*5113495bSYour Name #ifdef IPA_WDI3_VLAN_SUPPORT
200*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_RX1_USED(in)	\
201*5113495bSYour Name 	(((struct ipa_wdi_reg_intf_in_params *)(in))->is_rx1_used)
202*5113495bSYour Name #endif
203*5113495bSYour Name 
204*5113495bSYour Name typedef struct ipa_ep_cfg __qdf_ipa_ep_cfg_t;
205*5113495bSYour Name 
206*5113495bSYour Name #define __QDF_IPA_EP_CFG_NAT_EN(cfg)	\
207*5113495bSYour Name 	(((struct ipa_ep_cfg *)(cfg))->nat.nat_en)
208*5113495bSYour Name #define __QDF_IPA_EP_CFG_HDR_LEN(cfg)	\
209*5113495bSYour Name 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_len)
210*5113495bSYour Name #define __QDF_IPA_EP_CFG_HDR_OFST_METADATA_VALID(cfg)	\
211*5113495bSYour Name 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_metadata_valid)
212*5113495bSYour Name #define __QDF_IPA_EP_CFG_HDR_METADATA_REG_VALID(cfg)	\
213*5113495bSYour Name 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_metadata_reg_valid)
214*5113495bSYour Name #define __QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE_VALID(cfg)	\
215*5113495bSYour Name 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_pkt_size_valid)
216*5113495bSYour Name #define __QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE(cfg)	\
217*5113495bSYour Name 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_pkt_size)
218*5113495bSYour Name #define __QDF_IPA_EP_CFG_HDR_ADDITIONAL_CONST_LEN(cfg)	\
219*5113495bSYour Name 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_additional_const_len)
220*5113495bSYour Name #define __QDF_IPA_EP_CFG_MODE(cfg)	\
221*5113495bSYour Name 	(((struct ipa_ep_cfg *)(cfg))->mode.mode)
222*5113495bSYour Name #define __QDF_IPA_EP_CFG_HDR_LITTLE_ENDIAN(cfg)	\
223*5113495bSYour Name 	(((struct ipa_ep_cfg *)(cfg))->hdr_ext.hdr_little_endian)
224*5113495bSYour Name 
225*5113495bSYour Name /**
226*5113495bSYour Name  * __qdf_ipa_wdi_pipe_setup_info_t - WDI TX/Rx configuration
227*5113495bSYour Name  */
228*5113495bSYour Name typedef struct ipa_wdi_pipe_setup_info  __qdf_ipa_wdi_pipe_setup_info_t;
229*5113495bSYour Name 
230*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_EP_CFG(txrx)	\
231*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->ipa_ep_cfg)
232*5113495bSYour Name 
233*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx)	\
234*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->client)
235*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx)	\
236*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_base_pa)
237*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx)	\
238*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_size)
239*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx)	\
240*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_doorbell_pa)
241*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_IS_TXR_RN_DB_PCIE_ADDR(txrx)  \
242*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->is_txr_rn_db_pcie_addr)
243*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx)	\
244*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_base_pa)
245*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx)	\
246*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_size)
247*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx)	\
248*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_doorbell_pa)
249*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_IS_EVT_RN_DB_PCIE_ADDR(txrx) \
250*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->is_evt_rn_db_pcie_addr)
251*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx)	\
252*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->num_pkt_buffers)
253*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx)	\
254*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->pkt_offset)
255*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx)	\
256*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->desc_format_template)
257*5113495bSYour Name 
258*5113495bSYour Name /**
259*5113495bSYour Name  * __qdf_ipa_wdi_pipe_setup_info_smmu_t - WDI TX/Rx configuration
260*5113495bSYour Name  */
261*5113495bSYour Name typedef struct ipa_wdi_pipe_setup_info_smmu __qdf_ipa_wdi_pipe_setup_info_smmu_t;
262*5113495bSYour Name 
263*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EP_CFG(txrx)	\
264*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->ipa_ep_cfg)
265*5113495bSYour Name 
266*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(txrx)	\
267*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->client)
268*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_BASE(txrx)	\
269*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_base)
270*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_SIZE(txrx)	\
271*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_size)
272*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_DOORBELL_PA(txrx)	\
273*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_doorbell_pa)
274*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_IS_TXR_RN_DB_PCIE_ADDR(txrx)  \
275*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *) \
276*5113495bSYour Name 	  (txrx))->is_txr_rn_db_pcie_addr)
277*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_BASE(txrx)	\
278*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_base)
279*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_SIZE(txrx)	\
280*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_size)
281*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_DOORBELL_PA(txrx)	\
282*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_doorbell_pa)
283*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_IS_EVT_RN_DB_PCIE_ADDR(txrx) \
284*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *) \
285*5113495bSYour Name 	  (txrx))->is_evt_rn_db_pcie_addr)
286*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_NUM_PKT_BUFFERS(txrx)	\
287*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->num_pkt_buffers)
288*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(txrx)	\
289*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->pkt_offset)
290*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(txrx)	\
291*5113495bSYour Name 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->desc_format_template)
292*5113495bSYour Name 
293*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 41))
294*5113495bSYour Name /* MSM kernel support added in I6418ae5bc4f030f6348e0f580b61b6adc1b92cf3 */
295*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_RX_BANK_ID(txrx, bid)	\
296*5113495bSYour Name 	((((struct ipa_wdi_pipe_setup_info *)(txrx))->rx_bank_id) = (bid))
297*5113495bSYour Name 
298*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_BANK_ID(txrx, bid)	\
299*5113495bSYour Name 	((((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->rx_bank_id) = (bid))
300*5113495bSYour Name 
301*5113495bSYour Name /*
302*5113495bSYour Name  * rx_pmac_id was added to struct ipa_wdi_pipe_setup_info with
303*5113495bSYour Name  * Change-Id Ic9ee13be05b11004982e9a38cb503b3c4d0f81f3. This change
304*5113495bSYour Name  * also modified macro IPA_WDI_INST_MAX from 2 to 3, so we can use
305*5113495bSYour Name  * this to know if the change is present or not.
306*5113495bSYour Name  */
307*5113495bSYour Name #if defined(IPA_WDI_INST_MAX) && (IPA_WDI_INST_MAX >= 3)
308*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_RX_PMAC_ID(txrx, pmac_id)	\
309*5113495bSYour Name 	((((struct ipa_wdi_pipe_setup_info *)(txrx))->rx_pmac_id) = (pmac_id))
310*5113495bSYour Name 
311*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_PMAC_ID(txrx, pmac_id)	\
312*5113495bSYour Name 	((((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->rx_pmac_id) = (pmac_id))
313*5113495bSYour Name #else
314*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_RX_PMAC_ID(txrx, pmac_id)
315*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_PMAC_ID(txrx, pmac_id)
316*5113495bSYour Name #endif
317*5113495bSYour Name #else
318*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_RX_BANK_ID(txrx, bid)
319*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_BANK_ID(txrx, bid)
320*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_RX_PMAC_ID(txrx, pmac_id)
321*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_PMAC_ID(txrx, pmac_id)
322*5113495bSYour Name #endif
323*5113495bSYour Name 
324*5113495bSYour Name /**
325*5113495bSYour Name  * __qdf_ipa_wdi_conn_in_params_t - information provided by
326*5113495bSYour Name  *		uC offload client
327*5113495bSYour Name  */
328*5113495bSYour Name typedef struct ipa_wdi_conn_in_params  __qdf_ipa_wdi_conn_in_params_t;
329*5113495bSYour Name 
330*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in)	\
331*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->notify)
332*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in)	\
333*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->priv)
334*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(pipe_in)	\
335*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->is_smmu_enabled)
336*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_NUM_SYS_PIPE_NEEDED(pipe_in)	\
337*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->num_sys_pipe_needed)
338*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_SYS_IN(in)	\
339*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->sys_in)
340*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in)	\
341*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx)
342*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_SMMU(pipe_in)	\
343*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx_smmu)
344*5113495bSYour Name #ifdef IPA_WDI3_TX_TWO_PIPES
345*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_IS_TX1_USED(pipe_in)	\
346*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->is_tx1_used)
347*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_ALT_PIPE(pipe_in)	\
348*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx1.tx)
349*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_ALT_PIPE_SMMU(pipe_in)	\
350*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx1.tx_smmu)
351*5113495bSYour Name #endif
352*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in)	\
353*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx)
354*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_SMMU(pipe_in)	\
355*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx_smmu)
356*5113495bSYour Name #ifdef IPA_WDI3_VLAN_SUPPORT
357*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_IS_RX1_USED(pipe_in)	\
358*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->is_rx1_used)
359*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_ALT(pipe_in)	\
360*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx1.rx)
361*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_ALT_SMMU(pipe_in)	\
362*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx1.rx_smmu)
363*5113495bSYour Name #endif
364*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_HANDLE(pipe_in)	\
365*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->hdl)
366*5113495bSYour Name 
367*5113495bSYour Name #ifdef IPA_WDS_EASYMESH_FEATURE
368*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_AST_NOTIFY(pipe_in)	\
369*5113495bSYour Name 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->ast_notify)
370*5113495bSYour Name #endif
371*5113495bSYour Name 
372*5113495bSYour Name /**
373*5113495bSYour Name  * __qdf_ipa_wdi_conn_out_params_t - information provided
374*5113495bSYour Name  *				to WLAN druver
375*5113495bSYour Name  */
376*5113495bSYour Name typedef struct ipa_wdi_conn_out_params  __qdf_ipa_wdi_conn_out_params_t;
377*5113495bSYour Name 
378*5113495bSYour Name #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out)	\
379*5113495bSYour Name 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->tx_uc_db_pa)
380*5113495bSYour Name #ifdef IPA_WDI3_TX_TWO_PIPES
381*5113495bSYour Name #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_ALT_DB_PA(pipe_out)	\
382*5113495bSYour Name 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->tx1_uc_db_pa)
383*5113495bSYour Name #endif
384*5113495bSYour Name #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out)	\
385*5113495bSYour Name 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->rx_uc_db_pa)
386*5113495bSYour Name #ifdef IPA_WDI3_VLAN_SUPPORT
387*5113495bSYour Name #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_ALT_UC_DB_PA(pipe_out)	\
388*5113495bSYour Name 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->rx1_uc_db_pa)
389*5113495bSYour Name #endif
390*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
391*5113495bSYour Name #define __QDF_IPA_WDI_CONN_OUT_PARAMS_IS_DB_DDR_MAPPED(pipe_out)	\
392*5113495bSYour Name 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->is_ddr_mapped)
393*5113495bSYour Name #else
394*5113495bSYour Name #define __QDF_IPA_WDI_CONN_OUT_PARAMS_IS_DB_DDR_MAPPED(pipe_out) false
395*5113495bSYour Name #endif
396*5113495bSYour Name 
397*5113495bSYour Name /**
398*5113495bSYour Name  * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile
399*5113495bSYour Name  */
400*5113495bSYour Name typedef struct ipa_wdi_perf_profile  __qdf_ipa_wdi_perf_profile_t;
401*5113495bSYour Name 
402*5113495bSYour Name #define __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile)	\
403*5113495bSYour Name 	(((struct ipa_wdi_perf_profile *)(profile))->client)
404*5113495bSYour Name #define __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile)	\
405*5113495bSYour Name 	(((struct ipa_wdi_perf_profile *)(profile))->max_supported_bw_mbps)
406*5113495bSYour Name 
407*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
408*5113495bSYour Name /**
409*5113495bSYour Name  * __qdf_ipa_wdi_init - Client should call this function to
410*5113495bSYour Name  * init WDI IPA offload data path
411*5113495bSYour Name  *
412*5113495bSYour Name  * Note: Should not be called from atomic context and only
413*5113495bSYour Name  * after checking IPA readiness using ipa_register_ipa_ready_cb()
414*5113495bSYour Name  *
415*5113495bSYour Name  * @Return 0 on success, negative on failure
416*5113495bSYour Name  */
__qdf_ipa_wdi_init(struct ipa_wdi_init_in_params * in,struct ipa_wdi_init_out_params * out)417*5113495bSYour Name static inline int __qdf_ipa_wdi_init(struct ipa_wdi_init_in_params *in,
418*5113495bSYour Name 		 struct ipa_wdi_init_out_params *out)
419*5113495bSYour Name {
420*5113495bSYour Name 	return ipa_wdi_init_per_inst(in, out);
421*5113495bSYour Name }
422*5113495bSYour Name 
423*5113495bSYour Name /**
424*5113495bSYour Name  * __qdf_ipa_wdi_cleanup - Client should call this function to
425*5113495bSYour Name  * clean up WDI IPA offload data path
426*5113495bSYour Name  * @hdl: IPA handle
427*5113495bSYour Name  *
428*5113495bSYour Name  * @Return 0 on success, negative on failure
429*5113495bSYour Name  */
__qdf_ipa_wdi_cleanup(__qdf_ipa_wdi_hdl_t hdl)430*5113495bSYour Name static inline int __qdf_ipa_wdi_cleanup(__qdf_ipa_wdi_hdl_t hdl)
431*5113495bSYour Name {
432*5113495bSYour Name 	return ipa_wdi_cleanup_per_inst(hdl);
433*5113495bSYour Name }
434*5113495bSYour Name 
435*5113495bSYour Name /**
436*5113495bSYour Name  * __qdf_ipa_wdi_reg_intf - Client should call this function to
437*5113495bSYour Name  * init WDI IPA offload data path
438*5113495bSYour Name  *
439*5113495bSYour Name  * Note: Should not be called from atomic context and only
440*5113495bSYour Name  * after checking IPA readiness using ipa_register_ipa_ready_cb()
441*5113495bSYour Name  *
442*5113495bSYour Name  * @Return 0 on success, negative on failure
443*5113495bSYour Name  */
__qdf_ipa_wdi_reg_intf(struct ipa_wdi_reg_intf_in_params * in)444*5113495bSYour Name static inline int __qdf_ipa_wdi_reg_intf(
445*5113495bSYour Name 	struct ipa_wdi_reg_intf_in_params *in)
446*5113495bSYour Name {
447*5113495bSYour Name 	return ipa_wdi_reg_intf_per_inst(in);
448*5113495bSYour Name }
449*5113495bSYour Name 
450*5113495bSYour Name #ifdef IPA_OPT_WIFI_DP
451*5113495bSYour Name /**
452*5113495bSYour Name  * __qdf_ipa_wdi_register_flt_cb() - register callbacks for optional wifi dp
453*5113495bSYour Name  * @hdl: ipa_hdl
454*5113495bSYour Name  * @flt_rsrv_cb: filter reserve cb function
455*5113495bSYour Name  * @flt_rsrv_rel_cb: filter release cb function
456*5113495bSYour Name  * @flt_add_cb: filter add cb function
457*5113495bSYour Name  * @flt_rem_cb: filter remove cb
458*5113495bSYour Name  *
459*5113495bSYour Name  * Note: Should not be called from atomic context and only
460*5113495bSYour Name  * after checking IPA readiness using ipa_register_ipa_ready_cb()
461*5113495bSYour Name  *
462*5113495bSYour Name  * @Return 0 on successful register of filter cb, negative on failure
463*5113495bSYour Name  */
__qdf_ipa_wdi_register_flt_cb(ipa_wdi_hdl_t hdl,ipa_wdi_opt_dpath_flt_rsrv_cb flt_rsrv_cb,ipa_wdi_opt_dpath_flt_rsrv_rel_cb flt_rsrv_rel_cb,ipa_wdi_opt_dpath_flt_add_cb flt_add_cb,ipa_wdi_opt_dpath_flt_rem_cb flt_rem_cb)464*5113495bSYour Name static inline int __qdf_ipa_wdi_register_flt_cb(
465*5113495bSYour Name 			ipa_wdi_hdl_t hdl,
466*5113495bSYour Name 			ipa_wdi_opt_dpath_flt_rsrv_cb flt_rsrv_cb,
467*5113495bSYour Name 			ipa_wdi_opt_dpath_flt_rsrv_rel_cb flt_rsrv_rel_cb,
468*5113495bSYour Name 			ipa_wdi_opt_dpath_flt_add_cb flt_add_cb,
469*5113495bSYour Name 			ipa_wdi_opt_dpath_flt_rem_cb flt_rem_cb)
470*5113495bSYour Name {
471*5113495bSYour Name 	return ipa_wdi_opt_dpath_register_flt_cb_per_inst(
472*5113495bSYour Name 					hdl, flt_rsrv_cb,
473*5113495bSYour Name 					flt_rsrv_rel_cb,
474*5113495bSYour Name 					flt_add_cb, flt_rem_cb);
475*5113495bSYour Name }
476*5113495bSYour Name 
477*5113495bSYour Name /**
478*5113495bSYour Name  * __qdf_ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst() - notify response to
479*5113495bSYour Name  * filter reserve request from IPA
480*5113495bSYour Name  * @hdl: ipa_hdl
481*5113495bSYour Name  * @is_success: result of filter reservation
482*5113495bSYour Name  *
483*5113495bSYour Name  * Note: Should not be called from atomic context and only
484*5113495bSYour Name  * after checking IPA readiness using ipa_register_ipa_ready_cb()
485*5113495bSYour Name  *
486*5113495bSYour Name  * @Return 0 if ipa received the notification, negative on failure
487*5113495bSYour Name  */
__qdf_ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst(ipa_wdi_hdl_t hdl,bool is_success)488*5113495bSYour Name static inline int __qdf_ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst(
489*5113495bSYour Name 			ipa_wdi_hdl_t hdl, bool is_success)
490*5113495bSYour Name {
491*5113495bSYour Name 	return ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst(hdl, is_success);
492*5113495bSYour Name }
493*5113495bSYour Name 
494*5113495bSYour Name /**
495*5113495bSYour Name  *__qdf_ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst() notify response to
496*5113495bSYour Name  *filter release request from IPA
497*5113495bSYour Name  * @hdl: ipa_hdl
498*5113495bSYour Name  * @is_success: result of filter release
499*5113495bSYour Name  *
500*5113495bSYour Name  * Note: Should not be called from atomic context and only
501*5113495bSYour Name  * after checking IPA readiness using ipa_register_ipa_ready_cb()
502*5113495bSYour Name  *
503*5113495bSYour Name  * @Return 0 if ipa received the notification, negative on failure
504*5113495bSYour Name  */
__qdf_ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst(ipa_wdi_hdl_t hdl,bool is_success)505*5113495bSYour Name static inline int __qdf_ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst(
506*5113495bSYour Name 			ipa_wdi_hdl_t hdl, bool is_success)
507*5113495bSYour Name {
508*5113495bSYour Name 	return ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst(hdl, is_success);
509*5113495bSYour Name }
510*5113495bSYour Name #endif /*IPA_OPT_WIFI_DP */
511*5113495bSYour Name /**
512*5113495bSYour Name  * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
513*5113495bSYour Name  * function to deregister before unload and after disconnect
514*5113495bSYour Name  * @hdl: IPA handle
515*5113495bSYour Name  *
516*5113495bSYour Name  * @Return 0 on success, negative on failure
517*5113495bSYour Name  */
__qdf_ipa_wdi_dereg_intf(const char * netdev_name,__qdf_ipa_wdi_hdl_t hdl)518*5113495bSYour Name static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name,
519*5113495bSYour Name 					   __qdf_ipa_wdi_hdl_t hdl)
520*5113495bSYour Name {
521*5113495bSYour Name 	return ipa_wdi_dereg_intf_per_inst(netdev_name, hdl);
522*5113495bSYour Name }
523*5113495bSYour Name 
524*5113495bSYour Name /**
525*5113495bSYour Name  * __qdf_ipa_wdi_conn_pipes - Client should call this
526*5113495bSYour Name  * function to connect pipes
527*5113495bSYour Name  * @in:	[in] input parameters from client
528*5113495bSYour Name  * @out: [out] output params to client
529*5113495bSYour Name  *
530*5113495bSYour Name  * Note: Should not be called from atomic context and only
531*5113495bSYour Name  * after checking IPA readiness using ipa_register_ipa_ready_cb()
532*5113495bSYour Name  *
533*5113495bSYour Name  * @Return 0 on success, negative on failure
534*5113495bSYour Name  */
__qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params * in,struct ipa_wdi_conn_out_params * out)535*5113495bSYour Name static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in,
536*5113495bSYour Name 			struct ipa_wdi_conn_out_params *out)
537*5113495bSYour Name {
538*5113495bSYour Name 	return ipa_wdi_conn_pipes_per_inst(in, out);
539*5113495bSYour Name }
540*5113495bSYour Name 
541*5113495bSYour Name /**
542*5113495bSYour Name  * __qdf_ipa_wdi_disconn_pipes() - Client should call this
543*5113495bSYour Name  *		function to disconnect pipes
544*5113495bSYour Name  * @hdl: IPA handle
545*5113495bSYour Name  *
546*5113495bSYour Name  * Note: Should not be called from atomic context
547*5113495bSYour Name  *
548*5113495bSYour Name  * Returns: 0 on success, negative on failure
549*5113495bSYour Name  */
__qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)550*5113495bSYour Name static inline int __qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)
551*5113495bSYour Name {
552*5113495bSYour Name 	return ipa_wdi_disconn_pipes_per_inst(hdl);
553*5113495bSYour Name }
554*5113495bSYour Name 
555*5113495bSYour Name /**
556*5113495bSYour Name  * __qdf_ipa_wdi_enable_pipes() - Client should call this
557*5113495bSYour Name  *		function to enable IPA offload data path
558*5113495bSYour Name  * @hdl: IPA handle
559*5113495bSYour Name  *
560*5113495bSYour Name  * Note: Should not be called from atomic context
561*5113495bSYour Name  *
562*5113495bSYour Name  * Returns: 0 on success, negative on failure
563*5113495bSYour Name  */
__qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)564*5113495bSYour Name static inline int __qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)
565*5113495bSYour Name {
566*5113495bSYour Name 	return ipa_wdi_enable_pipes_per_inst(hdl);
567*5113495bSYour Name }
568*5113495bSYour Name 
569*5113495bSYour Name /**
570*5113495bSYour Name  * __qdf_ipa_wdi_disable_pipes() - Client should call this
571*5113495bSYour Name  *		function to disable IPA offload data path
572*5113495bSYour Name  * @hdl: IPA handle
573*5113495bSYour Name  *
574*5113495bSYour Name  * Note: Should not be called from atomic context
575*5113495bSYour Name  *
576*5113495bSYour Name  * Returns: 0 on success, negative on failure
577*5113495bSYour Name  */
__qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)578*5113495bSYour Name static inline int __qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)
579*5113495bSYour Name {
580*5113495bSYour Name 	return ipa_wdi_disable_pipes_per_inst(hdl);
581*5113495bSYour Name }
582*5113495bSYour Name 
583*5113495bSYour Name /**
584*5113495bSYour Name  * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to
585*5113495bSYour Name  *		set IPA clock bandwidth based on data rates
586*5113495bSYour Name  * @hdl: IPA handle
587*5113495bSYour Name  * @profile: [in] BandWidth profile to use
588*5113495bSYour Name  *
589*5113495bSYour Name  * Returns: 0 on success, negative on failure
590*5113495bSYour Name  */
__qdf_ipa_wdi_set_perf_profile(__qdf_ipa_wdi_hdl_t hdl,struct ipa_wdi_perf_profile * profile)591*5113495bSYour Name static inline int __qdf_ipa_wdi_set_perf_profile(__qdf_ipa_wdi_hdl_t hdl,
592*5113495bSYour Name 						 struct ipa_wdi_perf_profile *profile)
593*5113495bSYour Name {
594*5113495bSYour Name 	return ipa_wdi_set_perf_profile_per_inst(hdl, profile);
595*5113495bSYour Name }
596*5113495bSYour Name 
597*5113495bSYour Name /**
598*5113495bSYour Name  * __qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to
599*5113495bSYour Name  *		create smmu mapping
600*5113495bSYour Name  * @hdl: IPA handle
601*5113495bSYour Name  * @num_buffers: [in] number of buffers
602*5113495bSYour Name  * @info: [in] wdi buffer info
603*5113495bSYour Name  *
604*5113495bSYour Name  * Returns: 0 on success, negative on failure
605*5113495bSYour Name  */
__qdf_ipa_wdi_create_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,u32 num_buffers,struct ipa_wdi_buffer_info * info)606*5113495bSYour Name static inline int __qdf_ipa_wdi_create_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,
607*5113495bSYour Name 						    u32 num_buffers,
608*5113495bSYour Name 						    struct ipa_wdi_buffer_info *info)
609*5113495bSYour Name {
610*5113495bSYour Name 	return ipa_wdi_create_smmu_mapping_per_inst(hdl, num_buffers, info);
611*5113495bSYour Name }
612*5113495bSYour Name 
613*5113495bSYour Name /**
614*5113495bSYour Name  * __qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to
615*5113495bSYour Name  *		release smmu mapping
616*5113495bSYour Name  * @hdl: IPA handle
617*5113495bSYour Name  * @num_buffers: [in] number of buffers
618*5113495bSYour Name  * @info: [in] wdi buffer info
619*5113495bSYour Name  *
620*5113495bSYour Name  * Returns: 0 on success, negative on failure
621*5113495bSYour Name  */
__qdf_ipa_wdi_release_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,u32 num_buffers,struct ipa_wdi_buffer_info * info)622*5113495bSYour Name static inline int __qdf_ipa_wdi_release_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,
623*5113495bSYour Name 						     u32 num_buffers,
624*5113495bSYour Name 						     struct ipa_wdi_buffer_info *info)
625*5113495bSYour Name {
626*5113495bSYour Name 	return ipa_wdi_release_smmu_mapping_per_inst(hdl, num_buffers, info);
627*5113495bSYour Name }
628*5113495bSYour Name #else
629*5113495bSYour Name /**
630*5113495bSYour Name  * __qdf_ipa_wdi_init - Client should call this function to
631*5113495bSYour Name  * init WDI IPA offload data path
632*5113495bSYour Name  *
633*5113495bSYour Name  * Note: Should not be called from atomic context and only
634*5113495bSYour Name  * after checking IPA readiness using ipa_register_ipa_ready_cb()
635*5113495bSYour Name  *
636*5113495bSYour Name  * @Return 0 on success, negative on failure
637*5113495bSYour Name  */
__qdf_ipa_wdi_init(struct ipa_wdi_init_in_params * in,struct ipa_wdi_init_out_params * out)638*5113495bSYour Name static inline int __qdf_ipa_wdi_init(struct ipa_wdi_init_in_params *in,
639*5113495bSYour Name 		 struct ipa_wdi_init_out_params *out)
640*5113495bSYour Name {
641*5113495bSYour Name 	return ipa_wdi_init(in, out);
642*5113495bSYour Name }
643*5113495bSYour Name 
644*5113495bSYour Name /**
645*5113495bSYour Name  * __qdf_ipa_wdi_cleanup - Client should call this function to
646*5113495bSYour Name  * clean up WDI IPA offload data path
647*5113495bSYour Name  * @hdl: IPA handle
648*5113495bSYour Name  *
649*5113495bSYour Name  * @Return 0 on success, negative on failure
650*5113495bSYour Name  */
__qdf_ipa_wdi_cleanup(__qdf_ipa_wdi_hdl_t hdl)651*5113495bSYour Name static inline int __qdf_ipa_wdi_cleanup(__qdf_ipa_wdi_hdl_t hdl)
652*5113495bSYour Name {
653*5113495bSYour Name 	return ipa_wdi_cleanup();
654*5113495bSYour Name }
655*5113495bSYour Name 
656*5113495bSYour Name /**
657*5113495bSYour Name  * __qdf_ipa_wdi_reg_intf - Client should call this function to
658*5113495bSYour Name  * init WDI IPA offload data path
659*5113495bSYour Name  *
660*5113495bSYour Name  * Note: Should not be called from atomic context and only
661*5113495bSYour Name  * after checking IPA readiness using ipa_register_ipa_ready_cb()
662*5113495bSYour Name  *
663*5113495bSYour Name  * @Return 0 on success, negative on failure
664*5113495bSYour Name  */
__qdf_ipa_wdi_reg_intf(struct ipa_wdi_reg_intf_in_params * in)665*5113495bSYour Name static inline int __qdf_ipa_wdi_reg_intf(
666*5113495bSYour Name 	struct ipa_wdi_reg_intf_in_params *in)
667*5113495bSYour Name {
668*5113495bSYour Name 	return ipa_wdi_reg_intf(in);
669*5113495bSYour Name }
670*5113495bSYour Name 
671*5113495bSYour Name /**
672*5113495bSYour Name  * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
673*5113495bSYour Name  * function to deregister before unload and after disconnect
674*5113495bSYour Name  * @hdl: IPA handle
675*5113495bSYour Name  *
676*5113495bSYour Name  * @Return 0 on success, negative on failure
677*5113495bSYour Name  */
__qdf_ipa_wdi_dereg_intf(const char * netdev_name,__qdf_ipa_wdi_hdl_t hdl)678*5113495bSYour Name static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name,
679*5113495bSYour Name 					   __qdf_ipa_wdi_hdl_t hdl)
680*5113495bSYour Name {
681*5113495bSYour Name 	return ipa_wdi_dereg_intf(netdev_name);
682*5113495bSYour Name }
683*5113495bSYour Name 
684*5113495bSYour Name /**
685*5113495bSYour Name  * __qdf_ipa_wdi_conn_pipes - Client should call this
686*5113495bSYour Name  * function to connect pipes
687*5113495bSYour Name  * @in:	[in] input parameters from client
688*5113495bSYour Name  * @out: [out] output params to client
689*5113495bSYour Name  *
690*5113495bSYour Name  * Note: Should not be called from atomic context and only
691*5113495bSYour Name  * after checking IPA readiness using ipa_register_ipa_ready_cb()
692*5113495bSYour Name  *
693*5113495bSYour Name  * @Return 0 on success, negative on failure
694*5113495bSYour Name  */
__qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params * in,struct ipa_wdi_conn_out_params * out)695*5113495bSYour Name static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in,
696*5113495bSYour Name 			struct ipa_wdi_conn_out_params *out)
697*5113495bSYour Name {
698*5113495bSYour Name 	return ipa_wdi_conn_pipes(in, out);
699*5113495bSYour Name }
700*5113495bSYour Name 
701*5113495bSYour Name /**
702*5113495bSYour Name  * __qdf_ipa_wdi_disconn_pipes() - Client should call this
703*5113495bSYour Name  *		function to disconnect pipes
704*5113495bSYour Name  * @hdl: IPA handle
705*5113495bSYour Name  *
706*5113495bSYour Name  * Note: Should not be called from atomic context
707*5113495bSYour Name  *
708*5113495bSYour Name  * Returns: 0 on success, negative on failure
709*5113495bSYour Name  */
__qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)710*5113495bSYour Name static inline int __qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)
711*5113495bSYour Name {
712*5113495bSYour Name 	return ipa_wdi_disconn_pipes();
713*5113495bSYour Name }
714*5113495bSYour Name 
715*5113495bSYour Name /**
716*5113495bSYour Name  * __qdf_ipa_wdi_enable_pipes() - Client should call this
717*5113495bSYour Name  *		function to enable IPA offload data path
718*5113495bSYour Name  * @hdl: IPA handle
719*5113495bSYour Name  *
720*5113495bSYour Name  * Note: Should not be called from atomic context
721*5113495bSYour Name  *
722*5113495bSYour Name  * Returns: 0 on success, negative on failure
723*5113495bSYour Name  */
__qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)724*5113495bSYour Name static inline int __qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)
725*5113495bSYour Name {
726*5113495bSYour Name 	return ipa_wdi_enable_pipes();
727*5113495bSYour Name }
728*5113495bSYour Name 
729*5113495bSYour Name /**
730*5113495bSYour Name  * __qdf_ipa_wdi_disable_pipes() - Client should call this
731*5113495bSYour Name  *		function to disable IPA offload data path
732*5113495bSYour Name  * @hdl: IPA handle
733*5113495bSYour Name  *
734*5113495bSYour Name  * Note: Should not be called from atomic context
735*5113495bSYour Name  *
736*5113495bSYour Name  * Returns: 0 on success, negative on failure
737*5113495bSYour Name  */
__qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)738*5113495bSYour Name static inline int __qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)
739*5113495bSYour Name {
740*5113495bSYour Name 	return ipa_wdi_disable_pipes();
741*5113495bSYour Name }
742*5113495bSYour Name 
743*5113495bSYour Name /**
744*5113495bSYour Name  * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to
745*5113495bSYour Name  *		set IPA clock bandwidth based on data rates
746*5113495bSYour Name  * @hdl: IPA handle
747*5113495bSYour Name  * @profile: [in] BandWidth profile to use
748*5113495bSYour Name  *
749*5113495bSYour Name  * Returns: 0 on success, negative on failure
750*5113495bSYour Name  */
__qdf_ipa_wdi_set_perf_profile(__qdf_ipa_wdi_hdl_t hdl,struct ipa_wdi_perf_profile * profile)751*5113495bSYour Name static inline int __qdf_ipa_wdi_set_perf_profile(__qdf_ipa_wdi_hdl_t hdl,
752*5113495bSYour Name 						 struct ipa_wdi_perf_profile *profile)
753*5113495bSYour Name {
754*5113495bSYour Name 	return ipa_wdi_set_perf_profile(profile);
755*5113495bSYour Name }
756*5113495bSYour Name 
757*5113495bSYour Name /**
758*5113495bSYour Name  * __qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to
759*5113495bSYour Name  *		create smmu mapping
760*5113495bSYour Name  * @hdl: IPA handle
761*5113495bSYour Name  * @num_buffers: [in] number of buffers
762*5113495bSYour Name  * @info: [in] wdi buffer info
763*5113495bSYour Name  *
764*5113495bSYour Name  * Returns: 0 on success, negative on failure
765*5113495bSYour Name  */
__qdf_ipa_wdi_create_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,u32 num_buffers,struct ipa_wdi_buffer_info * info)766*5113495bSYour Name static inline int __qdf_ipa_wdi_create_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,
767*5113495bSYour Name 						    u32 num_buffers,
768*5113495bSYour Name 						    struct ipa_wdi_buffer_info *info)
769*5113495bSYour Name {
770*5113495bSYour Name 	return ipa_wdi_create_smmu_mapping(num_buffers, info);
771*5113495bSYour Name }
772*5113495bSYour Name 
773*5113495bSYour Name /**
774*5113495bSYour Name  * __qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to
775*5113495bSYour Name  *		release smmu mapping
776*5113495bSYour Name  * @hdl: IPA handle
777*5113495bSYour Name  * @num_buffers: [in] number of buffers
778*5113495bSYour Name  * @info: [in] wdi buffer info
779*5113495bSYour Name  *
780*5113495bSYour Name  * Returns: 0 on success, negative on failure
781*5113495bSYour Name  */
__qdf_ipa_wdi_release_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,u32 num_buffers,struct ipa_wdi_buffer_info * info)782*5113495bSYour Name static inline int __qdf_ipa_wdi_release_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,
783*5113495bSYour Name 						     u32 num_buffers,
784*5113495bSYour Name 						     struct ipa_wdi_buffer_info *info)
785*5113495bSYour Name {
786*5113495bSYour Name 	return ipa_wdi_release_smmu_mapping(num_buffers, info);
787*5113495bSYour Name }
788*5113495bSYour Name 
789*5113495bSYour Name #endif
790*5113495bSYour Name 
791*5113495bSYour Name #ifdef WDI3_STATS_UPDATE
792*5113495bSYour Name /**
793*5113495bSYour Name  * __qdf_ipa_wdi_wlan_stats() - Client should call this function to
794*5113495bSYour Name  *		send Tx byte counts to IPA driver
795*5113495bSYour Name  * @tx_stats: number of Tx bytes on STA and SAP
796*5113495bSYour Name  *
797*5113495bSYour Name  * Returns: 0 on success, negative on failure
798*5113495bSYour Name  */
__qdf_ipa_wdi_wlan_stats(struct ipa_wdi_tx_info * tx_stats)799*5113495bSYour Name static inline int __qdf_ipa_wdi_wlan_stats(struct ipa_wdi_tx_info *tx_stats)
800*5113495bSYour Name {
801*5113495bSYour Name 	return ipa_wdi_sw_stats(tx_stats);
802*5113495bSYour Name }
803*5113495bSYour Name 
804*5113495bSYour Name /**
805*5113495bSYour Name  * ipa_uc_bw_monitor() - start/stop uc bw monitoring
806*5113495bSYour Name  * @bw_info: set bw info levels to monitor
807*5113495bSYour Name  *
808*5113495bSYour Name  * Returns: 0 on success, negative on failure
809*5113495bSYour Name  */
__qdf_ipa_uc_bw_monitor(struct ipa_wdi_bw_info * bw_info)810*5113495bSYour Name static inline int __qdf_ipa_uc_bw_monitor(struct ipa_wdi_bw_info *bw_info)
811*5113495bSYour Name {
812*5113495bSYour Name 	return ipa_uc_bw_monitor(bw_info);
813*5113495bSYour Name }
814*5113495bSYour Name #endif
815*5113495bSYour Name #else /* CONFIG_IPA_WDI_UNIFIED_API */
816*5113495bSYour Name 
817*5113495bSYour Name /**
818*5113495bSYour Name  * __qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW
819*5113495bSYour Name  */
820*5113495bSYour Name typedef struct ipa_wdi3_hdr_info  __qdf_ipa_wdi_hdr_info_t;
821*5113495bSYour Name 
822*5113495bSYour Name #define __QDF_IPA_WDI_HDR_INFO_HDR(hdr_info)	\
823*5113495bSYour Name 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr)
824*5113495bSYour Name #define __QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info)	\
825*5113495bSYour Name 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_len)
826*5113495bSYour Name #define __QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info)	\
827*5113495bSYour Name 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->dst_mac_addr_offset)
828*5113495bSYour Name #define __QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info)	\
829*5113495bSYour Name 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_type)
830*5113495bSYour Name 
831*5113495bSYour Name /**
832*5113495bSYour Name  * __qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload
833*5113495bSYour Name  *	interface registration
834*5113495bSYour Name  */
835*5113495bSYour Name typedef struct ipa_wdi3_reg_intf_in_params  __qdf_ipa_wdi_reg_intf_in_params_t;
836*5113495bSYour Name 
837*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in)	\
838*5113495bSYour Name 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->netdev_name)
839*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in)	\
840*5113495bSYour Name 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->hdr_info)
841*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in)	\
842*5113495bSYour Name 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->is_meta_data_valid)
843*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in)	\
844*5113495bSYour Name 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data)
845*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in)	\
846*5113495bSYour Name 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data_mask)
847*5113495bSYour Name #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HANDLE(in)	\
848*5113495bSYour Name 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->hdl)
849*5113495bSYour Name 
850*5113495bSYour Name /**
851*5113495bSYour Name  * __qdf_ipa_wdi_setup_info_t - WDI3 TX/Rx configuration
852*5113495bSYour Name  */
853*5113495bSYour Name typedef struct ipa_wdi3_setup_info  __qdf_ipa_wdi_pipe_setup_info_t;
854*5113495bSYour Name 
855*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_NAT_EN(txrx)	\
856*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.nat.nat_en)
857*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_HDR_LEN(txrx)	\
858*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_len)
859*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_METADATA_VALID(txrx)	\
860*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid)
861*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_HDR_METADATA_REG_VALID(txrx)	\
862*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_metadata_reg_valid)
863*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE_VALID(txrx)	\
864*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid)
865*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE(txrx)	\
866*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size)
867*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_HDR_ADDITIONAL_CONST_LEN(txrx)	\
868*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_additional_const_len)
869*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_MODE(txrx)	\
870*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.mode.mode)
871*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_HDR_LITTLE_ENDIAN(txrx)	\
872*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr_ext.hdr_little_endian)
873*5113495bSYour Name 
874*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx)	\
875*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->client)
876*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx)	\
877*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_base_pa)
878*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx)	\
879*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_size)
880*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx)	\
881*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_doorbell_pa)
882*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx)	\
883*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_base_pa)
884*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx)	\
885*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_size)
886*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx)	\
887*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_doorbell_pa)
888*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx)	\
889*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->num_pkt_buffers)
890*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx)	\
891*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->pkt_offset)
892*5113495bSYour Name #define __QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx)	\
893*5113495bSYour Name 	(((struct ipa_wdi3_setup_info *)(txrx))->desc_format_template)
894*5113495bSYour Name 
895*5113495bSYour Name /**
896*5113495bSYour Name  * __qdf_ipa_wdi_conn_in_params_t - information provided by
897*5113495bSYour Name  *		uC offload client
898*5113495bSYour Name  */
899*5113495bSYour Name typedef struct ipa_wdi3_conn_in_params  __qdf_ipa_wdi_conn_in_params_t;
900*5113495bSYour Name 
901*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in)	\
902*5113495bSYour Name 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->notify)
903*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in)	\
904*5113495bSYour Name 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->priv)
905*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in)	\
906*5113495bSYour Name 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->tx)
907*5113495bSYour Name #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in)	\
908*5113495bSYour Name 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->rx)
909*5113495bSYour Name 
910*5113495bSYour Name /**
911*5113495bSYour Name  * __qdf_ipa_wdi_conn_out_params_t - information provided
912*5113495bSYour Name  *				to WLAN druver
913*5113495bSYour Name  */
914*5113495bSYour Name typedef struct ipa_wdi3_conn_out_params  __qdf_ipa_wdi_conn_out_params_t;
915*5113495bSYour Name 
916*5113495bSYour Name #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out)	\
917*5113495bSYour Name 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_pa)
918*5113495bSYour Name #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_VA(pipe_out)	\
919*5113495bSYour Name 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_va)
920*5113495bSYour Name #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out)	\
921*5113495bSYour Name 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->rx_uc_db_pa)
922*5113495bSYour Name 
923*5113495bSYour Name /**
924*5113495bSYour Name  * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile
925*5113495bSYour Name  */
926*5113495bSYour Name typedef struct ipa_wdi3_perf_profile  __qdf_ipa_wdi_perf_profile_t;
927*5113495bSYour Name 
928*5113495bSYour Name #define __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile)	\
929*5113495bSYour Name 	(((struct ipa_wdi3_perf_profile *)(profile))->client)
930*5113495bSYour Name #define __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile)	\
931*5113495bSYour Name 	(((struct ipa_wdi3_perf_profile *)(profile))->max_supported_bw_mbps)
932*5113495bSYour Name 
933*5113495bSYour Name /**
934*5113495bSYour Name  * __qdf_ipa_wdi_reg_intf - Client should call this function to
935*5113495bSYour Name  * init WDI3 IPA offload data path
936*5113495bSYour Name  *
937*5113495bSYour Name  * Note: Should not be called from atomic context and only
938*5113495bSYour Name  * after checking IPA readiness using ipa_register_ipa_ready_cb()
939*5113495bSYour Name  *
940*5113495bSYour Name  * @Return 0 on success, negative on failure
941*5113495bSYour Name  */
__qdf_ipa_wdi_reg_intf(struct ipa_wdi3_reg_intf_in_params * in)942*5113495bSYour Name static inline int __qdf_ipa_wdi_reg_intf(
943*5113495bSYour Name 	struct ipa_wdi3_reg_intf_in_params *in)
944*5113495bSYour Name {
945*5113495bSYour Name 	return ipa_wdi3_reg_intf(in);
946*5113495bSYour Name }
947*5113495bSYour Name 
948*5113495bSYour Name /**
949*5113495bSYour Name  * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
950*5113495bSYour Name  * function to deregister before unload and after disconnect
951*5113495bSYour Name  *
952*5113495bSYour Name  * @Return 0 on success, negative on failure
953*5113495bSYour Name  */
__qdf_ipa_wdi_dereg_intf(const char * netdev_name)954*5113495bSYour Name static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name)
955*5113495bSYour Name {
956*5113495bSYour Name 	return ipa_wdi3_dereg_intf(netdev_name);
957*5113495bSYour Name }
958*5113495bSYour Name 
959*5113495bSYour Name /**
960*5113495bSYour Name  * __qdf_ipa_wdi_conn_pipes - Client should call this
961*5113495bSYour Name  * function to connect pipes
962*5113495bSYour Name  * @in:	[in] input parameters from client
963*5113495bSYour Name  * @out: [out] output params to client
964*5113495bSYour Name  *
965*5113495bSYour Name  * Note: Should not be called from atomic context and only
966*5113495bSYour Name  * after checking IPA readiness using ipa_register_ipa_ready_cb()
967*5113495bSYour Name  *
968*5113495bSYour Name  * @Return 0 on success, negative on failure
969*5113495bSYour Name  */
__qdf_ipa_wdi_conn_pipes(struct ipa_wdi3_conn_in_params * in,struct ipa_wdi3_conn_out_params * out)970*5113495bSYour Name static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi3_conn_in_params *in,
971*5113495bSYour Name 					   struct ipa_wdi3_conn_out_params *out)
972*5113495bSYour Name {
973*5113495bSYour Name 	return ipa_wdi3_conn_pipes(in, out);
974*5113495bSYour Name }
975*5113495bSYour Name 
976*5113495bSYour Name /**
977*5113495bSYour Name  * __qdf_ipa_wdi_disconn_pipes() - Client should call this
978*5113495bSYour Name  *		function to disconnect pipes
979*5113495bSYour Name  *
980*5113495bSYour Name  * Note: Should not be called from atomic context
981*5113495bSYour Name  *
982*5113495bSYour Name  * Returns: 0 on success, negative on failure
983*5113495bSYour Name  */
__qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)984*5113495bSYour Name static inline int __qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)
985*5113495bSYour Name {
986*5113495bSYour Name 	return ipa_wdi3_disconn_pipes_per_inst(hdl);
987*5113495bSYour Name }
988*5113495bSYour Name 
989*5113495bSYour Name /**
990*5113495bSYour Name  * __qdf_ipa_wdi_enable_pipes() - Client should call this
991*5113495bSYour Name  *		function to enable IPA offload data path
992*5113495bSYour Name  * @hdl: IPA handle
993*5113495bSYour Name  *
994*5113495bSYour Name  * Note: Should not be called from atomic context
995*5113495bSYour Name  *
996*5113495bSYour Name  * Returns: 0 on success, negative on failure
997*5113495bSYour Name  */
__qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)998*5113495bSYour Name static inline int __qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)
999*5113495bSYour Name {
1000*5113495bSYour Name 	return ipa_wdi3_enable_pipes_per_inst(hdl);
1001*5113495bSYour Name }
1002*5113495bSYour Name 
1003*5113495bSYour Name /**
1004*5113495bSYour Name  * __qdf_ipa_wdi_disable_pipes() - Client should call this
1005*5113495bSYour Name  *		function to disable IPA offload data path
1006*5113495bSYour Name  * @hdl: IPA handle
1007*5113495bSYour Name  *
1008*5113495bSYour Name  * Note: Should not be called from atomic context
1009*5113495bSYour Name  *
1010*5113495bSYour Name  * Returns: 0 on success, negative on failure
1011*5113495bSYour Name  */
__qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)1012*5113495bSYour Name static inline int __qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)
1013*5113495bSYour Name {
1014*5113495bSYour Name 	return ipa_wdi3_disable_pipes_per_inst(hdl);
1015*5113495bSYour Name }
1016*5113495bSYour Name 
1017*5113495bSYour Name /**
1018*5113495bSYour Name  * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to
1019*5113495bSYour Name  *		set IPA clock bandwidth based on data rates
1020*5113495bSYour Name  * @profile: [in] BandWidth profile to use
1021*5113495bSYour Name  *
1022*5113495bSYour Name  * Returns: 0 on success, negative on failure
1023*5113495bSYour Name  */
__qdf_ipa_wdi_set_perf_profile(struct ipa_wdi3_perf_profile * profile)1024*5113495bSYour Name static inline int __qdf_ipa_wdi_set_perf_profile(
1025*5113495bSYour Name 			struct ipa_wdi3_perf_profile *profile)
1026*5113495bSYour Name {
1027*5113495bSYour Name 	return ipa_wdi3_set_perf_profile(profile);
1028*5113495bSYour Name }
1029*5113495bSYour Name 
1030*5113495bSYour Name #endif /* CONFIG_IPA_WDI_UNIFIED_API */
1031*5113495bSYour Name 
1032*5113495bSYour Name #endif /* IPA_OFFLOAD */
1033*5113495bSYour Name #endif /* I_QDF_IPA_WDI_H */
1034