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