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