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