Mercurial > hg > Game > Cerium
diff TaskManager/Cell/spe/CellDmaManager.cc @ 1417:70f461442b0f draft
null DMA clean up
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 19 Feb 2012 21:01:06 +0900 |
parents | 2187bd10f16d |
children | ff721740df6b |
line wrap: on
line diff
--- a/TaskManager/Cell/spe/CellDmaManager.cc Sun Feb 19 16:12:25 2012 +0900 +++ b/TaskManager/Cell/spe/CellDmaManager.cc Sun Feb 19 21:01:06 2012 +0900 @@ -14,22 +14,23 @@ * @param[in] size Size of Load Data * @param[in] mask DMA tag */ -void *CellDmaManager::dma_load(Scheduler *s, void *buf, memaddr addr, uint32 size, uint32 mask) +void *CellDmaManager::dma_load(Scheduler *s, memaddr addr, uint32 size, uint32 mask) { - - if ((unsigned long)addr&0xf) { - //s->printf("dma_load is not aligned. addr = 0x%lx, size = %d\n", - // (unsigned long)addr, size); - return buf; - } - + void *buf = 0; if (size == 0) return buf; - if (s) buf = s->manager->allocate(size); - + buf = s->manager->allocate(size); mfc_get((volatile void *)buf, addr, size, mask, 0, 0); return buf; } +void *CellDmaManager::dma_load1(void *buf, memaddr addr, uint32 size, uint32 mask) +{ + if (size == 0) return buf; + mfc_get((volatile void *)buf, addr, size, mask, 0, 0); + return buf; +} + + void * CellDmaManager::get_writebuf(Scheduler *s,memaddr addr, uint32 size) { @@ -49,35 +50,17 @@ { if (size == 0) return buf; mfc_put((volatile void *)buf, addr, size, mask, 0, 0); - return buf; + return buf; } void CellDmaManager::dma_wait(uint32 mask) { - (this->*start_dmawait_profile)(); mfc_write_tag_mask(1 << mask); mfc_write_tag_update_all(); mfc_read_tag_status(); __asm__ __volatile__(" sync"); (this->*end_dmawait_profile)(&global_wait_time); - -} - -void CellDmaManager::dma_wait(uint32 mask, int cmd) -{ - - unsigned long long wait = 0; - - (this->*start_dmawait_profile)(); - mfc_write_tag_mask(1 << mask); - mfc_write_tag_update_all(); - mfc_read_tag_status(); - __asm__ __volatile__(" sync"); - (this->*end_dmawait_profile)(&wait); - - global_wait_time += wait; - } #ifndef MAIL_QUEUE @@ -135,7 +118,7 @@ void CellDmaManager::mail_write_finish_list(memaddr data) { - unsigned long long wait = 0; + unsigned long long wait = 0; while (mail_queue->count()) { (this->*start_dmawait_profile)(); @@ -197,10 +180,9 @@ -void *CellDmaManager::dma_loadList(Scheduler *s, ListDataPtr list, void *buff, uint32 mask) +void *CellDmaManager::dma_loadList(Scheduler *s, ListDataPtr list, uint32 mask) { - buff = s->manager->allocate(list->size); - + void *buff = s->manager->allocate(list->size); mfc_getl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length, mask, 0, 0); return buff;