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 61 /** 62 * __qdf_ipa_wdi_hdr_info_t - Header to install on IPA HW 63 */ 64 typedef struct ipa_wdi_hdr_info __qdf_ipa_wdi_hdr_info_t; 65 66 #define QDF_IPA_WDI_HDR_INFO_HDR(hdr_info) \ 67 (((struct ipa_wdi_hdr_info *)(hdr_info))->hdr) 68 #define QDF_IPA_WDI_HDR_INFO_HDR_LEN(hdr_info) \ 69 (((struct ipa_wdi_hdr_info *)(hdr_info))->hdr_len) 70 #define QDF_IPA_WDI_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info) \ 71 (((struct ipa_wdi_hdr_info *)(hdr_info))->dst_mac_addr_offset) 72 #define QDF_IPA_WDI_HDR_INFO_HDR_TYPE(hdr_info) \ 73 (((struct ipa_wdi_hdr_info *)(hdr_info))->hdr_type) 74 75 /** 76 * __qdf_ipa_wdi_reg_intf_in_params_t - parameters for uC offload 77 * interface registration 78 */ 79 typedef struct ipa_wdi_reg_intf_in_params __qdf_ipa_wdi_reg_intf_in_params_t; 80 81 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_NETDEV_NAME(in) \ 82 (((struct ipa_wdi_reg_intf_in_params *)(in))->netdev_name) 83 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_HDR_INFO(in) \ 84 (((struct ipa_wdi_reg_intf_in_params *)(in))->hdr_info) 85 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_ALT_DST_PIPE(in) \ 86 (((struct ipa_wdi_reg_intf_in_params *)(in))->alt_dst_pipe) 87 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in) \ 88 (((struct ipa_wdi_reg_intf_in_params *)(in))->is_meta_data_valid) 89 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA(in) \ 90 (((struct ipa_wdi_reg_intf_in_params *)(in))->meta_data) 91 #define QDF_IPA_WDI_REG_INTF_IN_PARAMS_META_DATA_MASK(in) \ 92 (((struct ipa_wdi_reg_intf_in_params *)(in))->meta_data_mask) 93 94 typedef struct ipa_ep_cfg __qdf_ipa_ep_cfg_t; 95 96 #define QDF_IPA_EP_CFG_NAT_EN(cfg) \ 97 (((struct ipa_ep_cfg *)(cfg))->nat.nat_en) 98 #define QDF_IPA_EP_CFG_HDR_LEN(cfg) \ 99 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_len) 100 #define QDF_IPA_EP_CFG_HDR_OFST_METADATA_VALID(cfg) \ 101 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_metadata_valid) 102 #define QDF_IPA_EP_CFG_HDR_METADATA_REG_VALID(cfg) \ 103 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_metadata_reg_valid) 104 #define QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE_VALID(cfg) \ 105 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_pkt_size_valid) 106 #define QDF_IPA_EP_CFG_HDR_OFST_PKT_SIZE(cfg) \ 107 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_ofst_pkt_size) 108 #define QDF_IPA_EP_CFG_HDR_ADDITIONAL_CONST_LEN(cfg) \ 109 (((struct ipa_ep_cfg *)(cfg))->hdr.hdr_additional_const_len) 110 #define QDF_IPA_EP_CFG_MODE(cfg) \ 111 (((struct ipa_ep_cfg *)(cfg))->mode.mode) 112 #define QDF_IPA_EP_CFG_HDR_LITTLE_ENDIAN(cfg) \ 113 (((struct ipa_ep_cfg *)(cfg))->hdr_ext.hdr_little_endian) 114 115 /** 116 * __qdf_ipa_wdi_pipe_setup_info_t - WDI TX/Rx configuration 117 */ 118 typedef struct ipa_wdi_pipe_setup_info __qdf_ipa_wdi_pipe_setup_info_t; 119 120 #define QDF_IPA_WDI_SETUP_INFO_EP_CFG(txrx) \ 121 (((struct ipa_wdi_pipe_setup_info *)(txrx))->ipa_ep_cfg) 122 123 #define QDF_IPA_WDI_SETUP_INFO_CLIENT(txrx) \ 124 (((struct ipa_wdi_pipe_setup_info *)(txrx))->client) 125 #define QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx) \ 126 (((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_base_pa) 127 #define QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_SIZE(txrx) \ 128 (((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_size) 129 #define QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx) \ 130 (((struct ipa_wdi_pipe_setup_info *)(txrx))->transfer_ring_doorbell_pa) 131 #define QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(txrx) \ 132 (((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_base_pa) 133 #define QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(txrx) \ 134 (((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_size) 135 #define QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx) \ 136 (((struct ipa_wdi_pipe_setup_info *)(txrx))->event_ring_doorbell_pa) 137 #define QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(txrx) \ 138 (((struct ipa_wdi_pipe_setup_info *)(txrx))->num_pkt_buffers) 139 #define QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(txrx) \ 140 (((struct ipa_wdi_pipe_setup_info *)(txrx))->pkt_offset) 141 #define QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx) \ 142 (((struct ipa_wdi_pipe_setup_info *)(txrx))->desc_format_template) 143 144 /** 145 * __qdf_ipa_wdi_pipe_setup_info_smmu_t - WDI TX/Rx configuration 146 */ 147 typedef struct ipa_wdi_pipe_setup_info_smmu __qdf_ipa_wdi_pipe_setup_info_smmu_t; 148 149 #define QDF_IPA_WDI_SETUP_INFO_SMMU_EP_CFG(txrx) \ 150 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->ipa_ep_cfg) 151 152 #define QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(txrx) \ 153 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->client) 154 #define QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_BASE(txrx) \ 155 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_base) 156 #define QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_SIZE(txrx) \ 157 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_size) 158 #define QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_DOORBELL_PA(txrx) \ 159 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->transfer_ring_doorbell_pa) 160 #define QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_BASE(txrx) \ 161 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_base) 162 #define QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_SIZE(txrx) \ 163 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_size) 164 #define QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_DOORBELL_PA(txrx) \ 165 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->event_ring_doorbell_pa) 166 #define QDF_IPA_WDI_SETUP_INFO_SMMU_NUM_PKT_BUFFERS(txrx) \ 167 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->num_pkt_buffers) 168 #define QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(txrx) \ 169 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->pkt_offset) 170 #define QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(txrx) \ 171 (((struct ipa_wdi_pipe_setup_info_smmu *)(txrx))->desc_format_template) 172 173 /** 174 * __qdf_ipa_wdi_conn_in_params_t - information provided by 175 * uC offload client 176 */ 177 typedef struct ipa_wdi_conn_in_params __qdf_ipa_wdi_conn_in_params_t; 178 179 #define QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in) \ 180 (((struct ipa_wdi_conn_in_params *)(pipe_in))->notify) 181 #define QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in) \ 182 (((struct ipa_wdi_conn_in_params *)(pipe_in))->priv) 183 #define QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(pipe_in) \ 184 (((struct ipa_wdi_conn_in_params *)(pipe_in))->is_smmu_enabled) 185 #define QDF_IPA_WDI_CONN_IN_PARAMS_NUM_SYS_PIPE_NEEDED(pipe_in) \ 186 (((struct ipa_wdi_conn_in_params *)(pipe_in))->num_sys_pipe_needed) 187 #define QDF_IPA_WDI_CONN_IN_PARAMS_SYS_IN(in) \ 188 (((struct ipa_wdi_conn_in_params *)(pipe_in))->sys_in) 189 #define QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in) \ 190 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx) 191 #define QDF_IPA_WDI_CONN_IN_PARAMS_TX_SMMU(pipe_in) \ 192 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_tx.tx_smmu) 193 #define QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in) \ 194 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx) 195 #define QDF_IPA_WDI_CONN_IN_PARAMS_RX_SMMU(pipe_in) \ 196 (((struct ipa_wdi_conn_in_params *)(pipe_in))->u_rx.rx_smmu) 197 198 /** 199 * __qdf_ipa_wdi_conn_out_params_t - information provided 200 * to WLAN druver 201 */ 202 typedef struct ipa_wdi_conn_out_params __qdf_ipa_wdi_conn_out_params_t; 203 204 #define QDF_IPA_WDI_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out) \ 205 (((struct ipa_wdi_conn_out_params *)(pipe_out))->tx_uc_db_pa) 206 #define QDF_IPA_WDI_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out) \ 207 (((struct ipa_wdi_conn_out_params *)(pipe_out))->rx_uc_db_pa) 208 209 /** 210 * __qdf_ipa_wdi_perf_profile_t - To set BandWidth profile 211 */ 212 typedef struct ipa_wdi_perf_profile __qdf_ipa_wdi_perf_profile_t; 213 214 #define QDF_IPA_WDI_PERF_PROFILE_CLIENT(profile) \ 215 (((struct ipa_wdi_perf_profile *)(profile))->client) 216 #define QDF_IPA_WDI_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile) \ 217 (((struct ipa_wdi_perf_profile *)(profile))->max_supported_bw_mbps) 218 219 /** 220 * __qdf_ipa_wdi_init - Client should call this function to 221 * init WDI IPA offload data path 222 * 223 * Note: Should not be called from atomic context and only 224 * after checking IPA readiness using ipa_register_ipa_ready_cb() 225 * 226 * @Return 0 on success, negative on failure 227 */ 228 static inline int __qdf_ipa_wdi_init(struct ipa_wdi_init_in_params *in, 229 struct ipa_wdi_init_out_params *out) 230 { 231 return ipa_wdi_init(in, out); 232 } 233 234 /** 235 * __qdf_ipa_wdi_cleanup - Client should call this function to 236 * clean up WDI IPA offload data path 237 * 238 * @Return 0 on success, negative on failure 239 */ 240 static inline int __qdf_ipa_wdi_cleanup(void) 241 { 242 return ipa_wdi_cleanup(); 243 } 244 245 /** 246 * __qdf_ipa_wdi_reg_intf - Client should call this function to 247 * init WDI IPA offload data path 248 * 249 * Note: Should not be called from atomic context and only 250 * after checking IPA readiness using ipa_register_ipa_ready_cb() 251 * 252 * @Return 0 on success, negative on failure 253 */ 254 static inline int __qdf_ipa_wdi_reg_intf( 255 struct ipa_wdi_reg_intf_in_params *in) 256 { 257 return ipa_wdi_reg_intf(in); 258 } 259 260 /** 261 * __qdf_ipa_wdi_dereg_intf - Client Driver should call this 262 * function to deregister before unload and after disconnect 263 * 264 * @Return 0 on success, negative on failure 265 */ 266 static inline int __qdf_ipa_wdi_dereg_intf(const char *netdev_name) 267 { 268 return ipa_wdi_dereg_intf(netdev_name); 269 } 270 271 /** 272 * __qdf_ipa_wdi_conn_pipes - Client should call this 273 * function to connect pipes 274 * 275 * @in: [in] input parameters from client 276 * @out: [out] output params to client 277 * 278 * Note: Should not be called from atomic context and only 279 * after checking IPA readiness using ipa_register_ipa_ready_cb() 280 * 281 * @Return 0 on success, negative on failure 282 */ 283 static inline int __qdf_ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in, 284 struct ipa_wdi_conn_out_params *out) 285 { 286 return ipa_wdi_conn_pipes(in, out); 287 } 288 289 /** 290 * __qdf_ipa_wdi_disconn_pipes() - Client should call this 291 * function to disconnect pipes 292 * 293 * Note: Should not be called from atomic context 294 * 295 * Returns: 0 on success, negative on failure 296 */ 297 static inline int __qdf_ipa_wdi_disconn_pipes(void) 298 { 299 return ipa_wdi_disconn_pipes(); 300 } 301 302 /** 303 * __qdf_ipa_wdi_enable_pipes() - Client should call this 304 * function to enable IPA offload data path 305 * 306 * Note: Should not be called from atomic context 307 * 308 * Returns: 0 on success, negative on failure 309 */ 310 static inline int __qdf_ipa_wdi_enable_pipes(void) 311 { 312 return ipa_wdi_enable_pipes(); 313 } 314 315 /** 316 * __qdf_ipa_wdi_disable_pipes() - Client should call this 317 * function to disable IPA offload data path 318 * 319 * Note: Should not be called from atomic context 320 * 321 * Returns: 0 on success, negative on failure 322 */ 323 static inline int __qdf_ipa_wdi_disable_pipes(void) 324 { 325 return ipa_wdi_disable_pipes(); 326 } 327 328 /** 329 * __qdf_ipa_wdi_set_perf_profile() - Client should call this function to 330 * set IPA clock bandwidth based on data rates 331 * 332 * @profile: [in] BandWidth profile to use 333 * 334 * Returns: 0 on success, negative on failure 335 */ 336 static inline int __qdf_ipa_wdi_set_perf_profile( 337 struct ipa_wdi_perf_profile *profile) 338 { 339 return ipa_wdi_set_perf_profile(profile); 340 } 341 342 /** 343 * __qdf_ipa_wdi_create_smmu_mapping() - Client should call this function to 344 * create smmu mapping 345 * 346 * @num_buffers: [in] number of buffers 347 * @info: [in] wdi buffer info 348 * 349 * Returns: 0 on success, negative on failure 350 */ 351 static inline int __qdf_ipa_wdi_create_smmu_mapping(u32 num_buffers, 352 struct ipa_wdi_buffer_info *info) 353 { 354 return ipa_wdi_create_smmu_mapping(num_buffers, info); 355 } 356 357 /** 358 * __qdf_ipa_wdi_release_smmu_mapping() - Client should call this function to 359 * release smmu mapping 360 * 361 * @num_buffers: [in] number of buffers 362 * @info: [in] wdi buffer info 363 * 364 * Returns: 0 on success, negative on failure 365 */ 366 static inline int __qdf_ipa_wdi_release_smmu_mapping(u32 num_buffers, 367 struct ipa_wdi_buffer_info *info) 368 { 369 return ipa_wdi_release_smmu_mapping(num_buffers, info); 370 } 371 372 #else /* CONFIG_IPA_WDI_UNIFIED_API */ 373 374 /** 375 * __qdf_ipa_wdi3_hdr_info_t - Header to install on IPA HW 376 */ 377 typedef struct ipa_wdi3_hdr_info __qdf_ipa_wdi3_hdr_info_t; 378 379 #define QDF_IPA_WDI3_HDR_INFO_HDR(hdr_info) \ 380 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr) 381 #define QDF_IPA_WDI3_HDR_INFO_HDR_LEN(hdr_info) \ 382 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_len) 383 #define QDF_IPA_WDI3_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info) \ 384 (((struct ipa_wdi3_hdr_info *)(hdr_info))->dst_mac_addr_offset) 385 #define QDF_IPA_WDI3_HDR_INFO_HDR_TYPE(hdr_info) \ 386 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_type) 387 388 /** 389 * __qdf_ipa_wdi3_reg_intf_in_params_t - parameters for uC offload 390 * interface registration 391 */ 392 typedef struct ipa_wdi3_reg_intf_in_params __qdf_ipa_wdi3_reg_intf_in_params_t; 393 394 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_NETDEV_NAME(in) \ 395 (((struct ipa_wdi3_reg_intf_in_params *)(in))->netdev_name) 396 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_HDR_INFO(in) \ 397 (((struct ipa_wdi3_reg_intf_in_params *)(in))->hdr_info) 398 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in) \ 399 (((struct ipa_wdi3_reg_intf_in_params *)(in))->is_meta_data_valid) 400 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_META_DATA(in) \ 401 (((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data) 402 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_META_DATA_MASK(in) \ 403 (((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data_mask) 404 405 /** 406 * __qdf_ipa_wdi3_setup_info_t - WDI3 TX/Rx configuration 407 */ 408 typedef struct ipa_wdi3_setup_info __qdf_ipa_wdi3_setup_info_t; 409 410 #define QDF_IPA_WDI3_SETUP_INFO_NAT_EN(txrx) \ 411 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.nat.nat_en) 412 #define QDF_IPA_WDI3_SETUP_INFO_HDR_LEN(txrx) \ 413 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_len) 414 #define QDF_IPA_WDI3_SETUP_INFO_HDR_OFST_METADATA_VALID(txrx) \ 415 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid) 416 #define QDF_IPA_WDI3_SETUP_INFO_HDR_METADATA_REG_VALID(txrx) \ 417 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_metadata_reg_valid) 418 #define QDF_IPA_WDI3_SETUP_INFO_HDR_OFST_PKT_SIZE_VALID(txrx) \ 419 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid) 420 #define QDF_IPA_WDI3_SETUP_INFO_HDR_OFST_PKT_SIZE(txrx) \ 421 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size) 422 #define QDF_IPA_WDI3_SETUP_INFO_HDR_ADDITIONAL_CONST_LEN(txrx) \ 423 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_additional_const_len) 424 #define QDF_IPA_WDI3_SETUP_INFO_MODE(txrx) \ 425 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.mode.mode) 426 #define QDF_IPA_WDI3_SETUP_INFO_HDR_LITTLE_ENDIAN(txrx) \ 427 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr_ext.hdr_little_endian) 428 429 #define QDF_IPA_WDI3_SETUP_INFO_CLIENT(txrx) \ 430 (((struct ipa_wdi3_setup_info *)(txrx))->client) 431 #define QDF_IPA_WDI3_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx) \ 432 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_base_pa) 433 #define QDF_IPA_WDI3_SETUP_INFO_TRANSFER_RING_SIZE(txrx) \ 434 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_size) 435 #define QDF_IPA_WDI3_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx) \ 436 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_doorbell_pa) 437 #define QDF_IPA_WDI3_SETUP_INFO_EVENT_RING_BASE_PA(txrx) \ 438 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_base_pa) 439 #define QDF_IPA_WDI3_SETUP_INFO_EVENT_RING_SIZE(txrx) \ 440 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_size) 441 #define QDF_IPA_WDI3_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx) \ 442 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_doorbell_pa) 443 #define QDF_IPA_WDI3_SETUP_INFO_NUM_PKT_BUFFERS(txrx) \ 444 (((struct ipa_wdi3_setup_info *)(txrx))->num_pkt_buffers) 445 #define QDF_IPA_WDI3_SETUP_INFO_PKT_OFFSET(txrx) \ 446 (((struct ipa_wdi3_setup_info *)(txrx))->pkt_offset) 447 #define QDF_IPA_WDI3_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx) \ 448 (((struct ipa_wdi3_setup_info *)(txrx))->desc_format_template) 449 450 /** 451 * __qdf_ipa_wdi3_conn_in_params_t - information provided by 452 * uC offload client 453 */ 454 typedef struct ipa_wdi3_conn_in_params __qdf_ipa_wdi3_conn_in_params_t; 455 456 #define QDF_IPA_WDI3_CONN_IN_PARAMS_NOTIFY(pipe_in) \ 457 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->notify) 458 #define QDF_IPA_WDI3_CONN_IN_PARAMS_PRIV(pipe_in) \ 459 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->priv) 460 #define QDF_IPA_WDI3_CONN_IN_PARAMS_TX(pipe_in) \ 461 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->tx) 462 #define QDF_IPA_WDI3_CONN_IN_PARAMS_RX(pipe_in) \ 463 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->rx) 464 465 /** 466 * __qdf_ipa_wdi3_conn_out_params_t - information provided 467 * to WLAN druver 468 */ 469 typedef struct ipa_wdi3_conn_out_params __qdf_ipa_wdi3_conn_out_params_t; 470 471 #define QDF_IPA_WDI3_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out) \ 472 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_pa) 473 #define QDF_IPA_WDI3_CONN_OUT_PARAMS_TX_UC_DB_VA(pipe_out) \ 474 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_va) 475 #define QDF_IPA_WDI3_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out) \ 476 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->rx_uc_db_pa) 477 478 /** 479 * __qdf_ipa_wdi3_perf_profile_t - To set BandWidth profile 480 */ 481 typedef struct ipa_wdi3_perf_profile __qdf_ipa_wdi3_perf_profile_t; 482 483 #define QDF_IPA_WDI3_PERF_PROFILE_CLIENT(profile) \ 484 (((struct ipa_wdi3_perf_profile *)(profile))->client) 485 #define QDF_IPA_WDI3_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile) \ 486 (((struct ipa_wdi3_perf_profile *)(profile))->max_supported_bw_mbps) 487 488 /** 489 * __qdf_ipa_wdi3_reg_intf - Client should call this function to 490 * init WDI3 IPA offload data path 491 * 492 * Note: Should not be called from atomic context and only 493 * after checking IPA readiness using ipa_register_ipa_ready_cb() 494 * 495 * @Return 0 on success, negative on failure 496 */ 497 static inline int __qdf_ipa_wdi3_reg_intf( 498 struct ipa_wdi3_reg_intf_in_params *in) 499 { 500 return ipa_wdi3_reg_intf(in); 501 } 502 503 /** 504 * __qdf_ipa_wdi3_dereg_intf - Client Driver should call this 505 * function to deregister before unload and after disconnect 506 * 507 * @Return 0 on success, negative on failure 508 */ 509 static inline int __qdf_ipa_wdi3_dereg_intf(const char *netdev_name) 510 { 511 return ipa_wdi3_dereg_intf(netdev_name); 512 } 513 514 /** 515 * __qdf_ipa_wdi3_conn_pipes - Client should call this 516 * function to connect pipes 517 * 518 * @in: [in] input parameters from client 519 * @out: [out] output params to client 520 * 521 * Note: Should not be called from atomic context and only 522 * after checking IPA readiness using ipa_register_ipa_ready_cb() 523 * 524 * @Return 0 on success, negative on failure 525 */ 526 static inline int __qdf_ipa_wdi3_conn_pipes(struct ipa_wdi3_conn_in_params *in, 527 struct ipa_wdi3_conn_out_params *out) 528 { 529 return ipa_wdi3_conn_pipes(in, out); 530 } 531 532 /** 533 * __qdf_ipa_wdi3_disconn_pipes() - Client should call this 534 * function to disconnect pipes 535 * 536 * Note: Should not be called from atomic context 537 * 538 * Returns: 0 on success, negative on failure 539 */ 540 static inline int __qdf_ipa_wdi3_disconn_pipes(void) 541 { 542 return ipa_wdi3_disconn_pipes(); 543 } 544 545 /** 546 * __qdf_ipa_wdi3_enable_pipes() - Client should call this 547 * function to enable IPA offload data path 548 * 549 * Note: Should not be called from atomic context 550 * 551 * Returns: 0 on success, negative on failure 552 */ 553 static inline int __qdf_ipa_wdi3_enable_pipes(void) 554 { 555 return ipa_wdi3_enable_pipes(); 556 } 557 558 /** 559 * __qdf_ipa_wdi3_disable_pipes() - Client should call this 560 * function to disable IPA offload data path 561 * 562 * Note: Should not be called from atomic context 563 * 564 * Returns: 0 on success, negative on failure 565 */ 566 static inline int __qdf_ipa_wdi3_disable_pipes(void) 567 { 568 return ipa_wdi3_disable_pipes(); 569 } 570 571 /** 572 * __qdf_ipa_wdi3_set_perf_profile() - Client should call this function to 573 * set IPA clock bandwidth based on data rates 574 * 575 * @profile: [in] BandWidth profile to use 576 * 577 * Returns: 0 on success, negative on failure 578 */ 579 static inline int __qdf_ipa_wdi3_set_perf_profile( 580 struct ipa_wdi3_perf_profile *profile) 581 { 582 return ipa_wdi3_set_perf_profile(profile); 583 } 584 585 #endif /* CONFIG_IPA_WDI_UNIFIED_API */ 586 587 #endif /* IPA_OFFLOAD */ 588 #endif /* I_QDF_IPA_WDI_H */ 589