diff include/TaskManager/FifoDmaManager.h @ 0:04e28d8d3c6f

first commit
author Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp>
date Mon, 08 Nov 2010 01:23:25 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/include/TaskManager/FifoDmaManager.h	Mon Nov 08 01:23:25 2010 +0900
@@ -0,0 +1,45 @@
+#ifndef INCLUDED_FIFO_DMA_MANAGER
+#define INCLUDED_FIFO_DMA_MANAGER
+
+#include "base.h"
+#include "DmaManager.h"
+#include "MailManager.h"
+
+class FifoDmaManager : public DmaManager {
+
+protected:
+    /* variables */
+    MailManagerPtr mail_queue1;
+    MailManagerPtr mail_queue2;
+
+public:
+    BASE_NEW_DELETE(FifoDmaManager);
+
+    FifoDmaManager() {
+	mail_queue1 = new MailManager();
+	mail_queue2 = new MailManager();
+    }
+
+    ~FifoDmaManager() {
+	delete mail_queue1;
+	delete mail_queue2;
+    }
+
+    /* functions */
+    void dma_load(void *buf, memaddr addr, uint32 size, uint32 mask);
+    void dma_store(void *buf, memaddr addr, uint32 size, uint32 mask);
+    void dma_wait(uint32 mask) ;
+
+    void mail_write(memaddr data) { mail_queue1->send(data); }
+    memaddr mail_read() { return mail_queue2->recv(); }
+
+    void mail_write_from_host(memaddr data) { mail_queue2->send(data); }
+    memaddr mail_read_from_host() { return mail_queue1->recv(); }
+    int has_mail_from_host() { return mail_queue1->count(); }
+
+    void dma_loadList(ListDataPtr list, void *buff, uint32 mask);
+    void dma_storeList(ListDataPtr, void *buff, uint32 mask);
+
+};
+
+#endif