diff TaskManager/kernel/ppe/TaskManagerImpl.cc @ 54:90523ccc4dff

*** empty log message ***
author gongo
date Sat, 16 Feb 2008 14:38:36 +0900
parents 7927e00fb8e2
children 7492eb28b577
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/TaskManagerImpl.cc	Fri Feb 15 20:58:50 2008 +0900
+++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc	Sat Feb 16 14:38:36 2008 +0900
@@ -29,10 +29,8 @@
 }
 
 HTaskPtr
-TaskManagerImpl::create_task(int cmd, int size,
-			 unsigned long long in_addr, 
-			 unsigned long long out_addr,
-			 void (*func)(void))
+TaskManagerImpl::create_task(int cmd, int size, DmaBuffer *in_addr, 
+			     DmaBuffer *out_addr, void (*func)(void))
 {
     HTaskPtr new_task;
 
@@ -98,8 +96,23 @@
 
 	task = &list->tasks[list->length++];
 	task->command  = htask->command;
-	task->in_addr  = htask->in_addr;
-	task->out_addr = htask->out_addr;
+
+	// Fix me !!!!!
+	// ださい
+	// かっこいい class 判定がないものか。typeinfoだっけ?
+	// in,out にあるのが DmaBuffer 以外だったら通信させない決まりにしたい
+	if (htask->in_addr != 0) {
+	    //task->in_addr = (uint32)(htask->in_addr->get_buffer());
+	    htask->in_addr->get_buffer(&task->in_addr);
+	} else {
+	    task->in_addr = 0;
+	}
+	if (htask->in_addr != 0) {
+	    //task->out_addr = (uint32)(htask->out_addr->get_buffer());
+	    htask->out_addr->get_buffer(&task->out_addr);
+	} else {
+	    task->out_addr = 0;
+	}
 	task->in_size  = htask->in_size;
 	task->self = htask;
 
@@ -174,3 +187,12 @@
 
     return ret;
 }
+
+/**
+ * 型名指定するには template だけど...
+ */
+DmaBuffer*
+TaskManagerImpl::allocate(int size)
+{
+    return new DmaBuffer(size);
+}