| From a541d9d446e5700fd5a74cf5d8296114023b40fb Mon Sep 17 00:00:00 2001 |
| From: ligd <liguiding1@xiaomi.com> |
| Date: Fri, 6 Jan 2023 22:57:02 +0800 |
| Subject: [PATCH 2/6] rpmsg: add new API rpdev_release_tx/rx_buffer() |
| |
| These API used for release tx/rx buffer from rpmsg_device |
| For case: |
| get_tx_buffer |
| close ept |
| release tx buffer failed |
| |
| Change-Id: I74f83ff336415ccbe0191e67315ed27a35be3983 |
| Signed-off-by: ligd <liguiding1@xiaomi.com> |
| --- |
| lib/include/openamp/rpmsg.h | 2 ++ |
| lib/rpmsg/rpmsg.c | 32 ++++++++++++++++++++------------ |
| 2 files changed, 22 insertions(+), 12 deletions(-) |
| |
| diff --git a/lib/include/openamp/rpmsg.h open-amp/lib/include/openamp/rpmsg.h |
| index fbd7f61..d39a7a4 100644 |
| --- a/lib/include/openamp/rpmsg.h |
| +++ open-amp/lib/include/openamp/rpmsg.h |
| @@ -360,6 +360,7 @@ void rpmsg_hold_rx_buffer(struct rpmsg_endpoint *ept, void *rxbuf); |
| * @see rpmsg_hold_rx_buffer |
| */ |
| void rpmsg_release_rx_buffer(struct rpmsg_endpoint *ept, void *rxbuf); |
| +void rpdev_release_rx_buffer(struct rpmsg_device *rdev, void *rxbuf); |
| |
| /** |
| * @brief Gets the tx buffer for message payload. |
| @@ -405,6 +406,7 @@ void *rpmsg_get_tx_payload_buffer(struct rpmsg_endpoint *ept, |
| * @see rpmsg_get_tx_payload_buffer |
| */ |
| int rpmsg_release_tx_buffer(struct rpmsg_endpoint *ept, void *txbuf); |
| +int rpdev_release_tx_buffer(struct rpmsg_device *rdev, void *txbuf); |
| |
| /** |
| * rpmsg_send_offchannel_nocopy() - send a message in tx buffer reserved by |
| diff --git a/lib/rpmsg/rpmsg.c open-amp/lib/rpmsg/rpmsg.c |
| index 4e7f7da..93a6282 100644 |
| --- a/lib/rpmsg/rpmsg.c |
| +++ open-amp/lib/rpmsg/rpmsg.c |
| @@ -157,34 +157,42 @@ void rpmsg_hold_rx_buffer(struct rpmsg_endpoint *ept, void *rxbuf) |
| rdev->ops.hold_rx_buffer(rdev, rxbuf); |
| } |
| |
| -void rpmsg_release_rx_buffer(struct rpmsg_endpoint *ept, void *rxbuf) |
| +void rpdev_release_rx_buffer(struct rpmsg_device *rdev, void *rxbuf) |
| { |
| - struct rpmsg_device *rdev; |
| - |
| - if (!ept || !ept->rdev || !rxbuf) |
| + if (!rdev || !rxbuf) |
| return; |
| |
| - rdev = ept->rdev; |
| - |
| if (rdev->ops.release_rx_buffer) |
| rdev->ops.release_rx_buffer(rdev, rxbuf); |
| } |
| |
| -int rpmsg_release_tx_buffer(struct rpmsg_endpoint *ept, void *buf) |
| +void rpmsg_release_rx_buffer(struct rpmsg_endpoint *ept, void *rxbuf) |
| { |
| - struct rpmsg_device *rdev; |
| + if (!ept) |
| + return; |
| |
| - if (!ept || !ept->rdev || !buf) |
| - return RPMSG_ERR_PARAM; |
| + rpdev_release_rx_buffer(ept->rdev, rxbuf); |
| +} |
| |
| - rdev = ept->rdev; |
| +int rpdev_release_tx_buffer(struct rpmsg_device *rdev, void *txbuf) |
| +{ |
| + if (!rdev || !txbuf) |
| + return RPMSG_ERR_PERM; |
| |
| if (rdev->ops.release_tx_buffer) |
| - return rdev->ops.release_tx_buffer(rdev, buf); |
| + return rdev->ops.release_tx_buffer(rdev, txbuf); |
| |
| return RPMSG_ERR_PERM; |
| } |
| |
| +int rpmsg_release_tx_buffer(struct rpmsg_endpoint *ept, void *txbuf) |
| +{ |
| + if (!ept) |
| + return RPMSG_ERR_PARAM; |
| + |
| + return rpdev_release_tx_buffer(ept->rdev, txbuf); |
| +} |
| + |
| void *rpmsg_get_tx_payload_buffer(struct rpmsg_endpoint *ept, |
| uint32_t *len, int wait) |
| { |
| -- |
| 2.25.1 |
| |