Mercurial > hg > Game > Cerium
comparison TaskManager/kernel/ppe/HTaskInfo.cc @ 109:028ffc9c0375 draft
Cerium cvs version
author | gongo@gendarme.local |
---|---|
date | Wed, 12 Nov 2008 17:39:33 +0900 |
parents | 504899860e66 |
children | 768452fab95e |
comparison
equal
deleted
inserted
replaced
108:6f3b3dd3c095 | 109:028ffc9c0375 |
---|---|
35 htaskPool = q; | 35 htaskPool = q; |
36 | 36 |
37 /* Connect all free queue in the pool */ | 37 /* Connect all free queue in the pool */ |
38 for (q = htaskPool + 1; --num > 0; q++) { | 38 for (q = htaskPool + 1; --num > 0; q++) { |
39 q->next = q + 1; | 39 q->next = q + 1; |
40 q->inData = (ListDataPtr)malloc(sizeof(ListData)); | |
41 q->outData = (ListDataPtr)malloc(sizeof(ListData)); | |
40 } | 42 } |
41 q->next = freeHTask; | 43 q->next = freeHTask; |
44 q->inData = (ListDataPtr)malloc(sizeof(ListData)); | |
45 q->outData = (ListDataPtr)malloc(sizeof(ListData)); | |
46 | |
42 freeHTask = htaskPool + 1; | 47 freeHTask = htaskPool + 1; |
43 | 48 |
44 return 0; | 49 return 0; |
45 } | 50 } |
46 | 51 |
52 /** | |
53 * Task をプールから取って来て返す | |
54 * | |
55 * @param [cmd] タスクコマンド | |
56 */ | |
47 HTaskPtr | 57 HTaskPtr |
48 //HTaskInfo::create(int cmd, int size, DmaBuffer *in_addr, DmaBuffer *out_addr) | 58 HTaskInfo::create(int cmd) |
49 HTaskInfo::create(int cmd, int size, unsigned int in_addr, unsigned int out_addr) | |
50 { | 59 { |
51 HTaskPtr q; | 60 HTaskPtr q; |
52 | 61 |
53 if (freeHTask == NULL) { | 62 if (freeHTask == NULL) { |
54 extend_pool(100); | 63 extend_pool(100); |
56 | 65 |
57 q = freeHTask; | 66 q = freeHTask; |
58 freeHTask = freeHTask->next; | 67 freeHTask = freeHTask->next; |
59 | 68 |
60 q->command = cmd; | 69 q->command = cmd; |
61 q->in_addr = in_addr; | 70 q->inData->clear(); |
62 q->out_addr = out_addr; | 71 q->outData->clear(); |
63 q->in_size = size; | 72 q->self = (unsigned int)q; |
73 q->param_size = 0; | |
74 | |
64 q->wait_me = NULL; | 75 q->wait_me = NULL; |
65 q->wait_i = NULL; | 76 q->wait_i = NULL; |
66 q->post_func = NULL; | 77 q->post_func = NULL; |
67 q->mimpl = NULL; | 78 q->mimpl = NULL; |
68 q->cpu_type = CPU_PPE; | 79 q->cpu_type = CPU_PPE; |
78 } | 89 } |
79 | 90 |
80 void | 91 void |
81 HTaskInfo::destroy(void) | 92 HTaskInfo::destroy(void) |
82 { | 93 { |
83 HTaskPtr q; | 94 HTaskPtr q, tmp; |
84 | 95 |
96 #if 1 | |
97 q = htaskPool; | |
98 while (q) { | |
99 tmp = q->next; | |
100 free(q); | |
101 q = tmp; | |
102 } | |
103 #else | |
85 for (q = htaskPool; q; q = q->next) { | 104 for (q = htaskPool; q; q = q->next) { |
86 free(q); | 105 free(q); |
87 } | 106 } |
107 #endif | |
108 | |
88 freeHTask = htaskPool = NULL; | 109 freeHTask = htaskPool = NULL; |
89 } | 110 } |
90 | |
91 | |
92 /** | |
93 * manager->set_task_depend(task1, task2); // task2 は task1 の終了を待つ | |
94 * | |
95 * ってやるより | |
96 * | |
97 * task2->set_depend(task1); | |
98 * | |
99 * ってやったほうがわかりやすいよねー的な話し合いで | |
100 * 下のようなAPIを作りました | |
101 */ | |
102 | |
103 void | |
104 HTask::spawn(void) | |
105 { | |
106 mimpl->spawn_task(this); | |
107 } | |
108 | |
109 void | |
110 HTask::set_depend(HTaskPtr master) | |
111 { | |
112 mimpl->set_task_depend(master, this); | |
113 } | |
114 | |
115 void | |
116 HTask::set_cpu(CPU_TYPE type) | |
117 { | |
118 mimpl->set_task_cpu(this, type); | |
119 } |