Mercurial > hg > Members > kono > Cerium
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; +}