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