This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 492abaa0525617cd44e8e6af30dacefa31d88e80
Author: yintao <[email protected]>
AuthorDate: Sun Jan 12 19:18:01 2025 +0800

    drivers/rpmsg: unitfy the rpmsg signals from transport to struct rpmsg_s
    
    Now all the rpmsg transport use the signals in struct rpmsg_s instead
    add element in its own private struct.
    
    Signed-off-by: yintao <[email protected]>
---
 drivers/rpmsg/rpmsg.c                | 20 +++++++++-----------
 drivers/rpmsg/rpmsg_port.c           | 14 --------------
 drivers/rpmsg/rpmsg_port.h           |  6 ------
 drivers/rpmsg/rpmsg_port_spi.c       |  4 ++--
 drivers/rpmsg/rpmsg_port_spi_slave.c |  4 ++--
 drivers/rpmsg/rpmsg_port_uart.c      |  6 ++++--
 include/nuttx/rpmsg/rpmsg.h          |  5 ++++-
 7 files changed, 21 insertions(+), 38 deletions(-)

diff --git a/drivers/rpmsg/rpmsg.c b/drivers/rpmsg/rpmsg.c
index cb6a0960ad1..b7b77f4d05b 100644
--- a/drivers/rpmsg/rpmsg.c
+++ b/drivers/rpmsg/rpmsg.c
@@ -220,17 +220,7 @@ int rpmsg_get_signals(FAR struct rpmsg_device *rdev)
 {
   FAR struct rpmsg_s *rpmsg = rpmsg_get_by_rdev(rdev);
 
-  if (rpmsg == NULL)
-    {
-      return -EINVAL;
-    }
-
-  if (rpmsg->ops->get_signals != NULL)
-    {
-      return rpmsg->ops->get_signals(rpmsg);
-    }
-
-  return 0;
+  return atomic_read(&rpmsg->signals);
 }
 
 int rpmsg_register_callback(FAR void *priv,
@@ -528,6 +518,7 @@ int rpmsg_register(FAR const char *path, FAR struct rpmsg_s 
*rpmsg,
   metal_list_init(&rpmsg->bind);
   nxrmutex_init(&rpmsg->lock);
   rpmsg->ops = ops;
+  atomic_store(&rpmsg->signals, RPMSG_SIGNAL_RUNNING);
 
   /* Add priv to list */
 
@@ -592,3 +583,10 @@ void rpmsg_dump_all(void)
 {
   rpmsg_ioctl(NULL, RPMSGIOC_DUMP, 0);
 }
+
+void rpmsg_modify_signals(FAR struct rpmsg_s *rpmsg,
+                          int setflags, int clrflags)
+{
+  atomic_fetch_and(&rpmsg->signals, ~clrflags);
+  atomic_fetch_or(&rpmsg->signals, setflags);
+}
diff --git a/drivers/rpmsg/rpmsg_port.c b/drivers/rpmsg/rpmsg_port.c
index 161398e689c..391786af1c9 100644
--- a/drivers/rpmsg/rpmsg_port.c
+++ b/drivers/rpmsg/rpmsg_port.c
@@ -51,7 +51,6 @@ static FAR const char *
 rpmsg_port_get_local_cpuname(FAR struct rpmsg_s *rpmsg);
 static FAR const char *rpmsg_port_get_cpuname(FAR struct rpmsg_s *rpmsg);
 static void rpmsg_port_dump(FAR struct rpmsg_s *rpmsg);
-static int rpmsg_port_get_signals(FAR struct rpmsg_s *rpmsg);
 
 /****************************************************************************
  * Private Data
@@ -66,7 +65,6 @@ static const struct rpmsg_ops_s g_rpmsg_port_ops =
   rpmsg_port_dump,
   rpmsg_port_get_local_cpuname,
   rpmsg_port_get_cpuname,
-  rpmsg_port_get_signals,
 };
 
 /****************************************************************************
@@ -566,17 +564,6 @@ static FAR const char *rpmsg_port_get_cpuname(FAR struct 
rpmsg_s *rpmsg)
   return port->cpuname;
 }
 
-/****************************************************************************
- * Name: rpmsg_port_get_signals
- ****************************************************************************/
-
-static int rpmsg_port_get_signals(FAR struct rpmsg_s *rpmsg)
-{
-  FAR struct rpmsg_port_s *port = (FAR struct rpmsg_port_s *)rpmsg;
-
-  return atomic_read(&port->signals);
-}
-
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -769,7 +756,6 @@ int rpmsg_port_register(FAR struct rpmsg_port_s *port,
       return ret;
     }
 
-  atomic_fetch_or(&port->signals, RPMSG_SIGNAL_RUNNING);
   rpmsg_register_endpoint(&port->rdev, &port->rdev.ns_ept, "NS",
                           RPMSG_NS_EPT_ADDR, RPMSG_NS_EPT_ADDR,
                           rpmsg_port_ns_callback, NULL, port);
diff --git a/drivers/rpmsg/rpmsg_port.h b/drivers/rpmsg/rpmsg_port.h
index 220a5eddeaa..647a7afb21e 100644
--- a/drivers/rpmsg/rpmsg_port.h
+++ b/drivers/rpmsg/rpmsg_port.h
@@ -29,8 +29,6 @@
 
 #include <stdbool.h>
 
-#include <nuttx/atomic.h>
-
 #include <nuttx/list.h>
 #include <nuttx/spinlock.h>
 #include <nuttx/semaphore.h>
@@ -131,10 +129,6 @@ struct rpmsg_port_s
 
   char                              cpuname[RPMSG_NAME_SIZE];
 
-  /* Remote cpu status */
-
-  atomic_t                          signals;
-
   /* Ops need implemented by drivers under port layer */
 
   const FAR struct rpmsg_port_ops_s *ops;
diff --git a/drivers/rpmsg/rpmsg_port_spi.c b/drivers/rpmsg/rpmsg_port_spi.c
index 7112f25d69b..3c6ebf581a0 100644
--- a/drivers/rpmsg/rpmsg_port_spi.c
+++ b/drivers/rpmsg/rpmsg_port_spi.c
@@ -321,11 +321,11 @@ static void rpmsg_port_spi_complete_handler(FAR void *arg)
 
   if (rpspi->rxhdr->cmd == RPMSG_PORT_SPI_CMD_SUSPEND)
     {
-      atomic_fetch_and(&rpspi->port.signals, ~RPMSG_SIGNAL_RUNNING);
+      rpmsg_modify_signals(&rpspi->port.rpmsg, 0, RPMSG_SIGNAL_RUNNING);
     }
   else if (rpspi->rxhdr->cmd == RPMSG_PORT_SPI_CMD_RESUME)
     {
-      atomic_fetch_or(&rpspi->port.signals, RPMSG_SIGNAL_RUNNING);
+      rpmsg_modify_signals(&rpspi->port.rpmsg, RPMSG_SIGNAL_RUNNING, 0);
     }
   else if (rpspi->rxhdr->cmd != RPMSG_PORT_SPI_CMD_AVAIL)
     {
diff --git a/drivers/rpmsg/rpmsg_port_spi_slave.c 
b/drivers/rpmsg/rpmsg_port_spi_slave.c
index 5591962941d..c5fe29635c9 100644
--- a/drivers/rpmsg/rpmsg_port_spi_slave.c
+++ b/drivers/rpmsg/rpmsg_port_spi_slave.c
@@ -382,11 +382,11 @@ static void rpmsg_port_spi_slave_notify(FAR struct 
spi_slave_dev_s *dev,
 
   if (rpspi->rxhdr->cmd == RPMSG_PORT_SPI_CMD_SUSPEND)
     {
-      atomic_fetch_and(&rpspi->port.signals, ~RPMSG_SIGNAL_RUNNING);
+      rpmsg_modify_signals(&rpspi->port.rpmsg, 0, RPMSG_SIGNAL_RUNNING);
     }
   else if (rpspi->rxhdr->cmd == RPMSG_PORT_SPI_CMD_RESUME)
     {
-      atomic_fetch_or(&rpspi->port.signals, RPMSG_SIGNAL_RUNNING);
+      rpmsg_modify_signals(&rpspi->port.rpmsg, RPMSG_SIGNAL_RUNNING, 0);
     }
   else if (rpspi->rxhdr->cmd != RPMSG_PORT_SPI_CMD_AVAIL)
     {
diff --git a/drivers/rpmsg/rpmsg_port_uart.c b/drivers/rpmsg/rpmsg_port_uart.c
index 217090692c0..fa77627830e 100644
--- a/drivers/rpmsg/rpmsg_port_uart.c
+++ b/drivers/rpmsg/rpmsg_port_uart.c
@@ -379,14 +379,16 @@ static int rpmsg_port_uart_rx_thread(int argc, FAR char 
*argv[])
           else if (buf[i] == RPMSG_PORT_UART_SUSPEND)
             {
               rpmsgdbg("Received suspend command\n");
-              atomic_fetch_and(&rpuart->port.signals, ~RPMSG_SIGNAL_RUNNING);
+              rpmsg_modify_signals(&rpuart->port.rpmsg,
+                                   0, RPMSG_SIGNAL_RUNNING);
               nxsem_wait(&rpuart->wake);
               continue;
             }
           else if (buf[i] == RPMSG_PORT_UART_RESUME)
             {
               rpmsgdbg("Received resume command\n");
-              atomic_fetch_or(&rpuart->port.signals, RPMSG_SIGNAL_RUNNING);
+              rpmsg_modify_signals(&rpuart->port.rpmsg,
+                                   RPMSG_SIGNAL_RUNNING, 0);
               nxsem_post(&rpuart->wake);
               continue;
             }
diff --git a/include/nuttx/rpmsg/rpmsg.h b/include/nuttx/rpmsg/rpmsg.h
index b31b56e2998..06f0be0193a 100644
--- a/include/nuttx/rpmsg/rpmsg.h
+++ b/include/nuttx/rpmsg/rpmsg.h
@@ -31,6 +31,7 @@
 
 #ifdef CONFIG_RPMSG
 
+#include <metal/atomic.h>
 #include <nuttx/fs/ioctl.h>
 #include <nuttx/rpmsg/rpmsg_ping.h>
 #include <openamp/rpmsg.h>
@@ -63,6 +64,7 @@ struct rpmsg_s
 #ifdef CONFIG_RPMSG_TEST
   struct rpmsg_endpoint        test;
 #endif
+  atomic_int                   signals;
   struct rpmsg_device          rdev[0];
 };
 
@@ -82,7 +84,6 @@ struct rpmsg_ops_s
   CODE void (*dump)(FAR struct rpmsg_s *rpmsg);
   CODE FAR const char *(*get_local_cpuname)(FAR struct rpmsg_s *rpmsg);
   CODE FAR const char *(*get_cpuname)(FAR struct rpmsg_s *rpmsg);
-  CODE int (*get_signals)(FAR struct rpmsg_s *rpmsg);
 };
 
 CODE typedef void (*rpmsg_dev_cb_t)(FAR struct rpmsg_device *rdev,
@@ -112,6 +113,8 @@ int rpmsg_post(FAR struct rpmsg_endpoint *ept, FAR sem_t 
*sem);
 FAR const char *rpmsg_get_local_cpuname(FAR struct rpmsg_device *rdev);
 FAR const char *rpmsg_get_cpuname(FAR struct rpmsg_device *rdev);
 int rpmsg_get_signals(FAR struct rpmsg_device *rdev);
+void rpmsg_modify_signals(FAR struct rpmsg_s *rpmsg,
+                          int setflags, int clrflags);
 
 static inline_function bool rpmsg_is_running(FAR struct rpmsg_device *rdev)
 {

Reply via email to