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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
1 #include <stdio.h>
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
2 #include <stdlib.h>
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
3 #include <string.h>
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
4 #include "FifoDmaManager.h"
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
5
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
8 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
9 if (size == 0) return;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
10 memcpy(buf, (void*)addr, size);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
11 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
12
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
15 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
16 if (size == 0) return;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
17 memcpy((void*)addr, buf, size);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
18 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
19
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
20 /**
321
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
21 * mask で設定した DMA 転送の完了を待つ
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
22 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
23 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
24 FifoDmaManager::dma_wait(uint32 mask)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
25 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
26 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
27
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
30 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
31 mail_sendQueue
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
32 = MailManager::append_mailQueue(mail_sendQueue,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
40 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
44 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
47
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
48 q = mail_recvQueue;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
49
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
50 if (q == NULL) {
321
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
51 return 0; // error か 正しい値か判断できないな・・・
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
52 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
53
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
54 mail_recvQueue = mail_recvQueue->next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
55
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
56 ret = q->data;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
57 mailManager->free(q);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
58
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
59 return ret;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
60 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
61
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
62 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
63 FifoDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
64 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
69
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
70 for (int i = 0; i < list_size; i++) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
71 ListElementPtr elm = &list->element[i];
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
72 memcpy((void*)bound, (void*)elm->addr, elm->size);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
73 bound += elm->size;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
74 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
75 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
76
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
77 #if 0
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
78 void*
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
79 FifoDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
80 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
81 void **buffList;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
82 int bound;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
83
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
84 dma_wait(mask);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
85
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
86 if (list->length == 1) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
87 return buff;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
88 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
89
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
90 bound = (int)buff;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
91 buffList = (void**)malloc(list->length);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
92 buffList[0] = (void*)bound;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
93
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
94 for (int i = 1; i < list->length; i++) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
95 bound += list->element[i-1].size;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
96 buffList[i] = (void*)(bound);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
97 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
98
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
99 return (void*)buffList;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
100 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
101 #endif
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
102
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
103 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
104 FifoDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
105 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
110
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
111 for (int i = 0; i < list_size; i++) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
112 ListElementPtr elm = &list->element[i];
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
113 memcpy((void*)elm->addr, (void*)bound, elm->size);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
114 bound += elm->size;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
115 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
116 }