Mercurial > hg > Game > Cerium
diff TaskManager/Cell/spe/CellDmaManager.cc @ 1213:a49c02dffe6f draft
DMA connector reogranization
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 22 Jul 2011 13:25:30 +0900 |
parents | 801d57ae1e29 |
children | 2a4ba6366394 |
line wrap: on
line diff
--- a/TaskManager/Cell/spe/CellDmaManager.cc Fri Jul 22 08:50:04 2011 +0900 +++ b/TaskManager/Cell/spe/CellDmaManager.cc Fri Jul 22 13:25:30 2011 +0900 @@ -14,7 +14,7 @@ * @param[in] size Size of Load Data * @param[in] mask DMA tag */ -void CellDmaManager::dma_load(void *buf, memaddr addr, uint32 size, uint32 mask) +void *CellDmaManager::dma_load(Scheduler *s, void *buf, memaddr addr, uint32 size, uint32 mask) { if ((unsigned long)addr&0xf) { @@ -24,8 +24,17 @@ } if (size == 0) return ; + if (s) buf = s->allocate(size); + mfc_get((volatile void *)buf, addr, size, mask, 0, 0); + return buf; +} +void * +CellDmaManager::get_writebuf(Scheduler *s,memaddr addr, uint32 size) +{ + void *b = s->allocaet(size); + return b; } /** @@ -186,10 +195,13 @@ -void CellDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask) +void *CellDmaManager::dma_loadList(Scheduler *s, ListDataPtr list, void *buff, uint32 mask) { + buff = s->allocate(list->size); + mfc_getl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length, mask, 0, 0); + return buff; } void CellDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask) @@ -198,6 +210,14 @@ mask, 0, 0); } +void * +CellDmaManager::get_writebuf(Scheduler *s,ListDataPtr addr, uint32 size) +{ + void *b = s->allocate(addr->size); + return b; +} + + CellDmaManager::CellDmaManager() { @@ -334,5 +354,29 @@ alloc_flag = 0; } +uint32 +CellDmaManager::get_tag() +{ + static int tag = 16; + tag ++; + tag &= 0x0f; + return tag+16; +} + +/** + * DMA buffer offset in rbuf + */ +void +CellDmaManager::bound(ListData *list) +{ + ListElement *elm = list->element; + int *bound = list->bound; + int offset=0; + for(int i=0;i<list->length;i++) { + bound[i] = offset; + offset += elm[i].size; + } +} + /* end */