Mercurial > hg > Members > kono > Cerium
annotate TaskManager/kernel/ppe/Task.h @ 684:458a1ad91427
Task Array generation worked.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 06 Dec 2009 23:03:28 +0900 |
parents | 9a6cb2439593 |
children | b386522827ae |
rev | line source |
---|---|
274 | 1 #ifndef INCLUDED_TASK |
2 #define INCLUDED_TASK | |
3 | |
307 | 4 #include "base.h" |
5 #include "types.h" | |
6 #include "ListData.h" | |
625
60aa3f241b10
64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
615
diff
changeset
|
7 #include "SimpleTask.h" |
274 | 8 |
9 #define MAX_PARAMS 8 | |
10 | |
679 | 11 #ifndef SIMPLE_TASK |
625
60aa3f241b10
64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
615
diff
changeset
|
12 class Task : public SimpleTask { |
274 | 13 public: // variables |
14 | |
15 BASE_NEW_DELETE(Task); | |
634 | 16 int param_size; // 4 byte |
17 memaddr param[MAX_PARAMS]; // 4*MAX_PARAMS byte | |
625
60aa3f241b10
64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
615
diff
changeset
|
18 ListData inData __attribute__ ((aligned (DEFAULT_ALIGNMENT))); |
60aa3f241b10
64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
615
diff
changeset
|
19 ListData outData __attribute__ ((aligned (DEFAULT_ALIGNMENT))); |
274 | 20 |
21 public: // functions | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
22 int add_inData_t(memaddr addr, int size); // unsigned int ではなく 64bit |
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
23 int add_outData_t(memaddr addr, int size); // unsigned int ではなく 64bit |
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
24 int add_data(ListData &list, memaddr addr, int size); |
679 | 25 int add_param_t(memaddr param); // obsolete. do not use. |
26 int set_param_t(int index, memaddr param); | |
625
60aa3f241b10
64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
615
diff
changeset
|
27 |
679 | 28 #define add_param(param) add_param_t((memaddr)(param)) |
29 #define set_param(index,param) set_param_t(index, (memaddr) (param)) | |
274 | 30 |
31 #define add_inData(addr, size) \ | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
32 add_inData_t((memaddr)(addr), (size)); |
274 | 33 #define add_outData(addr, size) \ |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
34 add_outData_t((memaddr)(addr), (size)); |
274 | 35 }; |
683 | 36 |
679 | 37 #else |
683 | 38 |
39 class SchedTask; | |
40 | |
679 | 41 class Task { |
42 public: // variables | |
684
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
43 int task_size; |
683 | 44 int command; |
679 | 45 int param_size; |
46 int inData_size; | |
47 int outData_size; | |
684
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
48 int inData_offset; |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
49 int outData_offset; |
681 | 50 void *data[] __attribute__ ((aligned (DEFAULT_ALIGNMENT))); |
51 // memaddr param[param_size]; | |
52 // ListEelemnt inData[inData_size]; | |
53 // ListElement outData[outData_size]; | |
679 | 54 |
55 public: // functions | |
681 | 56 // int add_inData_t(memaddr addr, int size); |
57 // int add_outData_t(memaddr addr, int size); | |
682
80b23718df18
test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
681
diff
changeset
|
58 |
683 | 59 void print(); |
682
80b23718df18
test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
681
diff
changeset
|
60 |
681 | 61 memaddr param(int index) { |
684
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
62 return (memaddr)data + sizeof(memaddr)*index; |
681 | 63 } |
64 memaddr inData(int index) { | |
684
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
65 memaddr p = (memaddr)data + inData_offset; |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
66 return p + sizeof(ListElement)*index; |
681 | 67 } |
68 memaddr outData(int index) { | |
684
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
69 memaddr p = (memaddr)data + outData_offset; |
683 | 70 return p + sizeof(ListElement)* index; |
681 | 71 } |
679 | 72 |
684
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
73 void set_param_length(int i) { |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
74 param_size = i; |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
75 inData_offset = round_up16(sizeof(Task))+param_size*sizeof(memaddr); |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
76 } |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
77 void set_inData_length(int length) { |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
78 inData_size = length; |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
79 if (inData_offset==0) { |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
80 printf("call set_param_length before\n"); |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
81 } |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
82 outData_offset = |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
83 round_up16(inData_offset+inData_size*sizeof(ListElement)); |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
84 } |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
85 void set_outData_length(int length) { |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
86 outData_size = length; |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
87 if (outData_offset==0) { |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
88 printf("call set_outData_length before\n"); |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
89 } |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
90 task_size = round_up16(outData_offset+outData_size*sizeof(ListElement)); |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
91 } |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
92 int size() { |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
93 if (task_size==0) { |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
94 printf("call set_outData_length before\n"); |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
95 } |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
96 return task_size; |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
97 } |
681 | 98 void set_inData_t( int index, memaddr addr, int size); |
99 void set_outData_t(int index, memaddr addr, int size); | |
683 | 100 void set_task_id(int id) { command = id; } |
101 void set_param_t(int index, memaddr param) { | |
102 memaddr *p = (memaddr*)this->param(index); | |
681 | 103 *p = param; |
104 } | |
105 | |
683 | 106 static int count_size(int params, int ins, int outs) { |
684
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
107 int size = round_up16(sizeof(Task)) |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
108 + round_up16(sizeof(memaddr)*params) |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
109 + round_up16(sizeof(ListElement)*ins) |
458a1ad91427
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
683
diff
changeset
|
110 + round_up16(sizeof(ListElement)*outs); |
683 | 111 return size; |
112 } | |
113 | |
681 | 114 // #define add_param(param) add_param_t((memaddr)(param)) |
679 | 115 #define set_param(index,param) set_param_t(index, (memaddr) (param)) |
116 | |
683 | 117 // #define add_inData(addr, size) |
681 | 118 // add_inData_t((memaddr)(addr), (size)); |
683 | 119 // #define add_outData(addr, size) |
681 | 120 // add_outData_t((memaddr)(addr), (size)); |
683 | 121 |
679 | 122 #define set_inData(index, addr, size) \ |
123 set_inData_t(index, (memaddr)(addr), (size)); | |
124 #define set_outData(index, addr, size) \ | |
125 set_outData_t(index, (memaddr)(addr), (size)); | |
126 }; | |
127 #endif | |
274 | 128 |
129 typedef Task* TaskPtr; | |
130 | |
131 #endif |