From 442ccb015805eb5f7d700f80db9893d319ce5781 Mon Sep 17 00:00:00 2001 From: ligd Date: Tue, 19 Oct 2021 19:45:14 +0800 Subject: [PATCH 10/12] rpmsg: notify the user when the remote address is received Change-Id: I2f0601fb38944e0cfb8888aa397740161b159e40 Signed-off-by: ligd --- lib/include/openamp/rpmsg.h | 4 ++++ lib/rpmsg/rpmsg_virtio.c | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/include/openamp/rpmsg.h open-amp/lib/include/openamp/rpmsg.h index 6f546e5..10d4f5b 100644 --- a/lib/include/openamp/rpmsg.h +++ open-amp/lib/include/openamp/rpmsg.h @@ -57,6 +57,7 @@ struct rpmsg_device; /* Returns positive value on success or negative error value on failure */ typedef int (*rpmsg_ept_cb)(struct rpmsg_endpoint *ept, void *data, size_t len, uint32_t src, void *priv); +typedef void (*rpmsg_ns_bound_cb)(struct rpmsg_endpoint *ept); typedef void (*rpmsg_ns_unbind_cb)(struct rpmsg_endpoint *ept); typedef void (*rpmsg_ns_bind_cb)(struct rpmsg_device *rdev, const char *name, uint32_t dest); @@ -69,6 +70,8 @@ typedef void (*rpmsg_ns_bind_cb)(struct rpmsg_device *rdev, * @dest_addr: address of the default remote endpoint binded. * @cb: user rx callback, return value of this callback is reserved * for future use, for now, only allow RPMSG_SUCCESS as return value. + * @ns_bound_cb: end point service bound callback, called when remote + * ept address is received. * @ns_unbind_cb: end point service unbind callback, called when remote * ept is destroyed. * @node: end point node. @@ -83,6 +86,7 @@ struct rpmsg_endpoint { uint32_t addr; uint32_t dest_addr; rpmsg_ept_cb cb; + rpmsg_ns_bound_cb ns_bound_cb; rpmsg_ns_unbind_cb ns_unbind_cb; struct metal_list node; void *priv; diff --git a/lib/rpmsg/rpmsg_virtio.c open-amp/lib/rpmsg/rpmsg_virtio.c index 4f26b01..e55e135 100644 --- a/lib/rpmsg/rpmsg_virtio.c +++ open-amp/lib/rpmsg/rpmsg_virtio.c @@ -598,14 +598,19 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data, _ept->dest_addr = dest; metal_mutex_release(&rdev->lock); if (_ept->name[0] && rdev->support_ack) - rpmsg_send_ns_message(_ept, - RPMSG_NS_CREATE_ACK); + rpmsg_send_ns_message(_ept, RPMSG_NS_CREATE_ACK); + /* notify application that the endpoint has been bound */ + if (_ept->ns_bound_cb) + _ept->ns_bound_cb(_ept); } } else { /* RPMSG_NS_CREATE_ACK */ /* save the received destination address */ if (_ept) _ept->dest_addr = dest; metal_mutex_release(&rdev->lock); + /* notify application that the endpoint has been bound */ + if (_ept && _ept->ns_bound_cb) + _ept->ns_bound_cb(_ept); } return RPMSG_SUCCESS; -- 2.25.1