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