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 #else /* CONFIG_IPA_WDI_UNIFIED_API */ 343 344 /** 345 * __qdf_ipa_wdi3_hdr_info_t - Header to install on IPA HW 346 */ 347 typedef struct ipa_wdi3_hdr_info __qdf_ipa_wdi3_hdr_info_t; 348 349 #define QDF_IPA_WDI3_HDR_INFO_HDR(hdr_info) \ 350 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr) 351 #define QDF_IPA_WDI3_HDR_INFO_HDR_LEN(hdr_info) \ 352 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_len) 353 #define QDF_IPA_WDI3_HDR_INFO_DST_MAC_ADDR_OFFSET(hdr_info) \ 354 (((struct ipa_wdi3_hdr_info *)(hdr_info))->dst_mac_addr_offset) 355 #define QDF_IPA_WDI3_HDR_INFO_HDR_TYPE(hdr_info) \ 356 (((struct ipa_wdi3_hdr_info *)(hdr_info))->hdr_type) 357 358 /** 359 * __qdf_ipa_wdi3_reg_intf_in_params_t - parameters for uC offload 360 * interface registration 361 */ 362 typedef struct ipa_wdi3_reg_intf_in_params __qdf_ipa_wdi3_reg_intf_in_params_t; 363 364 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_NETDEV_NAME(in) \ 365 (((struct ipa_wdi3_reg_intf_in_params *)(in))->netdev_name) 366 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_HDR_INFO(in) \ 367 (((struct ipa_wdi3_reg_intf_in_params *)(in))->hdr_info) 368 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_IS_META_DATA_VALID(in) \ 369 (((struct ipa_wdi3_reg_intf_in_params *)(in))->is_meta_data_valid) 370 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_META_DATA(in) \ 371 (((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data) 372 #define QDF_IPA_WDI3_REG_INTF_IN_PARAMS_META_DATA_MASK(in) \ 373 (((struct ipa_wdi3_reg_intf_in_params *)(in))->meta_data_mask) 374 375 /** 376 * __qdf_ipa_wdi3_setup_info_t - WDI3 TX/Rx configuration 377 */ 378 typedef struct ipa_wdi3_setup_info __qdf_ipa_wdi3_setup_info_t; 379 380 #define QDF_IPA_WDI3_SETUP_INFO_NAT_EN(txrx) \ 381 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.nat.nat_en) 382 #define QDF_IPA_WDI3_SETUP_INFO_HDR_LEN(txrx) \ 383 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_len) 384 #define QDF_IPA_WDI3_SETUP_INFO_HDR_OFST_METADATA_VALID(txrx) \ 385 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid) 386 #define QDF_IPA_WDI3_SETUP_INFO_HDR_METADATA_REG_VALID(txrx) \ 387 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_metadata_reg_valid) 388 #define QDF_IPA_WDI3_SETUP_INFO_HDR_OFST_PKT_SIZE_VALID(txrx) \ 389 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid) 390 #define QDF_IPA_WDI3_SETUP_INFO_HDR_OFST_PKT_SIZE(txrx) \ 391 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_ofst_pkt_size) 392 #define QDF_IPA_WDI3_SETUP_INFO_HDR_ADDITIONAL_CONST_LEN(txrx) \ 393 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr.hdr_additional_const_len) 394 #define QDF_IPA_WDI3_SETUP_INFO_MODE(txrx) \ 395 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.mode.mode) 396 #define QDF_IPA_WDI3_SETUP_INFO_HDR_LITTLE_ENDIAN(txrx) \ 397 (((struct ipa_wdi3_setup_info *)(txrx))->ipa_ep_cfg.hdr_ext.hdr_little_endian) 398 399 #define QDF_IPA_WDI3_SETUP_INFO_CLIENT(txrx) \ 400 (((struct ipa_wdi3_setup_info *)(txrx))->client) 401 #define QDF_IPA_WDI3_SETUP_INFO_TRANSFER_RING_BASE_PA(txrx) \ 402 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_base_pa) 403 #define QDF_IPA_WDI3_SETUP_INFO_TRANSFER_RING_SIZE(txrx) \ 404 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_size) 405 #define QDF_IPA_WDI3_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(txrx) \ 406 (((struct ipa_wdi3_setup_info *)(txrx))->transfer_ring_doorbell_pa) 407 #define QDF_IPA_WDI3_SETUP_INFO_EVENT_RING_BASE_PA(txrx) \ 408 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_base_pa) 409 #define QDF_IPA_WDI3_SETUP_INFO_EVENT_RING_SIZE(txrx) \ 410 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_size) 411 #define QDF_IPA_WDI3_SETUP_INFO_EVENT_RING_DOORBELL_PA(txrx) \ 412 (((struct ipa_wdi3_setup_info *)(txrx))->event_ring_doorbell_pa) 413 #define QDF_IPA_WDI3_SETUP_INFO_NUM_PKT_BUFFERS(txrx) \ 414 (((struct ipa_wdi3_setup_info *)(txrx))->num_pkt_buffers) 415 #define QDF_IPA_WDI3_SETUP_INFO_PKT_OFFSET(txrx) \ 416 (((struct ipa_wdi3_setup_info *)(txrx))->pkt_offset) 417 #define QDF_IPA_WDI3_SETUP_INFO_DESC_FORMAT_TEMPLATE(txrx) \ 418 (((struct ipa_wdi3_setup_info *)(txrx))->desc_format_template) 419 420 /** 421 * __qdf_ipa_wdi3_conn_in_params_t - information provided by 422 * uC offload client 423 */ 424 typedef struct ipa_wdi3_conn_in_params __qdf_ipa_wdi3_conn_in_params_t; 425 426 #define QDF_IPA_WDI3_CONN_IN_PARAMS_NOTIFY(pipe_in) \ 427 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->notify) 428 #define QDF_IPA_WDI3_CONN_IN_PARAMS_PRIV(pipe_in) \ 429 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->priv) 430 #define QDF_IPA_WDI3_CONN_IN_PARAMS_TX(pipe_in) \ 431 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->tx) 432 #define QDF_IPA_WDI3_CONN_IN_PARAMS_RX(pipe_in) \ 433 (((struct ipa_wdi3_conn_in_params *)(pipe_in))->rx) 434 435 /** 436 * __qdf_ipa_wdi3_conn_out_params_t - information provided 437 * to WLAN druver 438 */ 439 typedef struct ipa_wdi3_conn_out_params __qdf_ipa_wdi3_conn_out_params_t; 440 441 #define QDF_IPA_WDI3_CONN_OUT_PARAMS_TX_UC_DB_PA(pipe_out) \ 442 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_pa) 443 #define QDF_IPA_WDI3_CONN_OUT_PARAMS_TX_UC_DB_VA(pipe_out) \ 444 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->tx_uc_db_va) 445 #define QDF_IPA_WDI3_CONN_OUT_PARAMS_RX_UC_DB_PA(pipe_out) \ 446 (((struct ipa_wdi3_conn_out_params *)(pipe_out))->rx_uc_db_pa) 447 448 /** 449 * __qdf_ipa_wdi3_perf_profile_t - To set BandWidth profile 450 */ 451 typedef struct ipa_wdi3_perf_profile __qdf_ipa_wdi3_perf_profile_t; 452 453 #define QDF_IPA_WDI3_PERF_PROFILE_CLIENT(profile) \ 454 (((struct ipa_wdi3_perf_profile *)(profile))->client) 455 #define QDF_IPA_WDI3_PERF_PROFILE_MAX_SUPPORTED_BW_MBPS(profile) \ 456 (((struct ipa_wdi3_perf_profile *)(profile))->max_supported_bw_mbps) 457 458 /** 459 * __qdf_ipa_wdi3_reg_intf - Client should call this function to 460 * init WDI3 IPA offload data path 461 * 462 * Note: Should not be called from atomic context and only 463 * after checking IPA readiness using ipa_register_ipa_ready_cb() 464 * 465 * @Return 0 on success, negative on failure 466 */ 467 static inline int __qdf_ipa_wdi3_reg_intf( 468 struct ipa_wdi3_reg_intf_in_params *in) 469 { 470 return ipa_wdi3_reg_intf(in); 471 } 472 473 /** 474 * __qdf_ipa_wdi3_dereg_intf - Client Driver should call this 475 * function to deregister before unload and after disconnect 476 * 477 * @Return 0 on success, negative on failure 478 */ 479 static inline int __qdf_ipa_wdi3_dereg_intf(const char *netdev_name) 480 { 481 return ipa_wdi3_dereg_intf(netdev_name); 482 } 483 484 /** 485 * __qdf_ipa_wdi3_conn_pipes - Client should call this 486 * function to connect pipes 487 * 488 * @in: [in] input parameters from client 489 * @out: [out] output params to client 490 * 491 * Note: Should not be called from atomic context and only 492 * after checking IPA readiness using ipa_register_ipa_ready_cb() 493 * 494 * @Return 0 on success, negative on failure 495 */ 496 static inline int __qdf_ipa_wdi3_conn_pipes(struct ipa_wdi3_conn_in_params *in, 497 struct ipa_wdi3_conn_out_params *out) 498 { 499 return ipa_wdi3_conn_pipes(in, out); 500 } 501 502 /** 503 * __qdf_ipa_wdi3_disconn_pipes() - Client should call this 504 * function to disconnect pipes 505 * 506 * Note: Should not be called from atomic context 507 * 508 * Returns: 0 on success, negative on failure 509 */ 510 static inline int __qdf_ipa_wdi3_disconn_pipes(void) 511 { 512 return ipa_wdi3_disconn_pipes(); 513 } 514 515 /** 516 * __qdf_ipa_wdi3_enable_pipes() - Client should call this 517 * function to enable IPA offload data path 518 * 519 * Note: Should not be called from atomic context 520 * 521 * Returns: 0 on success, negative on failure 522 */ 523 static inline int __qdf_ipa_wdi3_enable_pipes(void) 524 { 525 return ipa_wdi3_enable_pipes(); 526 } 527 528 /** 529 * __qdf_ipa_wdi3_disable_pipes() - Client should call this 530 * function to disable IPA offload data path 531 * 532 * Note: Should not be called from atomic context 533 * 534 * Returns: 0 on success, negative on failure 535 */ 536 static inline int __qdf_ipa_wdi3_disable_pipes(void) 537 { 538 return ipa_wdi3_disable_pipes(); 539 } 540 541 /** 542 * __qdf_ipa_wdi3_set_perf_profile() - Client should call this function to 543 * set IPA clock bandwidth based on data rates 544 * 545 * @profile: [in] BandWidth profile to use 546 * 547 * Returns: 0 on success, negative on failure 548 */ 549 static inline int __qdf_ipa_wdi3_set_perf_profile( 550 struct ipa_wdi3_perf_profile *profile) 551 { 552 return ipa_wdi3_set_perf_profile(profile); 553 } 554 555 #endif /* CONFIG_IPA_WDI_UNIFIED_API */ 556 557 #endif /* IPA_OFFLOAD */ 558 #endif /* I_QDF_IPA_WDI_H */ 559