59
|
1 #include <spu_mfcio.h>
|
|
2 #include "CellDmaManager.h"
|
|
3
|
|
4 void
|
|
5 CellDmaManager::dma_load(void *buf, unsigned int addr, int size, int mask)
|
|
6 {
|
|
7 if (buf == NULL || (void*)addr == NULL) return;
|
|
8 spu_mfcdma32(buf, addr, ROUND_UP_ALIGN(size, DEFAULT_ALIGNMENT),
|
|
9 mask, MFC_GET_CMD);
|
|
10 }
|
|
11
|
|
12 void
|
|
13 CellDmaManager::dma_store(void *buf, unsigned int addr, int size, int mask)
|
|
14 {
|
|
15 if (buf == NULL || (void*)addr == NULL) return;
|
|
16 spu_mfcdma32(buf, addr, ROUND_UP_ALIGN(size, DEFAULT_ALIGNMENT),
|
|
17 mask, MFC_PUT_CMD);
|
|
18 }
|
|
19
|
|
20 /**
|
|
21 * mask で設定した DMA 転送の完了を待つ
|
|
22 */
|
|
23 void
|
|
24 CellDmaManager::dma_wait(int mask)
|
|
25 {
|
|
26 spu_writech(MFC_WrTagMask, 1 << mask);
|
|
27 spu_mfcstat(MFC_TAG_UPDATE_ALL);
|
|
28 }
|
|
29
|
|
30 void
|
|
31 CellDmaManager::mail_write(unsigned int data)
|
|
32 {
|
|
33 spu_writech(SPU_WrOutMbox, data);
|
|
34 }
|
|
35
|
|
36 unsigned int
|
|
37 CellDmaManager::mail_read(void)
|
|
38 {
|
|
39 return spu_readch(SPU_RdInMbox);
|
|
40 }
|