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: i_qdf_ipa_wdi3.h 19 * This file provides OS dependent IPA WDI APIs. 20 */ 21 22 #ifndef I_QDF_IPA_WDI_H 23 #define I_QDF_IPA_WDI_H 24 25 #ifdef IPA_OFFLOAD 26 27 #include <qdf_status.h> /* QDF_STATUS */ 28 #include <linux/ipa_wdi3.h> 29 30 #ifdef CONFIG_IPA_WDI_UNIFIED_API 31 32 /** 33 * __qdf_ipa_wdi_version_t - IPA WDI version 34 */ 35 typedef enum ipa_wdi_version __qdf_ipa_wdi_version_t; 36 37 /** 38 * __qdf_ipa_wdi_init_in_params_t - wdi init input parameters 39 */ 40 typedef struct ipa_wdi_init_in_params __qdf_ipa_wdi_init_in_params_t; 41 42 #define __QDF_IPA_WDI_INIT_IN_PARAMS_WDI_VERSION(in_params) \ 43 (((struct ipa_wdi_init_in_params *)(in_params))->wdi_version) 44 #define __QDF_IPA_WDI_INIT_IN_PARAMS_NOTIFY(in_params) \ 45 (((struct ipa_wdi_init_in_params *)(in_params))->notify) 46 #define __QDF_IPA_WDI_INIT_IN_PARAMS_PRIV(in_params) \ 47 (((struct ipa_wdi_init_in_params *)(in_params))->priv) 48 #define __QDF_IPA_WDI_INIT_IN_PARAMS_WDI_NOTIFY(in_params) \ 49 (((struct ipa_wdi_init_in_params *)(in_params))->wdi_notify) 50 51 /** 52 * __qdf_ipa_wdi_init_out_params_t - wdi init output parameters 53 */ 54 typedef struct ipa_wdi_init_out_params __qdf_ipa_wdi_init_out_params_t; 55 56 #define __QDF_IPA_WDI_INIT_OUT_PARAMS_IS_UC_READY(out_params) \ 57 (((struct ipa_wdi_init_out_params *)(out_params))->is_uC_ready) 58 #define __QDF_IPA_WDI_INIT_OUT_PARAMS_IS_SMMU_ENABLED(out_params) \ 59 (((struct ipa_wdi_init_out_params *)(out_params))->is_smmu_enabled) 60 #define QDF_IPA_WDI_INIT_OUT_PARAMS_IS_OVER_GSI(out_params) \ 61 (((struct ipa_wdi_init_out_params *)(out_params))->is_over_gsi) 62 63 /** 64 * __qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW 65 */ 66 typedef struct ipa_wdi_hdr_info __qdf_ipa_wdi_hdr_info_t; 67 68 #define __QDF_IPA_WDI_HDR_INFO_HDR(hdr_info) \ 69 (((struct ipa_wdi_hdr_info *)(hdr_info))->hdr) 70 #define __QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info) \ 71 (((struct ipa_wdi_hdr_info *)(hdr_info))->hdr_len) 72 #define __QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info) \ 73 (((struct ipa_wdi_hdr_info *)(hdr_info))->dst_mac_addr_offset) 74 #define __QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info) \ 75 (((struct ipa_wdi_hdr_info *)(hdr_info))->hdr_type) 76 77 /** 78 * __qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload 79 * interface registration 80 */ 81 typedef struct ipa_wdi_reg_intf_in_params __qdf_ipa_wdi_reg_intf_in_params_t; 82 83 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in) \ 84 (((struct ipa_wdi_reg_intf_in_params *)(in))->netdev_name) 85 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in) \ 86 (((struct ipa_wdi_reg_intf_in_params *)(in))->hdr_info) 87 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_ALT_DST_PIPE(in) \ 88 (((struct ipa_wdi_reg_intf_in_params *)(in))->alt_dst_pipe) 89 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in) \ 90 (((struct ipa_wdi_reg_intf_in_params *)(in))->is_meta_data_valid) 91 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in) \ 92 (((struct ipa_wdi_reg_intf_in_params *)(in))->meta_data) 93 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in) \ 94 (((struct ipa_wdi_reg_intf_in_params *)(in))->meta_data_mask) 95 96 typedef struct ipa_ep_cfg __qdf_ipa_ep_cfg_t; 97 98 #define __QDF_IPA_EP_CFG_NAT_EN(cfg) \ 99 (((struct ipa_ep_cfg *)(cfg))->nat.nat_en) 100 #define __QDF_IPA_EP_CFG_HDR_LEN(cfg) \ 101 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_len) 102 #define __QDF_IPA_EP_CFG_HDR_OFST_METADATA_VALID(cfg) \ 103 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_metadata_valid) 104 #define __QDF_IPA_EP_CFG_HDR_METADATA_REG_VALID(cfg) \ 105 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_metadata_reg_valid) 106 #define __QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE_VALID(cfg) \ 107 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_pkt_size_valid) 108 #define __QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE(cfg) \ 109 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_pkt_size) 110 #define __QDF_IPA_EP_CFG_HDR_ADDITIONAL_CONST_LEN(cfg) \ 111 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_additional_const_len) 112 #define __QDF_IPA_EP_CFG_MODE(cfg) \ 113 (((struct ipa_ep_cfg *)(cfg))->mode.mode) 114 #define __QDF_IPA_EP_CFG_HDR_LITTLE_ENDIAN(cfg) \ 115 (((struct ipa_ep_cfg *)(cfg))->hdr_ext.hdr_little_endian) 116 117 /** 118 * __qdf_ipa_wdi_pipe_setup_info_t - WDI TX/Rx configuration 119 */ 120 typedef struct ipa_wdi_pipe_setup_info __qdf_ipa_wdi_pipe_setup_info_t; 121 122 #define __QDF_IPA_WDI_SETUP_INFO_EP_CFG(txrx) \ 123 (((struct ipa_wdi_pipe_setup_info *)(txrx))->ipa_ep_cfg) 124 125 #define __QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx) \ 126 (((struct ipa_wdi_pipe_setup_info *)(txrx))->client) 127 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx) \ 128 (((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_base_pa) 129 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx) \ 130 (((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_size) 131 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx) \ 132 (((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_doorbell_pa) 133 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx) \ 134 (((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_base_pa) 135 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx) \ 136 (((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_size) 137 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx) \ 138 (((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_doorbell_pa) 139 #define __QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx) \ 140 (((struct ipa_wdi_pipe_setup_info *)(txrx))->num_pkt_buffers) 141 #define __QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx) \ 142 (((struct ipa_wdi_pipe_setup_info *)(txrx))->pkt_offset) 143 #define __QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx) \ 144 (((struct ipa_wdi_pipe_setup_info *)(txrx))->desc_format_template) 145 146 /** 147 * __qdf_ipa_wdi_pipe_setup_info_smmu_t - WDI TX/Rx configuration 148 */ 149 typedef struct ipa_wdi_pipe_setup_info_smmu __qdf_ipa_wdi_pipe_setup_info_smmu_t; 150 151 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EP_CFG(txrx) \ 152 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->ipa_ep_cfg) 153 154 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(txrx) \ 155 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->client) 156 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_BASE(txrx) \ 157 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_base) 158 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_SIZE(txrx) \ 159 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_size) 160 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_DOORBELL_PA(txrx) \ 161 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_doorbell_pa) 162 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_BASE(txrx) \ 163 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_base) 164 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_SIZE(txrx) \ 165 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_size) 166 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_DOORBELL_PA(txrx) \ 167 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_doorbell_pa) 168 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_NUM_PKT_BUFFERS(txrx) \ 169 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->num_pkt_buffers) 170 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(txrx) \ 171 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->pkt_offset) 172 #define __QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(txrx) \ 173 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->desc_format_template) 174 175 /** 176 * __qdf_ipa_wdi_conn_in_params_t - information provided by 177 * uC offload client 178 */ 179 typedef struct ipa_wdi_conn_in_params __qdf_ipa_wdi_conn_in_params_t; 180 181 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in) \ 182 (((struct ipa_wdi_conn_in_params *)(pipe_in))->notify) 183 #define __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in) \ 184 (((struct ipa_wdi_conn_in_params *)(pipe_in))->priv) 185 #define __QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(pipe_in) \ 186 (((struct ipa_wdi_conn_in_params *)(pipe_in))->is_smmu_enabled) 187 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NUM_SYS_PIPE_NEEDED(pipe_in) \ 188 (((struct ipa_wdi_conn_in_params *)(pipe_in))->num_sys_pipe_needed) 189 #define __QDF_IPA_WDI_CONN_IN_PARAMS_SYS_IN(in) \ 190 (((struct ipa_wdi_conn_in_params *)(pipe_in))->sys_in) 191 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in) \ 192 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx) 193 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX_SMMU(pipe_in) \ 194 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx_smmu) 195 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in) \ 196 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx) 197 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX_SMMU(pipe_in) \ 198 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx_smmu) 199 200 /** 201 * __qdf_ipa_wdi_conn_out_params_t - information provided 202 * to WLAN druver 203 */ 204 typedef struct ipa_wdi_conn_out_params __qdf_ipa_wdi_conn_out_params_t; 205 206 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out) \ 207 (((struct ipa_wdi_conn_out_params *)(pipe_out))->tx_uc_db_pa) 208 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out) \ 209 (((struct ipa_wdi_conn_out_params *)(pipe_out))->rx_uc_db_pa) 210 211 /** 212 * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile 213 */ 214 typedef struct ipa_wdi_perf_profile __qdf_ipa_wdi_perf_profile_t; 215 216 #define __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile) \ 217 (((struct ipa_wdi_perf_profile *)(profile))->client) 218 #define __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile) \ 219 (((struct ipa_wdi_perf_profile *)(profile))->max_supported_bw_mbps) 220 221 /** 222 * __qdf_ipa_wdi_init - Client should call this function to 223 * init WDI IPA offload data path 224 * 225 * Note: Should not be called from atomic context and only 226 * after checking IPA readiness using ipa_register_ipa_ready_cb() 227 * 228 * @Return 0 on success, negative on failure 229 */ 230 static inline int __qdf_ipa_wdi_init(struct ipa_wdi_init_in_params *in, 231 struct ipa_wdi_init_out_params *out) 232 { 233 return ipa_wdi_init(in, out); 234 } 235 236 /** 237 * __qdf_ipa_wdi_cleanup - Client should call this function to 238 * clean up WDI IPA offload data path 239 * 240 * @Return 0 on success, negative on failure 241 */ 242 static inline int __qdf_ipa_wdi_cleanup(void) 243 { 244 return ipa_wdi_cleanup(); 245 } 246 247 /** 248 * __qdf_ipa_wdi_reg_intf - Client should call this function to 249 * init WDI IPA offload data path 250 * 251 * Note: Should not be called from atomic context and only 252 * after checking IPA readiness using ipa_register_ipa_ready_cb() 253 * 254 * @Return 0 on success, negative on failure 255 */ 256 static inline int __qdf_ipa_wdi_reg_intf( 257 struct ipa_wdi_reg_intf_in_params *in) 258 { 259 return ipa_wdi_reg_intf(in); 260 } 261 262 /** 263 * __qdf_ipa_wdi_dereg_intf - Client Driver should call this 264 * function to deregister before unload and after disconnect 265 * 266 * @Return 0 on success, negative on failure 267 */ 268 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name) 269 { 270 return ipa_wdi_dereg_intf(netdev_name); 271 } 272 273 /** 274 * __qdf_ipa_wdi_conn_pipes - Client should call this 275 * function to connect pipes 276 * 277 * @in: [in] input parameters from client 278 * @out: [out] output params to client 279 * 280 * Note: Should not be called from atomic context and only 281 * after checking IPA readiness using ipa_register_ipa_ready_cb() 282 * 283 * @Return 0 on success, negative on failure 284 */ 285 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in, 286 struct ipa_wdi_conn_out_params *out) 287 { 288 return ipa_wdi_conn_pipes(in, out); 289 } 290 291 /** 292 * __qdf_ipa_wdi_disconn_pipes() - Client should call this 293 * function to disconnect pipes 294 * 295 * Note: Should not be called from atomic context 296 * 297 * Returns: 0 on success, negative on failure 298 */ 299 static inline int __qdf_ipa_wdi_disconn_pipes(void) 300 { 301 return ipa_wdi_disconn_pipes(); 302 } 303 304 /** 305 * __qdf_ipa_wdi_enable_pipes() - Client should call this 306 * function to enable IPA offload data path 307 * 308 * Note: Should not be called from atomic context 309 * 310 * Returns: 0 on success, negative on failure 311 */ 312 static inline int __qdf_ipa_wdi_enable_pipes(void) 313 { 314 return ipa_wdi_enable_pipes(); 315 } 316 317 /** 318 * __qdf_ipa_wdi_disable_pipes() - Client should call this 319 * function to disable IPA offload data path 320 * 321 * Note: Should not be called from atomic context 322 * 323 * Returns: 0 on success, negative on failure 324 */ 325 static inline int __qdf_ipa_wdi_disable_pipes(void) 326 { 327 return ipa_wdi_disable_pipes(); 328 } 329 330 /** 331 * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to 332 * set IPA clock bandwidth based on data rates 333 * 334 * @profile: [in] BandWidth profile to use 335 * 336 * Returns: 0 on success, negative on failure 337 */ 338 static inline int __qdf_ipa_wdi_set_perf_profile( 339 struct ipa_wdi_perf_profile *profile) 340 { 341 return ipa_wdi_set_perf_profile(profile); 342 } 343 344 /** 345 * __qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to 346 * create smmu mapping 347 * 348 * @num_buffers: [in] number of buffers 349 * @info: [in] wdi buffer info 350 * 351 * Returns: 0 on success, negative on failure 352 */ 353 static inline int __qdf_ipa_wdi_create_smmu_mapping(u32 num_buffers, 354 struct ipa_wdi_buffer_info *info) 355 { 356 return ipa_wdi_create_smmu_mapping(num_buffers, info); 357 } 358 359 /** 360 * __qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to 361 * release smmu mapping 362 * 363 * @num_buffers: [in] number of buffers 364 * @info: [in] wdi buffer info 365 * 366 * Returns: 0 on success, negative on failure 367 */ 368 static inline int __qdf_ipa_wdi_release_smmu_mapping(u32 num_buffers, 369 struct ipa_wdi_buffer_info *info) 370 { 371 return ipa_wdi_release_smmu_mapping(num_buffers, info); 372 } 373 374 #else /* CONFIG_IPA_WDI_UNIFIED_API */ 375 376 /** 377 * __qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW 378 */ 379 typedef struct ipa_wdi3_hdr_info __qdf_ipa_wdi_hdr_info_t; 380 381 #define __QDF_IPA_WDI_HDR_INFO_HDR(hdr_info) \ 382 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr) 383 #define __QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info) \ 384 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_len) 385 #define __QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info) \ 386 (((struct ipa_wdi3_hdr_info *)(hdr_info))->dst_mac_addr_offset) 387 #define __QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info) \ 388 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_type) 389 390 /** 391 * __qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload 392 * interface registration 393 */ 394 typedef struct ipa_wdi3_reg_intf_in_params __qdf_ipa_wdi_reg_intf_in_params_t; 395 396 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in) \ 397 (((struct ipa_wdi3_reg_intf_in_params *)(in))->netdev_name) 398 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in) \ 399 (((struct ipa_wdi3_reg_intf_in_params *)(in))->hdr_info) 400 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in) \ 401 (((struct ipa_wdi3_reg_intf_in_params *)(in))->is_meta_data_valid) 402 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in) \ 403 (((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data) 404 #define __QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in) \ 405 (((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data_mask) 406 407 /** 408 * __qdf_ipa_wdi_setup_info_t - WDI3 TX/Rx configuration 409 */ 410 typedef struct ipa_wdi3_setup_info __qdf_ipa_wdi_pipe_setup_info_t; 411 412 #define __QDF_IPA_WDI_SETUP_INFO_NAT_EN(txrx) \ 413 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.nat.nat_en) 414 #define __QDF_IPA_WDI_SETUP_INFO_HDR_LEN(txrx) \ 415 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_len) 416 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_METADATA_VALID(txrx) \ 417 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid) 418 #define __QDF_IPA_WDI_SETUP_INFO_HDR_METADATA_REG_VALID(txrx) \ 419 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_metadata_reg_valid) 420 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE_VALID(txrx) \ 421 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid) 422 #define __QDF_IPA_WDI_SETUP_INFO_HDR_OFST_PKT_SIZE(txrx) \ 423 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size) 424 #define __QDF_IPA_WDI_SETUP_INFO_HDR_ADDITIONAL_CONST_LEN(txrx) \ 425 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_additional_const_len) 426 #define __QDF_IPA_WDI_SETUP_INFO_MODE(txrx) \ 427 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.mode.mode) 428 #define __QDF_IPA_WDI_SETUP_INFO_HDR_LITTLE_ENDIAN(txrx) \ 429 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr_ext.hdr_little_endian) 430 431 #define __QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx) \ 432 (((struct ipa_wdi3_setup_info *)(txrx))->client) 433 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx) \ 434 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_base_pa) 435 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx) \ 436 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_size) 437 #define __QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx) \ 438 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_doorbell_pa) 439 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx) \ 440 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_base_pa) 441 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx) \ 442 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_size) 443 #define __QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx) \ 444 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_doorbell_pa) 445 #define __QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx) \ 446 (((struct ipa_wdi3_setup_info *)(txrx))->num_pkt_buffers) 447 #define __QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx) \ 448 (((struct ipa_wdi3_setup_info *)(txrx))->pkt_offset) 449 #define __QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx) \ 450 (((struct ipa_wdi3_setup_info *)(txrx))->desc_format_template) 451 452 /** 453 * __qdf_ipa_wdi_conn_in_params_t - information provided by 454 * uC offload client 455 */ 456 typedef struct ipa_wdi3_conn_in_params __qdf_ipa_wdi_conn_in_params_t; 457 458 #define __QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in) \ 459 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->notify) 460 #define __QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in) \ 461 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->priv) 462 #define __QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in) \ 463 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->tx) 464 #define __QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in) \ 465 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->rx) 466 467 /** 468 * __qdf_ipa_wdi_conn_out_params_t - information provided 469 * to WLAN druver 470 */ 471 typedef struct ipa_wdi3_conn_out_params __qdf_ipa_wdi_conn_out_params_t; 472 473 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out) \ 474 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_pa) 475 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_VA(pipe_out) \ 476 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_va) 477 #define __QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out) \ 478 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->rx_uc_db_pa) 479 480 /** 481 * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile 482 */ 483 typedef struct ipa_wdi3_perf_profile __qdf_ipa_wdi_perf_profile_t; 484 485 #define __QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile) \ 486 (((struct ipa_wdi3_perf_profile *)(profile))->client) 487 #define __QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile) \ 488 (((struct ipa_wdi3_perf_profile *)(profile))->max_supported_bw_mbps) 489 490 /** 491 * __qdf_ipa_wdi_reg_intf - Client should call this function to 492 * init WDI3 IPA offload data path 493 * 494 * Note: Should not be called from atomic context and only 495 * after checking IPA readiness using ipa_register_ipa_ready_cb() 496 * 497 * @Return 0 on success, negative on failure 498 */ 499 static inline int __qdf_ipa_wdi_reg_intf( 500 struct ipa_wdi3_reg_intf_in_params *in) 501 { 502 return ipa_wdi3_reg_intf(in); 503 } 504 505 /** 506 * __qdf_ipa_wdi_dereg_intf - Client Driver should call this 507 * function to deregister before unload and after disconnect 508 * 509 * @Return 0 on success, negative on failure 510 */ 511 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name) 512 { 513 return ipa_wdi3_dereg_intf(netdev_name); 514 } 515 516 /** 517 * __qdf_ipa_wdi_conn_pipes - Client should call this 518 * function to connect pipes 519 * 520 * @in: [in] input parameters from client 521 * @out: [out] output params to client 522 * 523 * Note: Should not be called from atomic context and only 524 * after checking IPA readiness using ipa_register_ipa_ready_cb() 525 * 526 * @Return 0 on success, negative on failure 527 */ 528 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi3_conn_in_params *in, 529 struct ipa_wdi3_conn_out_params *out) 530 { 531 return ipa_wdi3_conn_pipes(in, out); 532 } 533 534 /** 535 * __qdf_ipa_wdi_disconn_pipes() - Client should call this 536 * function to disconnect pipes 537 * 538 * Note: Should not be called from atomic context 539 * 540 * Returns: 0 on success, negative on failure 541 */ 542 static inline int __qdf_ipa_wdi_disconn_pipes(void) 543 { 544 return ipa_wdi3_disconn_pipes(); 545 } 546 547 /** 548 * __qdf_ipa_wdi_enable_pipes() - Client should call this 549 * function to enable IPA offload data path 550 * 551 * Note: Should not be called from atomic context 552 * 553 * Returns: 0 on success, negative on failure 554 */ 555 static inline int __qdf_ipa_wdi_enable_pipes(void) 556 { 557 return ipa_wdi3_enable_pipes(); 558 } 559 560 /** 561 * __qdf_ipa_wdi_disable_pipes() - Client should call this 562 * function to disable IPA offload data path 563 * 564 * Note: Should not be called from atomic context 565 * 566 * Returns: 0 on success, negative on failure 567 */ 568 static inline int __qdf_ipa_wdi_disable_pipes(void) 569 { 570 return ipa_wdi3_disable_pipes(); 571 } 572 573 /** 574 * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to 575 * set IPA clock bandwidth based on data rates 576 * 577 * @profile: [in] BandWidth profile to use 578 * 579 * Returns: 0 on success, negative on failure 580 */ 581 static inline int __qdf_ipa_wdi_set_perf_profile( 582 struct ipa_wdi3_perf_profile *profile) 583 { 584 return ipa_wdi3_set_perf_profile(profile); 585 } 586 587 #endif /* CONFIG_IPA_WDI_UNIFIED_API */ 588 589 #endif /* IPA_OFFLOAD */ 590 #endif /* I_QDF_IPA_WDI_H */ 591