new kfifo API
Stefani Seibold
maintainerPATCH 5/7 new kfifo API
kfifo.h | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 76 insertions(+)
Signed-off-by Stefani Seibold <[email protected]>
include/linux/kfifo.h +76 -0
@@ -32,6 +32,28 @@unsigned int out;/* data is extracted from off. (out % size) */ }; +#define KFIFO_INIT (s, b) \ + (struct kfifo) { \ + .size = s, \ + .in = 0, \ + .out = 0, \ + .buffer = b \ + } + + +#define DECLARE_KFIFO (name, size) \ +union { \ + struct kfifo name; \ + unsigned char name##_buffer[size + sizeof(struct kfifo)]; \ +} + +#define DEFINE_KFIFO (name, size) \ + DECLARE_KFIFO(name, size) = KFIFO_INIT(name, size) + +#define INIT_KFIFO (name) \ + name = KFIFO_INIT(sizeof(name##_buffer) - sizeof(struct kfifo), \ + name##_buffer) +extern void kfifo_init (struct kfifo *fifo,unsigned char *buffer,unsigned int size); extern __must_check int kfifo_alloc(struct kfifo *fifo,
@@ -52,6 +74,24 @@ }/** +* kfifo_reset_in - skip input FIFO contents +* @fifo: the fifo to be emptied. +*/ +static inline void kfifo_reset_in (struct kfifo *fifo) +{ + fifo->in = fifo->out; +} + +/** +* kfifo_reset_in - skip output FIFO contents +* @fifo: the fifo to be emptied. +*/ +static inline void kfifo_reset_out (struct kfifo *fifo) +{ + fifo->out = fifo->in; +} + +/** * kfifo_in_locked - puts some data into the FIFO using a spinlock for locking * @fifo: the fifo to be used. * @buffer: the data to be added.
@@ -122,4 +162,40 @@ return fifo->in - out; } +/** +* kfifo_size - returns the size of the fifo in bytes +* @fifo: the fifo to be used. +*/ +static inline __must_check unsigned int kfifo_size (struct kfifo *fifo) +{ +return fifo->size; +} + +/** +* kfifo_is_empty - returns true if the fifo is empty +* @fifo: the fifo to be used. +*/ +static inline __must_check int kfifo_is_empty (struct kfifo *fifo) +{ +return fifo->in == fifo->out; +} + +/** +* kfifo_is_full - returns true if the fifo is full +* @fifo: the fifo to be used. +*/ +static inline __must_check int kfifo_is_full (struct kfifo *fifo) +{ +return kfifo_len (fifo) ==kfifo_size (fifo); +} + +/** +* kfifo_avail - returns the number of bytes available in the FIFO +* @fifo: the fifo to be used. +*/ +static inline __must_check unsigned int kfifo_avail (struct kfifo *fifo) +{ +return kfifo_size (fifo) -kfifo_len (fifo); +} +#endif