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