mirror of
https://github.com/apache/nuttx.git
synced 2026-08-01 20:28:58 +00:00
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 <yintao@xiaomi.com>
This commit is contained in:
parent
49f94e5e95
commit
492abaa052
7 changed files with 21 additions and 38 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue