Mercurial > hg > Game > Cerium
annotate TaskManager/Fifo/FifoDmaManager.cc @ 2050:26dd777ba95d draft
add User API
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 28 Jan 2016 15:43:36 +0900 |
parents | 5238ca826d6e |
children |
rev | line source |
---|---|
109 | 1 #include <stdio.h> |
2 #include <stdlib.h> | |
3 #include <string.h> | |
4 #include "FifoDmaManager.h" | |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
5 #include "Scheduler.h" |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
6 #include "TaskManagerImpl.h" |
1400 | 7 #include "gettime.h" |
1888 | 8 #include "MailManager.h" |
9 | |
10 void | |
11 FifoDmaManager::init() | |
12 { | |
13 mail_queue1 = new MailManager(); | |
14 mail_queue2 = new MailManager(); | |
15 } | |
109 | 16 |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
17 void * |
1417 | 18 FifoDmaManager::dma_load(Scheduler *s, memaddr addr, uint32 size, uint32 mask) |
19 { | |
20 void *buf = 0; | |
21 if (size == 0) return buf; | |
22 | |
23 unsigned long long wait = 0; | |
1718 | 24 (*this->start_dmawait_profile)(&start_time); |
1417 | 25 |
26 buf = s->manager->allocate(size); | |
27 memcpy(buf, (void*)addr, size); | |
28 | |
1718 | 29 (*this->end_dmawait_profile)(&wait,&start_time,&stop_time); |
1417 | 30 global_load_time += wait; |
31 dma_load_time += wait; | |
32 | |
33 return buf; | |
34 } | |
35 | |
36 void * | |
37 FifoDmaManager::dma_load1(void *buf, memaddr addr, uint32 size, uint32 mask) | |
109 | 38 { |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
39 if (size == 0) return buf; |
1309 | 40 |
1417 | 41 unsigned long long wait = 0; |
1718 | 42 (*this->start_dmawait_profile)(&start_time); |
1309 | 43 |
109 | 44 memcpy(buf, (void*)addr, size); |
1309 | 45 |
1718 | 46 (*this->end_dmawait_profile)(&wait,&start_time,&stop_time); |
1417 | 47 global_load_time += wait; |
48 dma_load_time += wait; | |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
49 return buf; |
109 | 50 } |
51 | |
1417 | 52 |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
53 void * |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
54 FifoDmaManager::get_writebuf(Scheduler *s,memaddr addr, uint32 size) |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
55 { |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
56 void *b = s->manager->allocate(size); |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
57 return b; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
58 } |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
59 |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
60 void * |
603
57ec231bc8ac
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
61 FifoDmaManager::dma_store(void *buf, memaddr addr, uint32 size, uint32 mask) |
109 | 62 { |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
63 if (size == 0) return buf; |
1309 | 64 |
1417 | 65 unsigned long long wait = 0; |
1718 | 66 (*this->start_dmawait_profile)(&start_time); |
1309 | 67 |
1417 | 68 memcpy((void*)addr, buf, size); |
1309 | 69 |
1718 | 70 (*this->end_dmawait_profile)(&wait,&start_time,&stop_time); |
1417 | 71 global_store_time += wait; |
72 dma_store_time += wait; | |
1309 | 73 |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
74 return buf; |
109 | 75 } |
76 | |
77 /** | |
321 | 78 * mask で設定した DMA 転送の完了を待つ |
109 | 79 */ |
80 void | |
81 FifoDmaManager::dma_wait(uint32 mask) | |
82 { | |
83 } | |
84 | |
85 | |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
86 void * |
1417 | 87 FifoDmaManager::dma_loadList(Scheduler *s, ListDataPtr list, uint32 mask) |
109 | 88 { |
1417 | 89 unsigned long long wait = 0; |
1718 | 90 (*this->start_dmawait_profile)(&start_time); |
1309 | 91 |
109 | 92 int list_size = list->length; |
602
92b0d490e839
64bit mode try... not worked.
e075740@nw0740.st.ie.u-ryukyu.ac.jp
parents:
321
diff
changeset
|
93 long bound; |
109 | 94 |
1417 | 95 void *buff = s->manager->allocate(list->size); |
602
92b0d490e839
64bit mode try... not worked.
e075740@nw0740.st.ie.u-ryukyu.ac.jp
parents:
321
diff
changeset
|
96 bound = (long)(buff); |
109 | 97 |
98 for (int i = 0; i < list_size; i++) { | |
1401 | 99 ListElementPtr elm = &list->element[i]; |
100 memcpy((void*)bound, (void*)elm->addr, elm->size); | |
101 bound += elm->size; | |
109 | 102 } |
1309 | 103 |
1718 | 104 (*this->end_dmawait_profile)(&wait,&start_time,&stop_time); |
1417 | 105 global_load_time += wait; |
106 dma_loadList_time += wait; | |
1309 | 107 |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
108 return buff; |
109 | 109 } |
110 | |
111 void | |
112 FifoDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask) | |
113 { | |
1417 | 114 unsigned long long wait = 0; |
1718 | 115 (*this->start_dmawait_profile)(&start_time); |
1309 | 116 |
109 | 117 int list_size = list->length; |
603
57ec231bc8ac
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
118 memaddr bound; |
109 | 119 |
603
57ec231bc8ac
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
120 bound = (memaddr)(buff); |
109 | 121 |
122 for (int i = 0; i < list_size; i++) { | |
1401 | 123 ListElementPtr elm = &list->element[i]; |
124 memcpy((void*)elm->addr, (void*)bound, elm->size); | |
125 bound += elm->size; | |
1111 | 126 } |
1309 | 127 |
1718 | 128 (*this->end_dmawait_profile)(&wait,&start_time,&stop_time); |
1417 | 129 global_store_time += wait; |
130 dma_storeList_time += wait; | |
1309 | 131 } |
132 | |
133 void | |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
134 FifoDmaManager::mail_write(memaddr data) |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
135 { |
1417 | 136 unsigned long long wait = 0; |
1718 | 137 (*this->start_dmawait_profile)(&start_time); |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
138 |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
139 mail_queue1->send(data); |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
140 |
1718 | 141 (*this->end_dmawait_profile)(&wait,&start_time,&stop_time); |
1417 | 142 global_mail_time += wait; |
143 mail_write_time += wait; | |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
144 } |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
145 |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
146 void |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
147 FifoDmaManager::mail_write_finish_list(memaddr data) |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
148 { |
1417 | 149 unsigned long long wait = 0; |
1718 | 150 (*this->start_dmawait_profile)(&start_time); |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
151 |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
152 mail_queue1->send(data); |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
153 |
1718 | 154 (*this->end_dmawait_profile)(&wait,&start_time,&stop_time); |
1417 | 155 global_mail_time += wait; |
156 mail_write_time += wait; | |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
157 } |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
158 |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
159 memaddr |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
160 FifoDmaManager::mail_read() |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
161 { |
1417 | 162 unsigned long long wait = 0; |
1718 | 163 (*this->start_dmawait_profile)(&start_time); |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
164 |
1417 | 165 memaddr data; |
166 data = mail_queue2->recv(); | |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
167 |
1718 | 168 (*this->end_dmawait_profile)(&wait,&start_time,&stop_time); |
1417 | 169 global_mail_time += wait; |
170 mail_read_time += wait; | |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
171 |
1417 | 172 return data; |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
173 } |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
174 |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
175 memaddr |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
176 FifoDmaManager::task_list_mail_read() |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
177 { |
1417 | 178 unsigned long long wait = 0; |
1718 | 179 (*this->start_dmawait_profile)(&start_time); |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
180 |
1417 | 181 memaddr data; |
182 data = mail_queue2->recv(); | |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
183 |
1718 | 184 (*this->end_dmawait_profile)(&wait,&start_time,&stop_time); |
1417 | 185 global_mail_time += wait; |
186 mail_read_time += wait; | |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
187 |
1417 | 188 return data; |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
189 } |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
190 |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
191 void |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
192 FifoDmaManager::mail_write_from_host(memaddr data) |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
193 { |
1417 | 194 unsigned long long wait = 0; |
1718 | 195 (*this->start_dmawait_profile)(&start_time); |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
196 |
1417 | 197 mail_queue2->send(data); |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
198 |
1718 | 199 (*this->end_dmawait_profile)(&wait,&start_time,&stop_time); |
1417 | 200 global_mail_time += wait; |
201 mail_write_from_host_time += wait; | |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
202 } |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
203 |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
204 memaddr |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
205 FifoDmaManager::mail_read_from_host() |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
206 { |
1417 | 207 unsigned long long wait = 0; |
1718 | 208 (*this->start_dmawait_profile)(&start_time); |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
209 |
1417 | 210 memaddr data; |
211 data = mail_queue1->recv(); | |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
212 |
1718 | 213 (*this->end_dmawait_profile)(&wait,&start_time,&stop_time); |
1417 | 214 global_mail_time += wait; |
215 mail_read_from_host_time += wait; | |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
216 |
1417 | 217 return data; |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
218 } |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
219 |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
220 int |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
221 FifoDmaManager::has_mail_from_host() |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
222 { |
1461 | 223 return mail_queue1->count(); |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
224 } |
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
225 |
1698 | 226 void |
1718 | 227 do_start_dmawait_profile(unsigned long long *start) |
1698 | 228 { |
1718 | 229 *start = gettime(); |
1698 | 230 } |
231 | |
232 void | |
1718 | 233 do_end_dmawait_profile(unsigned long long *counter,unsigned long long *start,unsigned long long *stop) |
1698 | 234 { |
1718 | 235 *stop = gettime(); |
236 *counter += *stop - *start; | |
1698 | 237 } |
238 | |
1718 | 239 void null_start_dmawait_profile(unsigned long long *start) {} |
240 void null_end_dmawait_profile(unsigned long long *counter,unsigned long long *start,unsigned long long *stop) {} | |
1698 | 241 |
1371
66ae94572433
add mail_time in profiler
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1369
diff
changeset
|
242 void |
1309 | 243 FifoDmaManager::start_profile() |
244 { | |
1698 | 245 global_start_time = gettime(); |
1417 | 246 global_busy_time = 0; |
247 global_load_time = 0; | |
248 global_store_time = 0; | |
249 global_mail_time = 0; | |
250 dma_load_time = 0; | |
251 dma_store_time = 0; | |
252 dma_loadList_time = 0; | |
253 dma_storeList_time = 0; | |
254 mail_read_time = 0; | |
255 mail_write_time = 0; | |
256 mail_read_from_host_time = 0; | |
257 mail_write_from_host_time = 0; | |
1309 | 258 |
1698 | 259 start_dmawait_profile = &do_start_dmawait_profile; |
260 end_dmawait_profile = &do_end_dmawait_profile; | |
1718 | 261 (*this->start_dmawait_profile)(&start_time); |
1309 | 262 } |
263 | |
264 void | |
265 FifoDmaManager::stop_profile() | |
266 { | |
1698 | 267 start_dmawait_profile = &null_start_dmawait_profile; |
268 end_dmawait_profile = &null_end_dmawait_profile; | |
1309 | 269 } |
270 | |
271 void | |
272 FifoDmaManager::show_dma_wait(Scheduler *s, int cpu) | |
273 { | |
1698 | 274 unsigned long long all_time = gettime() - global_start_time; |
1718 | 275 |
1417 | 276 double busy = ((double)global_busy_time)/((double)all_time)*100.0; |
277 double load = ((double)global_load_time)/((double)all_time)*100.0; | |
278 double store = ((double)global_store_time)/((double)all_time)*100.0; | |
279 double mail = ((double)global_mail_time)/((double)all_time)*100.0; | |
280 double read = ((double)mail_read_time)/((double)all_time)*100.0; | |
281 double write = ((double)mail_write_time)/((double)all_time)*100.0; | |
282 double read_from_host = ((double)mail_read_from_host_time)/((double)all_time)*100.0; | |
283 double write_from_host = ((double)mail_write_from_host_time)/((double)all_time)*100.0; | |
1309 | 284 |
285 | |
1417 | 286 s->printf("cpu%d:\n busy_time = %lld(%.3g%%)\n" |
1718 | 287 " load_time = %lld(%.3g%%), " |
288 " store_time = %lld(%.3g%%), " | |
289 " mail_time = %lld(%.3g%%) \n" | |
290 " mail_read_time = %lld(%.3g%%), " | |
291 " mail_write_time = %lld(%.3g%%)\n" | |
292 " mail_read_from_host_time = %lld(%.3g%%), " | |
293 " mail_write_from_host_time = %lld(%.3g%%)\n" | |
294 " all_time = %lld\n" | |
295 ,cpu, global_busy_time, busy, | |
296 global_load_time, load, | |
297 global_store_time, store, | |
298 global_mail_time, mail, | |
299 mail_read_time, read, | |
300 mail_write_time, write, | |
301 mail_read_from_host_time, read_from_host, | |
302 mail_write_from_host_time, write_from_host, | |
303 all_time); | |
304 | |
1417 | 305 global_busy_time = 0; |
306 global_load_time = 0; | |
307 global_store_time = 0; | |
308 global_mail_time = 0; | |
309 dma_load_time = 0; | |
310 dma_store_time = 0; | |
311 dma_loadList_time = 0; | |
312 dma_storeList_time = 0; | |
313 mail_read_time = 0; | |
314 mail_write_time = 0; | |
315 mail_read_from_host_time = 0; | |
316 mail_write_from_host_time = 0; | |
109 | 317 } |
643 | 318 |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
319 uint32 |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
320 FifoDmaManager::get_tag() |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
321 { |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
322 static int tag = 16; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
323 tag ++; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
324 tag &= 0x0f; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
325 return tag+16; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
326 } |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
327 |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
328 /** |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
329 * DMA buffer offset in rbuf |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
330 */ |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
331 void |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
332 FifoDmaManager::bound(ListData *list) |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
333 { |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
334 ListElement *elm = list->element; |
1809
138e7edff3ae
fix bound int size
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1718
diff
changeset
|
335 long *bound = list->bound; |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
336 int offset=0; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
337 for(int i=0;i<list->length;i++) { |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
338 bound[i] = offset; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
339 offset += elm[i].size; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
340 } |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
341 } |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1111
diff
changeset
|
342 |
643 | 343 /* end */ |