dol: initial dol commit
[jump.git] / dol / src / dol / visitor / cell / lib / ppu / dolSupport.cpp
1 #include "dolSupport.h"\r
2 \r
3 /**\r
4  *\r
5  */\r
6 unsigned read(void* fifo, void* buf, unsigned len, DOLProcess* p) {\r
7         unsigned int\r
8                         pos =\r
9                                         static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->readPos;\r
10         pos += ((Fifo*) fifo)->read((char *) buf + pos, len - pos);\r
11 \r
12         if (pos == len)\r
13                 static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->readPos\r
14                                 = 0;\r
15         else\r
16                 static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->readPos\r
17                                 = pos;\r
18         return pos;\r
19 }\r
20 \r
21 /**\r
22  *\r
23  */\r
24 unsigned write(void* fifo, void* buf, unsigned len, DOLProcess* p) {\r
25         unsigned int\r
26                         pos =\r
27                                         static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->writePos;\r
28         pos += ((Fifo*) fifo)->write((char *) buf + pos, len - pos);\r
29 \r
30         if (pos == len)\r
31                 static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->writePos\r
32                                 = 0;\r
33         else\r
34                 static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->writePos\r
35                                 = pos;\r
36         return pos;\r
37 }\r
38 \r
39 /**\r
40  *\r
41  */\r
42 unsigned reserve(void* fifo, void** destination, unsigned len,\r
43                 DOLProcess* p) {\r
44         return ((WindowedFifo*) fifo)->reserve(destination, len);\r
45 }\r
46 \r
47 /**\r
48  *\r
49  */\r
50 void release(void* fifo, DOLProcess* p) {\r
51         ((WindowedFifo*) fifo)->release();\r
52 }\r
53 \r
54 /**\r
55  *\r
56  */\r
57 unsigned capture(void* fifo, void** destination, unsigned len,\r
58                 DOLProcess* p) {\r
59         return ((WindowedFifo*) fifo)->capture(destination, len);\r
60 }\r
61 \r
62 /**\r
63  *\r
64  */\r
65 void consume(void* fifo, DOLProcess* p) {\r
66         ((WindowedFifo*) fifo)->consume();\r
67 }\r
68 \r
69 /**\r
70  *\r
71  */\r
72 void DOL_detach(DOLProcess* p) {\r
73         static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->detach();\r
74 }\r
75 \r
76 void createPort(void** port, void* base, int number_of_indices,\r
77                 int index0, int range0) {\r
78         *port = (void**) ((void**) base)[index0];\r
79 }\r
80 \r
81 void createPort(void** port, void* base, int number_of_indices,\r
82                 int index0, int range0, int index1, int range1) {\r
83         *port = (void**) ((void**) base)[index0 * range1 + index1];\r
84 }\r
85 \r
86 void createPort(void** port, void* base, int number_of_indices,\r
87                 int index0, int range0, int index1, int range1, int index2,\r
88                 int range2) {\r
89         *port = (void**) ((void**) base)[index0 * range1 * range2 + index1\r
90                         * range2 + index2];\r
91 }\r
92 \r
93 void createPort(void** port, void* base, int number_of_indices,\r
94                 int index0, int range0, int index1, int range1, int index2,\r
95                 int range2, int index3, int range3) {\r
96         *port = (void**) ((void**) base)[index0 * range1 * range2 * range3\r
97                         + index1 * range2 * range3 + index2 * range3 + index3];\r
98 }\r