1 /* 2 * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 #ifndef _I_QDF_IPA_H 18 #define _I_QDF_IPA_H 19 20 #ifdef IPA_OFFLOAD 21 22 #include <linux/ipa.h> 23 #include <linux/version.h> 24 25 /** 26 * __qdf_ipa_wdi_meter_evt_type_t - type of event client callback is 27 * for AP+STA mode metering 28 * @IPA_GET_WDI_SAP_STATS: get IPA_stats betwen SAP and STA - 29 * use ipa_get_wdi_sap_stats structure 30 * @IPA_SET_WIFI_QUOTA: set quota limit on STA - 31 * use ipa_set_wifi_quota structure 32 */ 33 typedef enum ipa_wdi_meter_evt_type __qdf_ipa_wdi_meter_evt_type_t; 34 35 typedef struct ipa_get_wdi_sap_stats __qdf_ipa_get_wdi_sap_stats_t; 36 37 #define QDF_IPA_GET_WDI_SAP_STATS_RESET_STATS(wdi_sap_stats) \ 38 (((struct ipa_get_wdi_sap_stats *)(wdi_sap_stats))->reset_stats) 39 #define QDF_IPA_GET_WDI_SAP_STATS_STATS_VALID(wdi_sap_stats) \ 40 (((struct ipa_get_wdi_sap_stats *)(wdi_sap_stats))->stats_valid) 41 #define QDF_IPA_GET_WDI_SAP_STATS_IPV4_TX_PACKETS(wdi_sap_stats) \ 42 (((struct ipa_get_wdi_sap_stats *)(wdi_sap_stats))->ipv4_tx_packets) 43 #define QDF_IPA_GET_WDI_SAP_STATS_IPV4_TX_BYTES(wdi_sap_stats) \ 44 (((struct ipa_get_wdi_sap_stats *)(wdi_sap_stats))->ipv4_tx_bytes) 45 #define QDF_IPA_GET_WDI_SAP_STATS_IPV4_RX_PACKETS(wdi_sap_stats) \ 46 (((struct ipa_get_wdi_sap_stats *)(wdi_sap_stats))->ipv4_rx_packets) 47 #define QDF_IPA_GET_WDI_SAP_STATS_IPV4_RX_BYTES(wdi_sap_stats) \ 48 (((struct ipa_get_wdi_sap_stats *)(wdi_sap_stats))->ipv4_rx_bytes) 49 #define QDF_IPA_GET_WDI_SAP_STATS_IPV6_TX_PACKETS(wdi_sap_stats) \ 50 (((struct ipa_get_wdi_sap_stats *)(wdi_sap_stats))->ipv6_tx_packets) 51 #define QDF_IPA_GET_WDI_SAP_STATS_IPV6_TX_BYTES(wdi_sap_stats) \ 52 (((struct ipa_get_wdi_sap_stats *)(wdi_sap_stats))->ipv6_tx_bytes) 53 #define QDF_IPA_GET_WDI_SAP_STATS_IPV6_RX_PACKETS(wdi_sap_stats) \ 54 (((struct ipa_get_wdi_sap_stats *)(wdi_sap_stats))->ipv6_rx_packets) 55 #define QDF_IPA_GET_WDI_SAP_STATS_IPV6_RX_BYTES(wdi_sap_stats) \ 56 (((struct ipa_get_wdi_sap_stats *)(wdi_sap_stats))->ipv6_rx_bytes) 57 58 /** 59 * __qdf_ipa_set_wifi_quota_t - structure used for 60 * IPA_SET_WIFI_QUOTA. 61 */ 62 typedef struct ipa_set_wifi_quota __qdf_ipa_set_wifi_quota_t; 63 64 #define QDF_IPA_SET_WIFI_QUOTA_BYTES(ipa_set_quota) \ 65 (((struct ipa_set_wifi_quota *)(ipa_set_quota))->quota_bytes) 66 #define QDF_IPA_SET_WIFI_QUOTA_SET_QUOTA(ipa_set_quota) \ 67 (((struct ipa_set_wifi_quota *)(ipa_set_quota))->set_quota) 68 #define QDF_IPA_SET_WIFI_QUOTA_SET_VALID(ipa_set_quota) \ 69 (((struct ipa_set_wifi_quota *)(ipa_set_quota))->set_valid) 70 71 /** 72 * __qdf_ipa_connect_params_t - low-level client connect input parameters. Either 73 * client allocates the data and desc FIFO and specifies that in data+desc OR 74 * specifies sizes and pipe_mem pref and IPA does the allocation. 75 */ 76 typedef struct ipa_connect_params __qdf_ipa_connect_params_t; 77 78 /** 79 * __qdf_ipa_tx_meta_t - meta-data for the TX packet 80 */ 81 typedef struct ipa_tx_meta __qdf_ipa_tx_meta_t; 82 83 /** 84 * __qdf_ipa_msg_free_fn_t - callback function 85 * 86 * Message callback registered by kernel client with IPA driver to 87 * free message payload after IPA driver processing is complete 88 */ 89 typedef void (*__qdf_ipa_msg_free_fn_t)(void *buff, u32 len, u32 type); 90 91 /** 92 * __qdf_ipa_sps_params_t - SPS related output parameters resulting from 93 */ 94 typedef struct ipa_sps_params __qdf_ipa_sps_params_t; 95 96 /** 97 * __qdf_ipa_tx_intf_t - interface tx properties 98 */ 99 typedef struct ipa_tx_intf __qdf_ipa_tx_intf_t; 100 101 #define QDF_IPA_TX_INTF_PROP(tx_intf) \ 102 (((struct ipa_tx_intf *)(tx_intf))->prop) 103 104 /** 105 * __qdf_ipa_rx_intf_t - interface rx properties 106 */ 107 typedef struct ipa_rx_intf __qdf_ipa_rx_intf_t; 108 109 #define QDF_IPA_RX_INTF_PROP(rx_intf) \ 110 (((struct ipa_rx_intf *)(rx_intf))->prop) 111 112 /** 113 * __qdf_ipa_ext_intf_t - interface ext properties 114 */ 115 typedef struct ipa_ext_intf __qdf_ipa_ext_intf_t; 116 117 /** 118 * __qdf_ipa_sys_connect_params_t - information needed to setup an IPA end-point 119 * in system-BAM mode 120 */ 121 typedef struct ipa_sys_connect_params __qdf_ipa_sys_connect_params_t; 122 123 #define QDF_IPA_SYS_PARAMS_NAT_EN(ipa_sys_params) \ 124 (((struct ipa_sys_connect_params *)(ipa_sys_params))->ipa_ep_cfg.nat.nat_en) 125 #define QDF_IPA_SYS_PARAMS_HDR_LEN(ipa_sys_params) \ 126 (((struct ipa_sys_connect_params *)(ipa_sys_params))->ipa_ep_cfg.hdr.hdr_len) 127 #define QDF_IPA_SYS_PARAMS_HDR_ADDITIONAL_CONST_LEN(ipa_sys_params) \ 128 (((struct ipa_sys_connect_params *)(ipa_sys_params))->ipa_ep_cfg.hdr.hdr_additional_const_len) 129 #define QDF_IPA_SYS_PARAMS_HDR_OFST_PKT_SIZE_VALID(ipa_sys_params) \ 130 (((struct ipa_sys_connect_params *)(ipa_sys_params))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid) 131 #define QDF_IPA_SYS_PARAMS_HDR_OFST_PKT_SIZE(ipa_sys_params) \ 132 (((struct ipa_sys_connect_params *)(ipa_sys_params))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size) 133 #define QDF_IPA_SYS_PARAMS_HDR_LITTLE_ENDIAN(ipa_sys_params) \ 134 (((struct ipa_sys_connect_params *)(ipa_sys_params))->ipa_ep_cfg.hdr_ext.hdr_little_endian) 135 #define QDF_IPA_SYS_PARAMS_MODE(ipa_sys_params) \ 136 (((struct ipa_sys_connect_params *)(ipa_sys_params))->ipa_ep_cfg.mode.mode) 137 #define QDF_IPA_SYS_PARAMS_CLIENT(ipa_sys_params) \ 138 (((struct ipa_sys_connect_params *)(ipa_sys_params))->client) 139 #define QDF_IPA_SYS_PARAMS_DESC_FIFO_SZ(ipa_sys_params) \ 140 (((struct ipa_sys_connect_params *)(ipa_sys_params))->desc_fifo_sz) 141 #define QDF_IPA_SYS_PARAMS_PRIV(ipa_sys_params) \ 142 (((struct ipa_sys_connect_params *)(ipa_sys_params))->priv) 143 #define QDF_IPA_SYS_PARAMS_NOTIFY(ipa_sys_params) \ 144 (((struct ipa_sys_connect_params *)(ipa_sys_params))->notify) 145 #define QDF_IPA_SYS_PARAMS_SKIP_EP_CFG(ipa_sys_params) \ 146 (((struct ipa_sys_connect_params *)(ipa_sys_params))->skip_ep_cfg) 147 #define QDF_IPA_SYS_PARAMS_KEEP_IPA_AWAKE(ipa_sys_params) \ 148 (((struct ipa_sys_connect_params *)(ipa_sys_params))->keep_ipa_awake) 149 150 /** 151 * __qdf_pa_rm_event_t - IPA RM events 152 * 153 * Indicate the resource state change 154 */ 155 typedef enum ipa_rm_event __qdf_ipa_rm_event_t; 156 157 /** 158 * struct __qdf_ipa_rm_register_params_t - information needed to 159 * register IPA RM client with IPA RM 160 */ 161 typedef struct ipa_rm_register_params __qdf_ipa_rm_register_params_t; 162 163 /** 164 * struct __qdf_ipa_rm_create_params_t - information needed to initialize 165 * the resource 166 * 167 * IPA RM client is expected to perform non blocking operations only 168 * in request_resource and release_resource functions and 169 * release notification context as soon as possible. 170 */ 171 typedef struct ipa_rm_create_params __qdf_ipa_rm_create_params_t; 172 173 #define QDF_IPA_RM_CREATE_PARAMS_NAME(create_params) \ 174 (((struct ipa_rm_create_params *)(create_params))->name) 175 #define QDF_IPA_RM_CREATE_PARAMS_USER_DATA(create_params) \ 176 (((struct ipa_rm_create_params *)(create_params))->reg_params.user_data) 177 #define QDF_IPA_RM_CREATE_PARAMS_NOTIFY_CB(create_params) \ 178 (((struct ipa_rm_create_params *)(create_params))->reg_params.notify_cb) 179 #define QDF_IPA_RM_CREATE_PARAMS_REQUEST_RESOURCE(create_params) \ 180 (((struct ipa_rm_create_params *)(create_params))->request_resource) 181 #define QDF_IPA_RM_CREATE_PARAMS_RELEASE_RESOURCE(create_params) \ 182 (((struct ipa_rm_create_params *)(create_params))->release_resource) 183 #define QDF_IPA_RM_CREATE_PARAMS_FLOOR_VOLTAGE(create_params) \ 184 (((struct ipa_rm_create_params *)(create_params))->floor_voltage) 185 186 /** 187 * __qdf_ipa_rm_perf_profile_t - information regarding IPA RM client performance 188 * profile 189 */ 190 typedef struct ipa_rm_perf_profile __qdf_ipa_rm_perf_profile_t; 191 192 #define QDF_IPA_RM_PERF_PROFILE_MAX_SUPPORTED_BANDWIDTH_MBPS(profile) \ 193 (((struct ipa_rm_perf_profile *)(profile))->max_supported_bandwidth_mbps) 194 195 /** 196 * __qdf_ipa_tx_data_desc_t - information needed 197 * to send data packet to HW link: link to data descriptors 198 * priv: client specific private data 199 */ 200 typedef struct ipa_tx_data_desc __qdf_ipa_tx_data_desc_t; 201 202 /** 203 * __qdf_ipa_rx_data_t - information needed 204 * to send to wlan driver on receiving data from ipa hw 205 */ 206 typedef struct ipa_rx_data __qdf_ipa_rx_data_t; 207 208 #define QDF_IPA_RX_DATA_SKB(desc) \ 209 (((struct ipa_rx_data *)(desc))->skb) 210 #define QDF_IPA_RX_DATA_SKB_LEN(desc) \ 211 (((struct ipa_rx_data *)(desc))->skb->len) 212 #define QDF_IPA_RX_DATA_DMA_ADDR(desc) \ 213 (((struct ipa_rx_data *)(desc))->dma_addr) 214 215 /** 216 * __qdf_ipa_wdi_ul_params_t - WDI_RX configuration 217 */ 218 typedef struct ipa_wdi_ul_params __qdf_ipa_wdi_ul_params_t; 219 220 /** 221 * __qdf_ipa_wdi_ul_params_smmu_t - WDI_RX configuration (with WLAN SMMU) 222 */ 223 typedef struct ipa_wdi_ul_params_smmu __qdf_ipa_wdi_ul_params_smmu_t; 224 225 /** 226 * __qdf_ipa_wdi_dl_params_t - WDI_TX configuration 227 */ 228 typedef struct ipa_wdi_dl_params __qdf_ipa_wdi_dl_params_t; 229 230 /** 231 * __qdf_ipa_wdi_dl_params_smmu_t - WDI_TX configuration (with WLAN SMMU) 232 */ 233 typedef struct ipa_wdi_dl_params_smmu __qdf_ipa_wdi_dl_params_smmu_t; 234 235 /** 236 * __qdf_ipa_wdi_in_params_t - information provided by WDI client 237 */ 238 typedef struct ipa_wdi_in_params __qdf_ipa_wdi_in_params_t; 239 240 #define QDF_IPA_PIPE_IN_NAT_EN(pipe_in) \ 241 (((struct ipa_wdi_in_params *)(pipe_in))->sys.ipa_ep_cfg.nat.nat_en) 242 #define QDF_IPA_PIPE_IN_HDR_LEN(pipe_in) \ 243 (((struct ipa_wdi_in_params *)(pipe_in))->sys.ipa_ep_cfg.hdr.hdr_len) 244 #define QDF_IPA_PIPE_IN_HDR_OFST_METADATA_VALID(pipe_in) \ 245 (((struct ipa_wdi_in_params *)(pipe_in))->sys.ipa_ep_cfg.hdr.hdr_ofst_metadata_valid) 246 #define QDF_IPA_PIPE_IN_HDR_METADATA_REG_VALID(pipe_in) \ 247 (((struct ipa_wdi_in_params *)(pipe_in))->sys.ipa_ep_cfg.hdr.hdr_metadata_reg_valid) 248 #define QDF_IPA_PIPE_IN_HDR_OFST_PKT_SIZE_VALID(pipe_in) \ 249 (((struct ipa_wdi_in_params *)(pipe_in))->sys.ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid) 250 #define QDF_IPA_PIPE_IN_HDR_OFST_PKT_SIZE(pipe_in) \ 251 (((struct ipa_wdi_in_params *)(pipe_in))->sys.ipa_ep_cfg.hdr.hdr_ofst_pkt_size) 252 #define QDF_IPA_PIPE_IN_HDR_ADDITIONAL_CONST_LEN(pipe_in) \ 253 (((struct ipa_wdi_in_params *)(pipe_in))->sys.ipa_ep_cfg.hdr.hdr_additional_const_len) 254 #define QDF_IPA_PIPE_IN_MODE(pipe_in) \ 255 (((struct ipa_wdi_in_params *)(pipe_in))->sys.ipa_ep_cfg.mode.mode) 256 #define QDF_IPA_PIPE_IN_CLIENT(pipe_in) \ 257 (((struct ipa_wdi_in_params *)(pipe_in))->sys.client) 258 #define QDF_IPA_PIPE_IN_DESC_FIFO_SZ(pipe_in) \ 259 (((struct ipa_wdi_in_params *)(pipe_in))->sys.desc_fifo_sz) 260 #define QDF_IPA_PIPE_IN_PRIV(pipe_in) \ 261 (((struct ipa_wdi_in_params *)(pipe_in))->sys.priv) 262 #define QDF_IPA_PIPE_IN_HDR_LITTLE_ENDIAN(pipe_in) \ 263 (((struct ipa_wdi_in_params *)(pipe_in))->sys.ipa_ep_cfg.hdr_ext.hdr_little_endian) 264 #define QDF_IPA_PIPE_IN_NOTIFY(pipe_in) \ 265 (((struct ipa_wdi_in_params *)(pipe_in))->sys.notify) 266 #define QDF_IPA_PIPE_IN_KEEP_IPA_AWAKE(pipe_in) \ 267 (((struct ipa_wdi_in_params *)(pipe_in))->sys.keep_ipa_awake) 268 #define QDF_IPA_PIPE_IN_KEEP_IPA_AWAKE(pipe_in) \ 269 (((struct ipa_wdi_in_params *)(pipe_in))->sys.keep_ipa_awake) 270 #ifdef FEATURE_METERING 271 #define QDF_IPA_PIPE_IN_WDI_NOTIFY(pipe_in) \ 272 (((struct ipa_wdi_in_params *)(pipe_in))->wdi_notify) 273 #endif 274 275 #ifdef ENABLE_SMMU_S1_TRANSLATION 276 #define QDF_IPA_PIPE_IN_SMMU_ENABLED(pipe_in) \ 277 (((struct ipa_wdi_in_params *)(pipe_in))->smmu_enabled) 278 279 #define QDF_IPA_PIPE_IN_DL_SMMU_COMP_RING(pipe_in) \ 280 (((struct ipa_wdi_in_params *)(pipe_in))->u.dl_smmu.comp_ring) 281 #define QDF_IPA_PIPE_IN_DL_SMMU_CE_RING(pipe_in) \ 282 (((struct ipa_wdi_in_params *)(pipe_in))->u.dl_smmu.ce_ring) 283 #define QDF_IPA_PIPE_IN_DL_SMMU_COMP_RING_SIZE(pipe_in) \ 284 (((struct ipa_wdi_in_params *)(pipe_in))->u.dl_smmu.comp_ring_size) 285 #define QDF_IPA_PIPE_IN_DL_SMMU_CE_RING_SIZE(pipe_in) \ 286 (((struct ipa_wdi_in_params *)(pipe_in))->u.dl_smmu.ce_ring_size) 287 #define QDF_IPA_PIPE_IN_DL_SMMU_CE_DOOR_BELL_PA(pipe_in) \ 288 (((struct ipa_wdi_in_params *)(pipe_in))->u.dl_smmu.ce_door_bell_pa) 289 #define QDF_IPA_PIPE_IN_DL_SMMU_NUM_TX_BUFFERS(pipe_in) \ 290 (((struct ipa_wdi_in_params *)(pipe_in))->u.dl_smmu.num_tx_buffers) 291 292 #define QDF_IPA_PIPE_IN_UL_SMMU_RDY_RING(pipe_in) \ 293 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul_smmu.rdy_ring) 294 #define QDF_IPA_PIPE_IN_UL_SMMU_RDY_RING_SIZE(pipe_in) \ 295 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul_smmu.rdy_ring_size) 296 #define QDF_IPA_PIPE_IN_UL_SMMU_RDY_RING_RP_PA(pipe_in) \ 297 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul_smmu.rdy_ring_rp_pa) 298 #define QDF_IPA_PIPE_IN_UL_SMMU_RDY_RING_RP_VA(pipe_in) \ 299 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul_smmu.rdy_ring_rp_va) 300 #define QDF_IPA_PIPE_IN_UL_SMMU_RDY_COMP_RING(pipe_in) \ 301 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul_smmu.rdy_comp_ring) 302 #define QDF_IPA_PIPE_IN_UL_SMMU_RDY_COMP_RING_SIZE(pipe_in) \ 303 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul_smmu.rdy_comp_ring_size) 304 #define QDF_IPA_PIPE_IN_UL_SMMU_RDY_COMP_RING_WP_PA(pipe_in) \ 305 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul_smmu.rdy_comp_ring_wp_pa) 306 #define QDF_IPA_PIPE_IN_UL_SMMU_RDY_COMP_RING_WP_VA(pipe_in) \ 307 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul_smmu.rdy_comp_ring_wp_va) 308 #endif 309 310 #define QDF_IPA_PIPE_IN_DL_COMP_RING_BASE_PA(pipe_in) \ 311 (((struct ipa_wdi_in_params *)(pipe_in))->u.dl.comp_ring_base_pa) 312 #define QDF_IPA_PIPE_IN_DL_COMP_RING_SIZE(pipe_in) \ 313 (((struct ipa_wdi_in_params *)(pipe_in))->u.dl.comp_ring_size) 314 #define QDF_IPA_PIPE_IN_DL_CE_RING_BASE_PA(pipe_in) \ 315 (((struct ipa_wdi_in_params *)(pipe_in))->u.dl.ce_ring_base_pa) 316 #define QDF_IPA_PIPE_IN_DL_CE_RING_SIZE(pipe_in) \ 317 (((struct ipa_wdi_in_params *)(pipe_in))->u.dl.ce_ring_size) 318 #define QDF_IPA_PIPE_IN_DL_CE_DOOR_BELL_PA(pipe_in) \ 319 (((struct ipa_wdi_in_params *)(pipe_in))->u.dl.ce_door_bell_pa) 320 #define QDF_IPA_PIPE_IN_DL_NUM_TX_BUFFERS(pipe_in) \ 321 (((struct ipa_wdi_in_params *)(pipe_in))->u.dl.num_tx_buffers) 322 323 #define QDF_IPA_PIPE_IN_UL_RDY_RING_BASE_PA(pipe_in) \ 324 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul.rdy_ring_base_pa) 325 #define QDF_IPA_PIPE_IN_UL_RDY_RING_SIZE(pipe_in) \ 326 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul.rdy_ring_size) 327 #define QDF_IPA_PIPE_IN_UL_RDY_RING_RP_PA(pipe_in) \ 328 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul.rdy_ring_rp_pa) 329 #define QDF_IPA_PIPE_IN_UL_RDY_RING_RP_VA(pipe_in) \ 330 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul.rdy_ring_rp_va) 331 #define QDF_IPA_PIPE_IN_UL_RDY_COMP_RING(pipe_in) \ 332 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul.rdy_comp_ring_base_pa) 333 #define QDF_IPA_PIPE_IN_UL_RDY_COMP_RING_SIZE(pipe_in) \ 334 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul.rdy_comp_ring_size) 335 #define QDF_IPA_PIPE_IN_UL_RDY_COMP_RING_WP_PA(pipe_in) \ 336 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul.rdy_comp_ring_wp_pa) 337 #define QDF_IPA_PIPE_IN_UL_RDY_COMP_RING_WP_VA(pipe_in) \ 338 (((struct ipa_wdi_in_params *)(pipe_in))->u.ul.rdy_comp_ring_wp_va) 339 340 /** 341 * __qdf_ipa_wdi_out_params_t - information provided to WDI client 342 */ 343 typedef struct ipa_wdi_out_params __qdf_ipa_wdi_out_params_t; 344 345 #define QDF_IPA_PIPE_OUT_UC_DOOR_BELL_PA(pipe_out) \ 346 (((struct ipa_wdi_out_params *)(pipe_out))->uc_door_bell_pa) 347 #define QDF_IPA_PIPE_OUT_CLNT_HDL(pipe_out) \ 348 (((struct ipa_wdi_out_params *)(pipe_out))->clnt_hdl) 349 350 /** 351 * __qdf_ipa_wdi_db_params_t - information provided to retrieve 352 * physical address of uC doorbell 353 */ 354 typedef struct ipa_wdi_db_params __qdf_ipa_wdi_db_params_t; 355 356 /** 357 * __qdf_ipa_wdi_uc_ready_params_t - uC ready CB parameters 358 */ 359 typedef void (*__qdf_ipa_uc_ready_cb)(void *priv); 360 typedef struct ipa_wdi_uc_ready_params __qdf_ipa_wdi_uc_ready_params_t; 361 362 #define QDF_IPA_UC_READY_PARAMS_IS_UC_READY(uc_ready_param) \ 363 (((struct ipa_wdi_uc_ready_params *)(uc_ready_param))->is_uC_ready) 364 #define QDF_IPA_UC_READY_PARAMS_PRIV(uc_ready_param) \ 365 (((struct ipa_wdi_uc_ready_params *)(uc_ready_param))->priv) 366 #define QDF_IPA_UC_READY_PARAMS_NOTIFY(uc_ready_param) \ 367 (((struct ipa_wdi_uc_ready_params *)(uc_ready_param))->notify) 368 369 /** 370 * __qdf_ipa_wdi_buffer_info_t - address info of a WLAN allocated buffer 371 * 372 * IPA driver will create/release IOMMU mapping in IPA SMMU from iova->pa 373 */ 374 typedef struct ipa_wdi_buffer_info __qdf_ipa_wdi_buffer_info_t; 375 376 /** 377 * __qdf_ipa_gsi_ep_config_t - IPA GSI endpoint configurations 378 */ 379 typedef struct ipa_gsi_ep_config __qdf_ipa_gsi_ep_config_t; 380 381 #ifdef WDI3_STATS_UPDATE 382 /** 383 * __qdf_ipa_wdi_tx_info_t - WLAN embedded TX information 384 */ 385 typedef struct ipa_wdi_tx_info __qdf_ipa_wdi_tx_info_t; 386 387 #define QDF_IPA_WDI_TX_INFO_STA_TX_BYTES(stats_info) \ 388 (((struct ipa_wdi_tx_info *)stats_info)->sta_tx) 389 #define QDF_IPA_WDI_TX_INFO_SAP_TX_BYTES(stats_info) \ 390 (((struct ipa_wdi_tx_info *)stats_info)->ap_tx) 391 /** 392 * __qdf_ipa_wdi_bw_info_t - BW levels to be monitored by uC 393 */ 394 typedef struct ipa_wdi_bw_info __qdf_ipa_wdi_bw_info_t; 395 396 #define QDF_IPA_WDI_BW_INFO_THRESHOLD_LEVEL_1(bw_info) \ 397 (((struct ipa_wdi_bw_info *)bw_info)->threshold[0]) 398 #define QDF_IPA_WDI_BW_INFO_THRESHOLD_LEVEL_2(bw_info) \ 399 (((struct ipa_wdi_bw_info *)bw_info)->threshold[1]) 400 #define QDF_IPA_WDI_BW_INFO_THRESHOLD_LEVEL_3(bw_info) \ 401 (((struct ipa_wdi_bw_info *)bw_info)->threshold[2]) 402 #define QDF_IPA_WDI_BW_INFO_START_STOP(bw_info) \ 403 (((struct ipa_wdi_bw_info *)bw_info)->stop) 404 405 /** 406 * __qdf_ipa_inform_wlan_bw_t - BW information given by IPA driver 407 */ 408 typedef struct ipa_inform_wlan_bw __qdf_ipa_inform_wlan_bw_t; 409 410 #define QDF_IPA_INFORM_WLAN_BW_INDEX(bw_inform) \ 411 (((struct ipa_inform_wlan_bw*)bw_inform)->index) 412 #define QDF_IPA_INFORM_WLAN_BW_THROUGHPUT(bw_inform) \ 413 (((struct ipa_inform_wlan_bw*)bw_inform)->throughput) 414 415 #endif /* WDI3_STATS_UPDATE */ 416 417 /** 418 * __qdf_ipa_dp_evt_type_t - type of event client callback is 419 * invoked for on data path 420 * @IPA_RECEIVE: data is struct sk_buff 421 * @IPA_WRITE_DONE: data is struct sk_buff 422 */ 423 typedef enum ipa_dp_evt_type __qdf_ipa_dp_evt_type_t; 424 425 typedef struct ipa_hdr_add __qdf_ipa_hdr_add_t; 426 typedef struct ipa_hdr_del __qdf_ipa_hdr_del_t; 427 typedef struct ipa_ioc_add_hdr __qdf_ipa_ioc_add_hdr_t; 428 429 #define QDF_IPA_IOC_ADD_HDR_COMMIT(ipa_hdr) \ 430 (((struct ipa_ioc_add_hdr *)(ipa_hdr))->commit) 431 #define QDF_IPA_IOC_ADD_HDR_NUM_HDRS(ipa_hdr) \ 432 (((struct ipa_ioc_add_hdr *)(ipa_hdr))->num_hdrs) 433 #define QDF_IPA_IOC_ADD_HDR_NAME(ipa_hdr) \ 434 (((struct ipa_ioc_add_hdr *)(ipa_hdr))->hdr[0].name) 435 #define QDF_IPA_IOC_ADD_HDR_HDR(ipa_hdr) \ 436 (((struct ipa_ioc_add_hdr *)(ipa_hdr))->hdr[0].hdr) 437 #define QDF_IPA_IOC_ADD_HDR_HDR_LEN(ipa_hdr) \ 438 (((struct ipa_ioc_add_hdr *)(ipa_hdr))->hdr[0].hdr_len) 439 #define QDF_IPA_IOC_ADD_HDR_TYPE(ipa_hdr) \ 440 (((struct ipa_ioc_add_hdr *)(ipa_hdr))->hdr[0].type) 441 #define QDF_IPA_IOC_ADD_HDR_IS_PARTIAL(ipa_hdr) \ 442 (((struct ipa_ioc_add_hdr *)(ipa_hdr))->hdr[0].is_partial) 443 #define QDF_IPA_IOC_ADD_HDR_HDR_HDL(ipa_hdr) \ 444 (((struct ipa_ioc_add_hdr *)(ipa_hdr))->hdr[0].hdr_hdl) 445 #define QDF_IPA_IOC_ADD_HDR_STATUS(ipa_hdr) \ 446 (((struct ipa_ioc_add_hdr *)(ipa_hdr))->hdr[0].status) 447 #define QDF_IPA_IOC_ADD_HDR_IS_ETH2_OFST_VALID(ipa_hdr) \ 448 (((struct ipa_ioc_add_hdr *)(ipa_hdr))->hdr[0].is_eth2_ofst_valid) 449 #define QDF_IPA_IOC_ADD_HDR_ETH2_OFST(ipa_hdr) \ 450 (((struct ipa_ioc_add_hdr *)(ipa_hdr))->hdr[0].eth2_ofst) 451 452 typedef struct ipa_ioc_del_hdr __qdf_ipa_ioc_del_hdr_t; 453 454 #define QDF_IPA_IOC_DEL_HDR_COMMIT(ipa_hdr) \ 455 (((struct ipa_ioc_del_hdr *)(ipa_hdr))->commit) 456 #define QDF_IPA_IOC_DEL_HDR_NUM_HDRS(ipa_hdr) \ 457 (((struct ipa_ioc_del_hdr *)(ipa_hdr))->num_hdls) 458 #define QDF_IPA_IOC_DEL_HDR_HDL(ipa_hdr) \ 459 (((struct ipa_ioc_del_hdr *)(ipa_hdr))->hdl[0].hdl) 460 #define QDF_IPA_IOC_DEL_HDR_STATUS(ipa_hdr) \ 461 (((struct ipa_ioc_del_hdr *)(ipa_hdr))->hdl[0].status) 462 463 typedef struct ipa_ioc_get_hdr __qdf_ipa_ioc_get_hdr_t; 464 465 #define QDF_IPA_IOC_GET_HDR_NAME(ipa_hdr) \ 466 (((struct ipa_ioc_get_hdr *)(ipa_hdr))->name) 467 #define QDF_IPA_IOC_GET_HDR_HDL(ipa_hdr) \ 468 (((struct ipa_ioc_get_hdr *)(ipa_hdr))->hdl) 469 470 typedef struct ipa_ioc_copy_hdr __qdf_ipa_ioc_copy_hdr_t; 471 typedef struct ipa_ioc_add_hdr_proc_ctx __qdf_ipa_ioc_add_hdr_proc_ctx_t; 472 typedef struct ipa_ioc_del_hdr_proc_ctx __qdf_ipa_ioc_del_hdr_proc_ctx_t; 473 typedef struct ipa_msg_meta __qdf_ipa_msg_meta_t; 474 475 #define QDF_IPA_MSG_META_MSG_TYPE(meta) \ 476 (((struct ipa_msg_meta *)(meta))->msg_type) 477 #define QDF_IPA_MSG_META_MSG_LEN(meta) \ 478 (((struct ipa_msg_meta *)(meta))->msg_len) 479 480 typedef enum ipa_client_type __qdf_ipa_client_type_t; 481 typedef struct IpaHwStatsWDIInfoData_t __qdf_ipa_hw_stats_wdi_info_data_t; 482 typedef enum ipa_rm_resource_name __qdf_ipa_rm_resource_name_t; 483 typedef enum ipa_wlan_event __qdf_ipa_wlan_event_t; 484 typedef struct ipa_wlan_msg __qdf_ipa_wlan_msg_t; 485 486 #define QDF_IPA_WLAN_MSG_NAME(ipa_msg) \ 487 (((struct ipa_wlan_msg *)(ipa_msg))->name) 488 #define QDF_IPA_WLAN_MSG_MAC_ADDR(ipa_msg) \ 489 (((struct ipa_wlan_msg *)(ipa_msg))->mac_addr) 490 491 typedef struct ipa_wlan_msg_ex __qdf_ipa_wlan_msg_ex_t; 492 493 #define QDF_IPA_WLAN_MSG_EX_NAME(ipa_msg) \ 494 (((struct ipa_wlan_msg_ex *)(ipa_msg))->name) 495 #define QDF_IPA_WLAN_MSG_EX_EXNUM_OF_ATTRIBS(ipa_msg) \ 496 (((struct ipa_wlan_msg_ex *)(ipa_msg))->num_of_attribs) 497 #define QDF_IPA_WLAN_MSG_EX_ATTRIB_TYPE(ipa_msg) \ 498 (((struct ipa_wlan_msg_ex *)(ipa_msg))->attribs.attrib_type) 499 #define QDF_IPA_WLAN_MSG_EX_OFFSET(ipa_msg) \ 500 (((struct ipa_wlan_msg_ex *)(ipa_msg))->attribs.offset) 501 #define QDF_IPA_WLAN_MSG_EX_MAC_ADDR(ipa_msg) \ 502 (((struct ipa_wlan_msg_ex *)(ipa_msg))->attribs.u.mac_addr) 503 504 typedef struct ipa_ioc_tx_intf_prop __qdf_ipa_ioc_tx_intf_prop_t; 505 506 #define QDF_IPA_IOC_TX_INTF_PROP_IP(tx_prop) \ 507 (((struct ipa_ioc_tx_intf_prop *)(tx_prop))->ip) 508 #define QDF_IPA_IOC_TX_INTF_PROP_ATTRIB_MASK(tx_prop) \ 509 (((struct ipa_ioc_tx_intf_prop *)(tx_prop))->attrib.attrib_mask) 510 #define QDF_IPA_IOC_TX_INTF_PROP_META_DATA(rx_prop) \ 511 (((struct ipa_ioc_tx_intf_prop *)(tx_prop))->attrib.meta_data) 512 #define QDF_IPA_IOC_TX_INTF_PROP_META_DATA_MASK(rx_prop) \ 513 (((struct ipa_ioc_tx_intf_prop *)(tx_prop))->attrib.meta_data_mask) 514 #define QDF_IPA_IOC_TX_INTF_PROP_DST_PIPE(tx_prop) \ 515 (((struct ipa_ioc_tx_intf_prop *)(tx_prop))->dst_pipe) 516 #define QDF_IPA_IOC_TX_INTF_PROP_ALT_DST_PIPE(tx_prop) \ 517 (((struct ipa_ioc_tx_intf_prop *)(tx_prop))->alt_dst_pipe) 518 #define QDF_IPA_IOC_TX_INTF_PROP_HDR_NAME(tx_prop) \ 519 (((struct ipa_ioc_tx_intf_prop *)(tx_prop))->hdr_name) 520 #define QDF_IPA_IOC_TX_INTF_PROP_HDR_L2_TYPE(tx_prop) \ 521 (((struct ipa_ioc_tx_intf_prop *)(tx_prop))->hdr_l2_type) 522 523 typedef struct ipa_ioc_rx_intf_prop __qdf_ipa_ioc_rx_intf_prop_t; 524 525 #define QDF_IPA_IOC_RX_INTF_PROP_IP(rx_prop) \ 526 (((struct ipa_ioc_rx_intf_prop *)(rx_prop))->ip) 527 #define QDF_IPA_IOC_RX_INTF_PROP_ATTRIB_MASK(rx_prop) \ 528 (((struct ipa_ioc_rx_intf_prop *)(rx_prop))->attrib.attrib_mask) 529 #define QDF_IPA_IOC_RX_INTF_PROP_META_DATA(rx_prop) \ 530 (((struct ipa_ioc_rx_intf_prop *)(rx_prop))->attrib.meta_data) 531 #define QDF_IPA_IOC_RX_INTF_PROP_META_DATA_MASK(rx_prop) \ 532 (((struct ipa_ioc_rx_intf_prop *)(rx_prop))->attrib.meta_data_mask) 533 #define QDF_IPA_IOC_RX_INTF_PROP_SRC_PIPE(rx_prop) \ 534 (((struct ipa_ioc_rx_intf_prop *)(rx_prop))->src_pipe) 535 #define QDF_IPA_IOC_RX_INTF_PROP_HDR_L2_TYPE(rx_prop) \ 536 (((struct ipa_ioc_rx_intf_prop *)(rx_prop))->hdr_l2_type) 537 538 typedef struct ipa_wlan_hdr_attrib_val __qdf_ipa_wlan_hdr_attrib_val_t; 539 540 #define __QDF_IPA_SET_META_MSG_TYPE(meta, msg_type) \ 541 __qdf_ipa_set_meta_msg_type(meta, msg_type) 542 543 #define __QDF_IPA_RM_RESOURCE_GRANTED IPA_RM_RESOURCE_GRANTED 544 #define __QDF_IPA_RM_RESOURCE_RELEASED IPA_RM_RESOURCE_RELEASED 545 546 #define __QDF_IPA_RM_RESOURCE_WLAN_PROD IPA_RM_RESOURCE_WLAN_PROD 547 #define __QDF_IPA_RM_RESOURCE_WLAN_CONS IPA_RM_RESOURCE_WLAN_CONS 548 #define __QDF_IPA_RM_RESOURCE_APPS_CONS IPA_RM_RESOURCE_APPS_CONS 549 550 #define __QDF_IPA_VOLTAGE_LEVEL IPA_VOLTAGE_SVS 551 552 #define __QDF_IPA_CLIENT_WLAN1_PROD IPA_CLIENT_WLAN1_PROD 553 #define __QDF_IPA_CLIENT_WLAN3_PROD IPA_CLIENT_WLAN3_PROD 554 #define __QDF_IPA_CLIENT_WLAN1_CONS IPA_CLIENT_WLAN1_CONS 555 #define __QDF_IPA_CLIENT_WLAN2_CONS IPA_CLIENT_WLAN2_CONS 556 #define __QDF_IPA_CLIENT_WLAN3_CONS IPA_CLIENT_WLAN3_CONS 557 #define __QDF_IPA_CLIENT_WLAN4_CONS IPA_CLIENT_WLAN4_CONS 558 #define __QDF_IPA_CLIENT_WLAN4_PROD IPA_CLIENT_WLAN4_PROD 559 560 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)) 561 #define IPA_LAN_RX_NAPI_SUPPORT 562 #endif 563 564 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) 565 /* 566 * Resume / Suspend 567 */ 568 static inline int __qdf_ipa_reset_endpoint(u32 clnt_hdl) 569 { 570 return ipa_reset_endpoint(clnt_hdl); 571 } 572 573 /* 574 * Remove ep delay 575 */ 576 static inline int __qdf_ipa_clear_endpoint_delay(u32 clnt_hdl) 577 { 578 return ipa_clear_endpoint_delay(clnt_hdl); 579 } 580 581 /* 582 * Header removal / addition 583 */ 584 static inline int __qdf_ipa_add_hdr(struct ipa_ioc_add_hdr *hdrs) 585 { 586 return ipa_add_hdr(hdrs); 587 } 588 589 static inline int __qdf_ipa_del_hdr(struct ipa_ioc_del_hdr *hdls) 590 { 591 return ipa_del_hdr(hdls); 592 } 593 594 static inline int __qdf_ipa_commit_hdr(void) 595 { 596 return ipa_commit_hdr(); 597 } 598 599 static inline int __qdf_ipa_get_hdr(struct ipa_ioc_get_hdr *lookup) 600 { 601 return ipa_get_hdr(lookup); 602 } 603 604 static inline int __qdf_ipa_put_hdr(u32 hdr_hdl) 605 { 606 return ipa_put_hdr(hdr_hdl); 607 } 608 609 static inline int __qdf_ipa_copy_hdr(struct ipa_ioc_copy_hdr *copy) 610 { 611 return ipa_copy_hdr(copy); 612 } 613 614 static inline int __qdf_ipa_register_pull_msg(struct ipa_msg_meta *meta, 615 ipa_msg_pull_fn callback) 616 { 617 return ipa_register_pull_msg(meta, callback); 618 } 619 620 static inline int __qdf_ipa_deregister_pull_msg(struct ipa_msg_meta *meta) 621 { 622 return ipa_deregister_pull_msg(meta); 623 } 624 625 /* 626 * Interface 627 */ 628 static inline int __qdf_ipa_register_intf(const char *name, 629 const struct ipa_tx_intf *tx, 630 const struct ipa_rx_intf *rx) 631 { 632 return ipa_register_intf(name, tx, rx); 633 } 634 635 static inline int __qdf_ipa_register_intf_ext(const char *name, 636 const struct ipa_tx_intf *tx, 637 const struct ipa_rx_intf *rx, 638 const struct ipa_ext_intf *ext) 639 { 640 return ipa_register_intf_ext(name, tx, rx, ext); 641 } 642 643 static inline int __qdf_ipa_deregister_intf(const char *name) 644 { 645 return ipa_deregister_intf(name); 646 } 647 648 /* 649 * Data path 650 */ 651 static inline int __qdf_ipa_tx_dp(enum ipa_client_type dst, struct sk_buff *skb, 652 struct ipa_tx_meta *metadata) 653 { 654 return ipa_tx_dp(dst, skb, metadata); 655 } 656 657 /* 658 * To transfer multiple data packets 659 */ 660 static inline int __qdf_ipa_tx_dp_mul( 661 enum ipa_client_type dst, 662 struct ipa_tx_data_desc *data_desc) 663 { 664 return ipa_tx_dp_mul(dst, data_desc); 665 } 666 667 /* 668 * System pipes 669 */ 670 static inline u16 __qdf_ipa_get_smem_restr_bytes(void) 671 { 672 return ipa_get_smem_restr_bytes(); 673 } 674 675 static inline int __qdf_ipa_connect_wdi_pipe(struct ipa_wdi_in_params *in, 676 struct ipa_wdi_out_params *out) 677 { 678 return ipa_connect_wdi_pipe(in, out); 679 } 680 681 static inline int __qdf_ipa_disconnect_wdi_pipe(u32 clnt_hdl) 682 { 683 return ipa_disconnect_wdi_pipe(clnt_hdl); 684 } 685 686 static inline int __qdf_ipa_enable_wdi_pipe(u32 clnt_hdl) 687 { 688 return ipa_enable_wdi_pipe(clnt_hdl); 689 } 690 691 static inline int __qdf_ipa_disable_wdi_pipe(u32 clnt_hdl) 692 { 693 return ipa_disable_wdi_pipe(clnt_hdl); 694 } 695 696 static inline int __qdf_ipa_resume_wdi_pipe(u32 clnt_hdl) 697 { 698 return ipa_resume_wdi_pipe(clnt_hdl); 699 } 700 701 static inline int __qdf_ipa_suspend_wdi_pipe(u32 clnt_hdl) 702 { 703 return ipa_suspend_wdi_pipe(clnt_hdl); 704 } 705 706 static inline int __qdf_ipa_uc_wdi_get_dbpa( 707 struct ipa_wdi_db_params *out) 708 { 709 return ipa_uc_wdi_get_dbpa(out); 710 } 711 712 /* 713 * Resource manager 714 */ 715 static inline int __qdf_ipa_rm_create_resource( 716 struct ipa_rm_create_params *create_params) 717 { 718 return ipa_rm_create_resource(create_params); 719 } 720 721 static inline int __qdf_ipa_rm_delete_resource( 722 enum ipa_rm_resource_name resource_name) 723 { 724 return ipa_rm_delete_resource(resource_name); 725 } 726 727 static inline int __qdf_ipa_rm_register(enum ipa_rm_resource_name resource_name, 728 struct ipa_rm_register_params *reg_params) 729 { 730 return ipa_rm_register(resource_name, reg_params); 731 } 732 733 static inline int __qdf_ipa_rm_set_perf_profile( 734 enum ipa_rm_resource_name resource_name, 735 struct ipa_rm_perf_profile *profile) 736 { 737 return ipa_rm_set_perf_profile(resource_name, profile); 738 } 739 740 static inline int __qdf_ipa_rm_deregister(enum ipa_rm_resource_name resource_name, 741 struct ipa_rm_register_params *reg_params) 742 { 743 return ipa_rm_deregister(resource_name, reg_params); 744 } 745 746 static inline int __qdf_ipa_rm_add_dependency( 747 enum ipa_rm_resource_name resource_name, 748 enum ipa_rm_resource_name depends_on_name) 749 { 750 return ipa_rm_add_dependency(resource_name, depends_on_name); 751 } 752 753 static inline int __qdf_ipa_rm_add_dependency_sync( 754 enum ipa_rm_resource_name resource_name, 755 enum ipa_rm_resource_name depends_on_name) 756 { 757 return ipa_rm_add_dependency_sync(resource_name, depends_on_name); 758 } 759 760 static inline int __qdf_ipa_rm_delete_dependency( 761 enum ipa_rm_resource_name resource_name, 762 enum ipa_rm_resource_name depends_on_name) 763 { 764 return ipa_rm_delete_dependency(resource_name, depends_on_name); 765 } 766 767 static inline int __qdf_ipa_rm_request_resource( 768 enum ipa_rm_resource_name resource_name) 769 { 770 return ipa_rm_request_resource(resource_name); 771 } 772 773 static inline int __qdf_ipa_rm_release_resource( 774 enum ipa_rm_resource_name resource_name) 775 { 776 return ipa_rm_release_resource(resource_name); 777 } 778 779 static inline int __qdf_ipa_rm_notify_completion(enum ipa_rm_event event, 780 enum ipa_rm_resource_name resource_name) 781 { 782 return ipa_rm_notify_completion(event, resource_name); 783 } 784 785 static inline int __qdf_ipa_rm_inactivity_timer_init( 786 enum ipa_rm_resource_name resource_name, 787 unsigned long msecs) 788 { 789 return ipa_rm_inactivity_timer_init(resource_name, msecs); 790 } 791 792 static inline int __qdf_ipa_rm_inactivity_timer_destroy( 793 enum ipa_rm_resource_name resource_name) 794 { 795 return ipa_rm_inactivity_timer_destroy(resource_name); 796 } 797 798 static inline int __qdf_ipa_rm_inactivity_timer_request_resource( 799 enum ipa_rm_resource_name resource_name) 800 { 801 return ipa_rm_inactivity_timer_request_resource(resource_name); 802 } 803 804 static inline int __qdf_ipa_rm_inactivity_timer_release_resource( 805 enum ipa_rm_resource_name resource_name) 806 { 807 return ipa_rm_inactivity_timer_release_resource(resource_name); 808 } 809 810 /* 811 * Miscellaneous 812 */ 813 static inline void __qdf_ipa_bam_reg_dump(void) 814 { 815 return ipa_bam_reg_dump(); 816 } 817 818 static inline int __qdf_ipa_get_ep_mapping(enum ipa_client_type client) 819 { 820 return ipa_get_ep_mapping(client); 821 } 822 823 static inline void __qdf_ipa_proxy_clk_vote(void) 824 { 825 return ipa_proxy_clk_vote(); 826 } 827 828 static inline void __qdf_ipa_proxy_clk_unvote(void) 829 { 830 return ipa_proxy_clk_unvote(); 831 } 832 833 static inline bool __qdf_ipa_is_client_handle_valid(u32 clnt_hdl) 834 { 835 return ipa_is_client_handle_valid(clnt_hdl); 836 } 837 838 static inline enum ipa_client_type __qdf_ipa_get_client_mapping(int pipe_idx) 839 { 840 return ipa_get_client_mapping(pipe_idx); 841 } 842 843 static inline enum ipa_rm_resource_name __qdf_ipa_get_rm_resource_from_ep( 844 int pipe_idx) 845 { 846 return ipa_get_rm_resource_from_ep(pipe_idx); 847 } 848 849 static inline bool __qdf_ipa_get_modem_cfg_emb_pipe_flt(void) 850 { 851 return ipa_get_modem_cfg_emb_pipe_flt(); 852 } 853 854 static inline enum ipa_transport_type __qdf_ipa_get_transport_type(void) 855 { 856 return ipa_get_transport_type(); 857 } 858 859 static inline struct device *__qdf_ipa_get_dma_dev(void) 860 { 861 return ipa_get_dma_dev(); 862 } 863 864 static inline struct iommu_domain *__qdf_ipa_get_smmu_domain(void) 865 { 866 return ipa_get_smmu_domain(); 867 } 868 869 static inline int __qdf_ipa_create_wdi_mapping(u32 num_buffers, 870 __qdf_ipa_wdi_buffer_info_t *info) 871 { 872 return ipa_create_wdi_mapping(num_buffers, info); 873 } 874 875 static inline int __qdf_ipa_release_wdi_mapping(u32 num_buffers, 876 struct ipa_wdi_buffer_info *info) 877 { 878 return ipa_release_wdi_mapping(num_buffers, info); 879 } 880 881 static inline int __qdf_ipa_disable_apps_wan_cons_deaggr(uint32_t agg_size, uint32_t agg_count) 882 { 883 return ipa_disable_apps_wan_cons_deaggr(agg_size, agg_count); 884 } 885 886 static inline const struct ipa_gsi_ep_config *__qdf_ipa_get_gsi_ep_info(enum ipa_client_type client) 887 { 888 return ipa_get_gsi_ep_info(client); 889 } 890 891 static inline int __qdf_ipa_stop_gsi_channel(u32 clnt_hdl) 892 { 893 return ipa_stop_gsi_channel(clnt_hdl); 894 } 895 896 #endif 897 static inline void __qdf_ipa_free_skb(struct ipa_rx_data *rx_in) 898 { 899 return ipa_free_skb(rx_in); 900 } 901 902 static inline int __qdf_ipa_get_wdi_stats(struct IpaHwStatsWDIInfoData_t *stats) 903 { 904 return ipa_get_wdi_stats(stats); 905 } 906 907 static inline int __qdf_ipa_uc_reg_rdyCB(struct ipa_wdi_uc_ready_params *param) 908 { 909 return ipa_uc_reg_rdyCB(param); 910 } 911 912 static inline int __qdf_ipa_uc_dereg_rdyCB(void) 913 { 914 return ipa_uc_dereg_rdyCB(); 915 } 916 917 static inline int __qdf_ipa_register_ipa_ready_cb( 918 void (*ipa_ready_cb)(void *user_data), 919 void *user_data) 920 { 921 return ipa_register_ipa_ready_cb(ipa_ready_cb, user_data); 922 } 923 924 static inline 925 int __qdf_ipa_setup_sys_pipe(struct ipa_sys_connect_params *sys_in, 926 u32 *clnt_hdl) 927 { 928 return ipa_setup_sys_pipe(sys_in, clnt_hdl); 929 } 930 931 static inline int __qdf_ipa_teardown_sys_pipe(u32 clnt_hdl) 932 { 933 return ipa_teardown_sys_pipe(clnt_hdl); 934 } 935 936 /* 937 * Messaging 938 */ 939 static inline int __qdf_ipa_send_msg(struct ipa_msg_meta *meta, void *buff, 940 ipa_msg_free_fn callback) 941 { 942 return ipa_send_msg(meta, buff, callback); 943 } 944 945 static inline bool __qdf_ipa_is_ready(void) 946 { 947 return ipa_is_ready(); 948 } 949 950 #ifdef FEATURE_METERING 951 static inline int __qdf_ipa_broadcast_wdi_quota_reach_ind(uint32_t index, 952 uint64_t quota_bytes) 953 { 954 return ipa_broadcast_wdi_quota_reach_ind(index, quota_bytes); 955 } 956 #endif 957 958 void __qdf_ipa_set_meta_msg_type(__qdf_ipa_msg_meta_t *meta, int type); 959 960 #ifdef ENABLE_SMMU_S1_TRANSLATION 961 /** 962 * __qdf_get_ipa_smmu_enabled() - to get IPA SMMU enable status 963 * 964 * Return: true when IPA SMMU enabled, otherwise false 965 */ 966 static bool __qdf_get_ipa_smmu_enabled(void) 967 { 968 struct ipa_smmu_in_params params_in; 969 struct ipa_smmu_out_params params_out; 970 971 params_in.smmu_client = IPA_SMMU_WLAN_CLIENT; 972 ipa_get_smmu_params(¶ms_in, ¶ms_out); 973 974 return params_out.smmu_enable; 975 } 976 #endif 977 978 #ifdef IPA_LAN_RX_NAPI_SUPPORT 979 /** 980 * ipa_get_lan_rx_napi() - Check if NAPI is enabled in LAN RX DP 981 * 982 * Returns: true if enabled, false otherwise 983 */ 984 static inline bool __qdf_ipa_get_lan_rx_napi(void) 985 { 986 return ipa_get_lan_rx_napi(); 987 } 988 #endif /* IPA_LAN_RX_NAPI_SUPPORT */ 989 #endif /* IPA_OFFLOAD */ 990 #endif /* _I_QDF_IPA_H */ 991