diff TaskManager/kernel/ppe/HTaskInfo.cc @ 109:028ffc9c0375 draft

Cerium cvs version
author gongo@gendarme.local
date Wed, 12 Nov 2008 17:39:33 +0900
parents 504899860e66
children 768452fab95e
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/HTaskInfo.cc	Wed Nov 12 17:29:35 2008 +0900
+++ b/TaskManager/kernel/ppe/HTaskInfo.cc	Wed Nov 12 17:39:33 2008 +0900
@@ -37,16 +37,25 @@
     /* Connect all free queue in the pool */
     for (q = htaskPool + 1; --num > 0; q++) {
 	q->next = q + 1;
+	q->inData = (ListDataPtr)malloc(sizeof(ListData));
+	q->outData = (ListDataPtr)malloc(sizeof(ListData));
     }
     q->next = freeHTask;
+    q->inData = (ListDataPtr)malloc(sizeof(ListData));
+    q->outData = (ListDataPtr)malloc(sizeof(ListData));
+
     freeHTask = htaskPool + 1;
 
     return 0;
 }
 
+/**
+ * Task をプールから取って来て返す
+ *
+ * @param [cmd] タスクコマンド
+ */
 HTaskPtr
-//HTaskInfo::create(int cmd, int size, DmaBuffer *in_addr, DmaBuffer *out_addr)
-HTaskInfo::create(int cmd, int size, unsigned int in_addr, unsigned int out_addr)
+HTaskInfo::create(int cmd)
 {
     HTaskPtr q;
     
@@ -58,9 +67,11 @@
     freeHTask = freeHTask->next;
 
     q->command  = cmd;
-    q->in_addr  = in_addr;
-    q->out_addr = out_addr;
-    q->in_size  = size;
+    q->inData->clear();
+    q->outData->clear();
+    q->self = (unsigned int)q;
+    q->param_size = 0;
+
     q->wait_me  = NULL;
     q->wait_i   = NULL;
     q->post_func = NULL;
@@ -80,40 +91,20 @@
 void
 HTaskInfo::destroy(void)
 {
-    HTaskPtr q;
+    HTaskPtr q, tmp; 
 
+#if 1
+    q = htaskPool;
+    while (q) {
+	tmp = q->next;
+	free(q);
+	q = tmp;
+    }
+#else
     for (q = htaskPool; q; q = q->next) {
 	free(q);
     }
+#endif
+
     freeHTask = htaskPool = NULL;
 }
-
-
-/**
- * manager->set_task_depend(task1, task2); // task2 は task1 の終了を待つ
- *
- * ってやるより
- *
- * task2->set_depend(task1);
- *
- * ってやったほうがわかりやすいよねー的な話し合いで
- * 下のようなAPIを作りました
- */
-
-void
-HTask::spawn(void)
-{
-    mimpl->spawn_task(this);
-}
-
-void
-HTask::set_depend(HTaskPtr master)
-{
-    mimpl->set_task_depend(master, this);
-}
-
-void
-HTask::set_cpu(CPU_TYPE type)
-{
-    mimpl->set_task_cpu(this, type);
-}