diff TaskManager/kernel/ppe/TaskManagerImpl.cc @ 3:2356238ebea7

*** empty log message ***
author gongo
date Tue, 05 Feb 2008 20:22:50 +0900
parents
children 75f184d16fa5
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc	Tue Feb 05 20:22:50 2008 +0900
@@ -0,0 +1,56 @@
+#include "TaskManagerImpl.h"
+
+void
+noaction(void)
+{
+}
+
+TaskManagerImpl::TaskManagerImpl(int num)
+{
+    machineNum = num;
+}
+
+HTaskPtr
+TaskManagerImpl::create_task(int cmd, int size,
+			 unsigned long long in_addr, 
+			 unsigned long long out_addr,
+			 void (*func)(void))
+{
+    HTaskPtr new_task;
+
+    new_task = taskInfo->get_free_task(cmd, size, in_addr, out_addr);
+
+    if (func == NULL) {
+	new_task->post_func = noaction;
+    } else {
+	new_task->post_func = func;
+    }
+
+    return new_task;
+}
+
+/**
+ * task の依存関係を設定
+ * master task が終わってから、slave task を実行するように
+ */
+void
+TaskManagerImpl::set_task_depend(HTaskPtr master, HTaskPtr slave)
+{
+    TaskQueuePtr m, s;
+
+    m = taskInfo->get_free_taskQueue(master);
+    s = taskInfo->get_free_taskQueue(slave);
+
+    master->wait_me = append_taskQueue(master->wait_me, s);
+    slave->wait_i = append_taskQueue(slave->wait_i, m);
+}
+
+void
+TaskManagerImpl::run_task(HTaskPtr task)
+{
+    if (task->wait_i == NULL) {
+	taskInfo->append_activeTask(task);
+    } else {
+	taskInfo->append_waitTask(task);	
+    }
+}