xref: /wlan-dirver/qca-wifi-host-cmn/qdf/linux/src/i_qdf_ipa_wdi3.h (revision 901120c066e139c7f8a2c8e4820561fdd83c67ef)
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 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 41))
289 /* MSM kernel support added in I6418ae5bc4f030f6348e0f580b61b6adc1b92cf3 */
290 #define __QDF_IPA_WDI_SETUP_INFO_RX_BANK_ID(txrx, bid)	\
291 	((((struct ipa_wdi_pipe_setup_info *)(txrx))->rx_bank_id) = (bid))
292 
293 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_BANK_ID(txrx, bid)	\
294 	((((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->rx_bank_id) = (bid))
295 #else
296 #define __QDF_IPA_WDI_SETUP_INFO_RX_BANK_ID(txrx, bid)
297 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_BANK_ID(txrx, bid)
298 #endif
299 
300 /**
301  * __qdf_ipa_wdi_conn_in_params_t - information provided by
302  *		uC offload client
303  */
304 typedef struct ipa_wdi_conn_in_params  __qdf_ipa_wdi_conn_in_params_t;
305 
306 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in)	\
307 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->notify)
308 #define __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in)	\
309 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->priv)
310 #define __QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(pipe_in)	\
311 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->is_smmu_enabled)
312 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NUM_SYS_PIPE_NEEDED(pipe_in)	\
313 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->num_sys_pipe_needed)
314 #define __QDF_IPA_WDI_CONN_IN_PARAMS_SYS_IN(in)	\
315 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->sys_in)
316 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in)	\
317 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx)
318 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_SMMU(pipe_in)	\
319 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx_smmu)
320 #ifdef IPA_WDI3_TX_TWO_PIPES
321 #define __QDF_IPA_WDI_CONN_IN_PARAMS_IS_TX1_USED(pipe_in)	\
322 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->is_tx1_used)
323 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_ALT_PIPE(pipe_in)	\
324 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx1.tx)
325 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_ALT_PIPE_SMMU(pipe_in)	\
326 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx1.tx_smmu)
327 #endif
328 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in)	\
329 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx)
330 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_SMMU(pipe_in)	\
331 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx_smmu)
332 #ifdef IPA_WDI3_VLAN_SUPPORT
333 #define __QDF_IPA_WDI_CONN_IN_PARAMS_IS_RX1_USED(pipe_in)	\
334 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->is_rx1_used)
335 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_ALT(pipe_in)	\
336 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx1.rx)
337 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_ALT_SMMU(pipe_in)	\
338 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx1.rx_smmu)
339 #endif
340 #define __QDF_IPA_WDI_CONN_IN_PARAMS_HANDLE(pipe_in)	\
341 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->hdl)
342 
343 #ifdef IPA_WDS_EASYMESH_FEATURE
344 #define __QDF_IPA_WDI_CONN_IN_PARAMS_AST_NOTIFY(pipe_in)	\
345 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->ast_notify)
346 #endif
347 
348 /**
349  * __qdf_ipa_wdi_conn_out_params_t - information provided
350  *				to WLAN druver
351  */
352 typedef struct ipa_wdi_conn_out_params  __qdf_ipa_wdi_conn_out_params_t;
353 
354 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out)	\
355 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->tx_uc_db_pa)
356 #ifdef IPA_WDI3_TX_TWO_PIPES
357 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_ALT_DB_PA(pipe_out)	\
358 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->tx1_uc_db_pa)
359 #endif
360 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out)	\
361 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->rx_uc_db_pa)
362 #ifdef IPA_WDI3_VLAN_SUPPORT
363 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_ALT_UC_DB_PA(pipe_out)	\
364 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->rx1_uc_db_pa)
365 #endif
366 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
367 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_IS_DB_DDR_MAPPED(pipe_out)	\
368 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->is_ddr_mapped)
369 #else
370 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_IS_DB_DDR_MAPPED(pipe_out) false
371 #endif
372 
373 /**
374  * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile
375  */
376 typedef struct ipa_wdi_perf_profile  __qdf_ipa_wdi_perf_profile_t;
377 
378 #define __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile)	\
379 	(((struct ipa_wdi_perf_profile *)(profile))->client)
380 #define __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile)	\
381 	(((struct ipa_wdi_perf_profile *)(profile))->max_supported_bw_mbps)
382 
383 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
384 /**
385  * __qdf_ipa_wdi_init - Client should call this function to
386  * init WDI IPA offload data path
387  *
388  * Note: Should not be called from atomic context and only
389  * after checking IPA readiness using ipa_register_ipa_ready_cb()
390  *
391  * @Return 0 on success, negative on failure
392  */
393 static inline int __qdf_ipa_wdi_init(struct ipa_wdi_init_in_params *in,
394 		 struct ipa_wdi_init_out_params *out)
395 {
396 	return ipa_wdi_init_per_inst(in, out);
397 }
398 
399 /**
400  * __qdf_ipa_wdi_cleanup - Client should call this function to
401  * clean up WDI IPA offload data path
402  * @hdl: IPA handle
403  *
404  * @Return 0 on success, negative on failure
405  */
406 static inline int __qdf_ipa_wdi_cleanup(__qdf_ipa_wdi_hdl_t hdl)
407 {
408 	return ipa_wdi_cleanup_per_inst(hdl);
409 }
410 
411 /**
412  * __qdf_ipa_wdi_reg_intf - Client should call this function to
413  * init WDI IPA offload data path
414  *
415  * Note: Should not be called from atomic context and only
416  * after checking IPA readiness using ipa_register_ipa_ready_cb()
417  *
418  * @Return 0 on success, negative on failure
419  */
420 static inline int __qdf_ipa_wdi_reg_intf(
421 	struct ipa_wdi_reg_intf_in_params *in)
422 {
423 	return ipa_wdi_reg_intf_per_inst(in);
424 }
425 
426 /**
427  * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
428  * function to deregister before unload and after disconnect
429  * @hdl: IPA handle
430  *
431  * @Return 0 on success, negative on failure
432  */
433 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name,
434 					   __qdf_ipa_wdi_hdl_t hdl)
435 {
436 	return ipa_wdi_dereg_intf_per_inst(netdev_name, hdl);
437 }
438 
439 /**
440  * __qdf_ipa_wdi_conn_pipes - Client should call this
441  * function to connect pipes
442  * @in:	[in] input parameters from client
443  * @out: [out] output params to client
444  *
445  * Note: Should not be called from atomic context and only
446  * after checking IPA readiness using ipa_register_ipa_ready_cb()
447  *
448  * @Return 0 on success, negative on failure
449  */
450 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in,
451 			struct ipa_wdi_conn_out_params *out)
452 {
453 	return ipa_wdi_conn_pipes_per_inst(in, out);
454 }
455 
456 /**
457  * __qdf_ipa_wdi_disconn_pipes() - Client should call this
458  *		function to disconnect pipes
459  * @hdl: IPA handle
460  *
461  * Note: Should not be called from atomic context
462  *
463  * Returns: 0 on success, negative on failure
464  */
465 static inline int __qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)
466 {
467 	return ipa_wdi_disconn_pipes_per_inst(hdl);
468 }
469 
470 /**
471  * __qdf_ipa_wdi_enable_pipes() - Client should call this
472  *		function to enable IPA offload data path
473  * @hdl: IPA handle
474  *
475  * Note: Should not be called from atomic context
476  *
477  * Returns: 0 on success, negative on failure
478  */
479 static inline int __qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)
480 {
481 	return ipa_wdi_enable_pipes_per_inst(hdl);
482 }
483 
484 /**
485  * __qdf_ipa_wdi_disable_pipes() - Client should call this
486  *		function to disable IPA offload data path
487  * @hdl: IPA handle
488  *
489  * Note: Should not be called from atomic context
490  *
491  * Returns: 0 on success, negative on failure
492  */
493 static inline int __qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)
494 {
495 	return ipa_wdi_disable_pipes_per_inst(hdl);
496 }
497 
498 /**
499  * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to
500  *		set IPA clock bandwidth based on data rates
501  * @hdl: IPA handle
502  * @profile: [in] BandWidth profile to use
503  *
504  * Returns: 0 on success, negative on failure
505  */
506 static inline int __qdf_ipa_wdi_set_perf_profile(__qdf_ipa_wdi_hdl_t hdl,
507 						 struct ipa_wdi_perf_profile *profile)
508 {
509 	return ipa_wdi_set_perf_profile_per_inst(hdl, profile);
510 }
511 
512 /**
513  * __qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to
514  *		create smmu mapping
515  * @hdl: IPA handle
516  * @num_buffers: [in] number of buffers
517  * @info: [in] wdi buffer info
518  *
519  * Returns: 0 on success, negative on failure
520  */
521 static inline int __qdf_ipa_wdi_create_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,
522 						    u32 num_buffers,
523 						    struct ipa_wdi_buffer_info *info)
524 {
525 	return ipa_wdi_create_smmu_mapping_per_inst(hdl, num_buffers, info);
526 }
527 
528 /**
529  * __qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to
530  *		release smmu mapping
531  * @hdl: IPA handle
532  * @num_buffers: [in] number of buffers
533  * @info: [in] wdi buffer info
534  *
535  * Returns: 0 on success, negative on failure
536  */
537 static inline int __qdf_ipa_wdi_release_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,
538 						     u32 num_buffers,
539 						     struct ipa_wdi_buffer_info *info)
540 {
541 	return ipa_wdi_release_smmu_mapping_per_inst(hdl, num_buffers, info);
542 }
543 #else
544 /**
545  * __qdf_ipa_wdi_init - Client should call this function to
546  * init WDI IPA offload data path
547  *
548  * Note: Should not be called from atomic context and only
549  * after checking IPA readiness using ipa_register_ipa_ready_cb()
550  *
551  * @Return 0 on success, negative on failure
552  */
553 static inline int __qdf_ipa_wdi_init(struct ipa_wdi_init_in_params *in,
554 		 struct ipa_wdi_init_out_params *out)
555 {
556 	return ipa_wdi_init(in, out);
557 }
558 
559 /**
560  * __qdf_ipa_wdi_cleanup - Client should call this function to
561  * clean up WDI IPA offload data path
562  * @hdl: IPA handle
563  *
564  * @Return 0 on success, negative on failure
565  */
566 static inline int __qdf_ipa_wdi_cleanup(__qdf_ipa_wdi_hdl_t hdl)
567 {
568 	return ipa_wdi_cleanup();
569 }
570 
571 /**
572  * __qdf_ipa_wdi_reg_intf - Client should call this function to
573  * init WDI IPA offload data path
574  *
575  * Note: Should not be called from atomic context and only
576  * after checking IPA readiness using ipa_register_ipa_ready_cb()
577  *
578  * @Return 0 on success, negative on failure
579  */
580 static inline int __qdf_ipa_wdi_reg_intf(
581 	struct ipa_wdi_reg_intf_in_params *in)
582 {
583 	return ipa_wdi_reg_intf(in);
584 }
585 
586 /**
587  * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
588  * function to deregister before unload and after disconnect
589  * @hdl: IPA handle
590  *
591  * @Return 0 on success, negative on failure
592  */
593 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name,
594 					   __qdf_ipa_wdi_hdl_t hdl)
595 {
596 	return ipa_wdi_dereg_intf(netdev_name);
597 }
598 
599 /**
600  * __qdf_ipa_wdi_conn_pipes - Client should call this
601  * function to connect pipes
602  * @in:	[in] input parameters from client
603  * @out: [out] output params to client
604  *
605  * Note: Should not be called from atomic context and only
606  * after checking IPA readiness using ipa_register_ipa_ready_cb()
607  *
608  * @Return 0 on success, negative on failure
609  */
610 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in,
611 			struct ipa_wdi_conn_out_params *out)
612 {
613 	return ipa_wdi_conn_pipes(in, out);
614 }
615 
616 /**
617  * __qdf_ipa_wdi_disconn_pipes() - Client should call this
618  *		function to disconnect pipes
619  * @hdl: IPA handle
620  *
621  * Note: Should not be called from atomic context
622  *
623  * Returns: 0 on success, negative on failure
624  */
625 static inline int __qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)
626 {
627 	return ipa_wdi_disconn_pipes();
628 }
629 
630 /**
631  * __qdf_ipa_wdi_enable_pipes() - Client should call this
632  *		function to enable IPA offload data path
633  * @hdl: IPA handle
634  *
635  * Note: Should not be called from atomic context
636  *
637  * Returns: 0 on success, negative on failure
638  */
639 static inline int __qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)
640 {
641 	return ipa_wdi_enable_pipes();
642 }
643 
644 /**
645  * __qdf_ipa_wdi_disable_pipes() - Client should call this
646  *		function to disable IPA offload data path
647  * @hdl: IPA handle
648  *
649  * Note: Should not be called from atomic context
650  *
651  * Returns: 0 on success, negative on failure
652  */
653 static inline int __qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)
654 {
655 	return ipa_wdi_disable_pipes();
656 }
657 
658 /**
659  * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to
660  *		set IPA clock bandwidth based on data rates
661  * @hdl: IPA handle
662  * @profile: [in] BandWidth profile to use
663  *
664  * Returns: 0 on success, negative on failure
665  */
666 static inline int __qdf_ipa_wdi_set_perf_profile(__qdf_ipa_wdi_hdl_t hdl,
667 						 struct ipa_wdi_perf_profile *profile)
668 {
669 	return ipa_wdi_set_perf_profile(profile);
670 }
671 
672 /**
673  * __qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to
674  *		create smmu mapping
675  * @hdl: IPA handle
676  * @num_buffers: [in] number of buffers
677  * @info: [in] wdi buffer info
678  *
679  * Returns: 0 on success, negative on failure
680  */
681 static inline int __qdf_ipa_wdi_create_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,
682 						    u32 num_buffers,
683 						    struct ipa_wdi_buffer_info *info)
684 {
685 	return ipa_wdi_create_smmu_mapping(num_buffers, info);
686 }
687 
688 /**
689  * __qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to
690  *		release smmu mapping
691  * @hdl: IPA handle
692  * @num_buffers: [in] number of buffers
693  * @info: [in] wdi buffer info
694  *
695  * Returns: 0 on success, negative on failure
696  */
697 static inline int __qdf_ipa_wdi_release_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,
698 						     u32 num_buffers,
699 						     struct ipa_wdi_buffer_info *info)
700 {
701 	return ipa_wdi_release_smmu_mapping(num_buffers, info);
702 }
703 
704 #endif
705 
706 #ifdef WDI3_STATS_UPDATE
707 /**
708  * __qdf_ipa_wdi_wlan_stats() - Client should call this function to
709  *		send Tx byte counts to IPA driver
710  * @tx_stats: number of Tx bytes on STA and SAP
711  *
712  * Returns: 0 on success, negative on failure
713  */
714 static inline int __qdf_ipa_wdi_wlan_stats(struct ipa_wdi_tx_info *tx_stats)
715 {
716 	return ipa_wdi_sw_stats(tx_stats);
717 }
718 
719 /**
720  * ipa_uc_bw_monitor() - start/stop uc bw monitoring
721  * @bw_info: set bw info levels to monitor
722  *
723  * Returns: 0 on success, negative on failure
724  */
725 static inline int __qdf_ipa_uc_bw_monitor(struct ipa_wdi_bw_info *bw_info)
726 {
727 	return ipa_uc_bw_monitor(bw_info);
728 }
729 #endif
730 #else /* CONFIG_IPA_WDI_UNIFIED_API */
731 
732 /**
733  * __qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW
734  */
735 typedef struct ipa_wdi3_hdr_info  __qdf_ipa_wdi_hdr_info_t;
736 
737 #define __QDF_IPA_WDI_HDR_INFO_HDR(hdr_info)	\
738 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr)
739 #define __QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info)	\
740 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_len)
741 #define __QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info)	\
742 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->dst_mac_addr_offset)
743 #define __QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info)	\
744 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_type)
745 
746 /**
747  * __qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload
748  *	interface registration
749  */
750 typedef struct ipa_wdi3_reg_intf_in_params  __qdf_ipa_wdi_reg_intf_in_params_t;
751 
752 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in)	\
753 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->netdev_name)
754 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in)	\
755 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->hdr_info)
756 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in)	\
757 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->is_meta_data_valid)
758 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in)	\
759 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data)
760 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in)	\
761 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data_mask)
762 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HANDLE(in)	\
763 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->hdl)
764 
765 /**
766  * __qdf_ipa_wdi_setup_info_t - WDI3 TX/Rx configuration
767  */
768 typedef struct ipa_wdi3_setup_info  __qdf_ipa_wdi_pipe_setup_info_t;
769 
770 #define __QDF_IPA_WDI_SETUP_INFO_NAT_EN(txrx)	\
771 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.nat.nat_en)
772 #define __QDF_IPA_WDI_SETUP_INFO_HDR_LEN(txrx)	\
773 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_len)
774 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_METADATA_VALID(txrx)	\
775 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid)
776 #define __QDF_IPA_WDI_SETUP_INFO_HDR_METADATA_REG_VALID(txrx)	\
777 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_metadata_reg_valid)
778 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE_VALID(txrx)	\
779 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid)
780 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE(txrx)	\
781 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size)
782 #define __QDF_IPA_WDI_SETUP_INFO_HDR_ADDITIONAL_CONST_LEN(txrx)	\
783 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_additional_const_len)
784 #define __QDF_IPA_WDI_SETUP_INFO_MODE(txrx)	\
785 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.mode.mode)
786 #define __QDF_IPA_WDI_SETUP_INFO_HDR_LITTLE_ENDIAN(txrx)	\
787 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr_ext.hdr_little_endian)
788 
789 #define __QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx)	\
790 	(((struct ipa_wdi3_setup_info *)(txrx))->client)
791 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx)	\
792 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_base_pa)
793 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx)	\
794 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_size)
795 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx)	\
796 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_doorbell_pa)
797 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx)	\
798 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_base_pa)
799 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx)	\
800 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_size)
801 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx)	\
802 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_doorbell_pa)
803 #define __QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx)	\
804 	(((struct ipa_wdi3_setup_info *)(txrx))->num_pkt_buffers)
805 #define __QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx)	\
806 	(((struct ipa_wdi3_setup_info *)(txrx))->pkt_offset)
807 #define __QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx)	\
808 	(((struct ipa_wdi3_setup_info *)(txrx))->desc_format_template)
809 
810 /**
811  * __qdf_ipa_wdi_conn_in_params_t - information provided by
812  *		uC offload client
813  */
814 typedef struct ipa_wdi3_conn_in_params  __qdf_ipa_wdi_conn_in_params_t;
815 
816 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in)	\
817 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->notify)
818 #define __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in)	\
819 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->priv)
820 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in)	\
821 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->tx)
822 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in)	\
823 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->rx)
824 
825 /**
826  * __qdf_ipa_wdi_conn_out_params_t - information provided
827  *				to WLAN druver
828  */
829 typedef struct ipa_wdi3_conn_out_params  __qdf_ipa_wdi_conn_out_params_t;
830 
831 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out)	\
832 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_pa)
833 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_VA(pipe_out)	\
834 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_va)
835 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out)	\
836 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->rx_uc_db_pa)
837 
838 /**
839  * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile
840  */
841 typedef struct ipa_wdi3_perf_profile  __qdf_ipa_wdi_perf_profile_t;
842 
843 #define __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile)	\
844 	(((struct ipa_wdi3_perf_profile *)(profile))->client)
845 #define __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile)	\
846 	(((struct ipa_wdi3_perf_profile *)(profile))->max_supported_bw_mbps)
847 
848 /**
849  * __qdf_ipa_wdi_reg_intf - Client should call this function to
850  * init WDI3 IPA offload data path
851  *
852  * Note: Should not be called from atomic context and only
853  * after checking IPA readiness using ipa_register_ipa_ready_cb()
854  *
855  * @Return 0 on success, negative on failure
856  */
857 static inline int __qdf_ipa_wdi_reg_intf(
858 	struct ipa_wdi3_reg_intf_in_params *in)
859 {
860 	return ipa_wdi3_reg_intf(in);
861 }
862 
863 /**
864  * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
865  * function to deregister before unload and after disconnect
866  *
867  * @Return 0 on success, negative on failure
868  */
869 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name)
870 {
871 	return ipa_wdi3_dereg_intf(netdev_name);
872 }
873 
874 /**
875  * __qdf_ipa_wdi_conn_pipes - Client should call this
876  * function to connect pipes
877  * @in:	[in] input parameters from client
878  * @out: [out] output params to client
879  *
880  * Note: Should not be called from atomic context and only
881  * after checking IPA readiness using ipa_register_ipa_ready_cb()
882  *
883  * @Return 0 on success, negative on failure
884  */
885 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi3_conn_in_params *in,
886 					   struct ipa_wdi3_conn_out_params *out)
887 {
888 	return ipa_wdi3_conn_pipes(in, out);
889 }
890 
891 /**
892  * __qdf_ipa_wdi_disconn_pipes() - Client should call this
893  *		function to disconnect pipes
894  *
895  * Note: Should not be called from atomic context
896  *
897  * Returns: 0 on success, negative on failure
898  */
899 static inline int __qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)
900 {
901 	return ipa_wdi3_disconn_pipes_per_inst(hdl);
902 }
903 
904 /**
905  * __qdf_ipa_wdi_enable_pipes() - Client should call this
906  *		function to enable IPA offload data path
907  * @hdl: IPA handle
908  *
909  * Note: Should not be called from atomic context
910  *
911  * Returns: 0 on success, negative on failure
912  */
913 static inline int __qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)
914 {
915 	return ipa_wdi3_enable_pipes_per_inst(hdl);
916 }
917 
918 /**
919  * __qdf_ipa_wdi_disable_pipes() - Client should call this
920  *		function to disable IPA offload data path
921  * @hdl: IPA handle
922  *
923  * Note: Should not be called from atomic context
924  *
925  * Returns: 0 on success, negative on failure
926  */
927 static inline int __qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)
928 {
929 	return ipa_wdi3_disable_pipes_per_inst(hdl);
930 }
931 
932 /**
933  * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to
934  *		set IPA clock bandwidth based on data rates
935  * @profile: [in] BandWidth profile to use
936  *
937  * Returns: 0 on success, negative on failure
938  */
939 static inline int __qdf_ipa_wdi_set_perf_profile(
940 			struct ipa_wdi3_perf_profile *profile)
941 {
942 	return ipa_wdi3_set_perf_profile(profile);
943 }
944 
945 #endif /* CONFIG_IPA_WDI_UNIFIED_API */
946 
947 #endif /* IPA_OFFLOAD */
948 #endif /* I_QDF_IPA_WDI_H */
949