diff --git a/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c b/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c index 5bcd361a4a9d..418181b6fca8 100644 --- a/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c +++ b/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2015-2021, The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. */ #include @@ -318,6 +319,35 @@ struct ipa_fmwk_contex { bool (*ipa_wdi_is_tx1_used)(void); + int (*ipa_wdi_get_capabilities)(struct ipa_wdi_capabilities_out_params *out); + + int (*ipa_wdi_init_per_inst)(struct ipa_wdi_init_in_params *in, + struct ipa_wdi_init_out_params *out); + + int (*ipa_wdi_cleanup_per_inst)(u32 hdl); + + int (*ipa_wdi_reg_intf_per_inst)( + struct ipa_wdi_reg_intf_in_params *in); + + int (*ipa_wdi_dereg_intf_per_inst)(const char *netdev_name, u32 hdl); + + int (*ipa_wdi_conn_pipes_per_inst)(struct ipa_wdi_conn_in_params *in, + struct ipa_wdi_conn_out_params *out); + + int (*ipa_wdi_disconn_pipes_per_inst)(u32 hdl); + + int (*ipa_wdi_enable_pipes_per_inst)(u32 hdl); + + int (*ipa_wdi_disable_pipes_per_inst)(u32 hdl); + + int (*ipa_wdi_set_perf_profile_per_inst)(u32 hdl, struct ipa_wdi_perf_profile *profile); + + int (*ipa_wdi_create_smmu_mapping_per_inst)(u32 hdl, u32 num_buffers, + struct ipa_wdi_buffer_info *info); + + int (*ipa_wdi_release_smmu_mapping_per_inst)(u32 hdl, u32 num_buffers, + struct ipa_wdi_buffer_info *info); + /* ipa_gsb APIs*/ int (*ipa_bridge_init)(struct ipa_bridge_init_params *params, u32 *hdl); @@ -1248,7 +1278,19 @@ int ipa_fmwk_register_ipa_wdi3(const struct ipa_wdi3_data *in) || ipa_fmwk_ctx->ipa_wdi_get_stats || ipa_fmwk_ctx->ipa_get_wdi_version || ipa_fmwk_ctx->ipa_wdi_sw_stats - || ipa_fmwk_ctx->ipa_wdi_is_tx1_used) { + || ipa_fmwk_ctx->ipa_wdi_is_tx1_used + || ipa_fmwk_ctx->ipa_wdi_get_capabilities + || ipa_fmwk_ctx->ipa_wdi_init_per_inst + || ipa_fmwk_ctx->ipa_wdi_cleanup_per_inst + || ipa_fmwk_ctx->ipa_wdi_reg_intf_per_inst + || ipa_fmwk_ctx->ipa_wdi_dereg_intf_per_inst + || ipa_fmwk_ctx->ipa_wdi_conn_pipes_per_inst + || ipa_fmwk_ctx->ipa_wdi_disconn_pipes_per_inst + || ipa_fmwk_ctx->ipa_wdi_enable_pipes_per_inst + || ipa_fmwk_ctx->ipa_wdi_disable_pipes_per_inst + || ipa_fmwk_ctx->ipa_wdi_set_perf_profile_per_inst + || ipa_fmwk_ctx->ipa_wdi_create_smmu_mapping_per_inst + || ipa_fmwk_ctx->ipa_wdi_release_smmu_mapping_per_inst) { pr_err("ipa_wdi3 APIs were already initialized\n"); return -EPERM; } @@ -1271,7 +1313,26 @@ int ipa_fmwk_register_ipa_wdi3(const struct ipa_wdi3_data *in) ipa_fmwk_ctx->ipa_wdi_sw_stats = in->ipa_wdi_sw_stats; ipa_fmwk_ctx->ipa_get_wdi_version = in->ipa_get_wdi_version; ipa_fmwk_ctx->ipa_wdi_is_tx1_used = in->ipa_wdi_is_tx1_used; - + ipa_fmwk_ctx->ipa_wdi_get_capabilities = in->ipa_wdi_get_capabilities; + ipa_fmwk_ctx->ipa_wdi_init_per_inst = in->ipa_wdi_init_per_inst; + ipa_fmwk_ctx->ipa_wdi_cleanup_per_inst = in->ipa_wdi_cleanup_per_inst; + ipa_fmwk_ctx->ipa_wdi_reg_intf_per_inst = in->ipa_wdi_reg_intf_per_inst; + ipa_fmwk_ctx->ipa_wdi_dereg_intf_per_inst = + in->ipa_wdi_dereg_intf_per_inst; + ipa_fmwk_ctx->ipa_wdi_conn_pipes_per_inst = + in->ipa_wdi_conn_pipes_per_inst; + ipa_fmwk_ctx->ipa_wdi_disconn_pipes_per_inst = + in->ipa_wdi_disconn_pipes_per_inst; + ipa_fmwk_ctx->ipa_wdi_enable_pipes_per_inst = + in->ipa_wdi_enable_pipes_per_inst; + ipa_fmwk_ctx->ipa_wdi_disable_pipes_per_inst = + in->ipa_wdi_disable_pipes_per_inst; + ipa_fmwk_ctx->ipa_wdi_set_perf_profile_per_inst = + in->ipa_wdi_set_perf_profile_per_inst; + ipa_fmwk_ctx->ipa_wdi_create_smmu_mapping_per_inst = + in->ipa_wdi_create_smmu_mapping_per_inst; + ipa_fmwk_ctx->ipa_wdi_release_smmu_mapping_per_inst = + in->ipa_wdi_release_smmu_mapping_per_inst; pr_info("ipa_wdi3 registered successfully\n"); return 0; @@ -1411,6 +1472,139 @@ int ipa_wdi_release_smmu_mapping(u32 num_buffers, } EXPORT_SYMBOL(ipa_wdi_release_smmu_mapping); +int ipa_wdi_get_capabilities(struct ipa_wdi_capabilities_out_params *out) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_wdi_get_capabilities, out); + + return ret; +} +EXPORT_SYMBOL(ipa_wdi_get_capabilities); + +int ipa_wdi_init_per_inst(struct ipa_wdi_init_in_params *in, + struct ipa_wdi_init_out_params *out) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_wdi_init_per_inst, + in, out); + + return ret; +} +EXPORT_SYMBOL(ipa_wdi_init_per_inst); + +int ipa_wdi_cleanup_per_inst(u32 hdl) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_wdi_cleanup_per_inst, hdl); + + return ret; +} +EXPORT_SYMBOL(ipa_wdi_cleanup_per_inst); + +int ipa_wdi_reg_intf_per_inst( + struct ipa_wdi_reg_intf_in_params *in) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_wdi_reg_intf_per_inst, + in); + + return ret; +} +EXPORT_SYMBOL(ipa_wdi_reg_intf_per_inst); + +int ipa_wdi_dereg_intf_per_inst(const char *netdev_name, u32 hdl) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_wdi_dereg_intf_per_inst, + netdev_name, hdl); + + return ret; +} +EXPORT_SYMBOL(ipa_wdi_dereg_intf_per_inst); + +int ipa_wdi_conn_pipes_per_inst(struct ipa_wdi_conn_in_params *in, + struct ipa_wdi_conn_out_params *out) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_wdi_conn_pipes_per_inst, + in, out); + + return ret; +} +EXPORT_SYMBOL(ipa_wdi_conn_pipes_per_inst); + +int ipa_wdi_disconn_pipes_per_inst(u32 hdl) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_wdi_disconn_pipes_per_inst, hdl); + + return ret; +} +EXPORT_SYMBOL(ipa_wdi_disconn_pipes_per_inst); + +int ipa_wdi_enable_pipes_per_inst(u32 hdl) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_wdi_enable_pipes_per_inst, hdl); + + return ret; +} +EXPORT_SYMBOL(ipa_wdi_enable_pipes_per_inst); + +int ipa_wdi_disable_pipes_per_inst(u32 hdl) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_wdi_disable_pipes_per_inst, hdl); + + return ret; +} +EXPORT_SYMBOL(ipa_wdi_disable_pipes_per_inst); + +int ipa_wdi_set_perf_profile_per_inst(u32 hdl, + struct ipa_wdi_perf_profile *profile) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_wdi_set_perf_profile_per_inst, + hdl, profile); + + return ret; +} +EXPORT_SYMBOL(ipa_wdi_set_perf_profile_per_inst); + +int ipa_wdi_create_smmu_mapping_per_inst(u32 hdl, u32 num_buffers, + struct ipa_wdi_buffer_info *info) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN_DP(ipa_wdi_create_smmu_mapping_per_inst, + hdl, num_buffers, info); + + return ret; +} +EXPORT_SYMBOL(ipa_wdi_create_smmu_mapping_per_inst); + +int ipa_wdi_release_smmu_mapping_per_inst(u32 hdl, u32 num_buffers, + struct ipa_wdi_buffer_info *info) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN_DP(ipa_wdi_release_smmu_mapping_per_inst, + hdl, num_buffers, info); + + return ret; +} +EXPORT_SYMBOL(ipa_wdi_release_smmu_mapping_per_inst); + int ipa_wdi_get_stats(struct IpaHwStatsWDIInfoData_t *stats) { int ret; diff --git a/include/linux/ipa_fmwk.h b/include/linux/ipa_fmwk.h index b286446c0430..6c66e4f6781d 100644 --- a/include/linux/ipa_fmwk.h +++ b/include/linux/ipa_fmwk.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2018 - 2021, The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. */ #ifndef _IPA_FMWK_H_ @@ -207,6 +208,35 @@ struct ipa_wdi3_data { int (*ipa_get_wdi_version)(void); bool (*ipa_wdi_is_tx1_used)(void); + + int (*ipa_wdi_get_capabilities)(struct ipa_wdi_capabilities_out_params *out); + + int (*ipa_wdi_init_per_inst)(struct ipa_wdi_init_in_params *in, + struct ipa_wdi_init_out_params *out); + + int (*ipa_wdi_cleanup_per_inst)(u32 hdl); + + int (*ipa_wdi_reg_intf_per_inst)( + struct ipa_wdi_reg_intf_in_params *in); + + int (*ipa_wdi_dereg_intf_per_inst)(const char *netdev_name, u32 hdl); + + int (*ipa_wdi_conn_pipes_per_inst)(struct ipa_wdi_conn_in_params *in, + struct ipa_wdi_conn_out_params *out); + + int (*ipa_wdi_disconn_pipes_per_inst)(u32 hdl); + + int (*ipa_wdi_enable_pipes_per_inst)(u32 hdl); + + int (*ipa_wdi_disable_pipes_per_inst)(u32 hdl); + + int (*ipa_wdi_set_perf_profile_per_inst)(u32 hdl, struct ipa_wdi_perf_profile *profile); + + int (*ipa_wdi_create_smmu_mapping_per_inst)(u32 hdl, u32 num_buffers, + struct ipa_wdi_buffer_info *info); + + int (*ipa_wdi_release_smmu_mapping_per_inst)(u32 hdl, u32 num_buffers, + struct ipa_wdi_buffer_info *info); }; struct ipa_qdss_data { diff --git a/include/linux/ipa_wdi3.h b/include/linux/ipa_wdi3.h index ca07b74877a2..240ce576ae1b 100644 --- a/include/linux/ipa_wdi3.h +++ b/include/linux/ipa_wdi3.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2018 - 2021, The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. */ #ifndef _IPA_WDI3_H_ @@ -19,15 +20,19 @@ #define IPA_WDI_MAX_SUPPORTED_SYS_PIPE 3 +typedef u32 ipa_wdi_hdl_t; + enum ipa_wdi_version { IPA_WDI_1, IPA_WDI_2, - IPA_WDI_3 + IPA_WDI_3, + IPA_WDI_VER_MAX }; #define IPA_WDI3_TX_DIR 1 #define IPA_WDI3_TX1_DIR 2 #define IPA_WDI3_RX_DIR 3 +#define IPA_WDI_INST_MAX (2) /** * struct ipa_wdi_init_in_params - wdi init input parameters @@ -43,6 +48,7 @@ struct ipa_wdi_init_in_params { #ifdef IPA_WAN_MSG_IPv6_ADDR_GW_LEN ipa_wdi_meter_notifier_cb wdi_notify; #endif + int inst_id; }; /** @@ -57,6 +63,7 @@ struct ipa_wdi_init_out_params { bool is_uC_ready; bool is_smmu_enabled; bool is_over_gsi; + ipa_wdi_hdl_t hdl; }; /** @@ -93,6 +100,7 @@ struct ipa_wdi_reg_intf_in_params { u32 meta_data; u32 meta_data_mask; u8 is_tx1_used; + ipa_wdi_hdl_t hdl; }; /** @@ -208,6 +216,7 @@ struct ipa_wdi_conn_in_params { struct ipa_wdi_pipe_setup_info tx; struct ipa_wdi_pipe_setup_info_smmu tx_smmu; } u_tx1; + ipa_wdi_hdl_t hdl; }; /** @@ -236,8 +245,30 @@ struct ipa_wdi_perf_profile { u32 max_supported_bw_mbps; }; + +/** + * struct ipa_wdi_capabilities - wdi capability parameters + * + * @num_of_instances: Number of WLAN instances supported. + */ +struct ipa_wdi_capabilities_out_params { + u8 num_of_instances; +}; + #if IS_ENABLED(CONFIG_IPA3) +/** + * ipa_wdi_get_capabilities - Client should call this function to + * know the WDI capabilities + * + * Note: Should not be called from atomic context and only + * after checking IPA readiness using ipa_register_ipa_ready_cb() + * + * @Return 0 on success, negative on failure + */ +int ipa_wdi_get_capabilities( + struct ipa_wdi_capabilities_out_params *out); + /** * ipa_wdi_init - Client should call this function to * init WDI IPA offload data path @@ -256,6 +287,18 @@ int ipa_wdi_init(struct ipa_wdi_init_in_params *in, */ bool ipa_wdi_is_tx1_used(void); +/** + * ipa_wdi_init_per_inst - Client should call this function to + * init WDI IPA offload data path + * + * Note: Should not be called from atomic context and only + * after checking IPA readiness using ipa_register_ipa_ready_cb() + * + * @Return 0 on success, negative on failure + */ +int ipa_wdi_init_per_inst(struct ipa_wdi_init_in_params *in, + struct ipa_wdi_init_out_params *out); + /** * ipa_wdi_cleanup - Client should call this function to * clean up WDI IPA offload data path @@ -264,6 +307,17 @@ bool ipa_wdi_is_tx1_used(void); */ int ipa_wdi_cleanup(void); +/** + * ipa_wdi_cleanup_per_inst - Client should call this function to + * clean up WDI IPA offload data path + * + * @hdl: hdl to wdi client + * + * @Return 0 on success, negative on failure + */ +int ipa_wdi_cleanup_per_inst(ipa_wdi_hdl_t hdl); + + /** * ipa_wdi_reg_intf - Client should call this function to * register interface @@ -275,6 +329,17 @@ int ipa_wdi_cleanup(void); int ipa_wdi_reg_intf( struct ipa_wdi_reg_intf_in_params *in); +/** + * ipa_wdi_reg_intf_per_inst - Client should call this function to + * register interface + * + * Note: Should not be called from atomic context + * + * @Return 0 on success, negative on failure + */ +int ipa_wdi_reg_intf_per_inst( + struct ipa_wdi_reg_intf_in_params *in); + /** * ipa_wdi_dereg_intf - Client Driver should call this * function to deregister before unload and after disconnect @@ -283,6 +348,14 @@ int ipa_wdi_reg_intf( */ int ipa_wdi_dereg_intf(const char *netdev_name); +/** + * ipa_wdi_dereg_intf_per_inst - Client Driver should call this + * function to deregister before unload and after disconnect + * + * @Return 0 on success, negative on failure + */ +int ipa_wdi_dereg_intf_per_inst(const char *netdev_name, ipa_wdi_hdl_t hdl); + /** * ipa_wdi_conn_pipes - Client should call this * function to connect pipes @@ -297,6 +370,20 @@ int ipa_wdi_dereg_intf(const char *netdev_name); int ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in, struct ipa_wdi_conn_out_params *out); +/** + * ipa_wdi_conn_pipes_per_inst - Client should call this + * function to connect pipes + * + * @in: [in] input parameters from client + * @out: [out] output params to client + * + * Note: Should not be called from atomic context + * + * @Return 0 on success, negative on failure + */ +int ipa_wdi_conn_pipes_per_inst(struct ipa_wdi_conn_in_params *in, + struct ipa_wdi_conn_out_params *out); + /** * ipa_wdi_disconn_pipes() - Client should call this * function to disconnect pipes @@ -307,6 +394,17 @@ int ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in, */ int ipa_wdi_disconn_pipes(void); +/** + * ipa_wdi_disconn_pipes_per_inst() - Client should call this + * function to disconnect pipes + * + * @hdl: hdl to wdi client + * Note: Should not be called from atomic context + * + * Returns: 0 on success, negative on failure + */ +int ipa_wdi_disconn_pipes_per_inst(ipa_wdi_hdl_t hdl); + /** * ipa_wdi_enable_pipes() - Client should call this * function to enable IPA offload data path @@ -317,6 +415,17 @@ int ipa_wdi_disconn_pipes(void); */ int ipa_wdi_enable_pipes(void); +/** + * ipa_wdi_enable_pipes_per_inst() - Client should call this + * function to enable IPA offload data path + * + * @hdl: hdl to wdi client + * Note: Should not be called from atomic context + * + * Returns: 0 on success, negative on failure + */ +int ipa_wdi_enable_pipes_per_inst(ipa_wdi_hdl_t hdl); + /** * ipa_wdi_disable_pipes() - Client should call this * function to disable IPA offload data path @@ -327,6 +436,17 @@ int ipa_wdi_enable_pipes(void); */ int ipa_wdi_disable_pipes(void); +/** + * ipa_wdi_disable_pipes_per_inst() - Client should call this + * function to disable IPA offload data path + * + * @hdl: hdl to wdi client + * Note: Should not be called from atomic context + * + * Returns: 0 on success, negative on failure + */ +int ipa_wdi_disable_pipes_per_inst(ipa_wdi_hdl_t hdl); + /** * ipa_wdi_set_perf_profile() - Client should call this function to * set IPA clock bandwidth based on data rates @@ -337,6 +457,18 @@ int ipa_wdi_disable_pipes(void); */ int ipa_wdi_set_perf_profile(struct ipa_wdi_perf_profile *profile); +/** + * ipa_wdi_set_perf_profile_per_inst() - Client should call this function to + * set IPA clock bandwidth based on data rates + * + * @hdl: hdl to wdi client + * @profile: [in] BandWidth profile to use + * + * Returns: 0 on success, negative on failure + */ +int ipa_wdi_set_perf_profile_per_inst(ipa_wdi_hdl_t hdl, + struct ipa_wdi_perf_profile *profile); + /** * ipa_wdi_create_smmu_mapping() - Create smmu mapping * @@ -347,6 +479,17 @@ int ipa_wdi_set_perf_profile(struct ipa_wdi_perf_profile *profile); int ipa_wdi_create_smmu_mapping(u32 num_buffers, struct ipa_wdi_buffer_info *info); +/** + * ipa_wdi_create_smmu_mapping_per_inst() - Create smmu mapping + * + * @hdl: hdl to wdi client + * @num_buffers: number of buffers + * @info: wdi buffer info + */ +int ipa_wdi_create_smmu_mapping_per_inst(ipa_wdi_hdl_t hdl, + u32 num_buffers, + struct ipa_wdi_buffer_info *info); + /** * ipa_wdi_release_smmu_mapping() - Release smmu mapping * @@ -357,6 +500,18 @@ int ipa_wdi_create_smmu_mapping(u32 num_buffers, int ipa_wdi_release_smmu_mapping(u32 num_buffers, struct ipa_wdi_buffer_info *info); +/** + * ipa_wdi_release_smmu_mapping_per_inst() - Release smmu mapping + * + * @hdl: hdl to wdi client + * @num_buffers: number of buffers + * + * @info: wdi buffer info + */ +int ipa_wdi_release_smmu_mapping_per_inst(ipa_wdi_hdl_t hdl, + u32 num_buffers, + struct ipa_wdi_buffer_info *info); + /** * ipa_wdi_get_stats() - Query WDI statistics * @stats: [inout] stats blob from client populated by driver @@ -394,12 +549,34 @@ int ipa_get_wdi_version(void); #else /* IS_ENABLED(CONFIG_IPA3) */ +/** + * ipa_wdi_get_capabilities - Client should call this function to + * know the WDI capabilities + * + * Note: Should not be called from atomic context and only + * after checking IPA readiness using ipa_register_ipa_ready_cb() + * + * @Return 0 on success, negative on failure + */ +int ipa_wdi_get_capabilities( + struct ipa_wdi_capabilities_out_params *out) +{ + return -EPERM; +} + static inline int ipa_wdi_init(struct ipa_wdi_init_in_params *in, struct ipa_wdi_init_out_params *out) { return -EPERM; } +static inline int ipa_wdi_init_per_inst( + struct ipa_wdi_init_in_params *in, + struct ipa_wdi_init_out_params *out) +{ + return -EPERM; +} + static inline int ipa_get_wdi_version(void) { return -EPERM; @@ -415,56 +592,119 @@ static inline int ipa_wdi_cleanup(void) return -EPERM; } +static inline int ipa_wdi_cleanup_per_inst(ipa_wdi_hdl_t hdl) +{ + return -EPERM; +} + static inline int ipa_wdi_reg_intf( struct ipa_wdi_reg_intf_in_params *in) { return -EPERM; } +static inline int ipa_wdi_reg_intf_per_inst( + struct ipa_wdi_reg_intf_in_params *in) +{ + return -EPERM; +} + static inline int ipa_wdi_dereg_intf(const char *netdev_name) { return -EPERM; } +static inline int ipa_wdi_dereg_intf_per_inst(const char *netdev_name, + ipa_wdi_hdl_t hdl) +{ + return -EPERM; +} + static inline int ipa_wdi_conn_pipes(struct ipa_wdi_conn_in_params *in, struct ipa_wdi_conn_out_params *out) { return -EPERM; } +static inline int ipa_wdi_conn_pipes_per_inst( + struct ipa_wdi_conn_in_params *in, + struct ipa_wdi_conn_out_params *out) +{ + return -EPERM; +} + static inline int ipa_wdi_disconn_pipes(void) { return -EPERM; } +static inline int ipa_wdi_disconn_pipes_per_inst(ipa_wdi_hdl_t hdl) +{ + return -EPERM; +} + + static inline int ipa_wdi_enable_pipes(void) { return -EPERM; } +static inline int ipa_wdi_enable_pipes_per_inst(ipa_wdi_hdl_t hdl) +{ + return -EPERM; +} + static inline int ipa_wdi_disable_pipes(void) { return -EPERM; } +static inline int ipa_wdi_disable_pipes_per_inst(ipa_wdi_hdl_t hdl) +{ + return -EPERM; +} + static inline int ipa_wdi_set_perf_profile( struct ipa_wdi_perf_profile *profile) { return -EPERM; } +static inline int ipa_wdi_set_perf_profile_per_inst( + ipa_wdi_hdl_t hdl, + struct ipa_wdi_perf_profile *profile) +{ + return -EPERM; +} + static inline int ipa_wdi_create_smmu_mapping(u32 num_buffers, struct ipa_wdi_buffer_info *info) { return -EPERM; } +static inline int ipa_wdi_create_smmu_mapping_per_inst( + ipa_wdi_hdl_t hdl, + u32 num_buffers, + struct ipa_wdi_buffer_info *info) +{ + return -EPERM; +} + static inline int ipa_wdi_release_smmu_mapping(u32 num_buffers, struct ipa_wdi_buffer_info *info) { return -EPERM; } +static inline int ipa_wdi_release_smmu_mapping_per_inst( + ipa_wdi_hdl_t hdl, + u32 num_buffers, + struct ipa_wdi_buffer_info *info) +{ + return -EPERM; +} + static inline int ipa_wdi_get_stats(struct IpaHwStatsWDIInfoData_t *stats) { return -EPERM;