summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAtish Kumar Patra <apatra@codeaurora.org>2015-04-24 18:19:24 -0600
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:13:44 -0700
commitdc86ce0faae2400ecf71b448bfa1f4baa9d298f7 (patch)
tree33b0285a9c8cc3e8cefda8af9d1ebe49e191321f
parent8b7a1ee3b5af59c0fd5262bc8517b602a8ba754e (diff)
soc: qcom: ipc_rtr_xprt: Add support to set version in transport
Currently, there is no option to set the version in IPC Router transport. Add support to set a version in the transport so that the version can be modified from initial entry after the version negotiation. Change-Id: Ie6d823a3b4f2608efe2ac992a248a4f0884b856d Signed-off-by: Atish Kumar Patra <apatra@codeaurora.org>
-rw-r--r--drivers/soc/qcom/ipc_router_glink_xprt.c17
-rw-r--r--drivers/soc/qcom/ipc_router_hsic_xprt.c21
-rw-r--r--drivers/soc/qcom/ipc_router_mhi_xprt.c17
-rw-r--r--drivers/soc/qcom/ipc_router_smd_xprt.c19
-rw-r--r--include/linux/ipc_router_xprt.h3
5 files changed, 76 insertions, 1 deletions
diff --git a/drivers/soc/qcom/ipc_router_glink_xprt.c b/drivers/soc/qcom/ipc_router_glink_xprt.c
index 5290d445b05f..64f3c50cbbf1 100644
--- a/drivers/soc/qcom/ipc_router_glink_xprt.c
+++ b/drivers/soc/qcom/ipc_router_glink_xprt.c
@@ -179,6 +179,22 @@ static void *glink_xprt_vbuf_provider(void *iovec, size_t offset,
return NULL;
}
+/**
+ * ipc_router_glink_xprt_set_version() - Set the IPC Router version in transport
+ * @xprt: Reference to the transport structure.
+ * @version: The version to be set in transport.
+ */
+static void ipc_router_glink_xprt_set_version(
+ struct msm_ipc_router_xprt *xprt, unsigned version)
+{
+ struct ipc_router_glink_xprt *glink_xprtp;
+
+ if (!xprt)
+ return;
+ glink_xprtp = container_of(xprt, struct ipc_router_glink_xprt, xprt);
+ glink_xprtp->xprt_version = version;
+}
+
static int ipc_router_glink_xprt_get_version(
struct msm_ipc_router_xprt *xprt)
{
@@ -665,6 +681,7 @@ static int ipc_router_glink_config_init(
glink_xprtp->xprt.name = glink_xprtp->ipc_rtr_xprt_name;
glink_xprtp->xprt.get_version = ipc_router_glink_xprt_get_version;
+ glink_xprtp->xprt.set_version = ipc_router_glink_xprt_set_version;
glink_xprtp->xprt.get_option = ipc_router_glink_xprt_get_option;
glink_xprtp->xprt.read_avail = NULL;
glink_xprtp->xprt.read = NULL;
diff --git a/drivers/soc/qcom/ipc_router_hsic_xprt.c b/drivers/soc/qcom/ipc_router_hsic_xprt.c
index 1f9e91ab15f2..d1706960eb17 100644
--- a/drivers/soc/qcom/ipc_router_hsic_xprt.c
+++ b/drivers/soc/qcom/ipc_router_hsic_xprt.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -138,6 +138,23 @@ static struct msm_ipc_router_hsic_xprt *
}
/**
+ * ipc_router_hsic_set_xprt_version() - Set IPC Router header version
+ * in the transport
+ * @xprt: Reference to the transport structure.
+ * @version: The version to be set in transport.
+ */
+static void ipc_router_hsic_set_xprt_version(
+ struct msm_ipc_router_xprt *xprt, unsigned version)
+{
+ struct msm_ipc_router_hsic_xprt *hsic_xprtp;
+
+ if (!xprt)
+ return;
+ hsic_xprtp = container_of(xprt, struct msm_ipc_router_hsic_xprt, xprt);
+ hsic_xprtp->xprt_version = version;
+}
+
+/**
* msm_ipc_router_hsic_get_xprt_version() - Get IPC Router header version
* supported by the XPRT
* @xprt: XPRT for which the version information is required.
@@ -581,6 +598,8 @@ static int msm_ipc_router_hsic_config_init(
XPRT_NAME_LEN);
hsic_xprtp->xprt.name = hsic_xprtp->xprt_name;
+ hsic_xprtp->xprt.set_version =
+ ipc_router_hsic_set_xprt_version;
hsic_xprtp->xprt.get_version =
msm_ipc_router_hsic_get_xprt_version;
hsic_xprtp->xprt.get_option =
diff --git a/drivers/soc/qcom/ipc_router_mhi_xprt.c b/drivers/soc/qcom/ipc_router_mhi_xprt.c
index c8adeacffcf4..faf01c8aa013 100644
--- a/drivers/soc/qcom/ipc_router_mhi_xprt.c
+++ b/drivers/soc/qcom/ipc_router_mhi_xprt.c
@@ -304,6 +304,22 @@ int mhi_xprt_queue_in_buffers(struct ipc_router_mhi_xprt *mhi_xprtp,
}
/**
+* ipc_router_mhi_set_xprt_version() - Set the IPC Router version in transport
+* @xprt: Reference to the transport structure.
+* @version: The version to be set in transport.
+*/
+static void ipc_router_mhi_set_xprt_version(struct msm_ipc_router_xprt *xprt,
+ unsigned version)
+{
+ struct ipc_router_mhi_xprt *mhi_xprtp;
+
+ if (!xprt)
+ return;
+ mhi_xprtp = container_of(xprt, struct ipc_router_mhi_xprt, xprt);
+ mhi_xprtp->xprt_version = version;
+}
+
+/**
* ipc_router_mhi_get_xprt_version() - Get IPC Router header version
* supported by the XPRT
* @xprt: XPRT for which the version information is required.
@@ -874,6 +890,7 @@ static int ipc_router_mhi_config_init(
mhi_xprtp->xprt.link_id = mhi_xprt_config->link_id;
mhi_xprtp->xprt.name = mhi_xprtp->xprt_name;
mhi_xprtp->xprt.get_version = ipc_router_mhi_get_xprt_version;
+ mhi_xprtp->xprt.set_version = ipc_router_mhi_set_xprt_version;
mhi_xprtp->xprt.get_option = ipc_router_mhi_get_xprt_option;
mhi_xprtp->xprt.read_avail = NULL;
mhi_xprtp->xprt.read = NULL;
diff --git a/drivers/soc/qcom/ipc_router_smd_xprt.c b/drivers/soc/qcom/ipc_router_smd_xprt.c
index 60c45080781c..a94e81556027 100644
--- a/drivers/soc/qcom/ipc_router_smd_xprt.c
+++ b/drivers/soc/qcom/ipc_router_smd_xprt.c
@@ -135,6 +135,23 @@ static LIST_HEAD(smd_remote_xprt_list);
static bool is_pil_loading_disabled(uint32_t edge);
+/**
+ * ipc_router_smd_set_xprt_version() - Set IPC Router header version
+ * in the transport
+ * @xprt: Reference to the transport structure.
+ * @version: The version to be set in transport.
+ */
+static void ipc_router_smd_set_xprt_version(
+ struct msm_ipc_router_xprt *xprt, unsigned version)
+{
+ struct msm_ipc_router_smd_xprt *smd_xprtp;
+
+ if (!xprt)
+ return;
+ smd_xprtp = container_of(xprt, struct msm_ipc_router_smd_xprt, xprt);
+ smd_xprtp->xprt_version = version;
+}
+
static int msm_ipc_router_smd_get_xprt_version(
struct msm_ipc_router_xprt *xprt)
{
@@ -652,6 +669,8 @@ static int msm_ipc_router_smd_config_init(
XPRT_NAME_LEN);
smd_xprtp->xprt.name = smd_xprtp->xprt_name;
+ smd_xprtp->xprt.set_version =
+ ipc_router_smd_set_xprt_version;
smd_xprtp->xprt.get_version =
msm_ipc_router_smd_get_xprt_version;
smd_xprtp->xprt.get_option =
diff --git a/include/linux/ipc_router_xprt.h b/include/linux/ipc_router_xprt.h
index 8e3a2b3f1c99..276c79ff1591 100644
--- a/include/linux/ipc_router_xprt.h
+++ b/include/linux/ipc_router_xprt.h
@@ -116,6 +116,7 @@ struct rr_packet {
* @link_id: Network cluster ID to which the XPRT belongs to.
* @priv: XPRT's private data.
* @get_version: Method to get header version supported by the XPRT.
+ * @set_version: Method to set header version in XPRT.
* @get_option: Method to get XPRT specific options.
* @read_avail: Method to get data size available to be read from the XPRT.
* @read: Method to read data from the XPRT.
@@ -132,6 +133,8 @@ struct msm_ipc_router_xprt {
int (*get_version)(struct msm_ipc_router_xprt *xprt);
int (*get_option)(struct msm_ipc_router_xprt *xprt);
+ void (*set_version)(struct msm_ipc_router_xprt *xprt,
+ unsigned version);
int (*read_avail)(struct msm_ipc_router_xprt *xprt);
int (*read)(void *data, uint32_t len,
struct msm_ipc_router_xprt *xprt);