Mercurial > hg > Game > Cerium
view TaskManager/kernel/ppe/Task.cc @ 689:ecf63089f5bb draft
Task Array generation worked.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 06 Dec 2009 23:03:28 +0900 |
parents | 77c89477daa8 |
children | 4b6242d03512 |
line wrap: on
line source
#include "Task.h" // #include "SchedTask.h" it includes #define Task #ifndef SIMPLE_TASK /** * タスクの入力データを追加する * * @param [addr] add input data * @param [size] size of data at [addr] * * @return if ([ret] == 0) ? success : failuer; */ int Task::add_inData_t(memaddr addr, int size) { return add_data(inData, addr, size); } /** * タスクの出力先を追加する * * @param[in] addr Address at out data * @param[in] size Size of data transfer * * @return if ([ret] == 0) ? success : failuer; */ int Task::add_outData_t(memaddr addr, int size) { return add_data(outData, addr, size); } /** * エラーの時に -1 を返す、ってことするよりは * perror みたいにしたほうがわかりやすいかな。 * * 現在は MAX_PARAMS 個まで。 * 本当は、MAX_PARAMS個以上にすると task->param[] には アドレスが入り * そのアドレスは メインメモリでアロケートされた int の集合。 */ // こちらのAPIは、受け側と出力側での対応を良く見れない。廃止の方向。 int Task::add_param_t(memaddr _param) { if (param_size >= MAX_PARAMS) return -1; this->param[param_size++] = _param; return 0; } int Task::set_param_t(int index, memaddr _param) { if (index >= MAX_PARAMS) return -1; this->param[index] = _param; return 0; } /* * エラーの時に -1 を返す、ってことするよりは * perror みたいにしたほうがわかりやすいかな。 */ int Task::add_data(ListData& list, memaddr 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++]; #ifdef __CERIUM_CELL__ elm->addr = (uint32)(unsigned long)addr; #else elm->addr = addr; #endif elm->size = size; return 0; } #else /* ifdef SIMPLE_TASK */ void Task::set_inData_t( int index, memaddr addr, int size) { ListElementPtr elm = (ListElementPtr) inData(0); #ifdef __CERIUM_CELL__ elm->addr = (uint32)(unsigned long)addr; #else elm->addr = addr; #endif elm->size = size; } void Task::set_outData_t(int index, memaddr addr, int size) { ListElementPtr elm = (ListElementPtr) outData(0); #ifdef __CERIUM_CELL__ elm->addr = (uint32)(unsigned long)addr; #else elm->addr = addr; #endif elm->size = size; } void Task::print() { printf("task id %d task size = %d param size %d " "inData size %d " "outData size %d\n", command, size(), param_size, inData_size, outData_size ); for(int i=0; i< param_size && i<5; i++) { printf("param %d = 0x%ld\n", i, (long)param(i)); } } #endif /* end */