diff TaskManager/kernel/ppe/Task.cc @ 109:5c194c71eca8

Cerium cvs version
author gongo@gendarme.local
date Wed, 12 Nov 2008 17:39:33 +0900
parents
children a4d17bc4efef
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/Task.cc	Wed Nov 12 17:39:33 2008 +0900
@@ -0,0 +1,59 @@
+#include "Task.h"
+
+/**
+ * タスクの入力データを追加する
+ *
+ * @param [addr] add input data
+ * @param [size] size of data at [addr]
+ *
+ * @return if ([ret] == 0) ? success : failuer;
+ */
+int
+Task::add_inData_t(unsigned int addr, int size)
+{
+    return add_data(this->inData, addr, size);
+}
+
+int
+Task::add_outData_t(unsigned int addr, int size)
+{
+    return add_data(this->outData, addr, size);
+}
+
+/**
+ * エラーの時に -1 を返す、ってことするよりは
+ * perror みたいにしたほうがわかりやすいかな。
+ *
+ * 現在は 3 個まで。
+ * 本当は、3個以上にすると task->param[] には アドレスが入り
+ * そのアドレスは メインメモリでアロケートされた int の集合。
+ */
+int
+Task::add_param(int _param)
+{
+    if (param_size >= MAX_PARAMS) return -1;
+    
+    this->param[param_size++] = _param;
+    return 0;
+}
+
+/*
+ * エラーの時に -1 を返す、ってことするよりは
+ * perror みたいにしたほうがわかりやすいかな。
+ */
+int
+Task::add_data(ListDataPtr list, uint32 addr, int size)
+{
+    if (list->length >= MAX_LIST_DMA_SIZE) return -1;
+
+    list->bound[list->length] = list->size;
+
+    // size でも制限かけるべき?
+    list->size += size;
+
+    ListElementPtr elm = &list->element[list->length++];
+    elm->addr = addr;
+    elm->size = size;
+
+    return 0;
+}