diff options
Diffstat (limited to 'src/core/mem_map_funcs.cpp')
| -rw-r--r-- | src/core/mem_map_funcs.cpp | 54 |
1 files changed, 51 insertions, 3 deletions
diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp index af4cfacbd..eff0cf4b8 100644 --- a/src/core/mem_map_funcs.cpp +++ b/src/core/mem_map_funcs.cpp | |||
| @@ -12,7 +12,9 @@ | |||
| 12 | 12 | ||
| 13 | namespace Memory { | 13 | namespace Memory { |
| 14 | 14 | ||
| 15 | std::map<u32, HeapBlock> g_heap_gsp_map; | 15 | std::map<u32, MemoryBlock> g_heap_map; |
| 16 | std::map<u32, MemoryBlock> g_heap_gsp_map; | ||
| 17 | std::map<u32, MemoryBlock> g_shared_map; | ||
| 16 | 18 | ||
| 17 | /// Convert a physical address to virtual address | 19 | /// Convert a physical address to virtual address |
| 18 | u32 _AddressPhysicalToVirtual(const u32 addr) { | 20 | u32 _AddressPhysicalToVirtual(const u32 addr) { |
| @@ -121,12 +123,58 @@ u8 *GetPointer(const u32 addr) { | |||
| 121 | } | 123 | } |
| 122 | 124 | ||
| 123 | /** | 125 | /** |
| 126 | * Maps a block of memory in shared memory | ||
| 127 | * @param handle Handle to map memory block for | ||
| 128 | * @param addr Address to map memory block to | ||
| 129 | * @param permissions Memory map permissions | ||
| 130 | */ | ||
| 131 | u32 MapBlock_Shared(u32 handle, u32 addr,u32 permissions) { | ||
| 132 | MemoryBlock block; | ||
| 133 | |||
| 134 | block.handle = handle; | ||
| 135 | block.base_address = addr; | ||
| 136 | block.permissions = permissions; | ||
| 137 | |||
| 138 | if (g_shared_map.size() > 0) { | ||
| 139 | const MemoryBlock last_block = g_shared_map.rbegin()->second; | ||
| 140 | block.address = last_block.address + last_block.size; | ||
| 141 | } | ||
| 142 | g_shared_map[block.GetVirtualAddress()] = block; | ||
| 143 | |||
| 144 | return block.GetVirtualAddress(); | ||
| 145 | } | ||
| 146 | |||
| 147 | /** | ||
| 148 | * Maps a block of memory on the heap | ||
| 149 | * @param size Size of block in bytes | ||
| 150 | * @param operation Memory map operation type | ||
| 151 | * @param flags Memory allocation flags | ||
| 152 | */ | ||
| 153 | u32 MapBlock_Heap(u32 size, u32 operation, u32 permissions) { | ||
| 154 | MemoryBlock block; | ||
| 155 | |||
| 156 | block.base_address = HEAP_VADDR; | ||
| 157 | block.size = size; | ||
| 158 | block.operation = operation; | ||
| 159 | block.permissions = permissions; | ||
| 160 | |||
| 161 | if (g_heap_map.size() > 0) { | ||
| 162 | const MemoryBlock last_block = g_heap_map.rbegin()->second; | ||
| 163 | block.address = last_block.address + last_block.size; | ||
| 164 | } | ||
| 165 | g_heap_map[block.GetVirtualAddress()] = block; | ||
| 166 | |||
| 167 | return block.GetVirtualAddress(); | ||
| 168 | } | ||
| 169 | |||
| 170 | /** | ||
| 124 | * Maps a block of memory on the GSP heap | 171 | * Maps a block of memory on the GSP heap |
| 125 | * @param size Size of block in bytes | 172 | * @param size Size of block in bytes |
| 173 | * @param operation Memory map operation type | ||
| 126 | * @param flags Memory allocation flags | 174 | * @param flags Memory allocation flags |
| 127 | */ | 175 | */ |
| 128 | u32 MapBlock_HeapGSP(u32 size, u32 operation, u32 permissions) { | 176 | u32 MapBlock_HeapGSP(u32 size, u32 operation, u32 permissions) { |
| 129 | HeapBlock block; | 177 | MemoryBlock block; |
| 130 | 178 | ||
| 131 | block.base_address = HEAP_GSP_VADDR; | 179 | block.base_address = HEAP_GSP_VADDR; |
| 132 | block.size = size; | 180 | block.size = size; |
| @@ -134,7 +182,7 @@ u32 MapBlock_HeapGSP(u32 size, u32 operation, u32 permissions) { | |||
| 134 | block.permissions = permissions; | 182 | block.permissions = permissions; |
| 135 | 183 | ||
| 136 | if (g_heap_gsp_map.size() > 0) { | 184 | if (g_heap_gsp_map.size() > 0) { |
| 137 | const HeapBlock last_block = g_heap_gsp_map.rbegin()->second; | 185 | const MemoryBlock last_block = g_heap_gsp_map.rbegin()->second; |
| 138 | block.address = last_block.address + last_block.size; | 186 | block.address = last_block.address + last_block.size; |
| 139 | } | 187 | } |
| 140 | g_heap_gsp_map[block.GetVirtualAddress()] = block; | 188 | g_heap_gsp_map[block.GetVirtualAddress()] = block; |