This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 5018964155 rpmsgfs: decoupling rpmsgfs server and rpmsg virtio.
5018964155 is described below
commit 501896415589aa1a0264b0765746d8bdb43bdf42
Author: wangyongrong <[email protected]>
AuthorDate: Tue Jan 2 15:54:44 2024 +0800
rpmsgfs: decoupling rpmsgfs server and rpmsg virtio.
create a new general api to make rpmsgfs work with virtio/spi/uart
transport.
Signed-off-by: wangyongrong <[email protected]>
---
drivers/rpmsg/rpmsg.c | 24 ++++++++++++++++++++++++
drivers/rptun/rptun.c | 32 +++++++++++++++++++++++---------
fs/rpmsgfs/rpmsgfs_server.c | 5 ++---
include/nuttx/rpmsg/rpmsg.h | 11 +++++++++--
4 files changed, 58 insertions(+), 14 deletions(-)
diff --git a/drivers/rpmsg/rpmsg.c b/drivers/rpmsg/rpmsg.c
index 930ca10cac..803a4f1dea 100644
--- a/drivers/rpmsg/rpmsg.c
+++ b/drivers/rpmsg/rpmsg.c
@@ -126,6 +126,30 @@ FAR const char *rpmsg_get_cpuname(FAR struct rpmsg_device
*rdev)
return rpmsg->ops->get_cpuname(rpmsg);
}
+int rpmsg_get_tx_buffer_size(FAR struct rpmsg_device *rdev)
+{
+ FAR struct rpmsg_s *rpmsg = rpmsg_get_by_rdev(rdev);
+
+ if (!rpmsg)
+ {
+ return -EINVAL;
+ }
+
+ return rpmsg->ops->get_tx_buffer_size(rpmsg);
+}
+
+int rpmsg_get_rx_buffer_size(FAR struct rpmsg_device *rdev)
+{
+ FAR struct rpmsg_s *rpmsg = rpmsg_get_by_rdev(rdev);
+
+ if (!rpmsg)
+ {
+ return -EINVAL;
+ }
+
+ return rpmsg->ops->get_rx_buffer_size(rpmsg);
+}
+
int rpmsg_register_callback(FAR void *priv,
rpmsg_dev_cb_t device_created,
rpmsg_dev_cb_t device_destroy,
diff --git a/drivers/rptun/rptun.c b/drivers/rptun/rptun.c
index cae7d21ee6..45f7767d07 100644
--- a/drivers/rptun/rptun.c
+++ b/drivers/rptun/rptun.c
@@ -131,9 +131,11 @@ static metal_phys_addr_t rptun_pa_to_da(FAR struct
rptun_dev_s *dev,
static metal_phys_addr_t rptun_da_to_pa(FAR struct rptun_dev_s *dev,
metal_phys_addr_t da);
-static FAR const char *rptun_get_cpuname(FAR struct rpmsg_s *rpmsg);
static int rptun_wait(FAR struct rpmsg_s *rpmsg, FAR sem_t *sem);
static int rptun_post(FAR struct rpmsg_s *rpmsg, FAR sem_t *sem);
+static FAR const char *rptun_get_cpuname(FAR struct rpmsg_s *rpmsg);
+static int rptun_get_tx_buffer_size(FAR struct rpmsg_s *rpmsg);
+static int rptun_get_rx_buffer_size(FAR struct rpmsg_s *rpmsg);
/****************************************************************************
* Private Data
@@ -173,9 +175,11 @@ static const struct image_store_ops g_rptun_store_ops =
static const struct rpmsg_ops_s g_rptun_rpmsg_ops =
{
- rptun_get_cpuname,
rptun_wait,
rptun_post,
+ rptun_get_cpuname,
+ rptun_get_tx_buffer_size,
+ rptun_get_rx_buffer_size,
};
/****************************************************************************
@@ -424,13 +428,6 @@ static int rptun_notify_wait(FAR struct remoteproc *rproc,
uint32_t id)
return 0;
}
-static FAR const char *rptun_get_cpuname(FAR struct rpmsg_s *rpmsg)
-{
- FAR struct rptun_priv_s *priv = (FAR struct rptun_priv_s *)rpmsg;
-
- return RPTUN_GET_CPUNAME(priv->dev);
-}
-
static int rptun_wait(FAR struct rpmsg_s *rpmsg, FAR sem_t *sem)
{
FAR struct rptun_priv_s *priv = (FAR struct rptun_priv_s *)rpmsg;
@@ -473,6 +470,23 @@ static int rptun_post(FAR struct rpmsg_s *rpmsg, FAR sem_t
*sem)
return ret;
}
+static FAR const char *rptun_get_cpuname(FAR struct rpmsg_s *rpmsg)
+{
+ FAR struct rptun_priv_s *priv = (FAR struct rptun_priv_s *)rpmsg;
+
+ return RPTUN_GET_CPUNAME(priv->dev);
+}
+
+static int rptun_get_tx_buffer_size(FAR struct rpmsg_s *rpmsg)
+{
+ return rpmsg_virtio_get_buffer_size(rpmsg->rdev);
+}
+
+static int rptun_get_rx_buffer_size(FAR struct rpmsg_s *rpmsg)
+{
+ return rpmsg_virtio_get_rx_buffer_size(rpmsg->rdev);
+}
+
static int rptun_dev_start(FAR struct remoteproc *rproc)
{
FAR struct rptun_priv_s *priv = rproc->priv;
diff --git a/fs/rpmsgfs/rpmsgfs_server.c b/fs/rpmsgfs/rpmsgfs_server.c
index 2bf8044326..775b1452f3 100644
--- a/fs/rpmsgfs/rpmsgfs_server.c
+++ b/fs/rpmsgfs/rpmsgfs_server.c
@@ -35,7 +35,6 @@
#include <nuttx/mutex.h>
#include <nuttx/fs/fs.h>
#include <nuttx/rptun/openamp.h>
-#include <openamp/rpmsg_virtio.h>
#include "rpmsgfs.h"
@@ -627,8 +626,8 @@ static int rpmsgfs_readdir_handler(FAR struct
rpmsg_endpoint *ept,
entry = readdir(dir);
if (entry)
{
- size = MIN(rpmsg_virtio_get_buffer_size(ept->rdev),
- rpmsg_virtio_get_rx_buffer_size(ept->rdev));
+ size = MIN(rpmsg_get_tx_buffer_size(ept->rdev),
+ rpmsg_get_rx_buffer_size(ept->rdev));
size = MIN(size - len, strlen(entry->d_name) + 1);
msg->type = entry->d_type;
strlcpy(msg->name, entry->d_name, size);
diff --git a/include/nuttx/rpmsg/rpmsg.h b/include/nuttx/rpmsg/rpmsg.h
index 36c43333b4..82a4923742 100644
--- a/include/nuttx/rpmsg/rpmsg.h
+++ b/include/nuttx/rpmsg/rpmsg.h
@@ -49,16 +49,20 @@ typedef CODE int (*rpmsg_foreach_t)(FAR struct rpmsg_s
*rpmsg,
/**
* struct rpmsg_ops_s - Rpmsg device operations
- * get_cpuname: get cpu name.
* wait: wait sem.
* post: post sem.
+ * get_cpuname: get cpu name.
+ * get_tx_buffer_size: get tx buffer size.
+ * get_rx_buffer_size: get rx buffer size.
*/
struct rpmsg_ops_s
{
- CODE FAR const char *(*get_cpuname)(FAR struct rpmsg_s *rpmsg);
CODE int (*wait)(FAR struct rpmsg_s *rpmsg, FAR sem_t *sem);
CODE int (*post)(FAR struct rpmsg_s *rpmsg, FAR sem_t *sem);
+ CODE FAR const char *(*get_cpuname)(FAR struct rpmsg_s *rpmsg);
+ CODE int (*get_tx_buffer_size)(FAR struct rpmsg_s *rpmsg);
+ CODE int (*get_rx_buffer_size)(FAR struct rpmsg_s *rpmsg);
};
CODE typedef void (*rpmsg_dev_cb_t)(FAR struct rpmsg_device *rdev,
@@ -87,6 +91,9 @@ int rpmsg_post(FAR struct rpmsg_endpoint *ept, FAR sem_t
*sem);
FAR const char *rpmsg_get_cpuname(FAR struct rpmsg_device *rdev);
+int rpmsg_get_tx_buffer_size(FAR struct rpmsg_device *rdev);
+int rpmsg_get_rx_buffer_size(FAR struct rpmsg_device *rdev);
+
int rpmsg_register_callback(FAR void *priv,
rpmsg_dev_cb_t device_created,
rpmsg_dev_cb_t device_destroy,