Mercurial > hg > Members > kono > Cerium
annotate TaskManager/Fifo/FifoDmaManager.cc @ 638:671fca057ad3
hmmmm
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 19 Nov 2009 18:18:20 +0900 |
parents | 60aa3f241b10 |
children | a909c50081c2 |
rev | line source |
---|---|
109 | 1 #include <stdio.h> |
2 #include <stdlib.h> | |
3 #include <string.h> | |
4 #include "FifoDmaManager.h" | |
5 | |
6 void | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
7 FifoDmaManager::dma_load(void *buf, memaddr addr, uint32 size, uint32 mask) |
109 | 8 { |
9 if (size == 0) return; | |
10 memcpy(buf, (void*)addr, size); | |
11 } | |
12 | |
13 void | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
14 FifoDmaManager::dma_store(void *buf, memaddr addr, uint32 size, uint32 mask) |
109 | 15 { |
16 if (size == 0) return; | |
17 memcpy((void*)addr, buf, size); | |
18 } | |
19 | |
20 /** | |
321 | 21 * mask で設定した DMA 転送の完了を待つ |
109 | 22 */ |
23 void | |
24 FifoDmaManager::dma_wait(uint32 mask) | |
25 { | |
26 } | |
27 | |
28 void | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
29 FifoDmaManager::mail_write(memaddr data) |
109 | 30 { |
31 mail_sendQueue | |
32 = MailManager::append_mailQueue(mail_sendQueue, | |
33 mailManager->create(data)); | |
34 } | |
35 | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
36 memaddr |
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
37 FifoDmaManager::mail_read() |
109 | 38 { |
39 MailQueuePtr q; | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
40 memaddr ret; |
109 | 41 |
42 q = mail_recvQueue; | |
43 | |
44 if (q == NULL) { | |
321 | 45 return 0; // error か 正しい値か判断できないな・・・ |
109 | 46 } |
47 | |
48 mail_recvQueue = mail_recvQueue->next; | |
49 | |
50 ret = q->data; | |
51 mailManager->free(q); | |
52 | |
53 return ret; | |
54 } | |
55 | |
56 void | |
57 FifoDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask) | |
58 { | |
59 int list_size = list->length; | |
602
1733f3cbfa28
64bit mode try... not worked.
e075740@nw0740.st.ie.u-ryukyu.ac.jp
parents:
321
diff
changeset
|
60 long bound; |
109 | 61 |
602
1733f3cbfa28
64bit mode try... not worked.
e075740@nw0740.st.ie.u-ryukyu.ac.jp
parents:
321
diff
changeset
|
62 bound = (long)(buff); |
109 | 63 |
64 for (int i = 0; i < list_size; i++) { | |
65 ListElementPtr elm = &list->element[i]; | |
66 memcpy((void*)bound, (void*)elm->addr, elm->size); | |
67 bound += elm->size; | |
68 } | |
69 } | |
70 | |
71 #if 0 | |
72 void* | |
73 FifoDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask) | |
74 { | |
75 void **buffList; | |
76 int bound; | |
77 | |
78 dma_wait(mask); | |
79 | |
80 if (list->length == 1) { | |
81 return buff; | |
82 } | |
83 | |
84 bound = (int)buff; | |
85 buffList = (void**)malloc(list->length); | |
86 buffList[0] = (void*)bound; | |
87 | |
88 for (int i = 1; i < list->length; i++) { | |
89 bound += list->element[i-1].size; | |
90 buffList[i] = (void*)(bound); | |
91 } | |
92 | |
93 return (void*)buffList; | |
94 } | |
95 #endif | |
96 | |
97 void | |
98 FifoDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask) | |
99 { | |
100 int list_size = list->length; | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
101 memaddr bound; |
109 | 102 |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
103 bound = (memaddr)(buff); |
109 | 104 |
105 for (int i = 0; i < list_size; i++) { | |
106 ListElementPtr elm = &list->element[i]; | |
107 memcpy((void*)elm->addr, (void*)bound, elm->size); | |
108 bound += elm->size; | |
109 } | |
110 } |