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