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) {
