annotate ppe/Sys.cc @ 8:ec2c1003f9b6 default tip

fix mandel
author yutaka@localhost.localdomain
date Mon, 12 Apr 2010 23:58:19 +0900
parents 8b4d6bf8c43d
children
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*
3
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
6 entry_head(task_head_t *head)
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
7 {
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
8
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
9 head->ea_out = 0;
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
10 head->size_in = 0;
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
11 head->size_out = 0;
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
12 head->pin_in = 0;
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
13 head->pin_out = 0;
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
14
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
15 task_t *tail = (task_t*)allocate(sizeof(task_t));
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
16 tail->head = head;
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
17 tail->input = NULL;
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
18
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
19 return tail;
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
20
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
21 }
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
22
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
23 task_t*
2
yutaka@localhost.localdomain
parents: 1
diff changeset
24 add_list(task_t *tail, task_t *task)
yutaka@localhost.localdomain
parents: 1
diff changeset
25 {
yutaka@localhost.localdomain
parents: 1
diff changeset
26
yutaka@localhost.localdomain
parents: 1
diff changeset
27 tail->head->next_task = (unsigned long long) (unsigned long) task->head;
3
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
28 tail->head->next_task_size = task->head->size_in + sizeof(task_head_t);
2
yutaka@localhost.localdomain
parents: 1
diff changeset
29
yutaka@localhost.localdomain
parents: 1
diff changeset
30 task->head->next_task = 0;
yutaka@localhost.localdomain
parents: 1
diff changeset
31 task->head->next_task_size = 0;
yutaka@localhost.localdomain
parents: 1
diff changeset
32
yutaka@localhost.localdomain
parents: 1
diff changeset
33 return task;
yutaka@localhost.localdomain
parents: 1
diff changeset
34
yutaka@localhost.localdomain
parents: 1
diff changeset
35 }
yutaka@localhost.localdomain
parents: 1
diff changeset
36
yutaka@localhost.localdomain
parents: 1
diff changeset
37 void
yutaka@localhost.localdomain
parents: 1
diff changeset
38 set_pin(task_t *task, int pin_in, int pin_out)
yutaka@localhost.localdomain
parents: 1
diff changeset
39 {
yutaka@localhost.localdomain
parents: 1
diff changeset
40
yutaka@localhost.localdomain
parents: 1
diff changeset
41 task->head->pin_in = pin_in;
yutaka@localhost.localdomain
parents: 1
diff changeset
42 task->head->pin_out = pin_out;
yutaka@localhost.localdomain
parents: 1
diff changeset
43
yutaka@localhost.localdomain
parents: 1
diff changeset
44 }
yutaka@localhost.localdomain
parents: 1
diff changeset
45
0
yutaka@localhost.localdomain
parents:
diff changeset
46 int
yutaka@localhost.localdomain
parents:
diff changeset
47 size_fix(int size, int fix)
yutaka@localhost.localdomain
parents:
diff changeset
48 {
yutaka@localhost.localdomain
parents:
diff changeset
49
yutaka@localhost.localdomain
parents:
diff changeset
50 //16の倍数にする
yutaka@localhost.localdomain
parents:
diff changeset
51 size = ((size + fix -1) / fix)*fix;
yutaka@localhost.localdomain
parents:
diff changeset
52
yutaka@localhost.localdomain
parents:
diff changeset
53 return size;
yutaka@localhost.localdomain
parents:
diff changeset
54
yutaka@localhost.localdomain
parents:
diff changeset
55 }
yutaka@localhost.localdomain
parents:
diff changeset
56
yutaka@localhost.localdomain
parents:
diff changeset
57 void*
yutaka@localhost.localdomain
parents:
diff changeset
58 allocate(int size)
yutaka@localhost.localdomain
parents:
diff changeset
59 {
yutaka@localhost.localdomain
parents:
diff changeset
60
yutaka@localhost.localdomain
parents:
diff changeset
61 int alignment = 16;
yutaka@localhost.localdomain
parents:
diff changeset
62 size = size_fix(size, alignment);
yutaka@localhost.localdomain
parents:
diff changeset
63
yutaka@localhost.localdomain
parents:
diff changeset
64 void *buff;
yutaka@localhost.localdomain
parents:
diff changeset
65 posix_memalign(&buff, alignment, size);
yutaka@localhost.localdomain
parents:
diff changeset
66 return buff;
yutaka@localhost.localdomain
parents:
diff changeset
67
yutaka@localhost.localdomain
parents:
diff changeset
68 }
yutaka@localhost.localdomain
parents:
diff changeset
69
8
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
70 void*
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
71 get_addr(void *buff, int size)
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
72 {
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
73
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
74 char* p;
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
75 p = (char*)buff;
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
76 p = p + size;
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
77
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
78 return p;
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
79
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
80 }
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
81
1
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
82 void
2
yutaka@localhost.localdomain
parents: 1
diff changeset
83 fix_type(task_t *task, void *buff)
1
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
84 {
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
85
8
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
86 void *p = get_addr(buff, sizeof(task_head_t));
1
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
87
2
yutaka@localhost.localdomain
parents: 1
diff changeset
88 task->head = (task_head_t*)buff;
yutaka@localhost.localdomain
parents: 1
diff changeset
89 task->input = p;
1
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
90
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
91 }
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
92
2
yutaka@localhost.localdomain
parents: 1
diff changeset
93 task_t*
yutaka@localhost.localdomain
parents: 1
diff changeset
94 task_allocate(int in_size, int out_size)
0
yutaka@localhost.localdomain
parents:
diff changeset
95 {
yutaka@localhost.localdomain
parents:
diff changeset
96
8
ec2c1003f9b6 fix mandel
yutaka@localhost.localdomain
parents: 3
diff changeset
97 if (in_size % 16 || in_size + sizeof(task_head_t) > MAX_DMA_SIZE ) {
2
yutaka@localhost.localdomain
parents: 1
diff changeset
98 printf("allocate in_size is not multiple of 16\n");
yutaka@localhost.localdomain
parents: 1
diff changeset
99 }
yutaka@localhost.localdomain
parents: 1
diff changeset
100
yutaka@localhost.localdomain
parents: 1
diff changeset
101 if (out_size % 16) {
yutaka@localhost.localdomain
parents: 1
diff changeset
102 printf("allocate out_size is not multiple of 16\n");
0
yutaka@localhost.localdomain
parents:
diff changeset
103 }
yutaka@localhost.localdomain
parents:
diff changeset
104
yutaka@localhost.localdomain
parents:
diff changeset
105 int alignment = 16;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
106 task_t *task = (task_t*)allocate(sizeof(task_t));
0
yutaka@localhost.localdomain
parents:
diff changeset
107
1
dcd83cefb980 check , ppe_only, show time , function add.
yutaka@localhost.localdomain
parents: 0
diff changeset
108 void *buff;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
109 void *out;
yutaka@localhost.localdomain
parents: 1
diff changeset
110
yutaka@localhost.localdomain
parents: 1
diff changeset
111 int task_size = in_size + sizeof(task_head_t);
yutaka@localhost.localdomain
parents: 1
diff changeset
112
3
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
113 if (task_size > MAX_DMA_SIZE) {
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
114 printf("dma send size over %d\n",task_size);
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
115 }
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
116
2
yutaka@localhost.localdomain
parents: 1
diff changeset
117 posix_memalign(&buff, alignment, task_size);
yutaka@localhost.localdomain
parents: 1
diff changeset
118 fix_type(task, buff);
0
yutaka@localhost.localdomain
parents:
diff changeset
119
2
yutaka@localhost.localdomain
parents: 1
diff changeset
120 posix_memalign(&out, alignment, out_size);
yutaka@localhost.localdomain
parents: 1
diff changeset
121 task->head->ea_out = (unsigned long long) (unsigned long) out;
3
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
122
8b4d6bf8c43d add entry_head function
yutaka@localhost.localdomain
parents: 2
diff changeset
123 task->head->size_in = in_size;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
124 task->head->size_out = out_size;
yutaka@localhost.localdomain
parents: 1
diff changeset
125
yutaka@localhost.localdomain
parents: 1
diff changeset
126 return task;
0
yutaka@localhost.localdomain
parents:
diff changeset
127
yutaka@localhost.localdomain
parents:
diff changeset
128 }