diff options
Diffstat (limited to 'src/core/mem_map.h')
| -rw-r--r-- | src/core/mem_map.h | 53 |
1 files changed, 49 insertions, 4 deletions
diff --git a/src/core/mem_map.h b/src/core/mem_map.h index ab1eb2606..c744e377e 100644 --- a/src/core/mem_map.h +++ b/src/core/mem_map.h | |||
| @@ -21,6 +21,11 @@ enum { | |||
| 21 | SCRATCHPAD_SIZE = 0x00004000, ///< Typical stack size - TODO: Read from exheader | 21 | SCRATCHPAD_SIZE = 0x00004000, ///< Typical stack size - TODO: Read from exheader |
| 22 | HEAP_GSP_SIZE = 0x02000000, ///< GSP heap size... TODO: Define correctly? | 22 | HEAP_GSP_SIZE = 0x02000000, ///< GSP heap size... TODO: Define correctly? |
| 23 | HEAP_SIZE = FCRAM_SIZE, ///< Application heap size | 23 | HEAP_SIZE = FCRAM_SIZE, ///< Application heap size |
| 24 | SHARED_MEMORY_SIZE = 0x04000000, ///< Shared memory size | ||
| 25 | HARDWARE_IO_SIZE = 0x01000000, | ||
| 26 | |||
| 27 | SHARED_MEMORY_VADDR = 0x10000000, ///< Shared memory | ||
| 28 | SHARED_MEMORY_VADDR_END = (SHARED_MEMORY_VADDR + SHARED_MEMORY_SIZE), | ||
| 24 | 29 | ||
| 25 | HEAP_PADDR = HEAP_GSP_SIZE, | 30 | HEAP_PADDR = HEAP_GSP_SIZE, |
| 26 | HEAP_PADDR_END = (HEAP_PADDR + HEAP_SIZE), | 31 | HEAP_PADDR_END = (HEAP_PADDR + HEAP_SIZE), |
| @@ -36,23 +41,34 @@ enum { | |||
| 36 | SCRATCHPAD_MASK = (SCRATCHPAD_SIZE - 1), ///< Scratchpad memory mask | 41 | SCRATCHPAD_MASK = (SCRATCHPAD_SIZE - 1), ///< Scratchpad memory mask |
| 37 | HEAP_GSP_MASK = (HEAP_GSP_SIZE - 1), | 42 | HEAP_GSP_MASK = (HEAP_GSP_SIZE - 1), |
| 38 | HEAP_MASK = (HEAP_SIZE - 1), | 43 | HEAP_MASK = (HEAP_SIZE - 1), |
| 44 | SHARED_MEMORY_MASK = (SHARED_MEMORY_SIZE - 1), | ||
| 39 | 45 | ||
| 40 | FCRAM_PADDR = 0x20000000, ///< FCRAM physical address | 46 | FCRAM_PADDR = 0x20000000, ///< FCRAM physical address |
| 41 | FCRAM_PADDR_END = (FCRAM_PADDR + FCRAM_SIZE), ///< FCRAM end of physical space | 47 | FCRAM_PADDR_END = (FCRAM_PADDR + FCRAM_SIZE), ///< FCRAM end of physical space |
| 42 | FCRAM_VADDR = 0x08000000, ///< FCRAM virtual address | 48 | FCRAM_VADDR = 0x08000000, ///< FCRAM virtual address |
| 43 | FCRAM_VADDR_END = (FCRAM_VADDR + FCRAM_SIZE), ///< FCRAM end of virtual space | 49 | FCRAM_VADDR_END = (FCRAM_VADDR + FCRAM_SIZE), ///< FCRAM end of virtual space |
| 44 | 50 | ||
| 51 | HARDWARE_IO_PADDR = 0x10000000, ///< IO physical address start | ||
| 52 | HARDWARE_IO_VADDR = 0x1EC00000, ///< IO virtual address start | ||
| 53 | HARDWARE_IO_PADDR_END = (HARDWARE_IO_PADDR + HARDWARE_IO_SIZE), | ||
| 54 | HARDWARE_IO_VADDR_END = (HARDWARE_IO_VADDR + HARDWARE_IO_SIZE), | ||
| 55 | |||
| 56 | VRAM_PADDR = 0x18000000, | ||
| 45 | VRAM_VADDR = 0x1F000000, | 57 | VRAM_VADDR = 0x1F000000, |
| 58 | VRAM_PADDR_END = (VRAM_PADDR + VRAM_SIZE), | ||
| 59 | VRAM_VADDR_END = (VRAM_VADDR + VRAM_SIZE), | ||
| 60 | |||
| 46 | SCRATCHPAD_VADDR_END = 0x10000000, | 61 | SCRATCHPAD_VADDR_END = 0x10000000, |
| 47 | SCRATCHPAD_VADDR = (SCRATCHPAD_VADDR_END - SCRATCHPAD_SIZE), ///< Stack space | 62 | SCRATCHPAD_VADDR = (SCRATCHPAD_VADDR_END - SCRATCHPAD_SIZE), ///< Stack space |
| 48 | }; | 63 | }; |
| 49 | 64 | ||
| 50 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 65 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 51 | 66 | ||
| 52 | /// Represents a block of heap memory mapped by ControlMemory | 67 | /// Represents a block of memory mapped by ControlMemory/MapMemoryBlock |
| 53 | struct HeapBlock { | 68 | struct MemoryBlock { |
| 54 | HeapBlock() : base_address(0), address(0), size(0), operation(0), permissions(0) { | 69 | MemoryBlock() : handle(0), base_address(0), address(0), size(0), operation(0), permissions(0) { |
| 55 | } | 70 | } |
| 71 | u32 handle; | ||
| 56 | u32 base_address; | 72 | u32 base_address; |
| 57 | u32 address; | 73 | u32 address; |
| 58 | u32 size; | 74 | u32 size; |
| @@ -81,6 +97,7 @@ extern u8 *g_base; | |||
| 81 | extern u8* g_heap_gsp; ///< GSP heap (main memory) | 97 | extern u8* g_heap_gsp; ///< GSP heap (main memory) |
| 82 | extern u8* g_heap; ///< Application heap (main memory) | 98 | extern u8* g_heap; ///< Application heap (main memory) |
| 83 | extern u8* g_vram; ///< Video memory (VRAM) | 99 | extern u8* g_vram; ///< Video memory (VRAM) |
| 100 | extern u8* g_shared_mem; ///< Shared memory | ||
| 84 | 101 | ||
| 85 | void Init(); | 102 | void Init(); |
| 86 | void Shutdown(); | 103 | void Shutdown(); |
| @@ -99,9 +116,25 @@ void Write32(const u32 addr, const u32 data); | |||
| 99 | u8* GetPointer(const u32 Address); | 116 | u8* GetPointer(const u32 Address); |
| 100 | 117 | ||
| 101 | /** | 118 | /** |
| 119 | * Maps a block of memory in shared memory | ||
| 120 | * @param handle Handle to map memory block for | ||
| 121 | * @param addr Address to map memory block to | ||
| 122 | * @param permissions Memory map permissions | ||
| 123 | */ | ||
| 124 | u32 MapBlock_Shared(u32 handle, u32 addr,u32 permissions) ; | ||
| 125 | |||
| 126 | /** | ||
| 127 | * Maps a block of memory on the heap | ||
| 128 | * @param size Size of block in bytes | ||
| 129 | * @param operation Memory map operation type | ||
| 130 | * @param flags Memory allocation flags | ||
| 131 | */ | ||
| 132 | u32 MapBlock_Heap(u32 size, u32 operation, u32 permissions); | ||
| 133 | |||
| 134 | /** | ||
| 102 | * Maps a block of memory on the GSP heap | 135 | * Maps a block of memory on the GSP heap |
| 103 | * @param size Size of block in bytes | 136 | * @param size Size of block in bytes |
| 104 | * @param operation Control memory operation | 137 | * @param operation Memory map operation type |
| 105 | * @param permissions Control memory permissions | 138 | * @param permissions Control memory permissions |
| 106 | */ | 139 | */ |
| 107 | u32 MapBlock_HeapGSP(u32 size, u32 operation, u32 permissions); | 140 | u32 MapBlock_HeapGSP(u32 size, u32 operation, u32 permissions); |
| @@ -110,4 +143,16 @@ inline const char* GetCharPointer(const u32 address) { | |||
| 110 | return (const char *)GetPointer(address); | 143 | return (const char *)GetPointer(address); |
| 111 | } | 144 | } |
| 112 | 145 | ||
| 146 | inline const u32 VirtualAddressFromPhysical_FCRAM(const u32 address) { | ||
| 147 | return ((address & FCRAM_MASK) | FCRAM_VADDR); | ||
| 148 | } | ||
| 149 | |||
| 150 | inline const u32 VirtualAddressFromPhysical_IO(const u32 address) { | ||
| 151 | return (address + 0x0EB00000); | ||
| 152 | } | ||
| 153 | |||
| 154 | inline const u32 VirtualAddressFromPhysical_VRAM(const u32 address) { | ||
| 155 | return (address + 0x07000000); | ||
| 156 | } | ||
| 157 | |||
| 113 | } // namespace | 158 | } // namespace |