1 /* 2 * Copyright (c) 2017-2018, 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 /** 18 * DOC: qdf_ipa_wdi3.h 19 * This file provides OS abstraction for IPA WDI APIs. 20 */ 21 22 #ifndef _QDF_IPA_WDI3_H 23 #define _QDF_IPA_WDI3_H 24 25 #ifdef IPA_OFFLOAD 26 27 #include <qdf_ipa.h> 28 #include <i_qdf_ipa_wdi3.h> 29 30 #ifdef CONFIG_IPA_WDI_UNIFIED_API 31 /** 32 * qdf_ipa_wdi_version_t - IPA WDI version 33 */ 34 typedef __qdf_ipa_wdi_version_t qdf_ipa_wdi_version_t; 35 36 /** 37 * qdf_ipa_wdi_init_in_params_t - wdi init input parameters 38 */ 39 typedef __qdf_ipa_wdi_init_in_params_t qdf_ipa_wdi_init_in_params_t; 40 41 #define QDF_IPA_WDI_INIT_IN_PARAMS_WDI_VERSION(in_params) \ 42 __QDF_IPA_WDI_INIT_IN_PARAMS_WDI_VERSION(in_params) 43 #define QDF_IPA_WDI_INIT_IN_PARAMS_NOTIFY(in_params) \ 44 __QDF_IPA_WDI_INIT_IN_PARAMS_NOTIFY(in_params) 45 #define QDF_IPA_WDI_INIT_IN_PARAMS_PRIV(in_params) \ 46 __QDF_IPA_WDI_INIT_IN_PARAMS_PRIV(in_params) 47 #define QDF_IPA_WDI_INIT_IN_PARAMS_WDI_NOTIFY(in_params) \ 48 __QDF_IPA_WDI_INIT_IN_PARAMS_WDI_NOTIFY(in_params) 49 50 /** 51 * qdf_ipa_wdi_init_out_params_t - wdi init output parameters 52 */ 53 typedef __qdf_ipa_wdi_init_out_params_t qdf_ipa_wdi_init_out_params_t; 54 55 #define QDF_IPA_WDI_INIT_OUT_PARAMS_IS_UC_READY(out_params) \ 56 __QDF_IPA_WDI_INIT_OUT_PARAMS_IS_UC_READY(out_params) 57 #define QDF_IPA_WDI_INIT_OUT_PARAMS_IS_SMMU_ENABLED(out_params) \ 58 __QDF_IPA_WDI_INIT_OUT_PARAMS_IS_SMMU_ENABLED(out_params) 59 60 /** 61 * qdf_ipa_wdi_pipe_setup_info_smmu_t - WDI TX/Rx configuration 62 */ 63 typedef __qdf_ipa_wdi_pipe_setup_info_smmu_t qdf_ipa_wdi_pipe_setup_info_smmu_t; 64 65 #define QDF_IPA_WDI_SETUP_INFO_SMMU_EP_CFG(txrx) \ 66 __QDF_IPA_WDI_SETUP_INFO_SMMU_EP_CFG(txrx) 67 68 #define QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(txrx) \ 69 __QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(txrx) 70 #define QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_BASE(txrx) \ 71 __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_BASE(txrx) 72 #define QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_SIZE(txrx) \ 73 __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_SIZE(txrx) 74 #define QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_DOORBELL_PA(txrx) \ 75 __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_DOORBELL_PA(txrx) 76 #define QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_BASE(txrx) \ 77 __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_BASE(txrx) 78 #define QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_SIZE(txrx) \ 79 __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_SIZE(txrx) 80 #define QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_DOORBELL_PA(txrx) \ 81 __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_DOORBELL_PA(txrx) 82 #define QDF_IPA_WDI_SETUP_INFO_SMMU_NUM_PKT_BUFFERS(txrx) \ 83 __QDF_IPA_WDI_SETUP_INFO_SMMU_NUM_PKT_BUFFERS(txrx) 84 #define QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(txrx) \ 85 __QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(txrx) 86 #define QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(txrx) \ 87 __QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(txrx) 88 89 typedef __qdf_ipa_ep_cfg_t qdf_ipa_ep_cfg_t; 90 91 #define QDF_IPA_EP_CFG_NAT_EN(cfg) \ 92 __QDF_IPA_EP_CFG_NAT_EN(cfg) 93 #define QDF_IPA_EP_CFG_HDR_LEN(cfg) \ 94 __QDF_IPA_EP_CFG_HDR_LEN(cfg) 95 #define QDF_IPA_EP_CFG_HDR_OFST_METADATA_VALID(cfg) \ 96 __QDF_IPA_EP_CFG_HDR_OFST_METADATA_VALID(cfg) 97 #define QDF_IPA_EP_CFG_HDR_METADATA_REG_VALID(cfg) \ 98 __QDF_IPA_EP_CFG_HDR_METADATA_REG_VALID(cfg) 99 #define QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE_VALID(cfg) \ 100 __QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE_VALID(cfg) 101 #define QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE(cfg) \ 102 __QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE(cfg) 103 #define QDF_IPA_EP_CFG_HDR_ADDITIONAL_CONST_LEN(cfg) \ 104 __QDF_IPA_EP_CFG_HDR_ADDITIONAL_CONST_LEN(cfg) 105 #define QDF_IPA_EP_CFG_MODE(cfg) \ 106 __QDF_IPA_EP_CFG_MODE(cfg) 107 #define QDF_IPA_EP_CFG_HDR_LITTLE_ENDIAN(cfg) \ 108 __QDF_IPA_EP_CFG_HDR_LITTLE_ENDIAN(cfg) 109 110 /** 111 * qdf_ipa_wdi_init - Client should call this function to 112 * init WDI IPA offload data path 113 * 114 * Note: Should not be called from atomic context and only 115 * after checking IPA readiness using ipa_register_ipa_ready_cb() 116 * 117 * @Return 0 on success, negative on failure 118 */ 119 static inline int qdf_ipa_wdi_init(qdf_ipa_wdi_init_in_params_t *in, 120 qdf_ipa_wdi_init_out_params_t *out) 121 { 122 return __qdf_ipa_wdi_init(in, out); 123 } 124 125 /** 126 * qdf_ipa_wdi_cleanup - Client should call this function to 127 * clean up WDI IPA offload data path 128 * 129 * @Return 0 on success, negative on failure 130 */ 131 static inline int qdf_ipa_wdi_cleanup(void) 132 { 133 return __qdf_ipa_wdi_cleanup(); 134 } 135 #endif /* CONFIG_IPA_WDI_UNIFIED_API */ 136 137 /** 138 * qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW 139 */ 140 typedef __qdf_ipa_wdi_hdr_info_t qdf_ipa_wdi_hdr_info_t; 141 142 #define QDF_IPA_WDI_HDR_INFO_HDR(hdr_info) \ 143 __QDF_IPA_WDI_HDR_INFO_HDR(hdr_info) 144 #define QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info) \ 145 __QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info) 146 #define QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info) \ 147 __QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info) 148 #define QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info) \ 149 __QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info) 150 151 /** 152 * qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload 153 * interface registration 154 */ 155 typedef __qdf_ipa_wdi_reg_intf_in_params_t qdf_ipa_wdi_reg_intf_in_params_t; 156 157 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in) \ 158 __QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in) 159 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in) \ 160 __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in) 161 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_ALT_DST_PIPE(in) \ 162 __QDF_IPA_WDI_REG_INTF_IN_PARAMS_ALT_DST_PIPE(in) 163 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in) \ 164 __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in) 165 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in) \ 166 __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in) 167 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in) \ 168 __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in) 169 170 /** 171 * qdf_ipa_wdi_pipe_setup_info_t - WDI TX/Rx configuration 172 */ 173 typedef __qdf_ipa_wdi_pipe_setup_info_t qdf_ipa_wdi_pipe_setup_info_t; 174 175 #define QDF_IPA_WDI_SETUP_INFO_EP_CFG(txrx) \ 176 __QDF_IPA_WDI_SETUP_INFO_EP_CFG(txrx) 177 178 #define QDF_IPA_WDI_SETUP_INFO_NAT_EN(txrx) \ 179 __QDF_IPA_WDI_SETUP_INFO_NAT_EN(txrx) 180 #define QDF_IPA_WDI_SETUP_INFO_HDR_LEN(txrx) \ 181 __QDF_IPA_WDI_SETUP_INFO_HDR_LEN(txrx) 182 #define QDF_IPA_WDI_SETUP_INFO_HDR_OFST_METADATA_VALID(txrx) \ 183 __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_METADATA_VALID(txrx) 184 #define QDF_IPA_WDI_SETUP_INFO_HDR_METADATA_REG_VALID(txrx) \ 185 __QDF_IPA_WDI_SETUP_INFO_HDR_METADATA_REG_VALID(txrx) 186 #define QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE_VALID(txrx) \ 187 __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE_VALID(txrx) 188 #define QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE(txrx) \ 189 __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE(txrx) 190 #define QDF_IPA_WDI_SETUP_INFO_HDR_ADDITIONAL_CONST_LEN(txrx) \ 191 __QDF_IPA_WDI_SETUP_INFO_HDR_ADDITIONAL_CONST_LEN(txrx) 192 #define QDF_IPA_WDI_SETUP_INFO_MODE(txrx) \ 193 __QDF_IPA_WDI_SETUP_INFO_MODE(txrx) 194 #define QDF_IPA_WDI_SETUP_INFO_HDR_LITTLE_ENDIAN(txrx) \ 195 __QDF_IPA_WDI_SETUP_INFO_HDR_LITTLE_ENDIAN(txrx) 196 197 #define QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx) \ 198 __QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx) 199 #define QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx) \ 200 __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx) 201 #define QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx) \ 202 __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx) 203 #define QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx) \ 204 __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx) 205 #define QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx) \ 206 __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx) 207 #define QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx) \ 208 __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx) 209 #define QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx) \ 210 __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx) 211 #define QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx) \ 212 __QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx) 213 #define QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx) \ 214 __QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx) 215 #define QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx) \ 216 __QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx) 217 218 /** 219 * qdf_ipa_wdi_conn_in_params_t - information provided by 220 * uC offload client 221 */ 222 typedef __qdf_ipa_wdi_conn_in_params_t qdf_ipa_wdi_conn_in_params_t; 223 224 #define QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in) \ 225 __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in) 226 #define QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in) \ 227 __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in) 228 #define QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(pipe_in) \ 229 __QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(pipe_in) 230 #define QDF_IPA_WDI_CONN_IN_PARAMS_NUM_SYS_PIPE_NEEDED(pipe_in) \ 231 __QDF_IPA_WDI_CONN_IN_PARAMS_NUM_SYS_PIPE_NEEDED(pipe_in) 232 #define QDF_IPA_WDI_CONN_IN_PARAMS_SYS_IN(in) \ 233 __QDF_IPA_WDI_CONN_IN_PARAMS_SYS_IN(in) 234 #define QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in) \ 235 __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in) 236 #define QDF_IPA_WDI_CONN_IN_PARAMS_TX_SMMU(pipe_in) \ 237 __QDF_IPA_WDI_CONN_IN_PARAMS_TX_SMMU(pipe_in) 238 #define QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in) \ 239 __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in) 240 #define QDF_IPA_WDI_CONN_IN_PARAMS_RX_SMMU(pipe_in) \ 241 __QDF_IPA_WDI_CONN_IN_PARAMS_RX_SMMU(pipe_in) 242 243 /** 244 * qdf_ipa_wdi_conn_out_params_t - information provided 245 * to WLAN druver 246 */ 247 typedef __qdf_ipa_wdi_conn_out_params_t qdf_ipa_wdi_conn_out_params_t; 248 249 #define QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out) \ 250 __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out) 251 #define QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_VA(pipe_out) \ 252 __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_VA(pipe_out) 253 #define QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out) \ 254 __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out) 255 256 /** 257 * qdf_ipa_wdi_perf_profile_t - To set BandWidth profile 258 */ 259 typedef __qdf_ipa_wdi_perf_profile_t qdf_ipa_wdi_perf_profile_t; 260 261 #define QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile) \ 262 __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile) 263 #define QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile) \ 264 __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile) 265 266 /** 267 * qdf_ipa_wdi_reg_intf - Client should call this function to 268 * init WDI IPA offload data path 269 * 270 * Note: Should not be called from atomic context and only 271 * after checking IPA readiness using ipa_register_ipa_ready_cb() 272 * 273 * @Return 0 on success, negative on failure 274 */ 275 static inline int qdf_ipa_wdi_reg_intf( 276 qdf_ipa_wdi_reg_intf_in_params_t *in) 277 { 278 return __qdf_ipa_wdi_reg_intf(in); 279 } 280 281 /** 282 * qdf_ipa_wdi_dereg_intf - Client Driver should call this 283 * function to deregister before unload and after disconnect 284 * 285 * @Return 0 on success, negative on failure 286 */ 287 static inline int qdf_ipa_wdi_dereg_intf(const char *netdev_name) 288 { 289 return __qdf_ipa_wdi_dereg_intf(netdev_name); 290 } 291 292 /** 293 * qdf_ipa_wdi_conn_pipes - Client should call this 294 * function to connect pipes 295 * 296 * @in: [in] input parameters from client 297 * @out: [out] output params to client 298 * 299 * Note: Should not be called from atomic context and only 300 * after checking IPA readiness using ipa_register_ipa_ready_cb() 301 * 302 * @Return 0 on success, negative on failure 303 */ 304 static inline int qdf_ipa_wdi_conn_pipes(qdf_ipa_wdi_conn_in_params_t *in, 305 qdf_ipa_wdi_conn_out_params_t *out) 306 { 307 return __qdf_ipa_wdi_conn_pipes(in, out); 308 } 309 310 /** 311 * qdf_ipa_wdi_disconn_pipes() - Client should call this 312 * function to disconnect pipes 313 * 314 * Note: Should not be called from atomic context 315 * 316 * Returns: 0 on success, negative on failure 317 */ 318 static inline int qdf_ipa_wdi_disconn_pipes(void) 319 { 320 return __qdf_ipa_wdi_disconn_pipes(); 321 } 322 323 /** 324 * qdf_ipa_wdi_enable_pipes() - Client should call this 325 * function to enable IPA offload data path 326 * 327 * Note: Should not be called from atomic context 328 * 329 * Returns: 0 on success, negative on failure 330 */ 331 static inline int qdf_ipa_wdi_enable_pipes(void) 332 { 333 return __qdf_ipa_wdi_enable_pipes(); 334 } 335 336 /** 337 * qdf_ipa_wdi_disable_pipes() - Client should call this 338 * function to disable IPA offload data path 339 * 340 * Note: Should not be called from atomic context 341 * 342 * Returns: 0 on success, negative on failure 343 */ 344 static inline int qdf_ipa_wdi_disable_pipes(void) 345 { 346 return __qdf_ipa_wdi_disable_pipes(); 347 } 348 349 /** 350 * qdf_ipa_wdi_set_perf_profile() - Client should call this function to 351 * set IPA clock bandwidth based on data rates 352 * 353 * @profile: [in] BandWidth profile to use 354 * 355 * Returns: 0 on success, negative on failure 356 */ 357 static inline int qdf_ipa_wdi_set_perf_profile( 358 qdf_ipa_wdi_perf_profile_t *profile) 359 { 360 return __qdf_ipa_wdi_set_perf_profile(profile); 361 } 362 363 /** 364 * qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to 365 * create smmu mapping 366 * 367 * @num_buffers: [in] number of buffers 368 * @info: [in] wdi buffer info 369 * 370 * Returns: 0 on success, negative on failure 371 */ 372 static inline int qdf_ipa_wdi_create_smmu_mapping(uint32_t num_buffers, 373 qdf_ipa_wdi_buffer_info_t *info) 374 { 375 return __qdf_ipa_wdi_create_smmu_mapping(num_buffers, info); 376 } 377 378 /** 379 * qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to 380 * release smmu mapping 381 * 382 * @num_buffers: [in] number of buffers 383 * @info: [in] wdi buffer info 384 * 385 * Returns: 0 on success, negative on failure 386 */ 387 static inline int qdf_ipa_wdi_release_smmu_mapping(uint32_t num_buffers, 388 qdf_ipa_wdi_buffer_info_t *info) 389 { 390 return __qdf_ipa_wdi_release_smmu_mapping(num_buffers, info); 391 } 392 393 #endif /* IPA_OFFLOAD */ 394 #endif /* _QDF_IPA_WDI3_H */ 395