From a541d9d446e5700fd5a74cf5d8296114023b40fb Mon Sep 17 00:00:00 2001 From: ligd 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 --- 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