Mercurial > hg > Members > kono > Cerium
annotate TaskManager/Fifo/FifoDmaManager.cc @ 640:a909c50081c2
SimpeTask on Cell worked.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 20 Nov 2009 23:12:34 +0900 |
parents | 60aa3f241b10 |
children | bffdede05f1e |
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)); | |
640
a909c50081c2
SimpeTask on Cell worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
34 #if 0 |
a909c50081c2
SimpeTask on Cell worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
35 if (MailManager::length(mail_sendQueue)== -1) { |
a909c50081c2
SimpeTask on Cell worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
36 fprintf(stderr,"Mail Queue Error\n"); |
a909c50081c2
SimpeTask on Cell worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
37 exit(1); |
a909c50081c2
SimpeTask on Cell worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
38 } |
a909c50081c2
SimpeTask on Cell worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
39 #endif |
109 | 40 } |
41 | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
42 memaddr |
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
43 FifoDmaManager::mail_read() |
109 | 44 { |
45 MailQueuePtr q; | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
46 memaddr ret; |
109 | 47 |
48 q = mail_recvQueue; | |
49 | |
50 if (q == NULL) { | |
321 | 51 return 0; // error か 正しい値か判断できないな・・・ |
109 | 52 } |
53 | |
54 mail_recvQueue = mail_recvQueue->next; | |
55 | |
56 ret = q->data; | |
57 mailManager->free(q); | |
58 | |
59 return ret; | |
60 } | |
61 | |
62 void | |
63 FifoDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask) | |
64 { | |
65 int list_size = list->length; | |
602
1733f3cbfa28
64bit mode try... not worked.
e075740@nw0740.st.ie.u-ryukyu.ac.jp
parents:
321
diff
changeset
|
66 long bound; |
109 | 67 |
602
1733f3cbfa28
64bit mode try... not worked.
e075740@nw0740.st.ie.u-ryukyu.ac.jp
parents:
321
diff
changeset
|
68 bound = (long)(buff); |
109 | 69 |
70 for (int i = 0; i < list_size; i++) { | |
71 ListElementPtr elm = &list->element[i]; | |
72 memcpy((void*)bound, (void*)elm->addr, elm->size); | |
73 bound += elm->size; | |
74 } | |
75 } | |
76 | |
77 #if 0 | |
78 void* | |
79 FifoDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask) | |
80 { | |
81 void **buffList; | |
82 int bound; | |
83 | |
84 dma_wait(mask); | |
85 | |
86 if (list->length == 1) { | |
87 return buff; | |
88 } | |
89 | |
90 bound = (int)buff; | |
91 buffList = (void**)malloc(list->length); | |
92 buffList[0] = (void*)bound; | |
93 | |
94 for (int i = 1; i < list->length; i++) { | |
95 bound += list->element[i-1].size; | |
96 buffList[i] = (void*)(bound); | |
97 } | |
98 | |
99 return (void*)buffList; | |
100 } | |
101 #endif | |
102 | |
103 void | |
104 FifoDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask) | |
105 { | |
106 int list_size = list->length; | |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
107 memaddr bound; |
109 | 108 |
603
42c94f85c779
long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
602
diff
changeset
|
109 bound = (memaddr)(buff); |
109 | 110 |
111 for (int i = 0; i < list_size; i++) { | |
112 ListElementPtr elm = &list->element[i]; | |
113 memcpy((void*)elm->addr, (void*)bound, elm->size); | |
114 bound += elm->size; | |
115 } | |
116 } |