Mercurial > hg > Game > Cerium
comparison TaskManager/Cell/spe/SchedTaskList.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 |
---|---|
1 #include <stdio.h> | |
2 #include <stdlib.h> | |
3 #include <string.h> | |
1 #include "SchedTaskList.h" | 4 #include "SchedTaskList.h" |
2 #include "SchedTask.h" | 5 #include "SchedTask.h" |
3 #include "SchedNop2Ready.h" | 6 #include "SchedNop2Ready.h" |
4 #include "DmaManager.h" | 7 #include "DmaManager.h" |
5 #include "error.h" | 8 #include "error.h" |
6 | 9 |
7 SchedTaskList::SchedTaskList(unsigned int addr, TaskListPtr listbuf, DmaManager* c) | 10 SchedTaskList::SchedTaskList(unsigned int addr, Scheduler *sched) |
8 { | 11 { |
9 params_addr = addr; | 12 params_addr = addr; |
10 list = listbuf; | 13 list = sched->get_curListBuf(); |
11 connector = c; | 14 scheduler = sched; |
15 | |
16 flag_renewTaskList = 0; | |
12 } | 17 } |
18 | |
13 | 19 |
14 void | 20 void |
15 SchedTaskList::read(void) | 21 SchedTaskList::read(void) |
16 { | 22 { |
17 __debug("[SchedTaskList:%s]\n", __FUNCTION__); | 23 __debug("[SchedTaskList:%s]\n", __FUNCTION__); |
18 | 24 |
19 connector->dma_load(list, params_addr, sizeof(TaskList), DMA_READ); | 25 if (flag_renewTaskList == 0) { |
20 connector->dma_wait(DMA_READ); | 26 scheduler->dma_load(list,params_addr,sizeof(TaskList),DMA_READ_TASKLIST); |
27 scheduler->dma_wait(DMA_READ_TASKLIST); | |
28 } else { | |
29 list = (TaskListPtr)params_addr; | |
30 } | |
31 | |
32 scheduler->curIndex_taskList = 0; | |
33 | |
34 scheduler->mainMem_wait(); | |
21 } | 35 } |
22 | |
23 extern SchedTask* CreateSchedTask(TaskListPtr, void*, void*, DmaManager*); | |
24 | 36 |
25 SchedTaskBase* | 37 SchedTaskBase* |
26 SchedTaskList::next(Scheduler *m, SchedTaskBase *p) | 38 SchedTaskList::next(Scheduler *m, SchedTaskBase *p) |
27 { | 39 { |
28 __debug("[SchedTaskList:%s]\n", __FUNCTION__); | 40 __debug("[SchedTaskList:%s]\n", __FUNCTION__); |
29 | 41 |
30 delete p; | 42 delete p; |
31 | 43 |
32 if (list->length < 1) { | 44 if (list->length < 1) { |
33 return new SchedNop2Ready(connector); | 45 return new SchedNop2Ready(scheduler); |
34 } else { | 46 } else { |
35 return CreateSchedTask(list, m->get_curReadBuf(), m->get_curWriteBuf(), | 47 SchedTask* task = CreateSchedTask(list, m); |
36 connector); | 48 task->__flag_renewTask = this->flag_renewTaskList; |
49 task->__init__(); | |
50 return task; | |
37 } | 51 } |
38 } | 52 } |
39 | 53 |