xref: /wlan-dirver/qca-wifi-host-cmn/qdf/linux/src/i_qdf_ipa_wdi3.h (revision 92d87f51612f6c3b2285266215edee8911647c2f)
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 /**
343  * __qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to
344  *		create smmu mapping
345  *
346  * @num_buffers: [in] number of buffers
347  * @info: [in] wdi buffer info
348  *
349  * Returns: 0 on success, negative on failure
350  */
351 static inline int __qdf_ipa_wdi_create_smmu_mapping(u32 num_buffers,
352 		struct ipa_wdi_buffer_info *info)
353 {
354 	return ipa_wdi_create_smmu_mapping(num_buffers, info);
355 }
356 
357 /**
358  * __qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to
359  *		release smmu mapping
360  *
361  * @num_buffers: [in] number of buffers
362  * @info: [in] wdi buffer info
363  *
364  * Returns: 0 on success, negative on failure
365  */
366 static inline int __qdf_ipa_wdi_release_smmu_mapping(u32 num_buffers,
367 		struct ipa_wdi_buffer_info *info)
368 {
369 	return ipa_wdi_release_smmu_mapping(num_buffers, info);
370 }
371 
372 #else /* CONFIG_IPA_WDI_UNIFIED_API */
373 
374 /**
375  * __qdf_ipa_wdi3_hdr_info_t - Header to install on IPA HW
376  */
377 typedef struct ipa_wdi3_hdr_info  __qdf_ipa_wdi3_hdr_info_t;
378 
379 #define QDF_IPA_WDI3_HDR_INFO_HDR(hdr_info)	\
380 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr)
381 #define QDF_IPA_WDI3_HDR_INFO_HDR_LEN(hdr_info)	\
382 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_len)
383 #define QDF_IPA_WDI3_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info)	\
384 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->dst_mac_addr_offset)
385 #define QDF_IPA_WDI3_HDR_INFO_HDR_TYPE(hdr_info)	\
386 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_type)
387 
388 /**
389  * __qdf_ipa_wdi3_reg_intf_in_params_t - parameters for uC offload
390  *	interface registration
391  */
392 typedef struct ipa_wdi3_reg_intf_in_params  __qdf_ipa_wdi3_reg_intf_in_params_t;
393 
394 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_NETDEV_NAME(in)	\
395 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->netdev_name)
396 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_HDR_INFO(in)	\
397 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->hdr_info)
398 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in)	\
399 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->is_meta_data_valid)
400 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_META_DATA(in)	\
401 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data)
402 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_META_DATA_MASK(in)	\
403 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data_mask)
404 
405 /**
406  * __qdf_ipa_wdi3_setup_info_t - WDI3 TX/Rx configuration
407  */
408 typedef struct ipa_wdi3_setup_info  __qdf_ipa_wdi3_setup_info_t;
409 
410 #define QDF_IPA_WDI3_SETUP_INFO_NAT_EN(txrx)	\
411 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.nat.nat_en)
412 #define QDF_IPA_WDI3_SETUP_INFO_HDR_LEN(txrx)	\
413 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_len)
414 #define QDF_IPA_WDI3_SETUP_INFO_HDR_OFST_METADATA_VALID(txrx)	\
415 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid)
416 #define QDF_IPA_WDI3_SETUP_INFO_HDR_METADATA_REG_VALID(txrx)	\
417 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_metadata_reg_valid)
418 #define QDF_IPA_WDI3_SETUP_INFO_HDR_OFST_PKT_SIZE_VALID(txrx)	\
419 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid)
420 #define QDF_IPA_WDI3_SETUP_INFO_HDR_OFST_PKT_SIZE(txrx)	\
421 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size)
422 #define QDF_IPA_WDI3_SETUP_INFO_HDR_ADDITIONAL_CONST_LEN(txrx)	\
423 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_additional_const_len)
424 #define QDF_IPA_WDI3_SETUP_INFO_MODE(txrx)	\
425 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.mode.mode)
426 #define QDF_IPA_WDI3_SETUP_INFO_HDR_LITTLE_ENDIAN(txrx)	\
427 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr_ext.hdr_little_endian)
428 
429 #define QDF_IPA_WDI3_SETUP_INFO_CLIENT(txrx)	\
430 	(((struct ipa_wdi3_setup_info *)(txrx))->client)
431 #define QDF_IPA_WDI3_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx)	\
432 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_base_pa)
433 #define QDF_IPA_WDI3_SETUP_INFO_TRANSFER_RING_SIZE(txrx)	\
434 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_size)
435 #define QDF_IPA_WDI3_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx)	\
436 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_doorbell_pa)
437 #define QDF_IPA_WDI3_SETUP_INFO_EVENT_RING_BASE_PA(txrx)	\
438 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_base_pa)
439 #define QDF_IPA_WDI3_SETUP_INFO_EVENT_RING_SIZE(txrx)	\
440 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_size)
441 #define QDF_IPA_WDI3_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx)	\
442 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_doorbell_pa)
443 #define QDF_IPA_WDI3_SETUP_INFO_NUM_PKT_BUFFERS(txrx)	\
444 	(((struct ipa_wdi3_setup_info *)(txrx))->num_pkt_buffers)
445 #define QDF_IPA_WDI3_SETUP_INFO_PKT_OFFSET(txrx)	\
446 	(((struct ipa_wdi3_setup_info *)(txrx))->pkt_offset)
447 #define QDF_IPA_WDI3_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx)	\
448 	(((struct ipa_wdi3_setup_info *)(txrx))->desc_format_template)
449 
450 /**
451  * __qdf_ipa_wdi3_conn_in_params_t - information provided by
452  *		uC offload client
453  */
454 typedef struct ipa_wdi3_conn_in_params  __qdf_ipa_wdi3_conn_in_params_t;
455 
456 #define QDF_IPA_WDI3_CONN_IN_PARAMS_NOTIFY(pipe_in)	\
457 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->notify)
458 #define QDF_IPA_WDI3_CONN_IN_PARAMS_PRIV(pipe_in)	\
459 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->priv)
460 #define QDF_IPA_WDI3_CONN_IN_PARAMS_TX(pipe_in)	\
461 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->tx)
462 #define QDF_IPA_WDI3_CONN_IN_PARAMS_RX(pipe_in)	\
463 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->rx)
464 
465 /**
466  * __qdf_ipa_wdi3_conn_out_params_t - information provided
467  *				to WLAN druver
468  */
469 typedef struct ipa_wdi3_conn_out_params  __qdf_ipa_wdi3_conn_out_params_t;
470 
471 #define QDF_IPA_WDI3_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out)	\
472 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_pa)
473 #define QDF_IPA_WDI3_CONN_OUT_PARAMS_TX_UC_DB_VA(pipe_out)	\
474 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_va)
475 #define QDF_IPA_WDI3_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out)	\
476 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->rx_uc_db_pa)
477 
478 /**
479  * __qdf_ipa_wdi3_perf_profile_t - To set BandWidth profile
480  */
481 typedef struct ipa_wdi3_perf_profile  __qdf_ipa_wdi3_perf_profile_t;
482 
483 #define QDF_IPA_WDI3_PERF_PROFILE_CLIENT(profile)	\
484 	(((struct ipa_wdi3_perf_profile *)(profile))->client)
485 #define QDF_IPA_WDI3_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile)	\
486 	(((struct ipa_wdi3_perf_profile *)(profile))->max_supported_bw_mbps)
487 
488 /**
489  * __qdf_ipa_wdi3_reg_intf - Client should call this function to
490  * init WDI3 IPA offload data path
491  *
492  * Note: Should not be called from atomic context and only
493  * after checking IPA readiness using ipa_register_ipa_ready_cb()
494  *
495  * @Return 0 on success, negative on failure
496  */
497 static inline int __qdf_ipa_wdi3_reg_intf(
498 	struct ipa_wdi3_reg_intf_in_params *in)
499 {
500 	return ipa_wdi3_reg_intf(in);
501 }
502 
503 /**
504  * __qdf_ipa_wdi3_dereg_intf - Client Driver should call this
505  * function to deregister before unload and after disconnect
506  *
507  * @Return 0 on success, negative on failure
508  */
509 static inline int __qdf_ipa_wdi3_dereg_intf(const char *netdev_name)
510 {
511 	return ipa_wdi3_dereg_intf(netdev_name);
512 }
513 
514 /**
515  * __qdf_ipa_wdi3_conn_pipes - Client should call this
516  * function to connect pipes
517  *
518  * @in:	[in] input parameters from client
519  * @out: [out] output params to client
520  *
521  * Note: Should not be called from atomic context and only
522  * after checking IPA readiness using ipa_register_ipa_ready_cb()
523  *
524  * @Return 0 on success, negative on failure
525  */
526 static inline int __qdf_ipa_wdi3_conn_pipes(struct ipa_wdi3_conn_in_params *in,
527 			struct ipa_wdi3_conn_out_params *out)
528 {
529 	return ipa_wdi3_conn_pipes(in, out);
530 }
531 
532 /**
533  * __qdf_ipa_wdi3_disconn_pipes() - Client should call this
534  *		function to disconnect pipes
535  *
536  * Note: Should not be called from atomic context
537  *
538  * Returns: 0 on success, negative on failure
539  */
540 static inline int __qdf_ipa_wdi3_disconn_pipes(void)
541 {
542 	return ipa_wdi3_disconn_pipes();
543 }
544 
545 /**
546  * __qdf_ipa_wdi3_enable_pipes() - Client should call this
547  *		function to enable IPA offload data path
548  *
549  * Note: Should not be called from atomic context
550  *
551  * Returns: 0 on success, negative on failure
552  */
553 static inline int __qdf_ipa_wdi3_enable_pipes(void)
554 {
555 	return ipa_wdi3_enable_pipes();
556 }
557 
558 /**
559  * __qdf_ipa_wdi3_disable_pipes() - Client should call this
560  *		function to disable IPA offload data path
561  *
562  * Note: Should not be called from atomic context
563  *
564  * Returns: 0 on success, negative on failure
565  */
566 static inline int __qdf_ipa_wdi3_disable_pipes(void)
567 {
568 	return ipa_wdi3_disable_pipes();
569 }
570 
571 /**
572  * __qdf_ipa_wdi3_set_perf_profile() - Client should call this function to
573  *		set IPA clock bandwidth based on data rates
574  *
575  * @profile: [in] BandWidth profile to use
576  *
577  * Returns: 0 on success, negative on failure
578  */
579 static inline int __qdf_ipa_wdi3_set_perf_profile(
580 			struct ipa_wdi3_perf_profile *profile)
581 {
582 	return ipa_wdi3_set_perf_profile(profile);
583 }
584 
585 #endif /* CONFIG_IPA_WDI_UNIFIED_API */
586 
587 #endif /* IPA_OFFLOAD */
588 #endif /* I_QDF_IPA_WDI_H */
589