Mercurial > hg > Members > kono > Cerium
comparison 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 |
comparison
equal
deleted
inserted
replaced
108:6f3b3dd3c095 | 109:5c194c71eca8 |
---|---|
1 #include "Task.h" | |
2 | |
3 /** | |
4 * タスクの入力データを追加する | |
5 * | |
6 * @param [addr] add input data | |
7 * @param [size] size of data at [addr] | |
8 * | |
9 * @return if ([ret] == 0) ? success : failuer; | |
10 */ | |
11 int | |
12 Task::add_inData_t(unsigned int addr, int size) | |
13 { | |
14 return add_data(this->inData, addr, size); | |
15 } | |
16 | |
17 int | |
18 Task::add_outData_t(unsigned int addr, int size) | |
19 { | |
20 return add_data(this->outData, addr, size); | |
21 } | |
22 | |
23 /** | |
24 * エラーの時に -1 を返す、ってことするよりは | |
25 * perror みたいにしたほうがわかりやすいかな。 | |
26 * | |
27 * 現在は 3 個まで。 | |
28 * 本当は、3個以上にすると task->param[] には アドレスが入り | |
29 * そのアドレスは メインメモリでアロケートされた int の集合。 | |
30 */ | |
31 int | |
32 Task::add_param(int _param) | |
33 { | |
34 if (param_size >= MAX_PARAMS) return -1; | |
35 | |
36 this->param[param_size++] = _param; | |
37 return 0; | |
38 } | |
39 | |
40 /* | |
41 * エラーの時に -1 を返す、ってことするよりは | |
42 * perror みたいにしたほうがわかりやすいかな。 | |
43 */ | |
44 int | |
45 Task::add_data(ListDataPtr list, uint32 addr, int size) | |
46 { | |
47 if (list->length >= MAX_LIST_DMA_SIZE) return -1; | |
48 | |
49 list->bound[list->length] = list->size; | |
50 | |
51 // size でも制限かけるべき? | |
52 list->size += size; | |
53 | |
54 ListElementPtr elm = &list->element[list->length++]; | |
55 elm->addr = addr; | |
56 elm->size = size; | |
57 | |
58 return 0; | |
59 } |