Mercurial > hg > Members > kono > Cerium
view TaskManager/Fifo/FifoDmaManager.cc @ 263:001583879ac3 akira
merge 12 & 122
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 03 Jun 2009 23:55:07 +0900 (2009-06-03) |
parents | 2356238ebea7 5c194c71eca8 |
children | 58fd16298954 |
line wrap: on
line source
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "FifoDmaManager.h" void FifoDmaManager::dma_load(void *buf, uint32 addr, uint32 size, uint32 mask) { if (size == 0) return; memcpy(buf, (void*)addr, size); } void FifoDmaManager::dma_store(void *buf, uint32 addr, uint32 size, uint32 mask) { if (size == 0) return; memcpy((void*)addr, buf, size); } /** * mask �����ꤷ�� DMA ž���δ�λ���Ԥ� */ void FifoDmaManager::dma_wait(uint32 mask) { //spu_writech(MFC_WrTagMask, 1 << mask); //spu_mfcstat(MFC_TAG_UPDATE_ALL); } void FifoDmaManager::mail_write(uint32 data) { mail_sendQueue = MailManager::append_mailQueue(mail_sendQueue, mailManager->create(data)); } unsigned int FifoDmaManager::mail_read(void) { MailQueuePtr q; uint32 ret; q = mail_recvQueue; if (q == NULL) { return 0; // error �� �������ͤ�Ƚ�ǤǤ��ʤ��ʡ����� } mail_recvQueue = mail_recvQueue->next; ret = q->data; mailManager->free(q); return ret; } void FifoDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask) { int list_size = list->length; int bound; bound = (int)(buff); for (int i = 0; i < list_size; i++) { ListElementPtr elm = &list->element[i]; memcpy((void*)bound, (void*)elm->addr, elm->size); bound += elm->size; } } #if 0 void* FifoDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask) { void **buffList; int bound; dma_wait(mask); if (list->length == 1) { return buff; } bound = (int)buff; buffList = (void**)malloc(list->length); buffList[0] = (void*)bound; for (int i = 1; i < list->length; i++) { bound += list->element[i-1].size; buffList[i] = (void*)(bound); } return (void*)buffList; } #endif void FifoDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask) { int list_size = list->length; int bound; bound = (int)(buff); for (int i = 0; i < list_size; i++) { ListElementPtr elm = &list->element[i]; memcpy((void*)elm->addr, (void*)bound, elm->size); bound += elm->size; } }