summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/mem_map.h10
-rw-r--r--src/core/mem_map_funcs.cpp42
2 files changed, 21 insertions, 31 deletions
diff --git a/src/core/mem_map.h b/src/core/mem_map.h
index a58c59244..2e2c0bdf7 100644
--- a/src/core/mem_map.h
+++ b/src/core/mem_map.h
@@ -27,47 +27,39 @@ enum {
27 FCRAM_PADDR_END = (FCRAM_PADDR + FCRAM_SIZE), ///< FCRAM end of physical space 27 FCRAM_PADDR_END = (FCRAM_PADDR + FCRAM_SIZE), ///< FCRAM end of physical space
28 FCRAM_VADDR = 0x08000000, ///< FCRAM virtual address 28 FCRAM_VADDR = 0x08000000, ///< FCRAM virtual address
29 FCRAM_VADDR_END = (FCRAM_VADDR + FCRAM_SIZE), ///< FCRAM end of virtual space 29 FCRAM_VADDR_END = (FCRAM_VADDR + FCRAM_SIZE), ///< FCRAM end of virtual space
30 FCRAM_MASK = (FCRAM_SIZE - 1), ///< FCRAM mask
31 30
32 SHARED_MEMORY_SIZE = 0x04000000, ///< Shared memory size 31 SHARED_MEMORY_SIZE = 0x04000000, ///< Shared memory size
33 SHARED_MEMORY_VADDR = 0x10000000, ///< Shared memory 32 SHARED_MEMORY_VADDR = 0x10000000, ///< Shared memory
34 SHARED_MEMORY_VADDR_END = (SHARED_MEMORY_VADDR + SHARED_MEMORY_SIZE), 33 SHARED_MEMORY_VADDR_END = (SHARED_MEMORY_VADDR + SHARED_MEMORY_SIZE),
35 SHARED_MEMORY_MASK = (SHARED_MEMORY_SIZE - 1),
36 34
37 CONFIG_MEMORY_SIZE = 0x00001000, ///< Configuration memory size 35 CONFIG_MEMORY_SIZE = 0x00001000, ///< Configuration memory size
38 CONFIG_MEMORY_VADDR = 0x1FF80000, ///< Configuration memory virtual address 36 CONFIG_MEMORY_VADDR = 0x1FF80000, ///< Configuration memory virtual address
39 CONFIG_MEMORY_VADDR_END = (CONFIG_MEMORY_VADDR + CONFIG_MEMORY_SIZE), 37 CONFIG_MEMORY_VADDR_END = (CONFIG_MEMORY_VADDR + CONFIG_MEMORY_SIZE),
40 CONFIG_MEMORY_MASK = (CONFIG_MEMORY_SIZE - 1),
41 38
42 KERNEL_MEMORY_SIZE = 0x00001000, ///< Kernel memory size 39 KERNEL_MEMORY_SIZE = 0x00001000, ///< Kernel memory size
43 KERNEL_MEMORY_VADDR = 0xFFFF0000, ///< Kernel memory where the kthread objects etc are 40 KERNEL_MEMORY_VADDR = 0xFFFF0000, ///< Kernel memory where the kthread objects etc are
44 KERNEL_MEMORY_VADDR_END = (KERNEL_MEMORY_VADDR + KERNEL_MEMORY_SIZE), 41 KERNEL_MEMORY_VADDR_END = (KERNEL_MEMORY_VADDR + KERNEL_MEMORY_SIZE),
45 KERNEL_MEMORY_MASK = (KERNEL_MEMORY_SIZE - 1),
46 42
47 EXEFS_CODE_SIZE = 0x03F00000, 43 EXEFS_CODE_SIZE = 0x03F00000,
48 EXEFS_CODE_VADDR = 0x00100000, ///< ExeFS:/.code is loaded here 44 EXEFS_CODE_VADDR = 0x00100000, ///< ExeFS:/.code is loaded here
49 EXEFS_CODE_VADDR_END = (EXEFS_CODE_VADDR + EXEFS_CODE_SIZE), 45 EXEFS_CODE_VADDR_END = (EXEFS_CODE_VADDR + EXEFS_CODE_SIZE),
50 EXEFS_CODE_MASK = 0x03FFFFFF,
51 46
52 // Region of FCRAM used by system 47 // Region of FCRAM used by system
53 SYSTEM_MEMORY_SIZE = 0x02C00000, ///< 44MB 48 SYSTEM_MEMORY_SIZE = 0x02C00000, ///< 44MB
54 SYSTEM_MEMORY_VADDR = 0x04000000, 49 SYSTEM_MEMORY_VADDR = 0x04000000,
55 SYSTEM_MEMORY_VADDR_END = (SYSTEM_MEMORY_VADDR + SYSTEM_MEMORY_SIZE), 50 SYSTEM_MEMORY_VADDR_END = (SYSTEM_MEMORY_VADDR + SYSTEM_MEMORY_SIZE),
56 SYSTEM_MEMORY_MASK = 0x03FFFFFF,
57 51
58 HEAP_SIZE = FCRAM_SIZE, ///< Application heap size 52 HEAP_SIZE = FCRAM_SIZE, ///< Application heap size
59 //HEAP_PADDR = HEAP_GSP_SIZE, 53 //HEAP_PADDR = HEAP_GSP_SIZE,
60 //HEAP_PADDR_END = (HEAP_PADDR + HEAP_SIZE), 54 //HEAP_PADDR_END = (HEAP_PADDR + HEAP_SIZE),
61 HEAP_VADDR = 0x08000000, 55 HEAP_VADDR = 0x08000000,
62 HEAP_VADDR_END = (HEAP_VADDR + HEAP_SIZE), 56 HEAP_VADDR_END = (HEAP_VADDR + HEAP_SIZE),
63 HEAP_MASK = (HEAP_SIZE - 1),
64 57
65 HEAP_GSP_SIZE = 0x02000000, ///< GSP heap size... TODO: Define correctly? 58 HEAP_GSP_SIZE = 0x02000000, ///< GSP heap size... TODO: Define correctly?
66 HEAP_GSP_VADDR = 0x14000000, 59 HEAP_GSP_VADDR = 0x14000000,
67 HEAP_GSP_VADDR_END = (HEAP_GSP_VADDR + HEAP_GSP_SIZE), 60 HEAP_GSP_VADDR_END = (HEAP_GSP_VADDR + HEAP_GSP_SIZE),
68 HEAP_GSP_PADDR = 0x00000000, 61 HEAP_GSP_PADDR = 0x00000000,
69 HEAP_GSP_PADDR_END = (HEAP_GSP_PADDR + HEAP_GSP_SIZE), 62 HEAP_GSP_PADDR_END = (HEAP_GSP_PADDR + HEAP_GSP_SIZE),
70 HEAP_GSP_MASK = (HEAP_GSP_SIZE - 1),
71 63
72 HARDWARE_IO_SIZE = 0x01000000, 64 HARDWARE_IO_SIZE = 0x01000000,
73 HARDWARE_IO_PADDR = 0x10000000, ///< IO physical address start 65 HARDWARE_IO_PADDR = 0x10000000, ///< IO physical address start
@@ -80,12 +72,10 @@ enum {
80 VRAM_VADDR = 0x1F000000, 72 VRAM_VADDR = 0x1F000000,
81 VRAM_PADDR_END = (VRAM_PADDR + VRAM_SIZE), 73 VRAM_PADDR_END = (VRAM_PADDR + VRAM_SIZE),
82 VRAM_VADDR_END = (VRAM_VADDR + VRAM_SIZE), 74 VRAM_VADDR_END = (VRAM_VADDR + VRAM_SIZE),
83 VRAM_MASK = 0x007FFFFF,
84 75
85 SCRATCHPAD_SIZE = 0x00004000, ///< Typical stack size - TODO: Read from exheader 76 SCRATCHPAD_SIZE = 0x00004000, ///< Typical stack size - TODO: Read from exheader
86 SCRATCHPAD_VADDR_END = 0x10000000, 77 SCRATCHPAD_VADDR_END = 0x10000000,
87 SCRATCHPAD_VADDR = (SCRATCHPAD_VADDR_END - SCRATCHPAD_SIZE), ///< Stack space 78 SCRATCHPAD_VADDR = (SCRATCHPAD_VADDR_END - SCRATCHPAD_SIZE), ///< Stack space
88 SCRATCHPAD_MASK = (SCRATCHPAD_SIZE - 1), ///< Scratchpad memory mask
89}; 79};
90 80
91//////////////////////////////////////////////////////////////////////////////////////////////////// 81////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp
index e8747840c..1887bcedb 100644
--- a/src/core/mem_map_funcs.cpp
+++ b/src/core/mem_map_funcs.cpp
@@ -56,7 +56,7 @@ inline void Read(T &var, const VAddr vaddr) {
56 56
57 // Kernel memory command buffer 57 // Kernel memory command buffer
58 if (vaddr >= KERNEL_MEMORY_VADDR && vaddr < KERNEL_MEMORY_VADDR_END) { 58 if (vaddr >= KERNEL_MEMORY_VADDR && vaddr < KERNEL_MEMORY_VADDR_END) {
59 var = *((const T*)&g_kernel_mem[vaddr & KERNEL_MEMORY_MASK]); 59 var = *((const T*)&g_kernel_mem[vaddr - KERNEL_MEMORY_VADDR]);
60 60
61 // Hardware I/O register reads 61 // Hardware I/O register reads
62 // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space 62 // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space
@@ -65,23 +65,23 @@ inline void Read(T &var, const VAddr vaddr) {
65 65
66 // ExeFS:/.code is loaded here 66 // ExeFS:/.code is loaded here
67 } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) { 67 } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) {
68 var = *((const T*)&g_exefs_code[vaddr & EXEFS_CODE_MASK]); 68 var = *((const T*)&g_exefs_code[vaddr - EXEFS_CODE_VADDR]);
69 69
70 // FCRAM - GSP heap 70 // FCRAM - GSP heap
71 } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { 71 } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
72 var = *((const T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK]); 72 var = *((const T*)&g_heap_gsp[vaddr - HEAP_GSP_VADDR]);
73 73
74 // FCRAM - application heap 74 // FCRAM - application heap
75 } else if ((vaddr >= HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { 75 } else if ((vaddr >= HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) {
76 var = *((const T*)&g_heap[vaddr & HEAP_MASK]); 76 var = *((const T*)&g_heap[vaddr - HEAP_VADDR]);
77 77
78 // Shared memory 78 // Shared memory
79 } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) { 79 } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) {
80 var = *((const T*)&g_shared_mem[vaddr & SHARED_MEMORY_MASK]); 80 var = *((const T*)&g_shared_mem[vaddr - SHARED_MEMORY_VADDR]);
81 81
82 // System memory 82 // System memory
83 } else if ((vaddr >= SYSTEM_MEMORY_VADDR) && (vaddr < SYSTEM_MEMORY_VADDR_END)) { 83 } else if ((vaddr >= SYSTEM_MEMORY_VADDR) && (vaddr < SYSTEM_MEMORY_VADDR_END)) {
84 var = *((const T*)&g_system_mem[vaddr & SYSTEM_MEMORY_MASK]); 84 var = *((const T*)&g_system_mem[vaddr - SYSTEM_MEMORY_VADDR]);
85 85
86 // Config memory 86 // Config memory
87 } else if ((vaddr >= CONFIG_MEMORY_VADDR) && (vaddr < CONFIG_MEMORY_VADDR_END)) { 87 } else if ((vaddr >= CONFIG_MEMORY_VADDR) && (vaddr < CONFIG_MEMORY_VADDR_END)) {
@@ -89,7 +89,7 @@ inline void Read(T &var, const VAddr vaddr) {
89 89
90 // VRAM 90 // VRAM
91 } else if ((vaddr >= VRAM_VADDR) && (vaddr < VRAM_VADDR_END)) { 91 } else if ((vaddr >= VRAM_VADDR) && (vaddr < VRAM_VADDR_END)) {
92 var = *((const T*)&g_vram[vaddr & VRAM_MASK]); 92 var = *((const T*)&g_vram[vaddr - VRAM_VADDR]);
93 93
94 } else { 94 } else {
95 ERROR_LOG(MEMMAP, "unknown Read%lu @ 0x%08X", sizeof(var) * 8, vaddr); 95 ERROR_LOG(MEMMAP, "unknown Read%lu @ 0x%08X", sizeof(var) * 8, vaddr);
@@ -101,7 +101,7 @@ inline void Write(const VAddr vaddr, const T data) {
101 101
102 // Kernel memory command buffer 102 // Kernel memory command buffer
103 if (vaddr >= KERNEL_MEMORY_VADDR && vaddr < KERNEL_MEMORY_VADDR_END) { 103 if (vaddr >= KERNEL_MEMORY_VADDR && vaddr < KERNEL_MEMORY_VADDR_END) {
104 *(T*)&g_kernel_mem[vaddr & KERNEL_MEMORY_MASK] = data; 104 *(T*)&g_kernel_mem[vaddr - KERNEL_MEMORY_VADDR] = data;
105 105
106 // Hardware I/O register writes 106 // Hardware I/O register writes
107 // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space 107 // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space
@@ -110,27 +110,27 @@ inline void Write(const VAddr vaddr, const T data) {
110 110
111 // ExeFS:/.code is loaded here 111 // ExeFS:/.code is loaded here
112 } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) { 112 } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) {
113 *(T*)&g_exefs_code[vaddr & EXEFS_CODE_MASK] = data; 113 *(T*)&g_exefs_code[vaddr - EXEFS_CODE_VADDR] = data;
114 114
115 // FCRAM - GSP heap 115 // FCRAM - GSP heap
116 } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { 116 } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
117 *(T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK] = data; 117 *(T*)&g_heap_gsp[vaddr - HEAP_GSP_VADDR] = data;
118 118
119 // FCRAM - application heap 119 // FCRAM - application heap
120 } else if ((vaddr >= HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { 120 } else if ((vaddr >= HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) {
121 *(T*)&g_heap[vaddr & HEAP_MASK] = data; 121 *(T*)&g_heap[vaddr - HEAP_VADDR] = data;
122 122
123 // Shared memory 123 // Shared memory
124 } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) { 124 } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) {
125 *(T*)&g_shared_mem[vaddr & SHARED_MEMORY_MASK] = data; 125 *(T*)&g_shared_mem[vaddr - SHARED_MEMORY_VADDR] = data;
126 126
127 // System memory 127 // System memory
128 } else if ((vaddr >= SYSTEM_MEMORY_VADDR) && (vaddr < SYSTEM_MEMORY_VADDR_END)) { 128 } else if ((vaddr >= SYSTEM_MEMORY_VADDR) && (vaddr < SYSTEM_MEMORY_VADDR_END)) {
129 *(T*)&g_system_mem[vaddr & SYSTEM_MEMORY_MASK] = data; 129 *(T*)&g_system_mem[vaddr - SYSTEM_MEMORY_VADDR] = data;
130 130
131 // VRAM 131 // VRAM
132 } else if ((vaddr >= VRAM_VADDR) && (vaddr < VRAM_VADDR_END)) { 132 } else if ((vaddr >= VRAM_VADDR) && (vaddr < VRAM_VADDR_END)) {
133 *(T*)&g_vram[vaddr & VRAM_MASK] = data; 133 *(T*)&g_vram[vaddr - VRAM_VADDR] = data;
134 134
135 //} else if ((vaddr & 0xFFF00000) == 0x1FF00000) { 135 //} else if ((vaddr & 0xFFF00000) == 0x1FF00000) {
136 // _assert_msg_(MEMMAP, false, "umimplemented write to DSP memory"); 136 // _assert_msg_(MEMMAP, false, "umimplemented write to DSP memory");
@@ -148,31 +148,31 @@ inline void Write(const VAddr vaddr, const T data) {
148u8 *GetPointer(const VAddr vaddr) { 148u8 *GetPointer(const VAddr vaddr) {
149 // Kernel memory command buffer 149 // Kernel memory command buffer
150 if (vaddr >= KERNEL_MEMORY_VADDR && vaddr < KERNEL_MEMORY_VADDR_END) { 150 if (vaddr >= KERNEL_MEMORY_VADDR && vaddr < KERNEL_MEMORY_VADDR_END) {
151 return g_kernel_mem + (vaddr & KERNEL_MEMORY_MASK); 151 return g_kernel_mem + (vaddr - KERNEL_MEMORY_VADDR);
152 152
153 // ExeFS:/.code is loaded here 153 // ExeFS:/.code is loaded here
154 } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) { 154 } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) {
155 return g_exefs_code + (vaddr & EXEFS_CODE_MASK); 155 return g_exefs_code + (vaddr - EXEFS_CODE_VADDR);
156 156
157 // FCRAM - GSP heap 157 // FCRAM - GSP heap
158 } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { 158 } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
159 return g_heap_gsp + (vaddr & HEAP_GSP_MASK); 159 return g_heap_gsp + (vaddr - HEAP_GSP_VADDR);
160 160
161 // FCRAM - application heap 161 // FCRAM - application heap
162 } else if ((vaddr >= HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { 162 } else if ((vaddr >= HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) {
163 return g_heap + (vaddr & HEAP_MASK); 163 return g_heap + (vaddr - HEAP_VADDR);
164 164
165 // Shared memory 165 // Shared memory
166 } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) { 166 } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) {
167 return g_shared_mem + (vaddr & SHARED_MEMORY_MASK); 167 return g_shared_mem + (vaddr - SHARED_MEMORY_VADDR);
168 168
169 // System memory 169 // System memory
170 } else if ((vaddr >= SYSTEM_MEMORY_VADDR) && (vaddr < SYSTEM_MEMORY_VADDR_END)) { 170 } else if ((vaddr >= SYSTEM_MEMORY_VADDR) && (vaddr < SYSTEM_MEMORY_VADDR_END)) {
171 return g_system_mem + (vaddr & SYSTEM_MEMORY_MASK); 171 return g_system_mem + (vaddr - SYSTEM_MEMORY_VADDR);
172 172
173 // VRAM 173 // VRAM
174 } else if ((vaddr >= VRAM_VADDR) && (vaddr < VRAM_VADDR_END)) { 174 } else if ((vaddr >= VRAM_VADDR) && (vaddr < VRAM_VADDR_END)) {
175 return g_vram + (vaddr & VRAM_MASK); 175 return g_vram + (vaddr - VRAM_VADDR);
176 176
177 } else { 177 } else {
178 ERROR_LOG(MEMMAP, "unknown GetPointer @ 0x%08x", vaddr); 178 ERROR_LOG(MEMMAP, "unknown GetPointer @ 0x%08x", vaddr);