Mercurial > hg > Game > Cerium
annotate TaskManager/kernel/schedule/SchedTask.h @ 1258:ee938477af88 draft
add explanation
author | Daichi Toma <toma@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 19 Nov 2011 07:38:48 +0900 |
parents | a49c02dffe6f |
children | ff721740df6b |
rev | line source |
---|---|
42 | 1 #ifndef INCLUDED_SCHED_TASK |
2 #define INCLUDED_SCHED_TASK | |
3 | |
308 | 4 #include "base.h" |
5 #include "Scheduler.h" | |
6 #include "SchedTaskBase.h" | |
7 #include "ListData.h" | |
619 | 8 #include "HTask.h" |
373 | 9 #include "MemList.h" |
109 | 10 |
634 | 11 |
308 | 12 class SchedTask : public SchedTaskBase { |
13 public: | |
109 | 14 /* constructor */ |
308 | 15 SchedTask(); |
16 virtual ~SchedTask(); | |
88 | 17 |
109 | 18 BASE_NEW_DELETE(SchedTask); |
42 | 19 |
308 | 20 /* variables */ |
708 | 21 |
308 | 22 /* functions */ |
23 | |
24 // override | |
25 void read(); | |
26 void exec(); | |
27 void write(); | |
28 SchedTaskBase* next(Scheduler *, SchedTaskBase *); | |
29 | |
464
0d64bdb63005
task run is mere C function now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
463
diff
changeset
|
30 // タスクの処理は、task_list に登録された C の関数によっておこなう |
308 | 31 |
32 public: | |
33 /* functions */ | |
34 | |
688 | 35 void init(TaskListPtr _list, SimpleTaskPtr _task, int index, |
972 | 36 Scheduler* sc, int tag); |
308 | 37 |
38 //--- User API --- | |
634 | 39 int read_size() { return task->r_size; } |
40 int write_size() { return task->w_size; } | |
41 void set_write_size(int w) { task->w_size = w; } | |
1099 | 42 void setup_outputData(); |
713
97adb3fe85c6
remove SIMPLE_TASK conditional
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
708
diff
changeset
|
43 |
798 | 44 void* get_input(void *buff, int index); |
45 void* get_output(void *buff, int index); | |
46 memaddr get_param(int index); | |
625
94d82f2c842f
64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
619
diff
changeset
|
47 memaddr get_inputAddr(int index); |
94d82f2c842f
64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
619
diff
changeset
|
48 memaddr get_outputAddr(int index); |
538 | 49 // 書き出しを追加する API がない... |
308 | 50 int get_inputSize(int index); |
51 int get_outputSize(int index); | |
641
0605f27ba7d9
Regression on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
635
diff
changeset
|
52 |
1099 | 53 void set_outputSize(int index, int size); |
54 | |
641
0605f27ba7d9
Regression on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
635
diff
changeset
|
55 int get_cpuid(); |
308 | 56 |
57 void* global_alloc(int id, int size); | |
58 void* global_get(int id); | |
373 | 59 void global_set(int id, void *addr); |
308 | 60 void global_free(int id); |
373 | 61 MemList* createMemList(int size, int count); |
308 | 62 |
63 void mainMem_alloc(int id, int size); | |
64 void mainMem_wait(); | |
631
30dd8a3deb4a
Cell 64 bit tried, but not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
65 memaddr mainMem_get(int id); |
308 | 66 |
387
b6fce69839b5
no compile error but not worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
67 MemorySegment * get_segment(memaddr addr, MemList *m); |
1173 | 68 MemorySegment * get_free_segment(memaddr addr, MemList *m); |
1175 | 69 void overwrite_segment(MemorySegment *s, memaddr addr); |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1175
diff
changeset
|
70 // uint32 get_tag(); |
387
b6fce69839b5
no compile error but not worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
71 void put_segment(MemorySegment *s); |
b6fce69839b5
no compile error but not worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
72 void wait_segment(MemorySegment *s); |
b6fce69839b5
no compile error but not worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
73 |
b6fce69839b5
no compile error but not worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
74 |
b6fce69839b5
no compile error but not worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
75 |
308 | 76 void *allocate(int size); |
708 | 77 void free_(void *p) ; |
941
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
932
diff
changeset
|
78 void free_htask(HTask *p) ; |
308 | 79 |
833
577bde5d0cec
poling (may recurse..)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
805
diff
changeset
|
80 void polling(); |
577bde5d0cec
poling (may recurse..)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
805
diff
changeset
|
81 |
538 | 82 /* これは禁止するべき */ |
625
94d82f2c842f
64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
619
diff
changeset
|
83 void dma_load(void *buf, memaddr addr, uint32 size, uint32 mask); |
94d82f2c842f
64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
619
diff
changeset
|
84 void dma_store(void *buf,memaddr addr, uint32 size, uint32 mask); |
308 | 85 void dma_wait(uint32 mask); |
674
07351a5a51c9
fix many task example (sort).
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
672
diff
changeset
|
86 |
334
7bc5cbc5fe04
[in test_render] push L key , call show_dma_wait, but incomplete.
e065746@localhost.localdomain
parents:
316
diff
changeset
|
87 void show_dma_wait(); |
672 | 88 void start_profile(); |
373 | 89 |
674
07351a5a51c9
fix many task example (sort).
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
672
diff
changeset
|
90 |
310 | 91 /*! |
92 SPU用の get_input, get_output | |
93 */ | |
94 void* get_input(int index) { | |
483
5f4ffff2c2aa
renew task worked. but not test_nogl...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
467
diff
changeset
|
95 return get_input(readbuf, index); |
310 | 96 } |
373 | 97 |
310 | 98 void* get_output(int index) { |
483
5f4ffff2c2aa
renew task worked. but not test_nogl...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
467
diff
changeset
|
99 return get_output(writebuf, index); |
373 | 100 } |
466
c73aff02db67
prohibit global variable in Task....
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
101 |
932
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
102 /** |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
103 * swap read / write buffer |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
104 * output が read buffer の書き換えならば、memcpy せずに |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
105 * swap するだけで良い。size は同じである必要がある。 |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
106 */ |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
107 void swap() { |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
108 void * tmp = readbuf; |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
109 readbuf = writebuf; |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
110 writebuf = tmp; |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
111 } |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
112 |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
113 |
619 | 114 // user |
115 HTaskPtr create_task(int cmd); | |
634 | 116 HTaskPtr create_task(int cmd, memaddr r, long rs, memaddr w, long ws); |
805 | 117 HTaskPtr create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData); |
634 | 118 |
619 | 119 void set_task_depend(HTaskPtr master, HTaskPtr slave); |
120 void spawn_task(HTaskPtr); | |
121 void set_task_cpu(HTaskPtr, CPU_TYPE); | |
122 void* allocate(int size,int align); | |
123 Scheduler* get_scheduler(); | |
674
07351a5a51c9
fix many task example (sort).
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
672
diff
changeset
|
124 long get_random(); |
619 | 125 |
466
c73aff02db67
prohibit global variable in Task....
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
126 int printf(const char * format, ...); |
c73aff02db67
prohibit global variable in Task....
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
127 |
899 | 128 } ; |
109 | 129 |
308 | 130 |
695 | 131 extern void loadSchedTask(Scheduler *scheduler,TaskPtr task); |
302 | 132 |
133 #endif | |
308 | 134 |