3
|
1 #include <stdio.h>
|
|
2 #include <string.h>
|
|
3 #include "FifoDmaManager.h"
|
|
4
|
|
5 void
|
|
6 FifoDmaManager::dma_load(void *buf, unsigned int addr, int size, int mask)
|
|
7 {
|
|
8 memcpy(buf, (void*)addr, size);
|
|
9 }
|
|
10
|
|
11 void
|
|
12 FifoDmaManager::dma_store(void *buf, unsigned int addr, int size, int mask)
|
|
13 {
|
|
14 memcpy((void*)addr, buf, size);
|
|
15 }
|
|
16
|
|
17 /**
|
|
18 * mask で設定した DMA 転送の完了を待つ
|
|
19 */
|
|
20 void
|
|
21 FifoDmaManager::dma_wait(int mask)
|
|
22 {
|
|
23 //spu_writech(MFC_WrTagMask, 1 << mask);
|
|
24 //spu_mfcstat(MFC_TAG_UPDATE_ALL);
|
|
25 }
|
|
26
|
|
27 void
|
|
28 FifoDmaManager::mail_write(unsigned int data)
|
|
29 {
|
|
30 //spu_writech(SPU_WrOutMbox, data);
|
|
31
|
|
32 mail_sendQueue = append_mailQueue(mail_sendQueue,
|
|
33 mailManager->create_mail(data));
|
|
34 }
|
|
35
|
|
36 unsigned int
|
|
37 FifoDmaManager::mail_read(void)
|
|
38 {
|
|
39 MailQueuePtr q;
|
|
40 unsigned int ret;
|
|
41
|
|
42 q = mail_recvQueue;
|
|
43
|
|
44 if (q == NULL) {
|
|
45 return 0; // error か 正しい値か判断できないな・・・
|
|
46 }
|
|
47
|
|
48 mail_recvQueue = mail_recvQueue->next;
|
|
49
|
|
50 ret = q->data;
|
|
51 mailManager->free_mailQueue(q);
|
|
52
|
|
53 return ret;
|
|
54 }
|