msm: ipa: Support hardware accelerated DIAG over qdss with ipa_fmwk

Add support to accelarate QDSS diag traffic over IPA to the PCIe
host with ipa fmwk support.

Change-Id: I64a8c493e8b6ef3fc525a3edcfd57e1cd11ccb6c
Signed-off-by: Michael Adisumarta <madisuma@codeaurora.org>
This commit is contained in:
Michael Adisumarta 2020-11-19 23:33:56 -08:00 committed by Gerrit - the friendly Code Review server
parent d1d92738ec
commit 33962cd2e1
3 changed files with 67 additions and 1 deletions

View File

@ -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)
{

View File

@ -12,6 +12,7 @@
#include <linux/ipa_mhi.h>
#include <linux/ipa_wigig.h>
#include <linux/ipa_wdi3.h>
#include <linux/ipa_qdss.h>
#include <linux/ipa_usb.h>
#include <linux/ipa_odu_bridge.h>
#include <linux/ipa_qmi_service_v01.h>
@ -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;

View File

@ -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