+#ifndef _FIFO_H_
+#define _FIFO_H_
+
+#include <stdio.h>
+#include <string.h>
+
+#include "../constant.h"
+
+#include "../lib/malloc_align.h"
+#include "../lib/free_align.h"
+
+/**
+ * FIFO Class: For remarks see SPE
+ */
+class Fifo {
+ public:
+ Fifo(unsigned size);
+ virtual ~Fifo();
+
+ virtual unsigned read(void *destination, unsigned len);
+ virtual unsigned write(const void *source, unsigned len);
+
+ virtual unsigned used() const;
+ virtual unsigned unused() const;
+ virtual unsigned size() const;
+
+ virtual char *getQueuePointer();
+ virtual void dmaRead(unsigned len);
+ virtual unsigned dmaStart();
+ virtual bool dmaAllowed();
+
+ unsigned _inTail;
+
+ protected:
+ char *_buffer;
+
+ unsigned _tail;
+ unsigned _pos;
+ unsigned _size;
+
+ unsigned _blocked;
+ bool _activeDMA;
+};
+
+#endif