annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
1 #include <stdio.h>
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
2 #include <stdlib.h>
63
54355e641172 *** empty log message ***
gongo
parents: 54
diff changeset
3 #include "TaskManagerImpl.h"
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
4 #include "HTaskInfo.h"
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
5
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
6 HTaskInfo::HTaskInfo(void)
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
7 :htaskPool(NULL), freeHTask(NULL) {}
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
8
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
9 HTaskInfo::~HTaskInfo(void) { destroy(); }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
10
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
11 int
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
12 HTaskInfo::init(int num)
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
13 {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
14 if (htaskPool == NULL) {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
15 return extend_pool(num);
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
16 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
17 return 0;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
18 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
19
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
20 /**
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
21 * Fix me
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
22 * extend できる限界を設定するべき?
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
23 */
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
24 int
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
25 HTaskInfo::extend_pool(int num)
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
26 {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
27 HTaskPtr q = NULL;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
28
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
29 q = (HTaskPtr)malloc(sizeof(HTask)*(num+1));
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
30
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
31 if (q == NULL) {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
32 return -1;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
33 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
34 q->next = htaskPool;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
35 htaskPool = q;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
36
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
37 /* Connect all free queue in the pool */
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
38 for (q = htaskPool + 1; --num > 0; q++) {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
39 q->next = q + 1;
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
40 q->inData = (ListDataPtr)malloc(sizeof(ListData));
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
41 q->outData = (ListDataPtr)malloc(sizeof(ListData));
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
42 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
43 q->next = freeHTask;
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
44 q->inData = (ListDataPtr)malloc(sizeof(ListData));
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
45 q->outData = (ListDataPtr)malloc(sizeof(ListData));
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
46
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
47 freeHTask = htaskPool + 1;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
48
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
49 return 0;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
50 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
51
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
52 /**
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
53 * Task をプールから取って来て返す
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
54 *
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
55 * @param [cmd] タスクコマンド
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
56 */
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
57 HTaskPtr
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
58 HTaskInfo::create(int cmd)
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
59 {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
60 HTaskPtr q;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
61
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
62 if (freeHTask == NULL) {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
63 extend_pool(100);
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
64 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
65
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
66 q = freeHTask;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
67 freeHTask = freeHTask->next;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
68
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
69 q->command = cmd;
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
70 q->inData->clear();
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
71 q->outData->clear();
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
72 q->self = (unsigned int)q;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
73 q->param_size = 0;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
74
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
75 q->wait_me = NULL;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
76 q->wait_i = NULL;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
77 q->post_func = NULL;
63
54355e641172 *** empty log message ***
gongo
parents: 54
diff changeset
78 q->mimpl = NULL;
65
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
79 q->cpu_type = CPU_PPE;
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
80
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
81 return q;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
82 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
83
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
84 void
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
85 HTaskInfo::free(HTaskPtr q)
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
86 {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
87 q->next = freeHTask;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
88 freeHTask = q;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
89 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
90
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
91 void
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
92 HTaskInfo::destroy(void)
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
93 {
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
94 HTaskPtr q, tmp;
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
95
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
96 #if 1
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
97 q = htaskPool;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
98 while (q) {
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
99 tmp = q->next;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
100 free(q);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
101 q = tmp;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
102 }
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
103 #else
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
104 for (q = htaskPool; q; q = q->next) {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
105 free(q);
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
106 }
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
107 #endif
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
108
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
109 freeHTask = htaskPool = NULL;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
110 }