diff 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
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/Task.h	Sun Dec 06 18:53:46 2009 +0900
+++ b/TaskManager/kernel/ppe/Task.h	Sun Dec 06 23:03:28 2009 +0900
@@ -40,11 +40,13 @@
 
 class Task {
 public: // variables
-
+    int task_size;
     int command;
     int param_size;
     int inData_size;
     int outData_size;
+    int inData_offset;
+    int outData_offset;
     void *data[] __attribute__ ((aligned (DEFAULT_ALIGNMENT))); 
     // memaddr param[param_size];
     // ListEelemnt inData[inData_size];
@@ -57,20 +59,42 @@
     void print();
 
     memaddr param(int index) {
-	memaddr p = (memaddr)data;
-	return p + sizeof(memaddr)*index;
+	return (memaddr)data + sizeof(memaddr)*index;
     }
     memaddr inData(int index) {
-	return param(param_size) + sizeof(ListElement)*index;
+	memaddr p = (memaddr)data + inData_offset;
+	return p + sizeof(ListElement)*index;
     }
     memaddr outData(int index) {
-	memaddr p = inData(inData_size);
+	memaddr p = (memaddr)data + outData_offset;
 	return p + sizeof(ListElement)* index;
     }
 
-    void set_param_length(int i) { param_size = i; }
-    void set_inData_length(int length)  { inData_size = length; }
-    void set_outData_length(int length) { outData_size = length; }
+    void set_param_length(int i) { 
+	param_size = i; 
+	inData_offset = round_up16(sizeof(Task))+param_size*sizeof(memaddr);
+    }
+    void set_inData_length(int length)  { 
+	inData_size = length; 
+	if (inData_offset==0) {
+	    printf("call set_param_length before\n");
+	}
+	outData_offset = 
+	    round_up16(inData_offset+inData_size*sizeof(ListElement)); 
+    }
+    void set_outData_length(int length) { 
+	outData_size = length; 
+	if (outData_offset==0) {
+	    printf("call set_outData_length before\n");
+	}
+	task_size = round_up16(outData_offset+outData_size*sizeof(ListElement)); 
+    }
+    int size() {
+	if (task_size==0) {
+	    printf("call set_outData_length before\n");
+	}
+	return task_size;
+    }
     void set_inData_t( int index, memaddr addr, int size); 
     void set_outData_t(int index, memaddr addr, int size); 
     void set_task_id(int id) { command = id; }
@@ -78,14 +102,12 @@
 	memaddr *p = (memaddr*)this->param(index);
 	*p = param;
     }
-    int size() {
-	return outData(outData_size)-(memaddr)data;
-    }
 
     static int count_size(int params, int ins, int outs) {
-	int size = sizeof(memaddr)*params
-           + sizeof(ListElement)*ins
-           + sizeof(ListElement)*outs;
+	int size = round_up16(sizeof(Task))
+	   + round_up16(sizeof(memaddr)*params)
+           + round_up16(sizeof(ListElement)*ins)
+           + round_up16(sizeof(ListElement)*outs);
 	return size;
     }