1 /*
2 * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
3 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18 /**
19 * DOC: i_qdf_ipa_wdi3.h
20 * This file provides OS dependent IPA WDI APIs.
21 */
22
23 #ifndef I_QDF_IPA_WDI_H
24 #define I_QDF_IPA_WDI_H
25
26 #ifdef IPA_OFFLOAD
27
28 #include <qdf_status.h> /* QDF_STATUS */
29 #include <linux/ipa_wdi3.h>
30 #include <linux/version.h>
31
32 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0)) || \
33 defined(CONFIG_IPA_WDI_UNIFIED_API)
34
35 /**
36 * __qdf_ipa_wdi_version_t - IPA WDI version
37 */
38 typedef enum ipa_wdi_version __qdf_ipa_wdi_version_t;
39
40 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
41 /**
42 * __qdf_ipa_wdi_hdl_t - IPA WDI hdl
43 */
44 typedef ipa_wdi_hdl_t __qdf_ipa_wdi_hdl_t;
45
46 /**
47 * __qdf_ipa_wdi_capabilities_out_params_t - IPA WDI capabilities output params
48 */
49 typedef struct ipa_wdi_capabilities_out_params \
50 __qdf_ipa_wdi_capabilities_out_params_t;
51
52 #define __QDF_IPA_WDI_CAPABILITIES_OUT_PARAMS_NUM_INSTANCES(out_params) \
53 (((struct ipa_wdi_capabilities_out_params *)(out_params))->num_of_instances)
54
55 static inline
__qdf_ipa_wdi_get_capabilities(__qdf_ipa_wdi_capabilities_out_params_t * out)56 int __qdf_ipa_wdi_get_capabilities(__qdf_ipa_wdi_capabilities_out_params_t *out)
57 {
58 return ipa_wdi_get_capabilities(out);
59 }
60 #else
61 /**
62 * __qdf_ipa_wdi_hdl_t - IPA WDI hdl
63 */
64 typedef unsigned int __qdf_ipa_wdi_hdl_t;
65
66 /**
67 * ipa_wdi_capabilities_out_params - IPA WDI capabilities out params
68 */
69 struct ipa_wdi_capabilities_out_params {
70 uint8_t num_of_instances;
71 };
72
73 /**
74 * __qdf_ipa_wdi_capabilities_out_params_t - IPA WDI capabilities output params
75 */
76 typedef struct ipa_wdi_capabilities_out_params \
77 __qdf_ipa_wdi_capabilities_out_params_t;
78
79 #define __QDF_IPA_WDI_CAPABILITIES_OUT_PARAMS_NUM_INSTANCES(out_params) \
80 (((struct ipa_wdi_capabilities_out_params *)(out_params))->num_of_instances)
81
82 static inline
__qdf_ipa_wdi_get_capabilities(__qdf_ipa_wdi_capabilities_out_params_t * out)83 int __qdf_ipa_wdi_get_capabilities(__qdf_ipa_wdi_capabilities_out_params_t *out)
84 {
85 out->num_of_instances = 1;
86 return 1;
87 }
88
89 /**
90 * ipa_wdi_init_in_params_inst - IPA WDI init in params instance id
91 */
92 struct ipa_wdi_init_in_params_inst {
93 uint8_t inst_id;
94 };
95
96 #define __QDF_IPA_WDI_INIT_IN_PARAMS_INSTANCE_ID(in_params) \
97 (((struct ipa_wdi_init_in_params_inst *)(in_params))->inst_id)
98
99 /**
100 * ipa_wdi_init_out_params_inst - IPA WDI init out params IPA handle
101 */
102 struct ipa_wdi_init_out_params_inst {
103 uint8_t hdl;
104 };
105
106 #define __QDF_IPA_WDI_INIT_OUT_PARAMS_HANDLE(out_params) \
107 (((struct ipa_wdi_init_out_params_inst *)(out_params))->hdl)
108 #endif
109
110 /**
111 * __qdf_ipa_wdi_init_in_params_t - wdi init input parameters
112 */
113 typedef struct ipa_wdi_init_in_params __qdf_ipa_wdi_init_in_params_t;
114
115 #define __QDF_IPA_WDI_INIT_IN_PARAMS_WDI_VERSION(in_params) \
116 (((struct ipa_wdi_init_in_params *)(in_params))->wdi_version)
117 #define __QDF_IPA_WDI_INIT_IN_PARAMS_NOTIFY(in_params) \
118 (((struct ipa_wdi_init_in_params *)(in_params))->notify)
119 #define __QDF_IPA_WDI_INIT_IN_PARAMS_PRIV(in_params) \
120 (((struct ipa_wdi_init_in_params *)(in_params))->priv)
121 #define __QDF_IPA_WDI_INIT_IN_PARAMS_WDI_NOTIFY(in_params) \
122 (((struct ipa_wdi_init_in_params *)(in_params))->wdi_notify)
123
124 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
125 #define __QDF_IPA_WDI_INIT_IN_PARAMS_INSTANCE_ID(in_params) \
126 (((struct ipa_wdi_init_in_params *)(in_params))->inst_id)
127 #endif
128
129 #ifdef IPA_WDS_EASYMESH_FEATURE
130 #define __QDF_IPA_WDI_INIT_IN_PARAMS_WDS_UPDATE(in_params) \
131 (((struct ipa_wdi_init_in_params *)(in_params))->ast_update)
132 #endif
133
134 /**
135 * __qdf_ipa_wdi_init_out_params_t - wdi init output parameters
136 */
137 typedef struct ipa_wdi_init_out_params __qdf_ipa_wdi_init_out_params_t;
138
139 #define __QDF_IPA_WDI_INIT_OUT_PARAMS_IS_UC_READY(out_params) \
140 (((struct ipa_wdi_init_out_params *)(out_params))->is_uC_ready)
141 #define __QDF_IPA_WDI_INIT_OUT_PARAMS_IS_SMMU_ENABLED(out_params) \
142 (((struct ipa_wdi_init_out_params *)(out_params))->is_smmu_enabled)
143 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0))
144 #define __QDF_IPA_WDI_INIT_OUT_PARAMS_OPT_WIFI_DP(out_params) \
145 (((struct ipa_wdi_init_out_params *)(out_params))->opt_wdi_dpath)
146 #endif
147
148 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
149 #define __QDF_IPA_WDI_INIT_OUT_PARAMS_HANDLE(out_params) \
150 (((struct ipa_wdi_init_out_params *)(out_params))->hdl)
151 #endif
152
153 #if (defined(IPA_WDI3_GSI)) || (defined(IPA_WDI2_GSI))
154 #define QDF_IPA_WDI_INIT_OUT_PARAMS_IS_OVER_GSI(out_params) \
155 (((struct ipa_wdi_init_out_params *)(out_params))->is_over_gsi)
156 #else
157 #define QDF_IPA_WDI_INIT_OUT_PARAMS_IS_OVER_GSI(out_params) \
158 false
159 #endif
160
161 /**
162 * __qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW
163 */
164 typedef struct ipa_wdi_hdr_info __qdf_ipa_wdi_hdr_info_t;
165
166 #define __QDF_IPA_WDI_HDR_INFO_HDR(hdr_info) \
167 (((struct ipa_wdi_hdr_info *)(hdr_info))->hdr)
168 #define __QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info) \
169 (((struct ipa_wdi_hdr_info *)(hdr_info))->hdr_len)
170 #define __QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info) \
171 (((struct ipa_wdi_hdr_info *)(hdr_info))->dst_mac_addr_offset)
172 #define __QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info) \
173 (((struct ipa_wdi_hdr_info *)(hdr_info))->hdr_type)
174
175 /**
176 * __qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload
177 * interface registration
178 */
179 typedef struct ipa_wdi_reg_intf_in_params __qdf_ipa_wdi_reg_intf_in_params_t;
180
181 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in) \
182 (((struct ipa_wdi_reg_intf_in_params *)(in))->netdev_name)
183 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in) \
184 (((struct ipa_wdi_reg_intf_in_params *)(in))->hdr_info)
185 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_ALT_DST_PIPE(in) \
186 (((struct ipa_wdi_reg_intf_in_params *)(in))->alt_dst_pipe)
187 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in) \
188 (((struct ipa_wdi_reg_intf_in_params *)(in))->is_meta_data_valid)
189 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in) \
190 (((struct ipa_wdi_reg_intf_in_params *)(in))->meta_data)
191 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in) \
192 (((struct ipa_wdi_reg_intf_in_params *)(in))->meta_data_mask)
193 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HANDLE(in) \
194 (((struct ipa_wdi_reg_intf_in_params *)(in))->hdl)
195 #ifdef IPA_WDI3_TX_TWO_PIPES
196 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_TX1_USED(in) \
197 (((struct ipa_wdi_reg_intf_in_params *)(in))->is_tx1_used)
198 #endif
199 #ifdef IPA_WDI3_VLAN_SUPPORT
200 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_RX1_USED(in) \
201 (((struct ipa_wdi_reg_intf_in_params *)(in))->is_rx1_used)
202 #endif
203
204 typedef struct ipa_ep_cfg __qdf_ipa_ep_cfg_t;
205
206 #define __QDF_IPA_EP_CFG_NAT_EN(cfg) \
207 (((struct ipa_ep_cfg *)(cfg))->nat.nat_en)
208 #define __QDF_IPA_EP_CFG_HDR_LEN(cfg) \
209 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_len)
210 #define __QDF_IPA_EP_CFG_HDR_OFST_METADATA_VALID(cfg) \
211 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_metadata_valid)
212 #define __QDF_IPA_EP_CFG_HDR_METADATA_REG_VALID(cfg) \
213 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_metadata_reg_valid)
214 #define __QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE_VALID(cfg) \
215 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_pkt_size_valid)
216 #define __QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE(cfg) \
217 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_pkt_size)
218 #define __QDF_IPA_EP_CFG_HDR_ADDITIONAL_CONST_LEN(cfg) \
219 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_additional_const_len)
220 #define __QDF_IPA_EP_CFG_MODE(cfg) \
221 (((struct ipa_ep_cfg *)(cfg))->mode.mode)
222 #define __QDF_IPA_EP_CFG_HDR_LITTLE_ENDIAN(cfg) \
223 (((struct ipa_ep_cfg *)(cfg))->hdr_ext.hdr_little_endian)
224
225 /**
226 * __qdf_ipa_wdi_pipe_setup_info_t - WDI TX/Rx configuration
227 */
228 typedef struct ipa_wdi_pipe_setup_info __qdf_ipa_wdi_pipe_setup_info_t;
229
230 #define __QDF_IPA_WDI_SETUP_INFO_EP_CFG(txrx) \
231 (((struct ipa_wdi_pipe_setup_info *)(txrx))->ipa_ep_cfg)
232
233 #define __QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx) \
234 (((struct ipa_wdi_pipe_setup_info *)(txrx))->client)
235 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx) \
236 (((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_base_pa)
237 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx) \
238 (((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_size)
239 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx) \
240 (((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_doorbell_pa)
241 #define __QDF_IPA_WDI_SETUP_INFO_IS_TXR_RN_DB_PCIE_ADDR(txrx) \
242 (((struct ipa_wdi_pipe_setup_info *)(txrx))->is_txr_rn_db_pcie_addr)
243 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx) \
244 (((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_base_pa)
245 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx) \
246 (((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_size)
247 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx) \
248 (((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_doorbell_pa)
249 #define __QDF_IPA_WDI_SETUP_INFO_IS_EVT_RN_DB_PCIE_ADDR(txrx) \
250 (((struct ipa_wdi_pipe_setup_info *)(txrx))->is_evt_rn_db_pcie_addr)
251 #define __QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx) \
252 (((struct ipa_wdi_pipe_setup_info *)(txrx))->num_pkt_buffers)
253 #define __QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx) \
254 (((struct ipa_wdi_pipe_setup_info *)(txrx))->pkt_offset)
255 #define __QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx) \
256 (((struct ipa_wdi_pipe_setup_info *)(txrx))->desc_format_template)
257
258 /**
259 * __qdf_ipa_wdi_pipe_setup_info_smmu_t - WDI TX/Rx configuration
260 */
261 typedef struct ipa_wdi_pipe_setup_info_smmu __qdf_ipa_wdi_pipe_setup_info_smmu_t;
262
263 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EP_CFG(txrx) \
264 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->ipa_ep_cfg)
265
266 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(txrx) \
267 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->client)
268 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_BASE(txrx) \
269 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_base)
270 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_SIZE(txrx) \
271 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_size)
272 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_DOORBELL_PA(txrx) \
273 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_doorbell_pa)
274 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_IS_TXR_RN_DB_PCIE_ADDR(txrx) \
275 (((struct ipa_wdi_pipe_setup_info_smmu *) \
276 (txrx))->is_txr_rn_db_pcie_addr)
277 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_BASE(txrx) \
278 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_base)
279 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_SIZE(txrx) \
280 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_size)
281 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_DOORBELL_PA(txrx) \
282 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_doorbell_pa)
283 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_IS_EVT_RN_DB_PCIE_ADDR(txrx) \
284 (((struct ipa_wdi_pipe_setup_info_smmu *) \
285 (txrx))->is_evt_rn_db_pcie_addr)
286 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_NUM_PKT_BUFFERS(txrx) \
287 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->num_pkt_buffers)
288 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(txrx) \
289 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->pkt_offset)
290 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(txrx) \
291 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->desc_format_template)
292
293 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 41))
294 /* MSM kernel support added in I6418ae5bc4f030f6348e0f580b61b6adc1b92cf3 */
295 #define __QDF_IPA_WDI_SETUP_INFO_RX_BANK_ID(txrx, bid) \
296 ((((struct ipa_wdi_pipe_setup_info *)(txrx))->rx_bank_id) = (bid))
297
298 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_BANK_ID(txrx, bid) \
299 ((((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->rx_bank_id) = (bid))
300
301 /*
302 * rx_pmac_id was added to struct ipa_wdi_pipe_setup_info with
303 * Change-Id Ic9ee13be05b11004982e9a38cb503b3c4d0f81f3. This change
304 * also modified macro IPA_WDI_INST_MAX from 2 to 3, so we can use
305 * this to know if the change is present or not.
306 */
307 #if defined(IPA_WDI_INST_MAX) && (IPA_WDI_INST_MAX >= 3)
308 #define __QDF_IPA_WDI_SETUP_INFO_RX_PMAC_ID(txrx, pmac_id) \
309 ((((struct ipa_wdi_pipe_setup_info *)(txrx))->rx_pmac_id) = (pmac_id))
310
311 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_PMAC_ID(txrx, pmac_id) \
312 ((((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->rx_pmac_id) = (pmac_id))
313 #else
314 #define __QDF_IPA_WDI_SETUP_INFO_RX_PMAC_ID(txrx, pmac_id)
315 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_PMAC_ID(txrx, pmac_id)
316 #endif
317 #else
318 #define __QDF_IPA_WDI_SETUP_INFO_RX_BANK_ID(txrx, bid)
319 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_BANK_ID(txrx, bid)
320 #define __QDF_IPA_WDI_SETUP_INFO_RX_PMAC_ID(txrx, pmac_id)
321 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_PMAC_ID(txrx, pmac_id)
322 #endif
323
324 /**
325 * __qdf_ipa_wdi_conn_in_params_t - information provided by
326 * uC offload client
327 */
328 typedef struct ipa_wdi_conn_in_params __qdf_ipa_wdi_conn_in_params_t;
329
330 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in) \
331 (((struct ipa_wdi_conn_in_params *)(pipe_in))->notify)
332 #define __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in) \
333 (((struct ipa_wdi_conn_in_params *)(pipe_in))->priv)
334 #define __QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(pipe_in) \
335 (((struct ipa_wdi_conn_in_params *)(pipe_in))->is_smmu_enabled)
336 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NUM_SYS_PIPE_NEEDED(pipe_in) \
337 (((struct ipa_wdi_conn_in_params *)(pipe_in))->num_sys_pipe_needed)
338 #define __QDF_IPA_WDI_CONN_IN_PARAMS_SYS_IN(in) \
339 (((struct ipa_wdi_conn_in_params *)(pipe_in))->sys_in)
340 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in) \
341 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx)
342 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_SMMU(pipe_in) \
343 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx_smmu)
344 #ifdef IPA_WDI3_TX_TWO_PIPES
345 #define __QDF_IPA_WDI_CONN_IN_PARAMS_IS_TX1_USED(pipe_in) \
346 (((struct ipa_wdi_conn_in_params *)(pipe_in))->is_tx1_used)
347 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_ALT_PIPE(pipe_in) \
348 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx1.tx)
349 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_ALT_PIPE_SMMU(pipe_in) \
350 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx1.tx_smmu)
351 #endif
352 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in) \
353 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx)
354 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_SMMU(pipe_in) \
355 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx_smmu)
356 #ifdef IPA_WDI3_VLAN_SUPPORT
357 #define __QDF_IPA_WDI_CONN_IN_PARAMS_IS_RX1_USED(pipe_in) \
358 (((struct ipa_wdi_conn_in_params *)(pipe_in))->is_rx1_used)
359 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_ALT(pipe_in) \
360 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx1.rx)
361 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_ALT_SMMU(pipe_in) \
362 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx1.rx_smmu)
363 #endif
364 #define __QDF_IPA_WDI_CONN_IN_PARAMS_HANDLE(pipe_in) \
365 (((struct ipa_wdi_conn_in_params *)(pipe_in))->hdl)
366
367 #ifdef IPA_WDS_EASYMESH_FEATURE
368 #define __QDF_IPA_WDI_CONN_IN_PARAMS_AST_NOTIFY(pipe_in) \
369 (((struct ipa_wdi_conn_in_params *)(pipe_in))->ast_notify)
370 #endif
371
372 /**
373 * __qdf_ipa_wdi_conn_out_params_t - information provided
374 * to WLAN druver
375 */
376 typedef struct ipa_wdi_conn_out_params __qdf_ipa_wdi_conn_out_params_t;
377
378 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out) \
379 (((struct ipa_wdi_conn_out_params *)(pipe_out))->tx_uc_db_pa)
380 #ifdef IPA_WDI3_TX_TWO_PIPES
381 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_ALT_DB_PA(pipe_out) \
382 (((struct ipa_wdi_conn_out_params *)(pipe_out))->tx1_uc_db_pa)
383 #endif
384 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out) \
385 (((struct ipa_wdi_conn_out_params *)(pipe_out))->rx_uc_db_pa)
386 #ifdef IPA_WDI3_VLAN_SUPPORT
387 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_ALT_UC_DB_PA(pipe_out) \
388 (((struct ipa_wdi_conn_out_params *)(pipe_out))->rx1_uc_db_pa)
389 #endif
390 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
391 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_IS_DB_DDR_MAPPED(pipe_out) \
392 (((struct ipa_wdi_conn_out_params *)(pipe_out))->is_ddr_mapped)
393 #else
394 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_IS_DB_DDR_MAPPED(pipe_out) false
395 #endif
396
397 /**
398 * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile
399 */
400 typedef struct ipa_wdi_perf_profile __qdf_ipa_wdi_perf_profile_t;
401
402 #define __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile) \
403 (((struct ipa_wdi_perf_profile *)(profile))->client)
404 #define __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile) \
405 (((struct ipa_wdi_perf_profile *)(profile))->max_supported_bw_mbps)
406
407 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
408 /**
409 * __qdf_ipa_wdi_init - Client should call this function to
410 * init WDI IPA offload data path
411 *
412 * Note: Should not be called from atomic context and only
413 * after checking IPA readiness using ipa_register_ipa_ready_cb()
414 *
415 * @Return 0 on success, negative on failure
416 */
__qdf_ipa_wdi_init(struct ipa_wdi_init_in_params * in,struct ipa_wdi_init_out_params * out)417 static inline int __qdf_ipa_wdi_init(struct ipa_wdi_init_in_params *in,
418 struct ipa_wdi_init_out_params *out)
419 {
420 return ipa_wdi_init_per_inst(in, out);
421 }
422
423 /**
424 * __qdf_ipa_wdi_cleanup - Client should call this function to
425 * clean up WDI IPA offload data path
426 * @hdl: IPA handle
427 *
428 * @Return 0 on success, negative on failure
429 */
__qdf_ipa_wdi_cleanup(__qdf_ipa_wdi_hdl_t hdl)430 static inline int __qdf_ipa_wdi_cleanup(__qdf_ipa_wdi_hdl_t hdl)
431 {
432 return ipa_wdi_cleanup_per_inst(hdl);
433 }
434
435 /**
436 * __qdf_ipa_wdi_reg_intf - Client should call this function to
437 * init WDI IPA offload data path
438 *
439 * Note: Should not be called from atomic context and only
440 * after checking IPA readiness using ipa_register_ipa_ready_cb()
441 *
442 * @Return 0 on success, negative on failure
443 */
__qdf_ipa_wdi_reg_intf(struct ipa_wdi_reg_intf_in_params * in)444 static inline int __qdf_ipa_wdi_reg_intf(
445 struct ipa_wdi_reg_intf_in_params *in)
446 {
447 return ipa_wdi_reg_intf_per_inst(in);
448 }
449
450 #ifdef IPA_OPT_WIFI_DP
451 /**
452 * __qdf_ipa_wdi_register_flt_cb() - register callbacks for optional wifi dp
453 * @hdl: ipa_hdl
454 * @flt_rsrv_cb: filter reserve cb function
455 * @flt_rsrv_rel_cb: filter release cb function
456 * @flt_add_cb: filter add cb function
457 * @flt_rem_cb: filter remove cb
458 *
459 * Note: Should not be called from atomic context and only
460 * after checking IPA readiness using ipa_register_ipa_ready_cb()
461 *
462 * @Return 0 on successful register of filter cb, negative on failure
463 */
__qdf_ipa_wdi_register_flt_cb(ipa_wdi_hdl_t hdl,ipa_wdi_opt_dpath_flt_rsrv_cb flt_rsrv_cb,ipa_wdi_opt_dpath_flt_rsrv_rel_cb flt_rsrv_rel_cb,ipa_wdi_opt_dpath_flt_add_cb flt_add_cb,ipa_wdi_opt_dpath_flt_rem_cb flt_rem_cb)464 static inline int __qdf_ipa_wdi_register_flt_cb(
465 ipa_wdi_hdl_t hdl,
466 ipa_wdi_opt_dpath_flt_rsrv_cb flt_rsrv_cb,
467 ipa_wdi_opt_dpath_flt_rsrv_rel_cb flt_rsrv_rel_cb,
468 ipa_wdi_opt_dpath_flt_add_cb flt_add_cb,
469 ipa_wdi_opt_dpath_flt_rem_cb flt_rem_cb)
470 {
471 return ipa_wdi_opt_dpath_register_flt_cb_per_inst(
472 hdl, flt_rsrv_cb,
473 flt_rsrv_rel_cb,
474 flt_add_cb, flt_rem_cb);
475 }
476
477 /**
478 * __qdf_ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst() - notify response to
479 * filter reserve request from IPA
480 * @hdl: ipa_hdl
481 * @is_success: result of filter reservation
482 *
483 * Note: Should not be called from atomic context and only
484 * after checking IPA readiness using ipa_register_ipa_ready_cb()
485 *
486 * @Return 0 if ipa received the notification, negative on failure
487 */
__qdf_ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst(ipa_wdi_hdl_t hdl,bool is_success)488 static inline int __qdf_ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst(
489 ipa_wdi_hdl_t hdl, bool is_success)
490 {
491 return ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst(hdl, is_success);
492 }
493
494 /**
495 *__qdf_ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst() notify response to
496 *filter release request from IPA
497 * @hdl: ipa_hdl
498 * @is_success: result of filter release
499 *
500 * Note: Should not be called from atomic context and only
501 * after checking IPA readiness using ipa_register_ipa_ready_cb()
502 *
503 * @Return 0 if ipa received the notification, negative on failure
504 */
__qdf_ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst(ipa_wdi_hdl_t hdl,bool is_success)505 static inline int __qdf_ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst(
506 ipa_wdi_hdl_t hdl, bool is_success)
507 {
508 return ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst(hdl, is_success);
509 }
510 #endif /*IPA_OPT_WIFI_DP */
511 /**
512 * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
513 * function to deregister before unload and after disconnect
514 * @hdl: IPA handle
515 *
516 * @Return 0 on success, negative on failure
517 */
__qdf_ipa_wdi_dereg_intf(const char * netdev_name,__qdf_ipa_wdi_hdl_t hdl)518 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name,
519 __qdf_ipa_wdi_hdl_t hdl)
520 {
521 return ipa_wdi_dereg_intf_per_inst(netdev_name, hdl);
522 }
523
524 /**
525 * __qdf_ipa_wdi_conn_pipes - Client should call this
526 * function to connect pipes
527 * @in: [in] input parameters from client
528 * @out: [out] output params to client
529 *
530 * Note: Should not be called from atomic context and only
531 * after checking IPA readiness using ipa_register_ipa_ready_cb()
532 *
533 * @Return 0 on success, negative on failure
534 */
__qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params * in,struct ipa_wdi_conn_out_params * out)535 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in,
536 struct ipa_wdi_conn_out_params *out)
537 {
538 return ipa_wdi_conn_pipes_per_inst(in, out);
539 }
540
541 /**
542 * __qdf_ipa_wdi_disconn_pipes() - Client should call this
543 * function to disconnect pipes
544 * @hdl: IPA handle
545 *
546 * Note: Should not be called from atomic context
547 *
548 * Returns: 0 on success, negative on failure
549 */
__qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)550 static inline int __qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)
551 {
552 return ipa_wdi_disconn_pipes_per_inst(hdl);
553 }
554
555 /**
556 * __qdf_ipa_wdi_enable_pipes() - Client should call this
557 * function to enable IPA offload data path
558 * @hdl: IPA handle
559 *
560 * Note: Should not be called from atomic context
561 *
562 * Returns: 0 on success, negative on failure
563 */
__qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)564 static inline int __qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)
565 {
566 return ipa_wdi_enable_pipes_per_inst(hdl);
567 }
568
569 /**
570 * __qdf_ipa_wdi_disable_pipes() - Client should call this
571 * function to disable IPA offload data path
572 * @hdl: IPA handle
573 *
574 * Note: Should not be called from atomic context
575 *
576 * Returns: 0 on success, negative on failure
577 */
__qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)578 static inline int __qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)
579 {
580 return ipa_wdi_disable_pipes_per_inst(hdl);
581 }
582
583 /**
584 * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to
585 * set IPA clock bandwidth based on data rates
586 * @hdl: IPA handle
587 * @profile: [in] BandWidth profile to use
588 *
589 * Returns: 0 on success, negative on failure
590 */
__qdf_ipa_wdi_set_perf_profile(__qdf_ipa_wdi_hdl_t hdl,struct ipa_wdi_perf_profile * profile)591 static inline int __qdf_ipa_wdi_set_perf_profile(__qdf_ipa_wdi_hdl_t hdl,
592 struct ipa_wdi_perf_profile *profile)
593 {
594 return ipa_wdi_set_perf_profile_per_inst(hdl, profile);
595 }
596
597 /**
598 * __qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to
599 * create smmu mapping
600 * @hdl: IPA handle
601 * @num_buffers: [in] number of buffers
602 * @info: [in] wdi buffer info
603 *
604 * Returns: 0 on success, negative on failure
605 */
__qdf_ipa_wdi_create_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,u32 num_buffers,struct ipa_wdi_buffer_info * info)606 static inline int __qdf_ipa_wdi_create_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,
607 u32 num_buffers,
608 struct ipa_wdi_buffer_info *info)
609 {
610 return ipa_wdi_create_smmu_mapping_per_inst(hdl, num_buffers, info);
611 }
612
613 /**
614 * __qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to
615 * release smmu mapping
616 * @hdl: IPA handle
617 * @num_buffers: [in] number of buffers
618 * @info: [in] wdi buffer info
619 *
620 * Returns: 0 on success, negative on failure
621 */
__qdf_ipa_wdi_release_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,u32 num_buffers,struct ipa_wdi_buffer_info * info)622 static inline int __qdf_ipa_wdi_release_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,
623 u32 num_buffers,
624 struct ipa_wdi_buffer_info *info)
625 {
626 return ipa_wdi_release_smmu_mapping_per_inst(hdl, num_buffers, info);
627 }
628 #else
629 /**
630 * __qdf_ipa_wdi_init - Client should call this function to
631 * init WDI IPA offload data path
632 *
633 * Note: Should not be called from atomic context and only
634 * after checking IPA readiness using ipa_register_ipa_ready_cb()
635 *
636 * @Return 0 on success, negative on failure
637 */
__qdf_ipa_wdi_init(struct ipa_wdi_init_in_params * in,struct ipa_wdi_init_out_params * out)638 static inline int __qdf_ipa_wdi_init(struct ipa_wdi_init_in_params *in,
639 struct ipa_wdi_init_out_params *out)
640 {
641 return ipa_wdi_init(in, out);
642 }
643
644 /**
645 * __qdf_ipa_wdi_cleanup - Client should call this function to
646 * clean up WDI IPA offload data path
647 * @hdl: IPA handle
648 *
649 * @Return 0 on success, negative on failure
650 */
__qdf_ipa_wdi_cleanup(__qdf_ipa_wdi_hdl_t hdl)651 static inline int __qdf_ipa_wdi_cleanup(__qdf_ipa_wdi_hdl_t hdl)
652 {
653 return ipa_wdi_cleanup();
654 }
655
656 /**
657 * __qdf_ipa_wdi_reg_intf - Client should call this function to
658 * init WDI IPA offload data path
659 *
660 * Note: Should not be called from atomic context and only
661 * after checking IPA readiness using ipa_register_ipa_ready_cb()
662 *
663 * @Return 0 on success, negative on failure
664 */
__qdf_ipa_wdi_reg_intf(struct ipa_wdi_reg_intf_in_params * in)665 static inline int __qdf_ipa_wdi_reg_intf(
666 struct ipa_wdi_reg_intf_in_params *in)
667 {
668 return ipa_wdi_reg_intf(in);
669 }
670
671 /**
672 * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
673 * function to deregister before unload and after disconnect
674 * @hdl: IPA handle
675 *
676 * @Return 0 on success, negative on failure
677 */
__qdf_ipa_wdi_dereg_intf(const char * netdev_name,__qdf_ipa_wdi_hdl_t hdl)678 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name,
679 __qdf_ipa_wdi_hdl_t hdl)
680 {
681 return ipa_wdi_dereg_intf(netdev_name);
682 }
683
684 /**
685 * __qdf_ipa_wdi_conn_pipes - Client should call this
686 * function to connect pipes
687 * @in: [in] input parameters from client
688 * @out: [out] output params to client
689 *
690 * Note: Should not be called from atomic context and only
691 * after checking IPA readiness using ipa_register_ipa_ready_cb()
692 *
693 * @Return 0 on success, negative on failure
694 */
__qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params * in,struct ipa_wdi_conn_out_params * out)695 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in,
696 struct ipa_wdi_conn_out_params *out)
697 {
698 return ipa_wdi_conn_pipes(in, out);
699 }
700
701 /**
702 * __qdf_ipa_wdi_disconn_pipes() - Client should call this
703 * function to disconnect pipes
704 * @hdl: IPA handle
705 *
706 * Note: Should not be called from atomic context
707 *
708 * Returns: 0 on success, negative on failure
709 */
__qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)710 static inline int __qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)
711 {
712 return ipa_wdi_disconn_pipes();
713 }
714
715 /**
716 * __qdf_ipa_wdi_enable_pipes() - Client should call this
717 * function to enable IPA offload data path
718 * @hdl: IPA handle
719 *
720 * Note: Should not be called from atomic context
721 *
722 * Returns: 0 on success, negative on failure
723 */
__qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)724 static inline int __qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)
725 {
726 return ipa_wdi_enable_pipes();
727 }
728
729 /**
730 * __qdf_ipa_wdi_disable_pipes() - Client should call this
731 * function to disable IPA offload data path
732 * @hdl: IPA handle
733 *
734 * Note: Should not be called from atomic context
735 *
736 * Returns: 0 on success, negative on failure
737 */
__qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)738 static inline int __qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)
739 {
740 return ipa_wdi_disable_pipes();
741 }
742
743 /**
744 * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to
745 * set IPA clock bandwidth based on data rates
746 * @hdl: IPA handle
747 * @profile: [in] BandWidth profile to use
748 *
749 * Returns: 0 on success, negative on failure
750 */
__qdf_ipa_wdi_set_perf_profile(__qdf_ipa_wdi_hdl_t hdl,struct ipa_wdi_perf_profile * profile)751 static inline int __qdf_ipa_wdi_set_perf_profile(__qdf_ipa_wdi_hdl_t hdl,
752 struct ipa_wdi_perf_profile *profile)
753 {
754 return ipa_wdi_set_perf_profile(profile);
755 }
756
757 /**
758 * __qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to
759 * create smmu mapping
760 * @hdl: IPA handle
761 * @num_buffers: [in] number of buffers
762 * @info: [in] wdi buffer info
763 *
764 * Returns: 0 on success, negative on failure
765 */
__qdf_ipa_wdi_create_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,u32 num_buffers,struct ipa_wdi_buffer_info * info)766 static inline int __qdf_ipa_wdi_create_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,
767 u32 num_buffers,
768 struct ipa_wdi_buffer_info *info)
769 {
770 return ipa_wdi_create_smmu_mapping(num_buffers, info);
771 }
772
773 /**
774 * __qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to
775 * release smmu mapping
776 * @hdl: IPA handle
777 * @num_buffers: [in] number of buffers
778 * @info: [in] wdi buffer info
779 *
780 * Returns: 0 on success, negative on failure
781 */
__qdf_ipa_wdi_release_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,u32 num_buffers,struct ipa_wdi_buffer_info * info)782 static inline int __qdf_ipa_wdi_release_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl,
783 u32 num_buffers,
784 struct ipa_wdi_buffer_info *info)
785 {
786 return ipa_wdi_release_smmu_mapping(num_buffers, info);
787 }
788
789 #endif
790
791 #ifdef WDI3_STATS_UPDATE
792 /**
793 * __qdf_ipa_wdi_wlan_stats() - Client should call this function to
794 * send Tx byte counts to IPA driver
795 * @tx_stats: number of Tx bytes on STA and SAP
796 *
797 * Returns: 0 on success, negative on failure
798 */
__qdf_ipa_wdi_wlan_stats(struct ipa_wdi_tx_info * tx_stats)799 static inline int __qdf_ipa_wdi_wlan_stats(struct ipa_wdi_tx_info *tx_stats)
800 {
801 return ipa_wdi_sw_stats(tx_stats);
802 }
803
804 /**
805 * ipa_uc_bw_monitor() - start/stop uc bw monitoring
806 * @bw_info: set bw info levels to monitor
807 *
808 * Returns: 0 on success, negative on failure
809 */
__qdf_ipa_uc_bw_monitor(struct ipa_wdi_bw_info * bw_info)810 static inline int __qdf_ipa_uc_bw_monitor(struct ipa_wdi_bw_info *bw_info)
811 {
812 return ipa_uc_bw_monitor(bw_info);
813 }
814 #endif
815 #else /* CONFIG_IPA_WDI_UNIFIED_API */
816
817 /**
818 * __qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW
819 */
820 typedef struct ipa_wdi3_hdr_info __qdf_ipa_wdi_hdr_info_t;
821
822 #define __QDF_IPA_WDI_HDR_INFO_HDR(hdr_info) \
823 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr)
824 #define __QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info) \
825 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_len)
826 #define __QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info) \
827 (((struct ipa_wdi3_hdr_info *)(hdr_info))->dst_mac_addr_offset)
828 #define __QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info) \
829 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_type)
830
831 /**
832 * __qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload
833 * interface registration
834 */
835 typedef struct ipa_wdi3_reg_intf_in_params __qdf_ipa_wdi_reg_intf_in_params_t;
836
837 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in) \
838 (((struct ipa_wdi3_reg_intf_in_params *)(in))->netdev_name)
839 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in) \
840 (((struct ipa_wdi3_reg_intf_in_params *)(in))->hdr_info)
841 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in) \
842 (((struct ipa_wdi3_reg_intf_in_params *)(in))->is_meta_data_valid)
843 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in) \
844 (((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data)
845 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in) \
846 (((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data_mask)
847 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HANDLE(in) \
848 (((struct ipa_wdi3_reg_intf_in_params *)(in))->hdl)
849
850 /**
851 * __qdf_ipa_wdi_setup_info_t - WDI3 TX/Rx configuration
852 */
853 typedef struct ipa_wdi3_setup_info __qdf_ipa_wdi_pipe_setup_info_t;
854
855 #define __QDF_IPA_WDI_SETUP_INFO_NAT_EN(txrx) \
856 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.nat.nat_en)
857 #define __QDF_IPA_WDI_SETUP_INFO_HDR_LEN(txrx) \
858 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_len)
859 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_METADATA_VALID(txrx) \
860 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid)
861 #define __QDF_IPA_WDI_SETUP_INFO_HDR_METADATA_REG_VALID(txrx) \
862 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_metadata_reg_valid)
863 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE_VALID(txrx) \
864 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid)
865 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE(txrx) \
866 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size)
867 #define __QDF_IPA_WDI_SETUP_INFO_HDR_ADDITIONAL_CONST_LEN(txrx) \
868 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_additional_const_len)
869 #define __QDF_IPA_WDI_SETUP_INFO_MODE(txrx) \
870 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.mode.mode)
871 #define __QDF_IPA_WDI_SETUP_INFO_HDR_LITTLE_ENDIAN(txrx) \
872 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr_ext.hdr_little_endian)
873
874 #define __QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx) \
875 (((struct ipa_wdi3_setup_info *)(txrx))->client)
876 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx) \
877 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_base_pa)
878 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx) \
879 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_size)
880 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx) \
881 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_doorbell_pa)
882 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx) \
883 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_base_pa)
884 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx) \
885 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_size)
886 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx) \
887 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_doorbell_pa)
888 #define __QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx) \
889 (((struct ipa_wdi3_setup_info *)(txrx))->num_pkt_buffers)
890 #define __QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx) \
891 (((struct ipa_wdi3_setup_info *)(txrx))->pkt_offset)
892 #define __QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx) \
893 (((struct ipa_wdi3_setup_info *)(txrx))->desc_format_template)
894
895 /**
896 * __qdf_ipa_wdi_conn_in_params_t - information provided by
897 * uC offload client
898 */
899 typedef struct ipa_wdi3_conn_in_params __qdf_ipa_wdi_conn_in_params_t;
900
901 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in) \
902 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->notify)
903 #define __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in) \
904 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->priv)
905 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in) \
906 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->tx)
907 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in) \
908 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->rx)
909
910 /**
911 * __qdf_ipa_wdi_conn_out_params_t - information provided
912 * to WLAN druver
913 */
914 typedef struct ipa_wdi3_conn_out_params __qdf_ipa_wdi_conn_out_params_t;
915
916 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out) \
917 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_pa)
918 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_VA(pipe_out) \
919 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_va)
920 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out) \
921 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->rx_uc_db_pa)
922
923 /**
924 * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile
925 */
926 typedef struct ipa_wdi3_perf_profile __qdf_ipa_wdi_perf_profile_t;
927
928 #define __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile) \
929 (((struct ipa_wdi3_perf_profile *)(profile))->client)
930 #define __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile) \
931 (((struct ipa_wdi3_perf_profile *)(profile))->max_supported_bw_mbps)
932
933 /**
934 * __qdf_ipa_wdi_reg_intf - Client should call this function to
935 * init WDI3 IPA offload data path
936 *
937 * Note: Should not be called from atomic context and only
938 * after checking IPA readiness using ipa_register_ipa_ready_cb()
939 *
940 * @Return 0 on success, negative on failure
941 */
__qdf_ipa_wdi_reg_intf(struct ipa_wdi3_reg_intf_in_params * in)942 static inline int __qdf_ipa_wdi_reg_intf(
943 struct ipa_wdi3_reg_intf_in_params *in)
944 {
945 return ipa_wdi3_reg_intf(in);
946 }
947
948 /**
949 * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
950 * function to deregister before unload and after disconnect
951 *
952 * @Return 0 on success, negative on failure
953 */
__qdf_ipa_wdi_dereg_intf(const char * netdev_name)954 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name)
955 {
956 return ipa_wdi3_dereg_intf(netdev_name);
957 }
958
959 /**
960 * __qdf_ipa_wdi_conn_pipes - Client should call this
961 * function to connect pipes
962 * @in: [in] input parameters from client
963 * @out: [out] output params to client
964 *
965 * Note: Should not be called from atomic context and only
966 * after checking IPA readiness using ipa_register_ipa_ready_cb()
967 *
968 * @Return 0 on success, negative on failure
969 */
__qdf_ipa_wdi_conn_pipes(struct ipa_wdi3_conn_in_params * in,struct ipa_wdi3_conn_out_params * out)970 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi3_conn_in_params *in,
971 struct ipa_wdi3_conn_out_params *out)
972 {
973 return ipa_wdi3_conn_pipes(in, out);
974 }
975
976 /**
977 * __qdf_ipa_wdi_disconn_pipes() - Client should call this
978 * function to disconnect pipes
979 *
980 * Note: Should not be called from atomic context
981 *
982 * Returns: 0 on success, negative on failure
983 */
__qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)984 static inline int __qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl)
985 {
986 return ipa_wdi3_disconn_pipes_per_inst(hdl);
987 }
988
989 /**
990 * __qdf_ipa_wdi_enable_pipes() - Client should call this
991 * function to enable IPA offload data path
992 * @hdl: IPA handle
993 *
994 * Note: Should not be called from atomic context
995 *
996 * Returns: 0 on success, negative on failure
997 */
__qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)998 static inline int __qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl)
999 {
1000 return ipa_wdi3_enable_pipes_per_inst(hdl);
1001 }
1002
1003 /**
1004 * __qdf_ipa_wdi_disable_pipes() - Client should call this
1005 * function to disable IPA offload data path
1006 * @hdl: IPA handle
1007 *
1008 * Note: Should not be called from atomic context
1009 *
1010 * Returns: 0 on success, negative on failure
1011 */
__qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)1012 static inline int __qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl)
1013 {
1014 return ipa_wdi3_disable_pipes_per_inst(hdl);
1015 }
1016
1017 /**
1018 * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to
1019 * set IPA clock bandwidth based on data rates
1020 * @profile: [in] BandWidth profile to use
1021 *
1022 * Returns: 0 on success, negative on failure
1023 */
__qdf_ipa_wdi_set_perf_profile(struct ipa_wdi3_perf_profile * profile)1024 static inline int __qdf_ipa_wdi_set_perf_profile(
1025 struct ipa_wdi3_perf_profile *profile)
1026 {
1027 return ipa_wdi3_set_perf_profile(profile);
1028 }
1029
1030 #endif /* CONFIG_IPA_WDI_UNIFIED_API */
1031
1032 #endif /* IPA_OFFLOAD */
1033 #endif /* I_QDF_IPA_WDI_H */
1034