| From a2c9d79f9b77f057d89ede1395559c0645169b7a Mon Sep 17 00:00:00 2001 |
| From: ligd <liguiding1@xiaomi.com> |
| Date: Tue, 19 Oct 2021 19:45:14 +0800 |
| Subject: [PATCH 06/10] rpmsg: notify the user when the remote address is |
| received |
| |
| Change-Id: I2f0601fb38944e0cfb8888aa397740161b159e40 |
| Signed-off-by: ligd <liguiding1@xiaomi.com> |
| --- |
| lib/include/openamp/rpmsg.h | 4 ++++ |
| lib/rpmsg/rpmsg_virtio.c | 6 ++++++ |
| 2 files changed, 10 insertions(+) |
| |
| diff --git a/lib/include/openamp/rpmsg.h open-amp/lib/include/openamp/rpmsg.h |
| index 14440e20..fbd7f619 100644 |
| --- a/lib/include/openamp/rpmsg.h |
| +++ open-amp/lib/include/openamp/rpmsg.h |
| @@ -58,6 +58,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); |
| @@ -70,6 +71,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. |
| @@ -84,6 +87,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 1f6ce593..efbcd68d 100644 |
| --- a/lib/rpmsg/rpmsg_virtio.c |
| +++ open-amp/lib/rpmsg/rpmsg_virtio.c |
| @@ -658,12 +658,18 @@ static int rpmsg_virtio_ns_callback(struct rpmsg_endpoint *ept, void *data, |
| if (_ept->name[0] && rdev->support_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 |
| |