Mercurial > hg > Members > kono > Cerium
annotate TaskManager/kernel/ppe/Task.cc @ 648:f1e10ba45d28
Mail modification. Working on Mac OS X.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 21 Nov 2009 20:14:45 +0900 |
parents | 8843edf37c0e |
children | d753b4f6b129 |
rev | line source |
---|---|
109 | 1 #include "Task.h" |
2 | |
3 /** | |
298 | 4 * タスクの入力データを追加する |
109 | 5 * |
6 * @param [addr] add input data | |
7 * @param [size] size of data at [addr] | |
8 * | |
9 * @return if ([ret] == 0) ? success : failuer; | |
10 */ | |
11 int | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
12 Task::add_inData_t(memaddr addr, int size) |
109 | 13 { |
498
cb5ecfc5aaa3
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
478
diff
changeset
|
14 return add_data(inData, addr, size); |
109 | 15 } |
16 | |
181 | 17 /** |
298 | 18 * タスクの出力先を追加する |
181 | 19 * |
20 * @param[in] addr Address at out data | |
21 * @param[in] size Size of data transfer | |
22 * | |
23 * @return if ([ret] == 0) ? success : failuer; | |
24 */ | |
109 | 25 int |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
26 Task::add_outData_t(memaddr addr, int size) |
109 | 27 { |
498
cb5ecfc5aaa3
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
478
diff
changeset
|
28 return add_data(outData, addr, size); |
109 | 29 } |
30 | |
31 /** | |
298 | 32 * エラーの時に -1 を返す、ってことするよりは |
33 * perror みたいにしたほうがわかりやすいかな。 | |
478
c9127aec8c9c
remove duplicate sources in Cell/spe
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
298
diff
changeset
|
34 * |
615
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
35 * 現在は MAX_PARAMS 個まで。 |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
36 * 本当は、MAX_PARAMS個以上にすると task->param[] には アドレスが入り |
478
c9127aec8c9c
remove duplicate sources in Cell/spe
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
298
diff
changeset
|
37 * そのアドレスは メインメモリでアロケートされた int の集合。 |
109 | 38 */ |
615
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
39 |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
40 // こちらのAPIは、受け側と出力側での対応を良く見れない。廃止の方向。 |
109 | 41 int |
625
60aa3f241b10
64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
615
diff
changeset
|
42 Task::add_param0(memaddr _param) |
109 | 43 { |
44 if (param_size >= MAX_PARAMS) return -1; | |
45 | |
46 this->param[param_size++] = _param; | |
47 return 0; | |
48 } | |
49 | |
615
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
50 int |
625
60aa3f241b10
64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
615
diff
changeset
|
51 Task::set_param0(int index, memaddr _param) |
615
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
52 { |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
53 if (index >= MAX_PARAMS) return -1; |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
54 |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
55 this->param[index] = _param; |
f7d78b3c1106
First addOutput rendering try failed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
603
diff
changeset
|
56 return 0; |
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 |
109 | 59 /* |
298 | 60 * エラーの時に -1 を返す、ってことするよりは |
61 * perror みたいにしたほうがわかりやすいかな。 | |
109 | 62 */ |
63 int | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
64 Task::add_data(ListData& list, memaddr addr, int size) |
109 | 65 { |
567 | 66 if (list.length >= MAX_LIST_DMA_SIZE) return -1; |
109 | 67 |
567 | 68 list.bound[list.length] = list.size; |
109 | 69 |
298 | 70 // size でも制限かけるべき? |
567 | 71 list.size += size; |
109 | 72 |
567 | 73 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
|
74 #ifdef __CERIUM_CELL__ |
8843edf37c0e
Cell 64 bit tried, but not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
75 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
|
76 #else |
109 | 77 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
|
78 #endif |
109 | 79 elm->size = size; |
80 | |
81 return 0; | |
82 } |