annotate ppe/Sys.cc @ 2:1e1b0d280427

commit
author yutaka@localhost.localdomain
date Wed, 07 Apr 2010 05:18:52 +0900
parents dcd83cefb980
children 8b4d6bf8c43d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
yutaka@localhost.localdomain
parents:
diff changeset
1 #include <stdio.h>
yutaka@localhost.localdomain
parents:
diff changeset
2 #include <stdlib.h>
yutaka@localhost.localdomain
parents:
diff changeset
3 #include "Sys.h"
yutaka@localhost.localdomain
parents:
diff changeset
4
2
yutaka@localhost.localdomain
parents: 1
diff changeset
5 task_t*
yutaka@localhost.localdomain
parents: 1
diff changeset
6 add_list(task_t *tail, task_t *task)
yutaka@localhost.localdomain
parents: 1
diff changeset
7 {
yutaka@localhost.localdomain
parents: 1
diff changeset
8
yutaka@localhost.localdomain
parents: 1
diff changeset
9 tail->head->next_task = (unsigned long long) (unsigned long) task->head;
yutaka@localhost.localdomain
parents: 1
diff changeset
10 tail->head->next_task_size = task->task_size;
yutaka@localhost.localdomain
parents: 1
diff changeset
11
yutaka@localhost.localdomain
parents: 1
diff changeset
12 task->head->next_task = 0;
yutaka@localhost.localdomain
parents: 1
diff changeset
13 task->head->next_task_size = 0;
yutaka@localhost.localdomain
parents: 1
diff changeset
14
yutaka@localhost.localdomain
parents: 1
diff changeset
15 return task;
yutaka@localhost.localdomain
parents: 1
diff changeset
16
yutaka@localhost.localdomain
parents: 1
diff changeset
17 }
yutaka@localhost.localdomain
parents: 1
diff changeset
18
yutaka@localhost.localdomain
parents: 1
diff changeset
19 void
yutaka@localhost.localdomain
parents: 1
diff changeset
20 set_pin(task_t *task, int pin_in, int pin_out)
yutaka@localhost.localdomain
parents: 1
diff changeset
21 {
yutaka@localhost.localdomain
parents: 1
diff changeset
22
yutaka@localhost.localdomain
parents: 1
diff changeset
23 task->head->pin_in = pin_in;
yutaka@localhost.localdomain
parents: 1
diff changeset
24 task->head->pin_out = pin_out;
yutaka@localhost.localdomain
parents: 1
diff changeset
25
yutaka@localhost.localdomain
parents: 1
diff changeset
26 }
yutaka@localhost.localdomain
parents: 1
diff changeset
27
0
yutaka@localhost.localdomain
parents:
diff changeset
28 int
yutaka@localhost.localdomain
parents:
diff changeset
29 size_fix(int size, int fix)
yutaka@localhost.localdomain
parents:
diff changeset
30 {
yutaka@localhost.localdomain
parents:
diff changeset
31
yutaka@localhost.localdomain
parents:
diff changeset
32 //16の倍数にする
yutaka@localhost.localdomain
parents:
diff changeset
33 size = ((size + fix -1) / fix)*fix;
yutaka@localhost.localdomain
parents:
diff changeset
34
yutaka@localhost.localdomain
parents:
diff changeset
35 return size;
yutaka@localhost.localdomain
parents:
diff changeset
36
yutaka@localhost.localdomain
parents:
diff changeset
37 }
yutaka@localhost.localdomain
parents:
diff changeset
38
yutaka@localhost.localdomain
parents:
diff changeset
39 void*
yutaka@localhost.localdomain
parents:
diff changeset
40 allocate(int size)
yutaka@localhost.localdomain
parents:
diff changeset
41 {
yutaka@localhost.localdomain
parents:
diff changeset
42
yutaka@localhost.localdomain
parents:
diff changeset
43 int alignment = 16;
yutaka@localhost.localdomain
parents:
diff changeset
44 size = size_fix(size, alignment);
yutaka@localhost.localdomain
parents:
diff changeset
45
yutaka@localhost.localdomain
parents:
diff changeset
46 void *buff;
yutaka@localhost.localdomain
parents:
diff changeset
47 posix_memalign(&buff, alignment, size);
yutaka@localhost.localdomain
parents:
diff changeset
48 return buff;
yutaka@localhost.localdomain
parents:
diff changeset
49
yutaka@localhost.localdomain
parents:
diff changeset
50 }
yutaka@localhost.localdomain
parents:
diff changeset
51
1
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
52 void
2
yutaka@localhost.localdomain
parents: 1
diff changeset
53 fix_type(task_t *task, void *buff)
1
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
54 {
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
55
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
56 char *p;
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
57 p = (char*)buff;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
58 p = p + sizeof(task_head_t);
1
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
59
2
yutaka@localhost.localdomain
parents: 1
diff changeset
60 task->head = (task_head_t*)buff;
yutaka@localhost.localdomain
parents: 1
diff changeset
61 task->input = p;
1
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
62
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
63 }
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
64
2
yutaka@localhost.localdomain
parents: 1
diff changeset
65 task_t*
yutaka@localhost.localdomain
parents: 1
diff changeset
66 task_allocate(int in_size, int out_size)
0
yutaka@localhost.localdomain
parents:
diff changeset
67 {
yutaka@localhost.localdomain
parents:
diff changeset
68
2
yutaka@localhost.localdomain
parents: 1
diff changeset
69 if (in_size % 16) {
yutaka@localhost.localdomain
parents: 1
diff changeset
70 printf("allocate in_size is not multiple of 16\n");
yutaka@localhost.localdomain
parents: 1
diff changeset
71 }
yutaka@localhost.localdomain
parents: 1
diff changeset
72
yutaka@localhost.localdomain
parents: 1
diff changeset
73 if (out_size % 16) {
yutaka@localhost.localdomain
parents: 1
diff changeset
74 printf("allocate out_size is not multiple of 16\n");
0
yutaka@localhost.localdomain
parents:
diff changeset
75 }
yutaka@localhost.localdomain
parents:
diff changeset
76
yutaka@localhost.localdomain
parents:
diff changeset
77 int alignment = 16;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
78 task_t *task = (task_t*)allocate(sizeof(task_t));
0
yutaka@localhost.localdomain
parents:
diff changeset
79
1
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
80 void *buff;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
81 void *out;
yutaka@localhost.localdomain
parents: 1
diff changeset
82
yutaka@localhost.localdomain
parents: 1
diff changeset
83 int task_size = in_size + sizeof(task_head_t);
yutaka@localhost.localdomain
parents: 1
diff changeset
84
yutaka@localhost.localdomain
parents: 1
diff changeset
85 posix_memalign(&buff, alignment, task_size);
yutaka@localhost.localdomain
parents: 1
diff changeset
86 fix_type(task, buff);
0
yutaka@localhost.localdomain
parents:
diff changeset
87
2
yutaka@localhost.localdomain
parents: 1
diff changeset
88 posix_memalign(&out, alignment, out_size);
yutaka@localhost.localdomain
parents: 1
diff changeset
89 task->head->ea_out = (unsigned long long) (unsigned long) out;
yutaka@localhost.localdomain
parents: 1
diff changeset
90 task->head->size_out = out_size;
yutaka@localhost.localdomain
parents: 1
diff changeset
91
yutaka@localhost.localdomain
parents: 1
diff changeset
92 task->task_size = task_size;
yutaka@localhost.localdomain
parents: 1
diff changeset
93
yutaka@localhost.localdomain
parents: 1
diff changeset
94
yutaka@localhost.localdomain
parents: 1
diff changeset
95 return task;
0
yutaka@localhost.localdomain
parents:
diff changeset
96
yutaka@localhost.localdomain
parents:
diff changeset
97 }