xref: /wlan-dirver/qca-wifi-host-cmn/qdf/linux/src/i_qdf_ipa_wdi3.h (revision 3149adf58a329e17232a4c0e58d460d025edd55a)
1 /*
2  * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /**
18  * DOC: i_qdf_ipa_wdi3.h
19  * This file provides OS dependent IPA WDI APIs.
20  */
21 
22 #ifndef I_QDF_IPA_WDI_H
23 #define I_QDF_IPA_WDI_H
24 
25 #include <qdf_status.h>         /* QDF_STATUS */
26 #include <linux/ipa_wdi3.h>
27 
28 #ifdef CONFIG_IPA_WDI_UNIFIED_API
29 
30 /**
31  * __qdf_ipa_wdi_version_t - IPA WDI version
32  */
33 typedef enum ipa_wdi_version __qdf_ipa_wdi_version_t;
34 
35 /**
36  * __qdf_ipa_wdi_init_in_params_t - wdi init input parameters
37  */
38 typedef struct ipa_wdi_init_in_params __qdf_ipa_wdi_init_in_params_t;
39 
40 #define QDF_IPA_WDI_INIT_IN_PARAMS_WDI_VERSION(in_params)	\
41 	(((struct ipa_wdi_init_in_params *)(in_params))->wdi_version)
42 #define QDF_IPA_WDI_INIT_IN_PARAMS_NOTIFY(in_params)	\
43 	(((struct ipa_wdi_init_in_params *)(in_params))->notify)
44 #define QDF_IPA_WDI_INIT_IN_PARAMS_PRIV(in_params)	\
45 	(((struct ipa_wdi_init_in_params *)(in_params))->priv)
46 #define QDF_IPA_WDI_INIT_IN_PARAMS_WDI_NOTIFY(in_params)	\
47 	(((struct ipa_wdi_init_in_params *)(in_params))->wdi_notify)
48 
49 /**
50  * __qdf_ipa_wdi_init_out_params_t - wdi init output parameters
51  */
52 typedef struct ipa_wdi_init_out_params __qdf_ipa_wdi_init_out_params_t;
53 
54 #define QDF_IPA_WDI_INIT_OUT_PARAMS_IS_UC_READY(out_params)	\
55 	(((struct ipa_wdi_init_out_params *)(out_params))->is_uC_ready)
56 #define QDF_IPA_WDI_INIT_OUT_PARAMS_IS_SMMU_ENABLED(out_params)	\
57 	(((struct ipa_wdi_init_out_params *)(out_params))->is_smmu_enabled)
58 
59 /**
60  * __qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW
61  */
62 typedef struct ipa_wdi_hdr_info  __qdf_ipa_wdi_hdr_info_t;
63 
64 #define QDF_IPA_WDI_HDR_INFO_HDR(hdr_info)	\
65 	(((struct ipa_wdi_hdr_info *)(hdr_info))->hdr)
66 #define QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info)	\
67 	(((struct ipa_wdi_hdr_info *)(hdr_info))->hdr_len)
68 #define QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info)	\
69 	(((struct ipa_wdi_hdr_info *)(hdr_info))->dst_mac_addr_offset)
70 #define QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info)	\
71 	(((struct ipa_wdi_hdr_info *)(hdr_info))->hdr_type)
72 
73 /**
74  * __qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload
75  *	interface registration
76  */
77 typedef struct ipa_wdi_reg_intf_in_params  __qdf_ipa_wdi_reg_intf_in_params_t;
78 
79 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in)	\
80 	(((struct ipa_wdi_reg_intf_in_params *)(in))->netdev_name)
81 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in)	\
82 	(((struct ipa_wdi_reg_intf_in_params *)(in))->hdr_info)
83 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_ALT_DST_PIPE(in)	\
84 	(((struct ipa_wdi_reg_intf_in_params *)(in))->alt_dst_pipe)
85 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in)	\
86 	(((struct ipa_wdi_reg_intf_in_params *)(in))->is_meta_data_valid)
87 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in)	\
88 	(((struct ipa_wdi_reg_intf_in_params *)(in))->meta_data)
89 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in)	\
90 	(((struct ipa_wdi_reg_intf_in_params *)(in))->meta_data_mask)
91 
92 typedef struct ipa_ep_cfg __qdf_ipa_ep_cfg_t;
93 
94 #define QDF_IPA_EP_CFG_NAT_EN(cfg)	\
95 	(((struct ipa_ep_cfg *)(cfg))->nat.nat_en)
96 #define QDF_IPA_EP_CFG_HDR_LEN(cfg)	\
97 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_len)
98 #define QDF_IPA_EP_CFG_HDR_OFST_METADATA_VALID(cfg)	\
99 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_metadata_valid)
100 #define QDF_IPA_EP_CFG_HDR_METADATA_REG_VALID(cfg)	\
101 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_metadata_reg_valid)
102 #define QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE_VALID(cfg)	\
103 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_pkt_size_valid)
104 #define QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE(cfg)	\
105 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_pkt_size)
106 #define QDF_IPA_EP_CFG_HDR_ADDITIONAL_CONST_LEN(cfg)	\
107 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_additional_const_len)
108 #define QDF_IPA_EP_CFG_MODE(cfg)	\
109 	(((struct ipa_ep_cfg *)(cfg))->mode.mode)
110 #define QDF_IPA_EP_CFG_HDR_LITTLE_ENDIAN(cfg)	\
111 	(((struct ipa_ep_cfg *)(cfg))->hdr_ext.hdr_little_endian)
112 
113 /**
114  * __qdf_ipa_wdi_pipe_setup_info_t - WDI TX/Rx configuration
115  */
116 typedef struct ipa_wdi_pipe_setup_info  __qdf_ipa_wdi_pipe_setup_info_t;
117 
118 #define QDF_IPA_WDI_SETUP_INFO_EP_CFG(txrx)	\
119 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->ipa_ep_cfg)
120 
121 #define QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx)	\
122 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->client)
123 #define QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx)	\
124 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_base_pa)
125 #define QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx)	\
126 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_size)
127 #define QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx)	\
128 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_doorbell_pa)
129 #define QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx)	\
130 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_base_pa)
131 #define QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx)	\
132 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_size)
133 #define QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx)	\
134 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_doorbell_pa)
135 #define QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx)	\
136 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->num_pkt_buffers)
137 #define QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx)	\
138 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->pkt_offset)
139 #define QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx)	\
140 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->desc_format_template)
141 
142 /**
143  * __qdf_ipa_wdi_pipe_setup_info_smmu_t - WDI TX/Rx configuration
144  */
145 typedef struct ipa_wdi_pipe_setup_info_smmu __qdf_ipa_wdi_pipe_setup_info_smmu_t;
146 
147 #define QDF_IPA_WDI_SETUP_INFO_SMMU_EP_CFG(txrx)	\
148 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->ipa_ep_cfg)
149 
150 #define QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(txrx)	\
151 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->client)
152 #define QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_BASE(txrx)	\
153 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_base)
154 #define QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_SIZE(txrx)	\
155 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_size)
156 #define QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_DOORBELL_PA(txrx)	\
157 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_doorbell_pa)
158 #define QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_BASE(txrx)	\
159 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_base)
160 #define QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_SIZE(txrx)	\
161 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_size)
162 #define QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_DOORBELL_PA(txrx)	\
163 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_doorbell_pa)
164 #define QDF_IPA_WDI_SETUP_INFO_SMMU_NUM_PKT_BUFFERS(txrx)	\
165 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->num_pkt_buffers)
166 #define QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(txrx)	\
167 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->pkt_offset)
168 #define QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(txrx)	\
169 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->desc_format_template)
170 
171 /**
172  * __qdf_ipa_wdi_conn_in_params_t - information provided by
173  *		uC offload client
174  */
175 typedef struct ipa_wdi_conn_in_params  __qdf_ipa_wdi_conn_in_params_t;
176 
177 #define QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in)	\
178 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->notify)
179 #define QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in)	\
180 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->priv)
181 #define QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(pipe_in)	\
182 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->is_smmu_enabled)
183 #define QDF_IPA_WDI_CONN_IN_PARAMS_NUM_SYS_PIPE_NEEDED(pipe_in)	\
184 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->num_sys_pipe_needed)
185 #define QDF_IPA_WDI_CONN_IN_PARAMS_SYS_IN(in)	\
186 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->sys_in)
187 #define QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in)	\
188 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx)
189 #define QDF_IPA_WDI_CONN_IN_PARAMS_TX_SMMU(pipe_in)	\
190 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx_smmu)
191 #define QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in)	\
192 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx)
193 #define QDF_IPA_WDI_CONN_IN_PARAMS_RX_SMMU(pipe_in)	\
194 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx_smmu)
195 
196 /**
197  * __qdf_ipa_wdi_conn_out_params_t - information provided
198  *				to WLAN druver
199  */
200 typedef struct ipa_wdi_conn_out_params  __qdf_ipa_wdi_conn_out_params_t;
201 
202 #define QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out)	\
203 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->tx_uc_db_pa)
204 #define QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out)	\
205 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->rx_uc_db_pa)
206 
207 /**
208  * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile
209  */
210 typedef struct ipa_wdi_perf_profile  __qdf_ipa_wdi_perf_profile_t;
211 
212 #define QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile)	\
213 	(((struct ipa_wdi_perf_profile *)(profile))->client)
214 #define QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile)	\
215 	(((struct ipa_wdi_perf_profile *)(profile))->max_supported_bw_mbps)
216 
217 /**
218  * __qdf_ipa_wdi_init - Client should call this function to
219  * init WDI IPA offload data path
220  *
221  * Note: Should not be called from atomic context and only
222  * after checking IPA readiness using ipa_register_ipa_ready_cb()
223  *
224  * @Return 0 on success, negative on failure
225  */
226 static inline int __qdf_ipa_wdi_init(struct ipa_wdi_init_in_params *in,
227 		 struct ipa_wdi_init_out_params *out)
228 {
229 	return ipa_wdi_init(in, out);
230 }
231 
232 /**
233  * __qdf_ipa_wdi_cleanup - Client should call this function to
234  * clean up WDI IPA offload data path
235  *
236  * @Return 0 on success, negative on failure
237  */
238 static inline int __qdf_ipa_wdi_cleanup(void)
239 {
240 	return ipa_wdi_cleanup();
241 }
242 
243 /**
244  * __qdf_ipa_wdi_reg_intf - Client should call this function to
245  * init WDI IPA offload data path
246  *
247  * Note: Should not be called from atomic context and only
248  * after checking IPA readiness using ipa_register_ipa_ready_cb()
249  *
250  * @Return 0 on success, negative on failure
251  */
252 static inline int __qdf_ipa_wdi_reg_intf(
253 	struct ipa_wdi_reg_intf_in_params *in)
254 {
255 	return ipa_wdi_reg_intf(in);
256 }
257 
258 /**
259  * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
260  * function to deregister before unload and after disconnect
261  *
262  * @Return 0 on success, negative on failure
263  */
264 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name)
265 {
266 	return ipa_wdi_dereg_intf(netdev_name);
267 }
268 
269 /**
270  * __qdf_ipa_wdi_conn_pipes - Client should call this
271  * function to connect pipes
272  *
273  * @in:	[in] input parameters from client
274  * @out: [out] output params to client
275  *
276  * Note: Should not be called from atomic context and only
277  * after checking IPA readiness using ipa_register_ipa_ready_cb()
278  *
279  * @Return 0 on success, negative on failure
280  */
281 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in,
282 			struct ipa_wdi_conn_out_params *out)
283 {
284 	return ipa_wdi_conn_pipes(in, out);
285 }
286 
287 /**
288  * __qdf_ipa_wdi_disconn_pipes() - Client should call this
289  *		function to disconnect pipes
290  *
291  * Note: Should not be called from atomic context
292  *
293  * Returns: 0 on success, negative on failure
294  */
295 static inline int __qdf_ipa_wdi_disconn_pipes(void)
296 {
297 	return ipa_wdi_disconn_pipes();
298 }
299 
300 /**
301  * __qdf_ipa_wdi_enable_pipes() - Client should call this
302  *		function to enable IPA offload data path
303  *
304  * Note: Should not be called from atomic context
305  *
306  * Returns: 0 on success, negative on failure
307  */
308 static inline int __qdf_ipa_wdi_enable_pipes(void)
309 {
310 	return ipa_wdi_enable_pipes();
311 }
312 
313 /**
314  * __qdf_ipa_wdi_disable_pipes() - Client should call this
315  *		function to disable IPA offload data path
316  *
317  * Note: Should not be called from atomic context
318  *
319  * Returns: 0 on success, negative on failure
320  */
321 static inline int __qdf_ipa_wdi_disable_pipes(void)
322 {
323 	return ipa_wdi_disable_pipes();
324 }
325 
326 /**
327  * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to
328  *		set IPA clock bandwidth based on data rates
329  *
330  * @profile: [in] BandWidth profile to use
331  *
332  * Returns: 0 on success, negative on failure
333  */
334 static inline int __qdf_ipa_wdi_set_perf_profile(
335 			struct ipa_wdi_perf_profile *profile)
336 {
337 	return ipa_wdi_set_perf_profile(profile);
338 }
339 
340 #else /* CONFIG_IPA_WDI_UNIFIED_API */
341 
342 /**
343  * __qdf_ipa_wdi3_hdr_info_t - Header to install on IPA HW
344  */
345 typedef struct ipa_wdi3_hdr_info  __qdf_ipa_wdi3_hdr_info_t;
346 
347 #define QDF_IPA_WDI3_HDR_INFO_HDR(hdr_info)	\
348 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr)
349 #define QDF_IPA_WDI3_HDR_INFO_HDR_LEN(hdr_info)	\
350 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_len)
351 #define QDF_IPA_WDI3_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info)	\
352 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->dst_mac_addr_offset)
353 #define QDF_IPA_WDI3_HDR_INFO_HDR_TYPE(hdr_info)	\
354 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_type)
355 
356 /**
357  * __qdf_ipa_wdi3_reg_intf_in_params_t - parameters for uC offload
358  *	interface registration
359  */
360 typedef struct ipa_wdi3_reg_intf_in_params  __qdf_ipa_wdi3_reg_intf_in_params_t;
361 
362 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_NETDEV_NAME(in)	\
363 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->netdev_name)
364 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_HDR_INFO(in)	\
365 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->hdr_info)
366 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in)	\
367 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->is_meta_data_valid)
368 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_META_DATA(in)	\
369 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data)
370 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_META_DATA_MASK(in)	\
371 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data_mask)
372 
373 /**
374  * __qdf_ipa_wdi3_setup_info_t - WDI3 TX/Rx configuration
375  */
376 typedef struct ipa_wdi3_setup_info  __qdf_ipa_wdi3_setup_info_t;
377 
378 #define QDF_IPA_WDI3_SETUP_INFO_NAT_EN(txrx)	\
379 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.nat.nat_en)
380 #define QDF_IPA_WDI3_SETUP_INFO_HDR_LEN(txrx)	\
381 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_len)
382 #define QDF_IPA_WDI3_SETUP_INFO_HDR_OFST_METADATA_VALID(txrx)	\
383 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid)
384 #define QDF_IPA_WDI3_SETUP_INFO_HDR_METADATA_REG_VALID(txrx)	\
385 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_metadata_reg_valid)
386 #define QDF_IPA_WDI3_SETUP_INFO_HDR_OFST_PKT_SIZE_VALID(txrx)	\
387 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid)
388 #define QDF_IPA_WDI3_SETUP_INFO_HDR_OFST_PKT_SIZE(txrx)	\
389 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size)
390 #define QDF_IPA_WDI3_SETUP_INFO_HDR_ADDITIONAL_CONST_LEN(txrx)	\
391 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_additional_const_len)
392 #define QDF_IPA_WDI3_SETUP_INFO_MODE(txrx)	\
393 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.mode.mode)
394 #define QDF_IPA_WDI3_SETUP_INFO_HDR_LITTLE_ENDIAN(txrx)	\
395 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr_ext.hdr_little_endian)
396 
397 #define QDF_IPA_WDI3_SETUP_INFO_CLIENT(txrx)	\
398 	(((struct ipa_wdi3_setup_info *)(txrx))->client)
399 #define QDF_IPA_WDI3_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx)	\
400 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_base_pa)
401 #define QDF_IPA_WDI3_SETUP_INFO_TRANSFER_RING_SIZE(txrx)	\
402 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_size)
403 #define QDF_IPA_WDI3_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx)	\
404 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_doorbell_pa)
405 #define QDF_IPA_WDI3_SETUP_INFO_EVENT_RING_BASE_PA(txrx)	\
406 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_base_pa)
407 #define QDF_IPA_WDI3_SETUP_INFO_EVENT_RING_SIZE(txrx)	\
408 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_size)
409 #define QDF_IPA_WDI3_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx)	\
410 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_doorbell_pa)
411 #define QDF_IPA_WDI3_SETUP_INFO_NUM_PKT_BUFFERS(txrx)	\
412 	(((struct ipa_wdi3_setup_info *)(txrx))->num_pkt_buffers)
413 #define QDF_IPA_WDI3_SETUP_INFO_PKT_OFFSET(txrx)	\
414 	(((struct ipa_wdi3_setup_info *)(txrx))->pkt_offset)
415 #define QDF_IPA_WDI3_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx)	\
416 	(((struct ipa_wdi3_setup_info *)(txrx))->desc_format_template)
417 
418 /**
419  * __qdf_ipa_wdi3_conn_in_params_t - information provided by
420  *		uC offload client
421  */
422 typedef struct ipa_wdi3_conn_in_params  __qdf_ipa_wdi3_conn_in_params_t;
423 
424 #define QDF_IPA_WDI3_CONN_IN_PARAMS_NOTIFY(pipe_in)	\
425 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->notify)
426 #define QDF_IPA_WDI3_CONN_IN_PARAMS_PRIV(pipe_in)	\
427 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->priv)
428 #define QDF_IPA_WDI3_CONN_IN_PARAMS_TX(pipe_in)	\
429 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->tx)
430 #define QDF_IPA_WDI3_CONN_IN_PARAMS_RX(pipe_in)	\
431 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->rx)
432 
433 /**
434  * __qdf_ipa_wdi3_conn_out_params_t - information provided
435  *				to WLAN druver
436  */
437 typedef struct ipa_wdi3_conn_out_params  __qdf_ipa_wdi3_conn_out_params_t;
438 
439 #define QDF_IPA_WDI3_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out)	\
440 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_pa)
441 #define QDF_IPA_WDI3_CONN_OUT_PARAMS_TX_UC_DB_VA(pipe_out)	\
442 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_va)
443 #define QDF_IPA_WDI3_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out)	\
444 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->rx_uc_db_pa)
445 
446 /**
447  * __qdf_ipa_wdi3_perf_profile_t - To set BandWidth profile
448  */
449 typedef struct ipa_wdi3_perf_profile  __qdf_ipa_wdi3_perf_profile_t;
450 
451 #define QDF_IPA_WDI3_PERF_PROFILE_CLIENT(profile)	\
452 	(((struct ipa_wdi3_perf_profile *)(profile))->client)
453 #define QDF_IPA_WDI3_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile)	\
454 	(((struct ipa_wdi3_perf_profile *)(profile))->max_supported_bw_mbps)
455 
456 /**
457  * __qdf_ipa_wdi3_reg_intf - Client should call this function to
458  * init WDI3 IPA offload data path
459  *
460  * Note: Should not be called from atomic context and only
461  * after checking IPA readiness using ipa_register_ipa_ready_cb()
462  *
463  * @Return 0 on success, negative on failure
464  */
465 static inline int __qdf_ipa_wdi3_reg_intf(
466 	struct ipa_wdi3_reg_intf_in_params *in)
467 {
468 	return ipa_wdi3_reg_intf(in);
469 }
470 
471 /**
472  * __qdf_ipa_wdi3_dereg_intf - Client Driver should call this
473  * function to deregister before unload and after disconnect
474  *
475  * @Return 0 on success, negative on failure
476  */
477 static inline int __qdf_ipa_wdi3_dereg_intf(const char *netdev_name)
478 {
479 	return ipa_wdi3_dereg_intf(netdev_name);
480 }
481 
482 /**
483  * __qdf_ipa_wdi3_conn_pipes - Client should call this
484  * function to connect pipes
485  *
486  * @in:	[in] input parameters from client
487  * @out: [out] output params to client
488  *
489  * Note: Should not be called from atomic context and only
490  * after checking IPA readiness using ipa_register_ipa_ready_cb()
491  *
492  * @Return 0 on success, negative on failure
493  */
494 static inline int __qdf_ipa_wdi3_conn_pipes(struct ipa_wdi3_conn_in_params *in,
495 			struct ipa_wdi3_conn_out_params *out)
496 {
497 	return ipa_wdi3_conn_pipes(in, out);
498 }
499 
500 /**
501  * __qdf_ipa_wdi3_disconn_pipes() - Client should call this
502  *		function to disconnect pipes
503  *
504  * Note: Should not be called from atomic context
505  *
506  * Returns: 0 on success, negative on failure
507  */
508 static inline int __qdf_ipa_wdi3_disconn_pipes(void)
509 {
510 	return ipa_wdi3_disconn_pipes();
511 }
512 
513 /**
514  * __qdf_ipa_wdi3_enable_pipes() - Client should call this
515  *		function to enable IPA offload data path
516  *
517  * Note: Should not be called from atomic context
518  *
519  * Returns: 0 on success, negative on failure
520  */
521 static inline int __qdf_ipa_wdi3_enable_pipes(void)
522 {
523 	return ipa_wdi3_enable_pipes();
524 }
525 
526 /**
527  * __qdf_ipa_wdi3_disable_pipes() - Client should call this
528  *		function to disable IPA offload data path
529  *
530  * Note: Should not be called from atomic context
531  *
532  * Returns: 0 on success, negative on failure
533  */
534 static inline int __qdf_ipa_wdi3_disable_pipes(void)
535 {
536 	return ipa_wdi3_disable_pipes();
537 }
538 
539 /**
540  * __qdf_ipa_wdi3_set_perf_profile() - Client should call this function to
541  *		set IPA clock bandwidth based on data rates
542  *
543  * @profile: [in] BandWidth profile to use
544  *
545  * Returns: 0 on success, negative on failure
546  */
547 static inline int __qdf_ipa_wdi3_set_perf_profile(
548 			struct ipa_wdi3_perf_profile *profile)
549 {
550 	return ipa_wdi3_set_perf_profile(profile);
551 }
552 
553 #endif /* CONFIG_IPA_WDI_UNIFIED_API */
554 
555 #endif
556