24 #ifndef __RTSKB_FIFO_H_ 25 #define __RTSKB_FIFO_H_ 30 unsigned long read_pos ____cacheline_aligned_in_smp;
32 unsigned long size_mask;
33 unsigned long write_pos ____cacheline_aligned_in_smp;
35 struct rtskb *buffer[0];
38 #define DECLARE_RTSKB_FIFO(name_prefix, size) \ 40 struct rtskb_fifo fifo; \ 41 struct rtskb *__buffer[(size)]; \ 44 static inline int __rtskb_fifo_insert(
struct rtskb_fifo *fifo,
47 unsigned long pos = fifo->write_pos;
48 unsigned long new_pos = (pos + 1) & fifo->size_mask;
50 if (unlikely(new_pos == fifo->read_pos))
53 fifo->buffer[pos] = rtskb;
58 fifo->write_pos = new_pos;
63 static inline int rtskb_fifo_insert(
struct rtskb_fifo *fifo,
70 result = __rtskb_fifo_insert(fifo, rtskb);
76 static inline int rtskb_fifo_insert_inirq(
struct rtskb_fifo *fifo,
82 result = __rtskb_fifo_insert(fifo, rtskb);
88 static inline struct rtskb *__rtskb_fifo_remove(
struct rtskb_fifo *fifo)
90 unsigned long pos = fifo->read_pos;
94 if (unlikely(pos == fifo->write_pos))
98 result = fifo->buffer[pos];
103 fifo->read_pos = (pos + 1) & fifo->size_mask;
111 static inline struct rtskb *rtskb_fifo_remove(
struct rtskb_fifo *fifo)
114 struct rtskb *result;
117 result = __rtskb_fifo_remove(fifo);
123 static inline struct rtskb *rtskb_fifo_remove_inirq(
struct rtskb_fifo *fifo)
125 struct rtskb *result;
128 result = __rtskb_fifo_remove(fifo);
135 static inline void rtskb_fifo_init(
struct rtskb_fifo *fifo,
unsigned long size)
139 fifo->size_mask = size - 1;
static void rtdm_lock_put_irqrestore(rtdm_lock_t *lock, rtdm_lockctx_t context)
Release lock and restore preemption state
Definition: driver.h:631
ipipe_spinlock_t rtdm_lock_t
Lock variable.
Definition: driver.h:551
static void rtdm_lock_put(rtdm_lock_t *lock)
Release lock without preemption restoration
Definition: driver.h:592
#define rtdm_lock_get_irqsave(__lock, __context)
Acquire lock and disable preemption, by stalling the head domain.
Definition: driver.h:607
static void rtdm_lock_init(rtdm_lock_t *lock)
Dynamic lock initialisation
Definition: driver.h:564
unsigned long rtdm_lockctx_t
Variable to save the context while holding a lock.
Definition: driver.h:554
static void rtdm_lock_get(rtdm_lock_t *lock)
Acquire lock from non-preemptible contexts
Definition: driver.h:577