* [PATCH 5/7] new kfifo API
@ 2009-08-11 22:32 Stefani Seibold
0 siblings, 0 replies; only message in thread
From: Stefani Seibold @ 2009-08-11 22:32 UTC (permalink / raw)
To: linux-kernel; +Cc: Andrew Morton, Arnd Bergmann, Andi Kleen
kfifo.h | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 76 insertions(+)
Signed-off-by: Stefani Seibold <stefani@seibold.net>
diff -u -N -r linux-2.6.31-rc4-kfifo4/include/linux/kfifo.h linux-2.6.31-rc4-kfifo5/include/linux/kfifo.h
--- linux-2.6.31-rc4-kfifo4/include/linux/kfifo.h 2009-08-11 22:14:19.000000000 +0200
+++ linux-2.6.31-rc4-kfifo5/include/linux/kfifo.h 2009-08-11 22:53:29.000000000 +0200
@@ -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
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2009-08-11 22:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-11 22:32 [PATCH 5/7] new kfifo API Stefani Seibold
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.