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 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 41)) 289 /* MSM kernel support added in I6418ae5bc4f030f6348e0f580b61b6adc1b92cf3 */ 290 #define __QDF_IPA_WDI_SETUP_INFO_RX_BANK_ID(txrx, bid) \ 291 ((((struct ipa_wdi_pipe_setup_info *)(txrx))->rx_bank_id) = (bid)) 292 293 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_BANK_ID(txrx, bid) \ 294 ((((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->rx_bank_id) = (bid)) 295 #else 296 #define __QDF_IPA_WDI_SETUP_INFO_RX_BANK_ID(txrx, bid) 297 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_RX_BANK_ID(txrx, bid) 298 #endif 299 300 /** 301 * __qdf_ipa_wdi_conn_in_params_t - information provided by 302 * uC offload client 303 */ 304 typedef struct ipa_wdi_conn_in_params __qdf_ipa_wdi_conn_in_params_t; 305 306 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in) \ 307 (((struct ipa_wdi_conn_in_params *)(pipe_in))->notify) 308 #define __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in) \ 309 (((struct ipa_wdi_conn_in_params *)(pipe_in))->priv) 310 #define __QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(pipe_in) \ 311 (((struct ipa_wdi_conn_in_params *)(pipe_in))->is_smmu_enabled) 312 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NUM_SYS_PIPE_NEEDED(pipe_in) \ 313 (((struct ipa_wdi_conn_in_params *)(pipe_in))->num_sys_pipe_needed) 314 #define __QDF_IPA_WDI_CONN_IN_PARAMS_SYS_IN(in) \ 315 (((struct ipa_wdi_conn_in_params *)(pipe_in))->sys_in) 316 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in) \ 317 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx) 318 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_SMMU(pipe_in) \ 319 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx_smmu) 320 #ifdef IPA_WDI3_TX_TWO_PIPES 321 #define __QDF_IPA_WDI_CONN_IN_PARAMS_IS_TX1_USED(pipe_in) \ 322 (((struct ipa_wdi_conn_in_params *)(pipe_in))->is_tx1_used) 323 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_ALT_PIPE(pipe_in) \ 324 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx1.tx) 325 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_ALT_PIPE_SMMU(pipe_in) \ 326 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx1.tx_smmu) 327 #endif 328 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in) \ 329 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx) 330 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_SMMU(pipe_in) \ 331 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx_smmu) 332 #ifdef IPA_WDI3_VLAN_SUPPORT 333 #define __QDF_IPA_WDI_CONN_IN_PARAMS_IS_RX1_USED(pipe_in) \ 334 (((struct ipa_wdi_conn_in_params *)(pipe_in))->is_rx1_used) 335 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_ALT(pipe_in) \ 336 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx1.rx) 337 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_ALT_SMMU(pipe_in) \ 338 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx1.rx_smmu) 339 #endif 340 #define __QDF_IPA_WDI_CONN_IN_PARAMS_HANDLE(pipe_in) \ 341 (((struct ipa_wdi_conn_in_params *)(pipe_in))->hdl) 342 343 #ifdef IPA_WDS_EASYMESH_FEATURE 344 #define __QDF_IPA_WDI_CONN_IN_PARAMS_AST_NOTIFY(pipe_in) \ 345 (((struct ipa_wdi_conn_in_params *)(pipe_in))->ast_notify) 346 #endif 347 348 /** 349 * __qdf_ipa_wdi_conn_out_params_t - information provided 350 * to WLAN druver 351 */ 352 typedef struct ipa_wdi_conn_out_params __qdf_ipa_wdi_conn_out_params_t; 353 354 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out) \ 355 (((struct ipa_wdi_conn_out_params *)(pipe_out))->tx_uc_db_pa) 356 #ifdef IPA_WDI3_TX_TWO_PIPES 357 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_ALT_DB_PA(pipe_out) \ 358 (((struct ipa_wdi_conn_out_params *)(pipe_out))->tx1_uc_db_pa) 359 #endif 360 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out) \ 361 (((struct ipa_wdi_conn_out_params *)(pipe_out))->rx_uc_db_pa) 362 #ifdef IPA_WDI3_VLAN_SUPPORT 363 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_ALT_UC_DB_PA(pipe_out) \ 364 (((struct ipa_wdi_conn_out_params *)(pipe_out))->rx1_uc_db_pa) 365 #endif 366 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0)) 367 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_IS_DB_DDR_MAPPED(pipe_out) \ 368 (((struct ipa_wdi_conn_out_params *)(pipe_out))->is_ddr_mapped) 369 #else 370 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_IS_DB_DDR_MAPPED(pipe_out) false 371 #endif 372 373 /** 374 * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile 375 */ 376 typedef struct ipa_wdi_perf_profile __qdf_ipa_wdi_perf_profile_t; 377 378 #define __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile) \ 379 (((struct ipa_wdi_perf_profile *)(profile))->client) 380 #define __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile) \ 381 (((struct ipa_wdi_perf_profile *)(profile))->max_supported_bw_mbps) 382 383 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0)) 384 /** 385 * __qdf_ipa_wdi_init - Client should call this function to 386 * init WDI IPA offload data path 387 * 388 * Note: Should not be called from atomic context and only 389 * after checking IPA readiness using ipa_register_ipa_ready_cb() 390 * 391 * @Return 0 on success, negative on failure 392 */ 393 static inline int __qdf_ipa_wdi_init(struct ipa_wdi_init_in_params *in, 394 struct ipa_wdi_init_out_params *out) 395 { 396 return ipa_wdi_init_per_inst(in, out); 397 } 398 399 /** 400 * __qdf_ipa_wdi_cleanup - Client should call this function to 401 * clean up WDI IPA offload data path 402 * @hdl: IPA handle 403 * 404 * @Return 0 on success, negative on failure 405 */ 406 static inline int __qdf_ipa_wdi_cleanup(__qdf_ipa_wdi_hdl_t hdl) 407 { 408 return ipa_wdi_cleanup_per_inst(hdl); 409 } 410 411 /** 412 * __qdf_ipa_wdi_reg_intf - Client should call this function to 413 * init WDI IPA offload data path 414 * 415 * Note: Should not be called from atomic context and only 416 * after checking IPA readiness using ipa_register_ipa_ready_cb() 417 * 418 * @Return 0 on success, negative on failure 419 */ 420 static inline int __qdf_ipa_wdi_reg_intf( 421 struct ipa_wdi_reg_intf_in_params *in) 422 { 423 return ipa_wdi_reg_intf_per_inst(in); 424 } 425 426 /** 427 * __qdf_ipa_wdi_dereg_intf - Client Driver should call this 428 * function to deregister before unload and after disconnect 429 * @hdl: IPA handle 430 * 431 * @Return 0 on success, negative on failure 432 */ 433 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name, 434 __qdf_ipa_wdi_hdl_t hdl) 435 { 436 return ipa_wdi_dereg_intf_per_inst(netdev_name, hdl); 437 } 438 439 /** 440 * __qdf_ipa_wdi_conn_pipes - Client should call this 441 * function to connect pipes 442 * @in: [in] input parameters from client 443 * @out: [out] output params to client 444 * 445 * Note: Should not be called from atomic context and only 446 * after checking IPA readiness using ipa_register_ipa_ready_cb() 447 * 448 * @Return 0 on success, negative on failure 449 */ 450 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in, 451 struct ipa_wdi_conn_out_params *out) 452 { 453 return ipa_wdi_conn_pipes_per_inst(in, out); 454 } 455 456 /** 457 * __qdf_ipa_wdi_disconn_pipes() - Client should call this 458 * function to disconnect pipes 459 * @hdl: IPA handle 460 * 461 * Note: Should not be called from atomic context 462 * 463 * Returns: 0 on success, negative on failure 464 */ 465 static inline int __qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl) 466 { 467 return ipa_wdi_disconn_pipes_per_inst(hdl); 468 } 469 470 /** 471 * __qdf_ipa_wdi_enable_pipes() - Client should call this 472 * function to enable IPA offload data path 473 * @hdl: IPA handle 474 * 475 * Note: Should not be called from atomic context 476 * 477 * Returns: 0 on success, negative on failure 478 */ 479 static inline int __qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl) 480 { 481 return ipa_wdi_enable_pipes_per_inst(hdl); 482 } 483 484 /** 485 * __qdf_ipa_wdi_disable_pipes() - Client should call this 486 * function to disable IPA offload data path 487 * @hdl: IPA handle 488 * 489 * Note: Should not be called from atomic context 490 * 491 * Returns: 0 on success, negative on failure 492 */ 493 static inline int __qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl) 494 { 495 return ipa_wdi_disable_pipes_per_inst(hdl); 496 } 497 498 /** 499 * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to 500 * set IPA clock bandwidth based on data rates 501 * @hdl: IPA handle 502 * @profile: [in] BandWidth profile to use 503 * 504 * Returns: 0 on success, negative on failure 505 */ 506 static inline int __qdf_ipa_wdi_set_perf_profile(__qdf_ipa_wdi_hdl_t hdl, 507 struct ipa_wdi_perf_profile *profile) 508 { 509 return ipa_wdi_set_perf_profile_per_inst(hdl, profile); 510 } 511 512 /** 513 * __qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to 514 * create smmu mapping 515 * @hdl: IPA handle 516 * @num_buffers: [in] number of buffers 517 * @info: [in] wdi buffer info 518 * 519 * Returns: 0 on success, negative on failure 520 */ 521 static inline int __qdf_ipa_wdi_create_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl, 522 u32 num_buffers, 523 struct ipa_wdi_buffer_info *info) 524 { 525 return ipa_wdi_create_smmu_mapping_per_inst(hdl, num_buffers, info); 526 } 527 528 /** 529 * __qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to 530 * release smmu mapping 531 * @hdl: IPA handle 532 * @num_buffers: [in] number of buffers 533 * @info: [in] wdi buffer info 534 * 535 * Returns: 0 on success, negative on failure 536 */ 537 static inline int __qdf_ipa_wdi_release_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl, 538 u32 num_buffers, 539 struct ipa_wdi_buffer_info *info) 540 { 541 return ipa_wdi_release_smmu_mapping_per_inst(hdl, num_buffers, info); 542 } 543 #else 544 /** 545 * __qdf_ipa_wdi_init - Client should call this function to 546 * init WDI IPA offload data path 547 * 548 * Note: Should not be called from atomic context and only 549 * after checking IPA readiness using ipa_register_ipa_ready_cb() 550 * 551 * @Return 0 on success, negative on failure 552 */ 553 static inline int __qdf_ipa_wdi_init(struct ipa_wdi_init_in_params *in, 554 struct ipa_wdi_init_out_params *out) 555 { 556 return ipa_wdi_init(in, out); 557 } 558 559 /** 560 * __qdf_ipa_wdi_cleanup - Client should call this function to 561 * clean up WDI IPA offload data path 562 * @hdl: IPA handle 563 * 564 * @Return 0 on success, negative on failure 565 */ 566 static inline int __qdf_ipa_wdi_cleanup(__qdf_ipa_wdi_hdl_t hdl) 567 { 568 return ipa_wdi_cleanup(); 569 } 570 571 /** 572 * __qdf_ipa_wdi_reg_intf - Client should call this function to 573 * init WDI IPA offload data path 574 * 575 * Note: Should not be called from atomic context and only 576 * after checking IPA readiness using ipa_register_ipa_ready_cb() 577 * 578 * @Return 0 on success, negative on failure 579 */ 580 static inline int __qdf_ipa_wdi_reg_intf( 581 struct ipa_wdi_reg_intf_in_params *in) 582 { 583 return ipa_wdi_reg_intf(in); 584 } 585 586 /** 587 * __qdf_ipa_wdi_dereg_intf - Client Driver should call this 588 * function to deregister before unload and after disconnect 589 * @hdl: IPA handle 590 * 591 * @Return 0 on success, negative on failure 592 */ 593 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name, 594 __qdf_ipa_wdi_hdl_t hdl) 595 { 596 return ipa_wdi_dereg_intf(netdev_name); 597 } 598 599 /** 600 * __qdf_ipa_wdi_conn_pipes - Client should call this 601 * function to connect pipes 602 * @in: [in] input parameters from client 603 * @out: [out] output params to client 604 * 605 * Note: Should not be called from atomic context and only 606 * after checking IPA readiness using ipa_register_ipa_ready_cb() 607 * 608 * @Return 0 on success, negative on failure 609 */ 610 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in, 611 struct ipa_wdi_conn_out_params *out) 612 { 613 return ipa_wdi_conn_pipes(in, out); 614 } 615 616 /** 617 * __qdf_ipa_wdi_disconn_pipes() - Client should call this 618 * function to disconnect pipes 619 * @hdl: IPA handle 620 * 621 * Note: Should not be called from atomic context 622 * 623 * Returns: 0 on success, negative on failure 624 */ 625 static inline int __qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl) 626 { 627 return ipa_wdi_disconn_pipes(); 628 } 629 630 /** 631 * __qdf_ipa_wdi_enable_pipes() - Client should call this 632 * function to enable IPA offload data path 633 * @hdl: IPA handle 634 * 635 * Note: Should not be called from atomic context 636 * 637 * Returns: 0 on success, negative on failure 638 */ 639 static inline int __qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl) 640 { 641 return ipa_wdi_enable_pipes(); 642 } 643 644 /** 645 * __qdf_ipa_wdi_disable_pipes() - Client should call this 646 * function to disable IPA offload data path 647 * @hdl: IPA handle 648 * 649 * Note: Should not be called from atomic context 650 * 651 * Returns: 0 on success, negative on failure 652 */ 653 static inline int __qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl) 654 { 655 return ipa_wdi_disable_pipes(); 656 } 657 658 /** 659 * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to 660 * set IPA clock bandwidth based on data rates 661 * @hdl: IPA handle 662 * @profile: [in] BandWidth profile to use 663 * 664 * Returns: 0 on success, negative on failure 665 */ 666 static inline int __qdf_ipa_wdi_set_perf_profile(__qdf_ipa_wdi_hdl_t hdl, 667 struct ipa_wdi_perf_profile *profile) 668 { 669 return ipa_wdi_set_perf_profile(profile); 670 } 671 672 /** 673 * __qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to 674 * create smmu mapping 675 * @hdl: IPA handle 676 * @num_buffers: [in] number of buffers 677 * @info: [in] wdi buffer info 678 * 679 * Returns: 0 on success, negative on failure 680 */ 681 static inline int __qdf_ipa_wdi_create_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl, 682 u32 num_buffers, 683 struct ipa_wdi_buffer_info *info) 684 { 685 return ipa_wdi_create_smmu_mapping(num_buffers, info); 686 } 687 688 /** 689 * __qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to 690 * release smmu mapping 691 * @hdl: IPA handle 692 * @num_buffers: [in] number of buffers 693 * @info: [in] wdi buffer info 694 * 695 * Returns: 0 on success, negative on failure 696 */ 697 static inline int __qdf_ipa_wdi_release_smmu_mapping(__qdf_ipa_wdi_hdl_t hdl, 698 u32 num_buffers, 699 struct ipa_wdi_buffer_info *info) 700 { 701 return ipa_wdi_release_smmu_mapping(num_buffers, info); 702 } 703 704 #endif 705 706 #ifdef WDI3_STATS_UPDATE 707 /** 708 * __qdf_ipa_wdi_wlan_stats() - Client should call this function to 709 * send Tx byte counts to IPA driver 710 * @tx_stats: number of Tx bytes on STA and SAP 711 * 712 * Returns: 0 on success, negative on failure 713 */ 714 static inline int __qdf_ipa_wdi_wlan_stats(struct ipa_wdi_tx_info *tx_stats) 715 { 716 return ipa_wdi_sw_stats(tx_stats); 717 } 718 719 /** 720 * ipa_uc_bw_monitor() - start/stop uc bw monitoring 721 * @bw_info: set bw info levels to monitor 722 * 723 * Returns: 0 on success, negative on failure 724 */ 725 static inline int __qdf_ipa_uc_bw_monitor(struct ipa_wdi_bw_info *bw_info) 726 { 727 return ipa_uc_bw_monitor(bw_info); 728 } 729 #endif 730 #else /* CONFIG_IPA_WDI_UNIFIED_API */ 731 732 /** 733 * __qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW 734 */ 735 typedef struct ipa_wdi3_hdr_info __qdf_ipa_wdi_hdr_info_t; 736 737 #define __QDF_IPA_WDI_HDR_INFO_HDR(hdr_info) \ 738 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr) 739 #define __QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info) \ 740 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_len) 741 #define __QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info) \ 742 (((struct ipa_wdi3_hdr_info *)(hdr_info))->dst_mac_addr_offset) 743 #define __QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info) \ 744 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_type) 745 746 /** 747 * __qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload 748 * interface registration 749 */ 750 typedef struct ipa_wdi3_reg_intf_in_params __qdf_ipa_wdi_reg_intf_in_params_t; 751 752 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in) \ 753 (((struct ipa_wdi3_reg_intf_in_params *)(in))->netdev_name) 754 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in) \ 755 (((struct ipa_wdi3_reg_intf_in_params *)(in))->hdr_info) 756 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in) \ 757 (((struct ipa_wdi3_reg_intf_in_params *)(in))->is_meta_data_valid) 758 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in) \ 759 (((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data) 760 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in) \ 761 (((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data_mask) 762 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HANDLE(in) \ 763 (((struct ipa_wdi3_reg_intf_in_params *)(in))->hdl) 764 765 /** 766 * __qdf_ipa_wdi_setup_info_t - WDI3 TX/Rx configuration 767 */ 768 typedef struct ipa_wdi3_setup_info __qdf_ipa_wdi_pipe_setup_info_t; 769 770 #define __QDF_IPA_WDI_SETUP_INFO_NAT_EN(txrx) \ 771 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.nat.nat_en) 772 #define __QDF_IPA_WDI_SETUP_INFO_HDR_LEN(txrx) \ 773 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_len) 774 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_METADATA_VALID(txrx) \ 775 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid) 776 #define __QDF_IPA_WDI_SETUP_INFO_HDR_METADATA_REG_VALID(txrx) \ 777 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_metadata_reg_valid) 778 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE_VALID(txrx) \ 779 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid) 780 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE(txrx) \ 781 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size) 782 #define __QDF_IPA_WDI_SETUP_INFO_HDR_ADDITIONAL_CONST_LEN(txrx) \ 783 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_additional_const_len) 784 #define __QDF_IPA_WDI_SETUP_INFO_MODE(txrx) \ 785 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.mode.mode) 786 #define __QDF_IPA_WDI_SETUP_INFO_HDR_LITTLE_ENDIAN(txrx) \ 787 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr_ext.hdr_little_endian) 788 789 #define __QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx) \ 790 (((struct ipa_wdi3_setup_info *)(txrx))->client) 791 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx) \ 792 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_base_pa) 793 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx) \ 794 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_size) 795 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx) \ 796 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_doorbell_pa) 797 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx) \ 798 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_base_pa) 799 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx) \ 800 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_size) 801 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx) \ 802 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_doorbell_pa) 803 #define __QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx) \ 804 (((struct ipa_wdi3_setup_info *)(txrx))->num_pkt_buffers) 805 #define __QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx) \ 806 (((struct ipa_wdi3_setup_info *)(txrx))->pkt_offset) 807 #define __QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx) \ 808 (((struct ipa_wdi3_setup_info *)(txrx))->desc_format_template) 809 810 /** 811 * __qdf_ipa_wdi_conn_in_params_t - information provided by 812 * uC offload client 813 */ 814 typedef struct ipa_wdi3_conn_in_params __qdf_ipa_wdi_conn_in_params_t; 815 816 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in) \ 817 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->notify) 818 #define __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in) \ 819 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->priv) 820 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in) \ 821 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->tx) 822 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in) \ 823 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->rx) 824 825 /** 826 * __qdf_ipa_wdi_conn_out_params_t - information provided 827 * to WLAN druver 828 */ 829 typedef struct ipa_wdi3_conn_out_params __qdf_ipa_wdi_conn_out_params_t; 830 831 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out) \ 832 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_pa) 833 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_VA(pipe_out) \ 834 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_va) 835 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out) \ 836 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->rx_uc_db_pa) 837 838 /** 839 * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile 840 */ 841 typedef struct ipa_wdi3_perf_profile __qdf_ipa_wdi_perf_profile_t; 842 843 #define __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile) \ 844 (((struct ipa_wdi3_perf_profile *)(profile))->client) 845 #define __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile) \ 846 (((struct ipa_wdi3_perf_profile *)(profile))->max_supported_bw_mbps) 847 848 /** 849 * __qdf_ipa_wdi_reg_intf - Client should call this function to 850 * init WDI3 IPA offload data path 851 * 852 * Note: Should not be called from atomic context and only 853 * after checking IPA readiness using ipa_register_ipa_ready_cb() 854 * 855 * @Return 0 on success, negative on failure 856 */ 857 static inline int __qdf_ipa_wdi_reg_intf( 858 struct ipa_wdi3_reg_intf_in_params *in) 859 { 860 return ipa_wdi3_reg_intf(in); 861 } 862 863 /** 864 * __qdf_ipa_wdi_dereg_intf - Client Driver should call this 865 * function to deregister before unload and after disconnect 866 * 867 * @Return 0 on success, negative on failure 868 */ 869 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name) 870 { 871 return ipa_wdi3_dereg_intf(netdev_name); 872 } 873 874 /** 875 * __qdf_ipa_wdi_conn_pipes - Client should call this 876 * function to connect pipes 877 * @in: [in] input parameters from client 878 * @out: [out] output params to client 879 * 880 * Note: Should not be called from atomic context and only 881 * after checking IPA readiness using ipa_register_ipa_ready_cb() 882 * 883 * @Return 0 on success, negative on failure 884 */ 885 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi3_conn_in_params *in, 886 struct ipa_wdi3_conn_out_params *out) 887 { 888 return ipa_wdi3_conn_pipes(in, out); 889 } 890 891 /** 892 * __qdf_ipa_wdi_disconn_pipes() - Client should call this 893 * function to disconnect pipes 894 * 895 * Note: Should not be called from atomic context 896 * 897 * Returns: 0 on success, negative on failure 898 */ 899 static inline int __qdf_ipa_wdi_disconn_pipes(__qdf_ipa_wdi_hdl_t hdl) 900 { 901 return ipa_wdi3_disconn_pipes_per_inst(hdl); 902 } 903 904 /** 905 * __qdf_ipa_wdi_enable_pipes() - Client should call this 906 * function to enable IPA offload data path 907 * @hdl: IPA handle 908 * 909 * Note: Should not be called from atomic context 910 * 911 * Returns: 0 on success, negative on failure 912 */ 913 static inline int __qdf_ipa_wdi_enable_pipes(__qdf_ipa_wdi_hdl_t hdl) 914 { 915 return ipa_wdi3_enable_pipes_per_inst(hdl); 916 } 917 918 /** 919 * __qdf_ipa_wdi_disable_pipes() - Client should call this 920 * function to disable IPA offload data path 921 * @hdl: IPA handle 922 * 923 * Note: Should not be called from atomic context 924 * 925 * Returns: 0 on success, negative on failure 926 */ 927 static inline int __qdf_ipa_wdi_disable_pipes(__qdf_ipa_wdi_hdl_t hdl) 928 { 929 return ipa_wdi3_disable_pipes_per_inst(hdl); 930 } 931 932 /** 933 * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to 934 * set IPA clock bandwidth based on data rates 935 * @profile: [in] BandWidth profile to use 936 * 937 * Returns: 0 on success, negative on failure 938 */ 939 static inline int __qdf_ipa_wdi_set_perf_profile( 940 struct ipa_wdi3_perf_profile *profile) 941 { 942 return ipa_wdi3_set_perf_profile(profile); 943 } 944 945 #endif /* CONFIG_IPA_WDI_UNIFIED_API */ 946 947 #endif /* IPA_OFFLOAD */ 948 #endif /* I_QDF_IPA_WDI_H */ 949