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