8#ifndef ZEPHYR_RTIO_MPSC_H_
9#define ZEPHYR_RTIO_MPSC_H_
39#if defined(CONFIG_SMP)
43#define mpsc_ptr_get(ptr) atomic_ptr_get(&(ptr))
44#define mpsc_ptr_set(ptr, val) atomic_ptr_set(&(ptr), val)
45#define mpsc_ptr_set_get(ptr, val) atomic_ptr_set(&(ptr), val)
51#define mpsc_ptr_get(ptr) ptr
52#define mpsc_ptr_set(ptr, val) ptr = val
53#define mpsc_ptr_set_get(ptr, val) \
55 mpsc_ptr_t tmp = ptr; \
101#define RTIO_MPSC_INIT(symbol) \
103 .head = (struct rtio_mpsc_node *)&symbol.stub, \
104 .tail = (struct rtio_mpsc_node *)&symbol.stub, \
154 if (tail == &q->
stub) {
void * atomic_ptr_t
Definition: atomic_types.h:17
Common toolchain abstraction.
#define ALWAYS_INLINE
Definition: common.h:129
static unsigned int arch_irq_lock(void)
Lock interrupts on the current CPU.
static void arch_irq_unlock(unsigned int key)
Unlock interrupts on the current CPU.
static struct rtio_mpsc_node * rtio_mpsc_pop(struct rtio_mpsc *q)
Pop a node off of the list.
Definition: rtio_mpsc.h:147
atomic_ptr_t mpsc_ptr_t
Definition: rtio_mpsc.h:41
static ALWAYS_INLINE void rtio_mpsc_push(struct rtio_mpsc *q, struct rtio_mpsc_node *n)
Push a node.
Definition: rtio_mpsc.h:128
static void rtio_mpsc_init(struct rtio_mpsc *q)
Initialize queue.
Definition: rtio_mpsc.h:115
#define mpsc_ptr_set(ptr, val)
Definition: rtio_mpsc.h:44
#define mpsc_ptr_get(ptr)
Definition: rtio_mpsc.h:43
#define mpsc_ptr_set_get(ptr, val)
Definition: rtio_mpsc.h:45
Queue member.
Definition: rtio_mpsc.h:81
mpsc_ptr_t next
Definition: rtio_mpsc.h:82
MPSC Queue.
Definition: rtio_mpsc.h:88
mpsc_ptr_t head
Definition: rtio_mpsc.h:89
struct rtio_mpsc_node stub
Definition: rtio_mpsc.h:91
struct rtio_mpsc_node * tail
Definition: rtio_mpsc.h:90