annotate TaskManager/Fifo/FifoDmaManager.cc @ 1245:a97b4dd4574c draft

Added tag real_matrix for changeset cd50c48f45e7
author Kakeru TAMASIRO <e095736@ie.u-ryukyu.ac.jp>
date Fri, 11 Nov 2011 17:04:13 +0900
parents a49c02dffe6f
children 2fa31362ead0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
1 #include <stdio.h>
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
2 #include <stdlib.h>
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
3 #include <string.h>
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
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"
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
7
1213
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
8 void *
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
9 FifoDmaManager::dma_load(Scheduler *s, void *buf, memaddr addr, uint32 size, uint32 mask)
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
10 {
1213
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
11 if (size == 0) return buf;
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
12 if (s) buf = s->manager->allocate(size);
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
13 memcpy(buf, (void*)addr, size);
1213
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
14 return buf;
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
15 }
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
16
1213
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
17 void *
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
18 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
19 {
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
20 void *b = s->manager->allocate(size);
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
21 return b;
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
22 }
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
23
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
24 void *
603
57ec231bc8ac long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 602
diff changeset
25 FifoDmaManager::dma_store(void *buf, memaddr addr, uint32 size, uint32 mask)
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
26 {
1213
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
27 if (size == 0) return buf;
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
28 memcpy((void*)addr, buf, size);
1213
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
29 return buf;
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
30 }
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
31
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
32 /**
321
f22280772f20 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
33 * mask で設定した DMA 転送の完了を待つ
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
34 */
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
35 void
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
36 FifoDmaManager::dma_wait(uint32 mask)
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
37 {
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
38 }
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
39
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
40
1213
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
41 void *
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
42 FifoDmaManager::dma_loadList(Scheduler *s, ListDataPtr list, void *buff, uint32 mask)
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
43 {
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
44 int list_size = list->length;
602
92b0d490e839 64bit mode try... not worked.
e075740@nw0740.st.ie.u-ryukyu.ac.jp
parents: 321
diff changeset
45 long bound;
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
46
1213
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
47 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
48 bound = (long)(buff);
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
49
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
50 for (int i = 0; i < list_size; i++) {
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
51 ListElementPtr elm = &list->element[i];
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
52 memcpy((void*)bound, (void*)elm->addr, elm->size);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
53 bound += elm->size;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
54 }
1213
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
55 return buff;
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
56 }
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
57
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
58
1213
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
59 void *
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
60 FifoDmaManager::get_writebuf(Scheduler *s,ListDataPtr addr, uint32 size)
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
61 {
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
62 void *b = s->manager->allocate(addr->size);
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
63 return b;
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
64 }
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
65
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
66 void
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
67 FifoDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask)
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
68 {
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
69 int list_size = list->length;
603
57ec231bc8ac long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 602
diff changeset
70 memaddr bound;
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
71
603
57ec231bc8ac long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 602
diff changeset
72 bound = (memaddr)(buff);
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
73
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
74 for (int i = 0; i < list_size; i++) {
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
75 ListElementPtr elm = &list->element[i];
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
76 memcpy((void*)elm->addr, (void*)bound, elm->size);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
77 bound += elm->size;
1111
c9d0683c9b39 add non screen mode.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
78 }
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
79 }
643
2a611e8d8788 minor fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 640
diff changeset
80
1213
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
81 uint32
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
82 FifoDmaManager::get_tag()
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
83 {
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
84 static int tag = 16;
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
85 tag ++;
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
86 tag &= 0x0f;
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
87 return tag+16;
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
88 }
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
89
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
90 /**
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
91 * DMA buffer offset in rbuf
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
92 */
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
93 void
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
94 FifoDmaManager::bound(ListData *list)
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
95 {
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
96 ListElement *elm = list->element;
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
97 int *bound = list->bound;
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
98 int offset=0;
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
99 for(int i=0;i<list->length;i++) {
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
100 bound[i] = offset;
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
101 offset += elm[i].size;
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
102 }
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
103 }
a49c02dffe6f DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1111
diff changeset
104
643
2a611e8d8788 minor fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 640
diff changeset
105 /* end */