Mercurial > hg > Members > kono > Cerium
diff TaskManager/Cell/spe/SchedTaskList.cc @ 109:5c194c71eca8
Cerium cvs version
author | gongo@gendarme.local |
---|---|
date | Wed, 12 Nov 2008 17:39:33 +0900 |
parents | 504899860e66 |
children | 5cde66c926b4 |
line wrap: on
line diff
--- a/TaskManager/Cell/spe/SchedTaskList.cc Wed Nov 12 17:29:35 2008 +0900 +++ b/TaskManager/Cell/spe/SchedTaskList.cc Wed Nov 12 17:39:33 2008 +0900 @@ -1,27 +1,39 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> #include "SchedTaskList.h" #include "SchedTask.h" #include "SchedNop2Ready.h" #include "DmaManager.h" #include "error.h" -SchedTaskList::SchedTaskList(unsigned int addr, TaskListPtr listbuf, DmaManager* c) +SchedTaskList::SchedTaskList(unsigned int addr, Scheduler *sched) { params_addr = addr; - list = listbuf; - connector = c; + list = sched->get_curListBuf(); + scheduler = sched; + + flag_renewTaskList = 0; } + void SchedTaskList::read(void) { __debug("[SchedTaskList:%s]\n", __FUNCTION__); - connector->dma_load(list, params_addr, sizeof(TaskList), DMA_READ); - connector->dma_wait(DMA_READ); + if (flag_renewTaskList == 0) { + scheduler->dma_load(list,params_addr,sizeof(TaskList),DMA_READ_TASKLIST); + scheduler->dma_wait(DMA_READ_TASKLIST); + } else { + list = (TaskListPtr)params_addr; + } + + scheduler->curIndex_taskList = 0; + + scheduler->mainMem_wait(); } -extern SchedTask* CreateSchedTask(TaskListPtr, void*, void*, DmaManager*); - SchedTaskBase* SchedTaskList::next(Scheduler *m, SchedTaskBase *p) { @@ -30,10 +42,12 @@ delete p; if (list->length < 1) { - return new SchedNop2Ready(connector); + return new SchedNop2Ready(scheduler); } else { - return CreateSchedTask(list, m->get_curReadBuf(), m->get_curWriteBuf(), - connector); + SchedTask* task = CreateSchedTask(list, m); + task->__flag_renewTask = this->flag_renewTaskList; + task->__init__(); + return task; } }