diff TaskManager/Fifo/FifoDmaManager.cc @ 3:2356238ebea7

*** empty log message ***
author gongo
date Tue, 05 Feb 2008 20:22:50 +0900
parents
children 41ccd4b38184 001583879ac3
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Fifo/FifoDmaManager.cc	Tue Feb 05 20:22:50 2008 +0900
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <string.h>
+#include "FifoDmaManager.h"
+
+void
+FifoDmaManager::dma_load(void *buf, unsigned int addr, int size, int mask)
+{
+    memcpy(buf, (void*)addr, size);
+}
+
+void
+FifoDmaManager::dma_store(void *buf, unsigned int addr, int size, int mask)
+{
+    memcpy((void*)addr, buf, size);
+}
+
+/**
+ * mask で設定した DMA 転送の完了を待つ
+ */
+void
+FifoDmaManager::dma_wait(int mask)
+{
+    //spu_writech(MFC_WrTagMask, 1 << mask);
+    //spu_mfcstat(MFC_TAG_UPDATE_ALL);
+}
+
+void
+FifoDmaManager::mail_write(unsigned int data)
+{
+    //spu_writech(SPU_WrOutMbox, data);
+
+    mail_sendQueue = append_mailQueue(mail_sendQueue,
+				      mailManager->create_mail(data));
+}
+
+unsigned int
+FifoDmaManager::mail_read(void)
+{
+    MailQueuePtr q;
+    unsigned int ret;
+
+    q = mail_recvQueue;
+
+    if (q == NULL) {
+	return 0; // error か 正しい値か判断できないな・・・
+    }
+
+    mail_recvQueue = mail_recvQueue->next;
+
+    ret = q->data;
+    mailManager->free_mailQueue(q);
+
+    return ret;
+}