0
|
1 #include <stdlib.h>
|
|
2 #include <string.h>
|
|
3 #include "SchedTaskList.h"
|
|
4 #include "SchedTask.h"
|
|
5 #include "SysFunc.h"
|
|
6 #include "SchedTaskArray.h"
|
|
7 #include "SchedTaskArrayLoad.h"
|
|
8 #include "SchedNop2Ready.h"
|
|
9 #include "DmaManager.h"
|
|
10 #include "error.h"
|
|
11
|
|
12 /**
|
|
13 * SchedTaskList を返す
|
|
14 *
|
|
15 * @param[in] next_list 次の実行する TaskList のアドレス
|
|
16 * @param[in] next_list がメインメモリのアドレスか、
|
|
17 * SPE で生成されたアドレスかのフラグ
|
|
18 * SPE で生成されている場合、DMA の必要は無い
|
|
19 * 0: メインメモリ, 1: SPE
|
|
20 */
|
|
21
|
|
22 SchedTaskList::SchedTaskList(memaddr addr, Scheduler *sched, int tag)
|
|
23 {
|
|
24 // next() で生成された時に、Task List read を始める
|
|
25 params_addr = addr;
|
|
26 scheduler = sched;
|
|
27 cur_index = 0;
|
|
28 list = scheduler->get_curListBuf();
|
|
29 scheduler->dma_load(list, params_addr,
|
|
30 sizeof(TaskList), DMA_READ_TASKLIST);
|
|
31
|
|
32 this->tag = tag;
|
|
33
|
|
34 }
|
|
35
|
|
36
|
|
37 void
|
|
38 SchedTaskList::read()
|
|
39 {
|
|
40 // next() で TaskListの中身を見られてしまうので、
|
|
41 // ここで DMA 待ちを行う
|
|
42 __debug("[SchedTaskList:%s]\n", __FUNCTION__);
|
|
43 scheduler->dma_wait(DMA_READ_TASKLIST);
|
|
44 }
|
|
45
|
|
46 void
|
|
47 SchedTaskList::exec() {
|
|
48 }
|
|
49
|
|
50 void
|
|
51 SchedTaskList::write()
|
|
52 {
|
|
53 }
|
|
54
|
|
55 /**
|
|
56 * next は、SchedTask のものが使われる。
|
|
57 * それで正しく動くはず。
|
|
58 *
|
|
59 * next() が呼ばれた時点で、TaskList のloadが終了しているように工夫する。
|
|
60 *
|
|
61 */
|
|
62
|
|
63 /* end */
|