annotate TaskManager/kernel/ppe/HTaskInfo.cc @ 54:90523ccc4dff

*** empty log message ***
author gongo
date Sat, 16 Feb 2008 14:38:36 +0900
parents f154d9d07a42
children 54355e641172
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>
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
3 #include "HTaskInfo.h"
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
4
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
5 HTaskInfo::HTaskInfo(void)
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
6 :htaskPool(NULL), freeHTask(NULL) {}
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
7
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
8 HTaskInfo::~HTaskInfo(void) { destroy(); }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
9
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
10 int
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
11 HTaskInfo::init(int num)
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
12 {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
13 if (htaskPool == NULL) {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
14 return extend_pool(num);
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
15 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
16 return 0;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
17 }
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 * Fix me
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
21 * extend できる限界を設定するべき?
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
22 */
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
23 int
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
24 HTaskInfo::extend_pool(int num)
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
25 {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
26 HTaskPtr q = NULL;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
27
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
28 q = (HTaskPtr)malloc(sizeof(HTask)*(num+1));
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
29
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
30 if (q == NULL) {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
31 return -1;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
32 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
33 q->next = htaskPool;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
34 htaskPool = q;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
35
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
36 /* Connect all free queue in the pool */
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
37 for (q = htaskPool + 1; --num > 0; q++) {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
38 q->next = q + 1;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
39 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
40 q->next = freeHTask;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
41 freeHTask = htaskPool + 1;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
42
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
43 return 0;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
44 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
45
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
46 HTaskPtr
54
90523ccc4dff *** empty log message ***
gongo
parents: 46
diff changeset
47 HTaskInfo::create(int cmd, int size, DmaBuffer *in_addr, DmaBuffer *out_addr)
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
48 {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
49 HTaskPtr q;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
50
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
51 if (freeHTask == NULL) {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
52 extend_pool(100);
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
53 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
54
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
55 q = freeHTask;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
56 freeHTask = freeHTask->next;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
57
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
58 q->command = cmd;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
59 q->in_addr = in_addr;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
60 q->out_addr = out_addr;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
61 q->in_size = size;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
62 q->wait_me = NULL;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
63 q->wait_i = NULL;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
64 q->post_func = NULL;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
65
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
66 return q;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
67 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
68
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
69 void
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
70 HTaskInfo::free(HTaskPtr q)
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
71 {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
72 q->next = freeHTask;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
73 freeHTask = q;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
74 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
75
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
76 void
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
77 HTaskInfo::destroy(void)
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
78 {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
79 HTaskPtr q;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
80
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
81 for (q = htaskPool; q; q = q->next) {
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
82 free(q);
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
83 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
84 freeHTask = htaskPool = NULL;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
85 }