Mercurial > hg > Members > kono > Cerium
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; +}