106 lines
3.5 KiB
Diff
106 lines
3.5 KiB
Diff
From b03e398fb8c2016029500f058e1cdaa7cc4cb92f Mon Sep 17 00:00:00 2001
|
|
From: ligd <liguiding1@xiaomi.com>
|
|
Date: Mon, 20 Feb 2023 21:08:35 +0800
|
|
Subject: [PATCH 6/6] openamp: add new API rpmsg_virtio_get_rxbuffer_size()
|
|
|
|
Change-Id: If98c7260be8524627cd1c272c164c22a9548198c
|
|
Signed-off-by: ligd <liguiding1@xiaomi.com>
|
|
---
|
|
lib/include/openamp/rpmsg_virtio.h | 11 ++++++++++-
|
|
lib/rpmsg/rpmsg_virtio.c | 25 +++++++++++++++++++++----
|
|
2 files changed, 31 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/lib/include/openamp/rpmsg_virtio.h open-amp/lib/include/openamp/rpmsg_virtio.h
|
|
index 11cb6df..bdc6cc6 100644
|
|
--- a/lib/include/openamp/rpmsg_virtio.h
|
|
+++ open-amp/lib/include/openamp/rpmsg_virtio.h
|
|
@@ -158,7 +158,7 @@ rpmsg_virtio_notify_wait(struct rpmsg_virtio_device *rvdev,
|
|
}
|
|
|
|
/**
|
|
- * rpmsg_virtio_get_buffer_size - get rpmsg virtio buffer size
|
|
+ * rpmsg_virtio_get_buffer_size - get rpmsg virtio Tx buffer size
|
|
*
|
|
* @rdev - pointer to the rpmsg device
|
|
*
|
|
@@ -166,6 +166,15 @@ rpmsg_virtio_notify_wait(struct rpmsg_virtio_device *rvdev,
|
|
*/
|
|
int rpmsg_virtio_get_buffer_size(struct rpmsg_device *rdev);
|
|
|
|
+/**
|
|
+ * rpmsg_virtio_get_rx_buffer_size - get rpmsg virtio Rx buffer size
|
|
+ *
|
|
+ * @rdev - pointer to the rpmsg device
|
|
+ *
|
|
+ * @return - next available buffer size for text, negative value for failure
|
|
+ */
|
|
+int rpmsg_virtio_get_rx_buffer_size(struct rpmsg_device *rdev);
|
|
+
|
|
/**
|
|
* rpmsg_init_vdev - initialize rpmsg virtio device
|
|
* Host side:
|
|
diff --git a/lib/rpmsg/rpmsg_virtio.c open-amp/lib/rpmsg/rpmsg_virtio.c
|
|
index 13fd496..c44b4fd 100644
|
|
--- a/lib/rpmsg/rpmsg_virtio.c
|
|
+++ open-amp/lib/rpmsg/rpmsg_virtio.c
|
|
@@ -275,11 +275,12 @@ static int rpmsg_virtio_wait_remote_ready(struct rpmsg_virtio_device *rvdev)
|
|
* Returns buffer size available for sending messages.
|
|
*
|
|
* @param rvdev - pointer to rpmsg device
|
|
+ * tx - tx or rx
|
|
*
|
|
* @return - buffer size
|
|
*
|
|
*/
|
|
-static int _rpmsg_virtio_get_buffer_size(struct rpmsg_virtio_device *rvdev)
|
|
+static int _rpmsg_virtio_get_buffer_size(struct rpmsg_virtio_device *rvdev, bool tx)
|
|
{
|
|
unsigned int role = rpmsg_virtio_get_role(rvdev);
|
|
int length = 0;
|
|
@@ -290,7 +291,9 @@ static int _rpmsg_virtio_get_buffer_size(struct rpmsg_virtio_device *rvdev)
|
|
* If device role is host then buffers are provided by us,
|
|
* so just provide the macro.
|
|
*/
|
|
- length = rvdev->config.h2r_buf_size - sizeof(struct rpmsg_hdr);
|
|
+ length =
|
|
+ tx ? rvdev->config.h2r_buf_size : rvdev->config.r2h_buf_size
|
|
+ - sizeof(struct rpmsg_hdr);
|
|
}
|
|
#endif /*!VIRTIO_DEVICE_ONLY*/
|
|
|
|
@@ -301,7 +304,7 @@ static int _rpmsg_virtio_get_buffer_size(struct rpmsg_virtio_device *rvdev)
|
|
* so get the buffer size from the virtqueue.
|
|
*/
|
|
length =
|
|
- (int)virtqueue_get_desc_size(rvdev->svq) -
|
|
+ (int)virtqueue_get_desc_size(tx ? rvdev->svq : rvdev->rvq) -
|
|
sizeof(struct rpmsg_hdr);
|
|
}
|
|
#endif /*!VIRTIO_DRIVER_ONLY*/
|
|
@@ -700,7 +703,21 @@ int rpmsg_virtio_get_buffer_size(struct rpmsg_device *rdev)
|
|
return RPMSG_ERR_PARAM;
|
|
metal_mutex_acquire(&rdev->lock);
|
|
rvdev = (struct rpmsg_virtio_device *)rdev;
|
|
- size = _rpmsg_virtio_get_buffer_size(rvdev);
|
|
+ size = _rpmsg_virtio_get_buffer_size(rvdev, true);
|
|
+ metal_mutex_release(&rdev->lock);
|
|
+ return size;
|
|
+}
|
|
+
|
|
+int rpmsg_virtio_get_rx_buffer_size(struct rpmsg_device *rdev)
|
|
+{
|
|
+ int size;
|
|
+ struct rpmsg_virtio_device *rvdev;
|
|
+
|
|
+ if (!rdev)
|
|
+ return RPMSG_ERR_PARAM;
|
|
+ metal_mutex_acquire(&rdev->lock);
|
|
+ rvdev = (struct rpmsg_virtio_device *)rdev;
|
|
+ size = _rpmsg_virtio_get_buffer_size(rvdev, false);
|
|
metal_mutex_release(&rdev->lock);
|
|
return size;
|
|
}
|
|
--
|
|
2.25.1
|
|
|