xref: /wlan-dirver/qca-wifi-host-cmn/qdf/linux/src/i_qdf_ipa_wdi3.h (revision dd4dc88b837a295134aa9869114a2efee0f4894b)
1 /*
2  * Copyright (c) 2017-2019, 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 #ifdef IPA_WDI3_GSI
61 #define QDF_IPA_WDI_INIT_OUT_PARAMS_IS_OVER_GSI(out_params)	\
62 	(((struct ipa_wdi_init_out_params *)(out_params))->is_over_gsi)
63 #else
64 #define QDF_IPA_WDI_INIT_OUT_PARAMS_IS_OVER_GSI(out_params)	\
65 	false
66 #endif
67 
68 /**
69  * __qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW
70  */
71 typedef struct ipa_wdi_hdr_info  __qdf_ipa_wdi_hdr_info_t;
72 
73 #define __QDF_IPA_WDI_HDR_INFO_HDR(hdr_info)	\
74 	(((struct ipa_wdi_hdr_info *)(hdr_info))->hdr)
75 #define __QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info)	\
76 	(((struct ipa_wdi_hdr_info *)(hdr_info))->hdr_len)
77 #define __QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info)	\
78 	(((struct ipa_wdi_hdr_info *)(hdr_info))->dst_mac_addr_offset)
79 #define __QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info)	\
80 	(((struct ipa_wdi_hdr_info *)(hdr_info))->hdr_type)
81 
82 /**
83  * __qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload
84  *	interface registration
85  */
86 typedef struct ipa_wdi_reg_intf_in_params  __qdf_ipa_wdi_reg_intf_in_params_t;
87 
88 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in)	\
89 	(((struct ipa_wdi_reg_intf_in_params *)(in))->netdev_name)
90 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in)	\
91 	(((struct ipa_wdi_reg_intf_in_params *)(in))->hdr_info)
92 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_ALT_DST_PIPE(in)	\
93 	(((struct ipa_wdi_reg_intf_in_params *)(in))->alt_dst_pipe)
94 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in)	\
95 	(((struct ipa_wdi_reg_intf_in_params *)(in))->is_meta_data_valid)
96 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in)	\
97 	(((struct ipa_wdi_reg_intf_in_params *)(in))->meta_data)
98 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in)	\
99 	(((struct ipa_wdi_reg_intf_in_params *)(in))->meta_data_mask)
100 
101 typedef struct ipa_ep_cfg __qdf_ipa_ep_cfg_t;
102 
103 #define __QDF_IPA_EP_CFG_NAT_EN(cfg)	\
104 	(((struct ipa_ep_cfg *)(cfg))->nat.nat_en)
105 #define __QDF_IPA_EP_CFG_HDR_LEN(cfg)	\
106 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_len)
107 #define __QDF_IPA_EP_CFG_HDR_OFST_METADATA_VALID(cfg)	\
108 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_metadata_valid)
109 #define __QDF_IPA_EP_CFG_HDR_METADATA_REG_VALID(cfg)	\
110 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_metadata_reg_valid)
111 #define __QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE_VALID(cfg)	\
112 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_pkt_size_valid)
113 #define __QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE(cfg)	\
114 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_pkt_size)
115 #define __QDF_IPA_EP_CFG_HDR_ADDITIONAL_CONST_LEN(cfg)	\
116 	(((struct ipa_ep_cfg *)(cfg))->hdr.hdr_additional_const_len)
117 #define __QDF_IPA_EP_CFG_MODE(cfg)	\
118 	(((struct ipa_ep_cfg *)(cfg))->mode.mode)
119 #define __QDF_IPA_EP_CFG_HDR_LITTLE_ENDIAN(cfg)	\
120 	(((struct ipa_ep_cfg *)(cfg))->hdr_ext.hdr_little_endian)
121 
122 /**
123  * __qdf_ipa_wdi_pipe_setup_info_t - WDI TX/Rx configuration
124  */
125 typedef struct ipa_wdi_pipe_setup_info  __qdf_ipa_wdi_pipe_setup_info_t;
126 
127 #define __QDF_IPA_WDI_SETUP_INFO_EP_CFG(txrx)	\
128 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->ipa_ep_cfg)
129 
130 #define __QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx)	\
131 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->client)
132 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx)	\
133 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_base_pa)
134 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx)	\
135 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_size)
136 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx)	\
137 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_doorbell_pa)
138 #define __QDF_IPA_WDI_SETUP_INFO_IS_TXR_RN_DB_PCIE_ADDR(txrx)  \
139 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->is_txr_rn_db_pcie_addr)
140 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx)	\
141 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_base_pa)
142 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx)	\
143 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_size)
144 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx)	\
145 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_doorbell_pa)
146 #define __QDF_IPA_WDI_SETUP_INFO_IS_EVT_RN_DB_PCIE_ADDR(txrx) \
147 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->is_evt_rn_db_pcie_addr)
148 #define __QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx)	\
149 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->num_pkt_buffers)
150 #define __QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx)	\
151 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->pkt_offset)
152 #define __QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx)	\
153 	(((struct ipa_wdi_pipe_setup_info *)(txrx))->desc_format_template)
154 
155 /**
156  * __qdf_ipa_wdi_pipe_setup_info_smmu_t - WDI TX/Rx configuration
157  */
158 typedef struct ipa_wdi_pipe_setup_info_smmu __qdf_ipa_wdi_pipe_setup_info_smmu_t;
159 
160 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EP_CFG(txrx)	\
161 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->ipa_ep_cfg)
162 
163 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(txrx)	\
164 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->client)
165 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_BASE(txrx)	\
166 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_base)
167 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_SIZE(txrx)	\
168 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_size)
169 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_DOORBELL_PA(txrx)	\
170 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_doorbell_pa)
171 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_IS_TXR_RN_DB_PCIE_ADDR(txrx)  \
172 	(((struct ipa_wdi_pipe_setup_info_smmu *) \
173 	  (txrx))->is_txr_rn_db_pcie_addr)
174 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_BASE(txrx)	\
175 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_base)
176 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_SIZE(txrx)	\
177 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_size)
178 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_DOORBELL_PA(txrx)	\
179 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_doorbell_pa)
180 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_IS_EVT_RN_DB_PCIE_ADDR(txrx) \
181 	(((struct ipa_wdi_pipe_setup_info_smmu *) \
182 	  (txrx))->is_evt_rn_db_pcie_addr)
183 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_NUM_PKT_BUFFERS(txrx)	\
184 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->num_pkt_buffers)
185 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(txrx)	\
186 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->pkt_offset)
187 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(txrx)	\
188 	(((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->desc_format_template)
189 
190 /**
191  * __qdf_ipa_wdi_conn_in_params_t - information provided by
192  *		uC offload client
193  */
194 typedef struct ipa_wdi_conn_in_params  __qdf_ipa_wdi_conn_in_params_t;
195 
196 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in)	\
197 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->notify)
198 #define __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in)	\
199 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->priv)
200 #define __QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(pipe_in)	\
201 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->is_smmu_enabled)
202 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NUM_SYS_PIPE_NEEDED(pipe_in)	\
203 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->num_sys_pipe_needed)
204 #define __QDF_IPA_WDI_CONN_IN_PARAMS_SYS_IN(in)	\
205 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->sys_in)
206 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in)	\
207 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx)
208 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_SMMU(pipe_in)	\
209 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx_smmu)
210 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in)	\
211 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx)
212 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_SMMU(pipe_in)	\
213 	(((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx_smmu)
214 
215 /**
216  * __qdf_ipa_wdi_conn_out_params_t - information provided
217  *				to WLAN druver
218  */
219 typedef struct ipa_wdi_conn_out_params  __qdf_ipa_wdi_conn_out_params_t;
220 
221 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out)	\
222 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->tx_uc_db_pa)
223 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out)	\
224 	(((struct ipa_wdi_conn_out_params *)(pipe_out))->rx_uc_db_pa)
225 
226 /**
227  * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile
228  */
229 typedef struct ipa_wdi_perf_profile  __qdf_ipa_wdi_perf_profile_t;
230 
231 #define __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile)	\
232 	(((struct ipa_wdi_perf_profile *)(profile))->client)
233 #define __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile)	\
234 	(((struct ipa_wdi_perf_profile *)(profile))->max_supported_bw_mbps)
235 
236 /**
237  * __qdf_ipa_wdi_init - Client should call this function to
238  * init WDI IPA offload data path
239  *
240  * Note: Should not be called from atomic context and only
241  * after checking IPA readiness using ipa_register_ipa_ready_cb()
242  *
243  * @Return 0 on success, negative on failure
244  */
245 static inline int __qdf_ipa_wdi_init(struct ipa_wdi_init_in_params *in,
246 		 struct ipa_wdi_init_out_params *out)
247 {
248 	return ipa_wdi_init(in, out);
249 }
250 
251 /**
252  * __qdf_ipa_wdi_cleanup - Client should call this function to
253  * clean up WDI IPA offload data path
254  *
255  * @Return 0 on success, negative on failure
256  */
257 static inline int __qdf_ipa_wdi_cleanup(void)
258 {
259 	return ipa_wdi_cleanup();
260 }
261 
262 /**
263  * __qdf_ipa_wdi_reg_intf - Client should call this function to
264  * init WDI IPA offload data path
265  *
266  * Note: Should not be called from atomic context and only
267  * after checking IPA readiness using ipa_register_ipa_ready_cb()
268  *
269  * @Return 0 on success, negative on failure
270  */
271 static inline int __qdf_ipa_wdi_reg_intf(
272 	struct ipa_wdi_reg_intf_in_params *in)
273 {
274 	return ipa_wdi_reg_intf(in);
275 }
276 
277 /**
278  * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
279  * function to deregister before unload and after disconnect
280  *
281  * @Return 0 on success, negative on failure
282  */
283 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name)
284 {
285 	return ipa_wdi_dereg_intf(netdev_name);
286 }
287 
288 /**
289  * __qdf_ipa_wdi_conn_pipes - Client should call this
290  * function to connect pipes
291  *
292  * @in:	[in] input parameters from client
293  * @out: [out] output params to client
294  *
295  * Note: Should not be called from atomic context and only
296  * after checking IPA readiness using ipa_register_ipa_ready_cb()
297  *
298  * @Return 0 on success, negative on failure
299  */
300 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in,
301 			struct ipa_wdi_conn_out_params *out)
302 {
303 	return ipa_wdi_conn_pipes(in, out);
304 }
305 
306 /**
307  * __qdf_ipa_wdi_disconn_pipes() - Client should call this
308  *		function to disconnect pipes
309  *
310  * Note: Should not be called from atomic context
311  *
312  * Returns: 0 on success, negative on failure
313  */
314 static inline int __qdf_ipa_wdi_disconn_pipes(void)
315 {
316 	return ipa_wdi_disconn_pipes();
317 }
318 
319 /**
320  * __qdf_ipa_wdi_enable_pipes() - Client should call this
321  *		function to enable IPA offload data path
322  *
323  * Note: Should not be called from atomic context
324  *
325  * Returns: 0 on success, negative on failure
326  */
327 static inline int __qdf_ipa_wdi_enable_pipes(void)
328 {
329 	return ipa_wdi_enable_pipes();
330 }
331 
332 /**
333  * __qdf_ipa_wdi_disable_pipes() - Client should call this
334  *		function to disable IPA offload data path
335  *
336  * Note: Should not be called from atomic context
337  *
338  * Returns: 0 on success, negative on failure
339  */
340 static inline int __qdf_ipa_wdi_disable_pipes(void)
341 {
342 	return ipa_wdi_disable_pipes();
343 }
344 
345 /**
346  * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to
347  *		set IPA clock bandwidth based on data rates
348  *
349  * @profile: [in] BandWidth profile to use
350  *
351  * Returns: 0 on success, negative on failure
352  */
353 static inline int __qdf_ipa_wdi_set_perf_profile(
354 			struct ipa_wdi_perf_profile *profile)
355 {
356 	return ipa_wdi_set_perf_profile(profile);
357 }
358 
359 /**
360  * __qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to
361  *		create smmu mapping
362  *
363  * @num_buffers: [in] number of buffers
364  * @info: [in] wdi buffer info
365  *
366  * Returns: 0 on success, negative on failure
367  */
368 static inline int __qdf_ipa_wdi_create_smmu_mapping(u32 num_buffers,
369 		struct ipa_wdi_buffer_info *info)
370 {
371 	return ipa_wdi_create_smmu_mapping(num_buffers, info);
372 }
373 
374 /**
375  * __qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to
376  *		release smmu mapping
377  *
378  * @num_buffers: [in] number of buffers
379  * @info: [in] wdi buffer info
380  *
381  * Returns: 0 on success, negative on failure
382  */
383 static inline int __qdf_ipa_wdi_release_smmu_mapping(u32 num_buffers,
384 		struct ipa_wdi_buffer_info *info)
385 {
386 	return ipa_wdi_release_smmu_mapping(num_buffers, info);
387 }
388 
389 #else /* CONFIG_IPA_WDI_UNIFIED_API */
390 
391 /**
392  * __qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW
393  */
394 typedef struct ipa_wdi3_hdr_info  __qdf_ipa_wdi_hdr_info_t;
395 
396 #define __QDF_IPA_WDI_HDR_INFO_HDR(hdr_info)	\
397 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr)
398 #define __QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info)	\
399 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_len)
400 #define __QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info)	\
401 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->dst_mac_addr_offset)
402 #define __QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info)	\
403 	(((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_type)
404 
405 /**
406  * __qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload
407  *	interface registration
408  */
409 typedef struct ipa_wdi3_reg_intf_in_params  __qdf_ipa_wdi_reg_intf_in_params_t;
410 
411 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in)	\
412 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->netdev_name)
413 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in)	\
414 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->hdr_info)
415 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in)	\
416 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->is_meta_data_valid)
417 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in)	\
418 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data)
419 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in)	\
420 	(((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data_mask)
421 
422 /**
423  * __qdf_ipa_wdi_setup_info_t - WDI3 TX/Rx configuration
424  */
425 typedef struct ipa_wdi3_setup_info  __qdf_ipa_wdi_pipe_setup_info_t;
426 
427 #define __QDF_IPA_WDI_SETUP_INFO_NAT_EN(txrx)	\
428 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.nat.nat_en)
429 #define __QDF_IPA_WDI_SETUP_INFO_HDR_LEN(txrx)	\
430 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_len)
431 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_METADATA_VALID(txrx)	\
432 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid)
433 #define __QDF_IPA_WDI_SETUP_INFO_HDR_METADATA_REG_VALID(txrx)	\
434 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_metadata_reg_valid)
435 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE_VALID(txrx)	\
436 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid)
437 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE(txrx)	\
438 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size)
439 #define __QDF_IPA_WDI_SETUP_INFO_HDR_ADDITIONAL_CONST_LEN(txrx)	\
440 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_additional_const_len)
441 #define __QDF_IPA_WDI_SETUP_INFO_MODE(txrx)	\
442 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.mode.mode)
443 #define __QDF_IPA_WDI_SETUP_INFO_HDR_LITTLE_ENDIAN(txrx)	\
444 	(((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr_ext.hdr_little_endian)
445 
446 #define __QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx)	\
447 	(((struct ipa_wdi3_setup_info *)(txrx))->client)
448 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx)	\
449 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_base_pa)
450 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx)	\
451 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_size)
452 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx)	\
453 	(((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_doorbell_pa)
454 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx)	\
455 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_base_pa)
456 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx)	\
457 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_size)
458 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx)	\
459 	(((struct ipa_wdi3_setup_info *)(txrx))->event_ring_doorbell_pa)
460 #define __QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx)	\
461 	(((struct ipa_wdi3_setup_info *)(txrx))->num_pkt_buffers)
462 #define __QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx)	\
463 	(((struct ipa_wdi3_setup_info *)(txrx))->pkt_offset)
464 #define __QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx)	\
465 	(((struct ipa_wdi3_setup_info *)(txrx))->desc_format_template)
466 
467 /**
468  * __qdf_ipa_wdi_conn_in_params_t - information provided by
469  *		uC offload client
470  */
471 typedef struct ipa_wdi3_conn_in_params  __qdf_ipa_wdi_conn_in_params_t;
472 
473 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in)	\
474 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->notify)
475 #define __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in)	\
476 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->priv)
477 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in)	\
478 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->tx)
479 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in)	\
480 	(((struct ipa_wdi3_conn_in_params *)(pipe_in))->rx)
481 
482 /**
483  * __qdf_ipa_wdi_conn_out_params_t - information provided
484  *				to WLAN druver
485  */
486 typedef struct ipa_wdi3_conn_out_params  __qdf_ipa_wdi_conn_out_params_t;
487 
488 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out)	\
489 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_pa)
490 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_VA(pipe_out)	\
491 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_va)
492 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out)	\
493 	(((struct ipa_wdi3_conn_out_params *)(pipe_out))->rx_uc_db_pa)
494 
495 /**
496  * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile
497  */
498 typedef struct ipa_wdi3_perf_profile  __qdf_ipa_wdi_perf_profile_t;
499 
500 #define __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile)	\
501 	(((struct ipa_wdi3_perf_profile *)(profile))->client)
502 #define __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile)	\
503 	(((struct ipa_wdi3_perf_profile *)(profile))->max_supported_bw_mbps)
504 
505 /**
506  * __qdf_ipa_wdi_reg_intf - Client should call this function to
507  * init WDI3 IPA offload data path
508  *
509  * Note: Should not be called from atomic context and only
510  * after checking IPA readiness using ipa_register_ipa_ready_cb()
511  *
512  * @Return 0 on success, negative on failure
513  */
514 static inline int __qdf_ipa_wdi_reg_intf(
515 	struct ipa_wdi3_reg_intf_in_params *in)
516 {
517 	return ipa_wdi3_reg_intf(in);
518 }
519 
520 /**
521  * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
522  * function to deregister before unload and after disconnect
523  *
524  * @Return 0 on success, negative on failure
525  */
526 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name)
527 {
528 	return ipa_wdi3_dereg_intf(netdev_name);
529 }
530 
531 /**
532  * __qdf_ipa_wdi_conn_pipes - Client should call this
533  * function to connect pipes
534  *
535  * @in:	[in] input parameters from client
536  * @out: [out] output params to client
537  *
538  * Note: Should not be called from atomic context and only
539  * after checking IPA readiness using ipa_register_ipa_ready_cb()
540  *
541  * @Return 0 on success, negative on failure
542  */
543 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi3_conn_in_params *in,
544 					   struct ipa_wdi3_conn_out_params *out)
545 {
546 	return ipa_wdi3_conn_pipes(in, out);
547 }
548 
549 /**
550  * __qdf_ipa_wdi_disconn_pipes() - Client should call this
551  *		function to disconnect pipes
552  *
553  * Note: Should not be called from atomic context
554  *
555  * Returns: 0 on success, negative on failure
556  */
557 static inline int __qdf_ipa_wdi_disconn_pipes(void)
558 {
559 	return ipa_wdi3_disconn_pipes();
560 }
561 
562 /**
563  * __qdf_ipa_wdi_enable_pipes() - Client should call this
564  *		function to enable IPA offload data path
565  *
566  * Note: Should not be called from atomic context
567  *
568  * Returns: 0 on success, negative on failure
569  */
570 static inline int __qdf_ipa_wdi_enable_pipes(void)
571 {
572 	return ipa_wdi3_enable_pipes();
573 }
574 
575 /**
576  * __qdf_ipa_wdi_disable_pipes() - Client should call this
577  *		function to disable IPA offload data path
578  *
579  * Note: Should not be called from atomic context
580  *
581  * Returns: 0 on success, negative on failure
582  */
583 static inline int __qdf_ipa_wdi_disable_pipes(void)
584 {
585 	return ipa_wdi3_disable_pipes();
586 }
587 
588 /**
589  * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to
590  *		set IPA clock bandwidth based on data rates
591  *
592  * @profile: [in] BandWidth profile to use
593  *
594  * Returns: 0 on success, negative on failure
595  */
596 static inline int __qdf_ipa_wdi_set_perf_profile(
597 			struct ipa_wdi3_perf_profile *profile)
598 {
599 	return ipa_wdi3_set_perf_profile(profile);
600 }
601 
602 #endif /* CONFIG_IPA_WDI_UNIFIED_API */
603 
604 #endif /* IPA_OFFLOAD */
605 #endif /* I_QDF_IPA_WDI_H */
606