3
|
1 #include <stdio.h>
|
|
2 #include "SpeTaskList.h"
|
|
3 #include "SpeTask.h"
|
|
4 #include "SpeNop2Ready.h"
|
|
5 #include "DmaManager.h"
|
|
6 #include "error.h"
|
|
7
|
|
8 SpeTaskList::SpeTaskList(unsigned int addr, TaskListPtr listbuf, DmaManager* c)
|
|
9 {
|
|
10 params_addr = addr;
|
|
11 list = listbuf;
|
|
12 connector = c;
|
|
13 }
|
|
14
|
|
15 void
|
|
16 SpeTaskList::read(void)
|
|
17 {
|
31
|
18 __debug("[SpeTaskList:%s]\n", __FUNCTION__);
|
3
|
19
|
|
20 connector->dma_load(list, params_addr, sizeof(TaskList), DMA_READ);
|
|
21 connector->dma_wait(DMA_READ);
|
|
22 }
|
|
23
|
|
24 SpeTaskBase*
|
|
25 SpeTaskList::next(SpeManager *m, SpeTaskBase *p)
|
|
26 {
|
31
|
27 __debug("[SpeTaskList:%s]\n", __FUNCTION__);
|
3
|
28
|
|
29 delete p;
|
|
30
|
|
31 if (list->length < 1) {
|
|
32 return new SpeNop2Ready(connector);
|
|
33 } else {
|
10
|
34 // 本当は、ここで task->command に対応する、
|
|
35 // SpeTask を継承する class を作ればいい。。。はず
|
|
36 return new SpeTask(list, &list->tasks[--list->length],
|
|
37 m->get_curReadBuf(),
|
|
38 m->get_curWriteBuf(),
|
|
39 connector);
|
3
|
40 }
|
|
41 }
|