diff --git a/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c b/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c index 78eea95e9d7f..876a41a1b1f6 100644 --- a/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c +++ b/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c @@ -241,6 +241,11 @@ struct ipa_fmwk_contex { int (*ipa_wdi_dereg_intf)(const char *netdev_name); + int (*ipa_qdss_conn_pipes)(struct ipa_qdss_conn_in_params *in, + struct ipa_qdss_conn_out_params *out); + + int (*ipa_qdss_disconn_pipes)(void); + int (*ipa_wdi_conn_pipes)(struct ipa_wdi_conn_in_params *in, struct ipa_wdi_conn_out_params *out); @@ -1230,6 +1235,52 @@ int ipa_wdi_sw_stats(struct ipa_wdi_tx_info *info) } EXPORT_SYMBOL(ipa_wdi_sw_stats); +int ipa_qdss_conn_pipes(struct ipa_qdss_conn_in_params *in, + struct ipa_qdss_conn_out_params *out) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_qdss_conn_pipes, + in, out); + + return ret; +} +EXPORT_SYMBOL(ipa_qdss_conn_pipes); + +int ipa_qdss_disconn_pipes(void) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_qdss_disconn_pipes); + + return ret; +} +EXPORT_SYMBOL(ipa_qdss_disconn_pipes); + +/* registration API for IPA qdss module */ +int ipa_fmwk_register_ipa_qdss(const struct ipa_qdss_data *in) +{ + if (!ipa_fmwk_ctx) { + pr_err("ipa framework hasn't been initialized yet\n"); + return -EPERM; + } + + if (ipa_fmwk_ctx->ipa_qdss_conn_pipes + || ipa_fmwk_ctx->ipa_qdss_disconn_pipes) { + pr_err("ipa_qdss APIs were already initialized\n"); + return -EPERM; + } + + ipa_fmwk_ctx->ipa_qdss_conn_pipes = in->ipa_qdss_conn_pipes; + ipa_fmwk_ctx->ipa_qdss_disconn_pipes = in->ipa_qdss_disconn_pipes; + + pr_info("ipa_qdss registered successfully\n"); + + return 0; + +} +EXPORT_SYMBOL(ipa_fmwk_register_ipa_qdss); + /* registration API for IPA gsb module */ int ipa_fmwk_register_gsb(const struct ipa_gsb_data *in) { diff --git a/include/linux/ipa_fmwk.h b/include/linux/ipa_fmwk.h index 1c3a41f2af3c..194e334e986a 100644 --- a/include/linux/ipa_fmwk.h +++ b/include/linux/ipa_fmwk.h @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -171,6 +172,13 @@ struct ipa_wdi3_data { int (*ipa_get_wdi_version)(void); }; +struct ipa_qdss_data { + int (*ipa_qdss_conn_pipes)(struct ipa_qdss_conn_in_params *in, + struct ipa_qdss_conn_out_params *out); + + int (*ipa_qdss_disconn_pipes)(void); +}; + struct ipa_gsb_data { int (*ipa_bridge_init)(struct ipa_bridge_init_params *params, u32 *hdl); @@ -310,6 +318,8 @@ int ipa_fmwk_register_ipa_wigig(const struct ipa_wigig_data *in); int ipa_fmwk_register_ipa_eth(const struct ipa_eth_data *in); +int ipa_fmwk_register_ipa_qdss(const struct ipa_qdss_data *in); + #else /* IS_ENABLED(CONFIG_IPA3) */ int ipa_fmwk_register_ipa(const struct ipa_core_data *in) @@ -327,6 +337,11 @@ int ipa_fmwk_register_ipa_wdi3(const struct ipa_wdi3_data *in) return -EPERM; } +int ipa_fmwk_register_ipa_qdss(const struct ipa3_qdss_data *in) +{ + return -EPERM; +} + int ipa_fmwk_register_gsb(const struct ipa_gsb_data *in) { return -EPERM; diff --git a/include/linux/ipa_qdss.h b/include/linux/ipa_qdss.h index 9562db6b738a..acf060c53a55 100644 --- a/include/linux/ipa_qdss.h +++ b/include/linux/ipa_qdss.h @@ -57,7 +57,7 @@ struct ipa_qdss_conn_out_params { phys_addr_t ipa_rx_db_pa; }; -#if defined CONFIG_IPA3 +#if IS_ENABLED(CONFIG_IPA3) /** * ipa_qdss_conn_pipes - Client should call this