Mercurial > hg > Members > kono > Cerium
annotate TaskManager/kernel/ppe/Task.cc @ 697:257ad1a518e3
TaskArray on going...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 13 Dec 2009 18:45:09 +0900 |
parents | 458a1ad91427 |
children | 7e937a1cd121 |
rev | line source |
---|---|
109 | 1 #include "Task.h" |
2 | |
683 | 3 // #include "SchedTask.h" it includes #define Task |
4 | |
680 | 5 #ifndef SIMPLE_TASK |
109 | 6 /** |
298 | 7 * タスクの入力データを追加する |
109 | 8 * |
9 * @param [addr] add input data | |
10 * @param [size] size of data at [addr] | |
11 * | |
12 * @return if ([ret] == 0) ? success : failuer; | |
13 */ | |
14 int | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
15 Task::add_inData_t(memaddr addr, int size) |
109 | 16 { |
498
cb5ecfc5aaa3
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
478
diff
changeset
|
17 return add_data(inData, addr, size); |
109 | 18 } |
19 | |
181 | 20 /** |
298 | 21 * タスクの出力先を追加する |
181 | 22 * |
23 * @param[in] addr Address at out data | |
24 * @param[in] size Size of data transfer | |
25 * | |
26 * @return if ([ret] == 0) ? success : failuer; | |
27 */ | |
109 | 28 int |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
29 Task::add_outData_t(memaddr addr, int size) |
109 | 30 { |
498
cb5ecfc5aaa3
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
478
diff
changeset
|
31 return add_data(outData, addr, size); |
109 | 32 } |
33 | |
34 /** | |
298 | 35 * エラーの時に -1 を返す、ってことするよりは |
36 * perror みたいにしたほうがわかりやすいかな。 | |
478
c9127aec8c9c
remove duplicate sources in Cell/spe
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
298
diff
changeset
|
37 * |
615
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
38 * 現在は MAX_PARAMS 個まで。 |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
39 * 本当は、MAX_PARAMS個以上にすると task->param[] には アドレスが入り |
478
c9127aec8c9c
remove duplicate sources in Cell/spe
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
298
diff
changeset
|
40 * そのアドレスは メインメモリでアロケートされた int の集合。 |
109 | 41 */ |
615
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
42 |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
43 // こちらのAPIは、受け側と出力側での対応を良く見れない。廃止の方向。 |
109 | 44 int |
683 | 45 Task::add_param_t(memaddr _param) |
109 | 46 { |
47 if (param_size >= MAX_PARAMS) return -1; | |
48 | |
49 this->param[param_size++] = _param; | |
50 return 0; | |
51 } | |
52 | |
615
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
53 int |
683 | 54 Task::set_param_t(int index, memaddr _param) |
615
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
55 { |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
56 if (index >= MAX_PARAMS) return -1; |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
57 |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
58 this->param[index] = _param; |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
59 return 0; |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
60 } |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
61 |
109 | 62 /* |
298 | 63 * エラーの時に -1 を返す、ってことするよりは |
64 * perror みたいにしたほうがわかりやすいかな。 | |
109 | 65 */ |
66 int | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
67 Task::add_data(ListData& list, memaddr addr, int size) |
109 | 68 { |
567 | 69 if (list.length >= MAX_LIST_DMA_SIZE) return -1; |
109 | 70 |
567 | 71 list.bound[list.length] = list.size; |
109 | 72 |
298 | 73 // size でも制限かけるべき? |
567 | 74 list.size += size; |
109 | 75 |
567 | 76 ListElementPtr elm = &list.element[list.length++]; |
629
8843edf37c0e
Cell 64 bit tried, but not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
77 #ifdef __CERIUM_CELL__ |
8843edf37c0e
Cell 64 bit tried, but not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
78 elm->addr = (uint32)(unsigned long)addr; |
8843edf37c0e
Cell 64 bit tried, but not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
79 #else |
109 | 80 elm->addr = addr; |
629
8843edf37c0e
Cell 64 bit tried, but not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
81 #endif |
109 | 82 elm->size = size; |
680 | 83 return 0; |
84 } | |
85 | |
86 #else /* ifdef SIMPLE_TASK */ | |
87 | |
681 | 88 void |
89 Task::set_inData_t( int index, memaddr addr, int size) | |
680 | 90 { |
681 | 91 ListElementPtr elm = (ListElementPtr) inData(0); |
92 #ifdef __CERIUM_CELL__ | |
93 elm->addr = (uint32)(unsigned long)addr; | |
94 #else | |
95 elm->addr = addr; | |
96 #endif | |
97 elm->size = size; | |
98 } | |
680 | 99 |
681 | 100 void |
680 | 101 Task::set_outData_t(int index, memaddr addr, int size) |
102 { | |
681 | 103 ListElementPtr elm = (ListElementPtr) outData(0); |
104 #ifdef __CERIUM_CELL__ | |
105 elm->addr = (uint32)(unsigned long)addr; | |
106 #else | |
107 elm->addr = addr; | |
108 #endif | |
109 elm->size = size; | |
680 | 110 } |
111 | |
682
80b23718df18
test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
681
diff
changeset
|
112 void |
683 | 113 Task::print() |
682
80b23718df18
test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
681
diff
changeset
|
114 { |
684
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
115 printf("task id %d task size = %d param size %d " |
682
80b23718df18
test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
681
diff
changeset
|
116 "inData size %d " |
697 | 117 "outData size %d\n", command, size(), param_count, inData_count, outData_count |
682
80b23718df18
test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
681
diff
changeset
|
118 ); |
697 | 119 for(int i=0; i< param_count && i<5; i++) { |
683 | 120 printf("param %d = 0x%ld\n", i, (long)param(i)); |
682
80b23718df18
test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
681
diff
changeset
|
121 } |
80b23718df18
test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
681
diff
changeset
|
122 |
80b23718df18
test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
681
diff
changeset
|
123 } |
680 | 124 |
667
d753b4f6b129
SimpeTask WordCount Worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
629
diff
changeset
|
125 #endif |
109 | 126 |
680 | 127 /* end */ |