Mercurial > hg > Game > Cerium
comparison TaskManager/Cell/spe/CellDmaManager.cc @ 109:028ffc9c0375 draft
Cerium cvs version
author | gongo@gendarme.local |
---|---|
date | Wed, 12 Nov 2008 17:39:33 +0900 |
parents | 504899860e66 |
children | e3b7776b1420 |
comparison
equal
deleted
inserted
replaced
108:6f3b3dd3c095 | 109:028ffc9c0375 |
---|---|
4 #include "CellDmaManager.h" | 4 #include "CellDmaManager.h" |
5 | 5 |
6 void | 6 void |
7 CellDmaManager::dma_load(void *buf, uint32 addr, uint32 size, uint32 mask) | 7 CellDmaManager::dma_load(void *buf, uint32 addr, uint32 size, uint32 mask) |
8 { | 8 { |
9 //if (buf == NULL || (void*)addr == NULL) return; | |
10 if (size == 0) return ; | 9 if (size == 0) return ; |
11 spu_mfcdma32(buf, addr, ROUND_UP_ALIGN(size, DEFAULT_ALIGNMENT), | 10 spu_mfcdma32(buf, addr, size, mask, MFC_GET_CMD); |
12 mask, MFC_GET_CMD); | |
13 } | 11 } |
14 | 12 |
15 void | 13 void |
16 CellDmaManager::dma_store(void *buf, uint32 addr, uint32 size, uint32 mask) | 14 CellDmaManager::dma_store(void *buf, uint32 addr, uint32 size, uint32 mask) |
17 { | 15 { |
18 //if (buf == NULL || (void*)addr == NULL) return; | |
19 if (size == 0) return ; | 16 if (size == 0) return ; |
20 spu_mfcdma32(buf, addr, ROUND_UP_ALIGN(size, DEFAULT_ALIGNMENT), | 17 spu_mfcdma32(buf, addr, size, mask, MFC_PUT_CMD); |
21 mask, MFC_PUT_CMD); | 18 |
19 //spu_mfcdma32(buf, addr, ROUND_UP_ALIGN(size, DEFAULT_ALIGNMENT), | |
22 } | 20 } |
23 | 21 |
24 /** | 22 /** |
25 * mask で設定した DMA 転送の完了を待つ | 23 * mask で設定した DMA 転送の完了を待つ |
26 */ | 24 */ |
38 } | 36 } |
39 | 37 |
40 unsigned int | 38 unsigned int |
41 CellDmaManager::mail_read(void) | 39 CellDmaManager::mail_read(void) |
42 { | 40 { |
43 return spu_readch(SPU_RdInMbox); | 41 unsigned int mail = spu_readch(SPU_RdInMbox); |
42 return mail; | |
44 } | 43 } |
45 | 44 |
46 void | 45 void |
47 CellDmaManager::dmaList_set(uint32 _address, uint32 _size) | 46 CellDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask) |
48 { | 47 { |
49 int *index = &buff_index[buff_flag]; | 48 mfc_getl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length, |
50 DmaListPtr queue = &dmaQueue[buff_flag][(*index)++]; | 49 mask, 0, 0); |
50 } | |
51 | 51 |
52 queue->addr = _address; | 52 void |
53 queue->size = ROUND_UP_ALIGN(_size, DEFAULT_ALIGNMENT); | 53 CellDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask) |
54 { | |
55 mfc_putl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length, | |
56 mask, 0, 0); | |
54 } | 57 } |
58 | |
59 | |
60 #if 0 | |
61 /** | |
62 * dma_loadList の前ばーじょn | |
63 */ | |
55 | 64 |
56 void** | 65 void** |
57 CellDmaManager::dmaList_load(uint32 mask) | 66 CellDmaManager::dmaList_load(uint32 mask) |
58 { | 67 { |
59 int index = buff_index[buff_flag]; | 68 int index = buff_index[buff_flag]; |
102 _buffList[buff_flag] = buffList; | 111 _buffList[buff_flag] = buffList; |
103 _buff[buff_flag] = buff; | 112 _buff[buff_flag] = buff; |
104 | 113 |
105 return buffList; | 114 return buffList; |
106 } | 115 } |
116 #endif |