summaryrefslogtreecommitdiff
path: root/src/core/mem_map_funcs.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2014-07-05 10:28:14 -0400
committerGravatar bunnei2014-07-05 10:28:14 -0400
commit6084084a5d513544d8cb694554610b84270a5505 (patch)
treefe2d322dc00edc55786956e5c94588205ae332b6 /src/core/mem_map_funcs.cpp
parentMerge pull request #26 from bunnei/romfs-archive (diff)
parentSharedMemory: Updated MapSharedMemory to use an enum for permissions. (diff)
downloadyuzu-6084084a5d513544d8cb694554610b84270a5505.tar.gz
yuzu-6084084a5d513544d8cb694554610b84270a5505.tar.xz
yuzu-6084084a5d513544d8cb694554610b84270a5505.zip
Merge pull request #28 from bunnei/shared-memory
Shared memory - adds preliminary support for shared memory kernel objects and correct block mapping.
Diffstat (limited to 'src/core/mem_map_funcs.cpp')
-rw-r--r--src/core/mem_map_funcs.cpp42
1 files changed, 10 insertions, 32 deletions
diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp
index 37913119e..0342122df 100644
--- a/src/core/mem_map_funcs.cpp
+++ b/src/core/mem_map_funcs.cpp
@@ -41,7 +41,7 @@ u32 _VirtualAddress(const u32 addr) {
41} 41}
42 42
43template <typename T> 43template <typename T>
44inline void _Read(T &var, const u32 addr) { 44inline void Read(T &var, const u32 addr) {
45 // TODO: Figure out the fastest order of tests for both read and write (they are probably different). 45 // TODO: Figure out the fastest order of tests for both read and write (they are probably different).
46 // TODO: Make sure this represents the mirrors in a correct way. 46 // TODO: Make sure this represents the mirrors in a correct way.
47 // Could just do a base-relative read, too.... TODO 47 // Could just do a base-relative read, too.... TODO
@@ -91,7 +91,7 @@ inline void _Read(T &var, const u32 addr) {
91} 91}
92 92
93template <typename T> 93template <typename T>
94inline void _Write(u32 addr, const T data) { 94inline void Write(u32 addr, const T data) {
95 u32 vaddr = _VirtualAddress(addr); 95 u32 vaddr = _VirtualAddress(addr);
96 96
97 // Kernel memory command buffer 97 // Kernel memory command buffer
@@ -178,28 +178,6 @@ u8 *GetPointer(const u32 addr) {
178} 178}
179 179
180/** 180/**
181 * Maps a block of memory in shared memory
182 * @param handle Handle to map memory block for
183 * @param addr Address to map memory block to
184 * @param permissions Memory map permissions
185 */
186u32 MapBlock_Shared(u32 handle, u32 addr,u32 permissions) {
187 MemoryBlock block;
188
189 block.handle = handle;
190 block.base_address = addr;
191 block.permissions = permissions;
192
193 if (g_shared_map.size() > 0) {
194 const MemoryBlock last_block = g_shared_map.rbegin()->second;
195 block.address = last_block.address + last_block.size;
196 }
197 g_shared_map[block.GetVirtualAddress()] = block;
198
199 return block.GetVirtualAddress();
200}
201
202/**
203 * Maps a block of memory on the heap 181 * Maps a block of memory on the heap
204 * @param size Size of block in bytes 182 * @param size Size of block in bytes
205 * @param operation Memory map operation type 183 * @param operation Memory map operation type
@@ -247,25 +225,25 @@ u32 MapBlock_HeapGSP(u32 size, u32 operation, u32 permissions) {
247 225
248u8 Read8(const u32 addr) { 226u8 Read8(const u32 addr) {
249 u8 _var = 0; 227 u8 _var = 0;
250 _Read<u8>(_var, addr); 228 Read<u8>(_var, addr);
251 return (u8)_var; 229 return (u8)_var;
252} 230}
253 231
254u16 Read16(const u32 addr) { 232u16 Read16(const u32 addr) {
255 u16_le _var = 0; 233 u16_le _var = 0;
256 _Read<u16_le>(_var, addr); 234 Read<u16_le>(_var, addr);
257 return (u16)_var; 235 return (u16)_var;
258} 236}
259 237
260u32 Read32(const u32 addr) { 238u32 Read32(const u32 addr) {
261 u32_le _var = 0; 239 u32_le _var = 0;
262 _Read<u32_le>(_var, addr); 240 Read<u32_le>(_var, addr);
263 return _var; 241 return _var;
264} 242}
265 243
266u64 Read64(const u32 addr) { 244u64 Read64(const u32 addr) {
267 u64_le _var = 0; 245 u64_le _var = 0;
268 _Read<u64_le>(_var, addr); 246 Read<u64_le>(_var, addr);
269 return _var; 247 return _var;
270} 248}
271 249
@@ -278,19 +256,19 @@ u32 Read16_ZX(const u32 addr) {
278} 256}
279 257
280void Write8(const u32 addr, const u8 data) { 258void Write8(const u32 addr, const u8 data) {
281 _Write<u8>(addr, data); 259 Write<u8>(addr, data);
282} 260}
283 261
284void Write16(const u32 addr, const u16 data) { 262void Write16(const u32 addr, const u16 data) {
285 _Write<u16_le>(addr, data); 263 Write<u16_le>(addr, data);
286} 264}
287 265
288void Write32(const u32 addr, const u32 data) { 266void Write32(const u32 addr, const u32 data) {
289 _Write<u32_le>(addr, data); 267 Write<u32_le>(addr, data);
290} 268}
291 269
292void Write64(const u32 addr, const u64 data) { 270void Write64(const u32 addr, const u64 data) {
293 _Write<u64_le>(addr, data); 271 Write<u64_le>(addr, data);
294} 272}
295 273
296void WriteBlock(const u32 addr, const u8* data, const int size) { 274void WriteBlock(const u32 addr, const u8* data, const int size) {