diff options
| -rw-r--r-- | src/core/mem_map.h | 135 | ||||
| -rw-r--r-- | src/core/mem_map_funcs.cpp | 10 |
2 files changed, 76 insertions, 69 deletions
diff --git a/src/core/mem_map.h b/src/core/mem_map.h index e63e81a4b..a2ef9d3af 100644 --- a/src/core/mem_map.h +++ b/src/core/mem_map.h | |||
| @@ -17,67 +17,84 @@ typedef u32 PAddr; ///< Represents a pointer in the physical address space. | |||
| 17 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 17 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 18 | 18 | ||
| 19 | enum : u32 { | 19 | enum : u32 { |
| 20 | BOOTROM_SIZE = 0x00010000, ///< Bootrom (super secret code/data @ 0x8000) size | 20 | BOOTROM_SIZE = 0x00010000, ///< Bootrom (super secret code/data @ 0x8000) size |
| 21 | MPCORE_PRIV_SIZE = 0x00002000, ///< MPCore private memory region size | 21 | BOOTROM_PADDR = 0x00000000, ///< Bootrom physical address |
| 22 | AXI_WRAM_SIZE = 0x00080000, ///< AXI WRAM size | 22 | BOOTROM_PADDR_END = (BOOTROM_PADDR + BOOTROM_SIZE), |
| 23 | 23 | ||
| 24 | FCRAM_SIZE = 0x08000000, ///< FCRAM size | 24 | BOOTROM_MIRROR_SIZE = 0x00010000, ///< Bootrom Mirror size |
| 25 | FCRAM_PADDR = 0x20000000, ///< FCRAM physical address | 25 | BOOTROM_MIRROR_PADDR = 0x00010000, ///< Bootrom Mirror physical address |
| 26 | FCRAM_PADDR_END = (FCRAM_PADDR + FCRAM_SIZE), ///< FCRAM end of physical space | 26 | BOOTROM_MIRROR_PADDR_END = (BOOTROM_MIRROR_PADDR + BOOTROM_MIRROR_SIZE), |
| 27 | FCRAM_VADDR = 0x08000000, ///< FCRAM virtual address | 27 | |
| 28 | FCRAM_VADDR_END = (FCRAM_VADDR + FCRAM_SIZE), ///< FCRAM end of virtual space | 28 | MPCORE_PRIV_SIZE = 0x00002000, ///< MPCore private memory region size |
| 29 | 29 | MPCORE_PRIV_PADDR = 0x17E00000, ///< MPCore private memory region physical address | |
| 30 | SHARED_MEMORY_SIZE = 0x04000000, ///< Shared memory size | 30 | MPCORE_PRIV_PADDR_END = (MPCORE_PRIV_PADDR + MPCORE_PRIV_SIZE), |
| 31 | SHARED_MEMORY_VADDR = 0x10000000, ///< Shared memory | 31 | |
| 32 | SHARED_MEMORY_VADDR_END = (SHARED_MEMORY_VADDR + SHARED_MEMORY_SIZE), | 32 | FCRAM_SIZE = 0x08000000, ///< FCRAM size |
| 33 | 33 | FCRAM_PADDR = 0x20000000, ///< FCRAM physical address | |
| 34 | DSP_MEMORY_SIZE = 0x00080000, ///< DSP memory size | 34 | FCRAM_PADDR_END = (FCRAM_PADDR + FCRAM_SIZE), ///< FCRAM end of physical space |
| 35 | DSP_MEMORY_VADDR = 0x1FF00000, ///< DSP memory virtual address | 35 | FCRAM_VADDR = 0x08000000, ///< FCRAM virtual address |
| 36 | 36 | FCRAM_VADDR_END = (FCRAM_VADDR + FCRAM_SIZE), ///< FCRAM end of virtual space | |
| 37 | CONFIG_MEMORY_SIZE = 0x00001000, ///< Configuration memory size | 37 | |
| 38 | CONFIG_MEMORY_VADDR = 0x1FF80000, ///< Configuration memory virtual address | 38 | AXI_WRAM_SIZE = 0x00080000, ///< AXI WRAM size |
| 39 | CONFIG_MEMORY_VADDR_END = (CONFIG_MEMORY_VADDR + CONFIG_MEMORY_SIZE), | 39 | AXI_WRAM_PADDR = 0x1FF80000, ///< AXI WRAM physical address |
| 40 | 40 | AXI_WRAM_PADDR_END = (AXI_WRAM_PADDR + AXI_WRAM_SIZE), | |
| 41 | KERNEL_MEMORY_SIZE = 0x00001000, ///< Kernel memory size | 41 | |
| 42 | KERNEL_MEMORY_VADDR = 0xFFFF0000, ///< Kernel memory where the kthread objects etc are | 42 | SHARED_MEMORY_SIZE = 0x04000000, ///< Shared memory size |
| 43 | KERNEL_MEMORY_VADDR_END = (KERNEL_MEMORY_VADDR + KERNEL_MEMORY_SIZE), | 43 | SHARED_MEMORY_VADDR = 0x10000000, ///< Shared memory |
| 44 | 44 | SHARED_MEMORY_VADDR_END = (SHARED_MEMORY_VADDR + SHARED_MEMORY_SIZE), | |
| 45 | EXEFS_CODE_SIZE = 0x03F00000, | 45 | |
| 46 | EXEFS_CODE_VADDR = 0x00100000, ///< ExeFS:/.code is loaded here | 46 | DSP_MEMORY_SIZE = 0x00080000, ///< DSP memory size |
| 47 | EXEFS_CODE_VADDR_END = (EXEFS_CODE_VADDR + EXEFS_CODE_SIZE), | 47 | DSP_MEMORY_VADDR = 0x1FF00000, ///< DSP memory virtual address |
| 48 | DSP_MEMORY_VADDR_END = (DSP_MEMORY_VADDR + DSP_MEMORY_SIZE), | ||
| 49 | |||
| 50 | CONFIG_MEMORY_SIZE = 0x00001000, ///< Configuration memory size | ||
| 51 | CONFIG_MEMORY_VADDR = 0x1FF80000, ///< Configuration memory virtual address | ||
| 52 | CONFIG_MEMORY_VADDR_END = (CONFIG_MEMORY_VADDR + CONFIG_MEMORY_SIZE), | ||
| 53 | |||
| 54 | SHARED_PAGE_SIZE = 0x00001000, ///< Shared page size | ||
| 55 | SHARED_PAGE_VADDR = 0x1FF81000, ///< Shared page virtual address | ||
| 56 | SHARED_PAGE_VADDR_END = (SHARED_PAGE_VADDR + SHARED_PAGE_SIZE), | ||
| 57 | |||
| 58 | KERNEL_MEMORY_SIZE = 0x00001000, ///< Kernel memory size | ||
| 59 | KERNEL_MEMORY_VADDR = 0xFFFF0000, ///< Kernel memory where the kthread objects etc are | ||
| 60 | KERNEL_MEMORY_VADDR_END = (KERNEL_MEMORY_VADDR + KERNEL_MEMORY_SIZE), | ||
| 61 | |||
| 62 | EXEFS_CODE_SIZE = 0x03F00000, | ||
| 63 | EXEFS_CODE_VADDR = 0x00100000, ///< ExeFS:/.code is loaded here | ||
| 64 | EXEFS_CODE_VADDR_END = (EXEFS_CODE_VADDR + EXEFS_CODE_SIZE), | ||
| 48 | 65 | ||
| 49 | // Region of FCRAM used by system | 66 | // Region of FCRAM used by system |
| 50 | SYSTEM_MEMORY_SIZE = 0x02C00000, ///< 44MB | 67 | SYSTEM_MEMORY_SIZE = 0x02C00000, ///< 44MB |
| 51 | SYSTEM_MEMORY_VADDR = 0x04000000, | 68 | SYSTEM_MEMORY_VADDR = 0x04000000, |
| 52 | SYSTEM_MEMORY_VADDR_END = (SYSTEM_MEMORY_VADDR + SYSTEM_MEMORY_SIZE), | 69 | SYSTEM_MEMORY_VADDR_END = (SYSTEM_MEMORY_VADDR + SYSTEM_MEMORY_SIZE), |
| 53 | 70 | ||
| 54 | HEAP_SIZE = FCRAM_SIZE, ///< Application heap size | 71 | HEAP_SIZE = FCRAM_SIZE, ///< Application heap size |
| 55 | //HEAP_PADDR = HEAP_GSP_SIZE, | 72 | //HEAP_PADDR = HEAP_GSP_SIZE, |
| 56 | //HEAP_PADDR_END = (HEAP_PADDR + HEAP_SIZE), | 73 | //HEAP_PADDR_END = (HEAP_PADDR + HEAP_SIZE), |
| 57 | HEAP_VADDR = 0x08000000, | 74 | HEAP_VADDR = 0x08000000, |
| 58 | HEAP_VADDR_END = (HEAP_VADDR + HEAP_SIZE), | 75 | HEAP_VADDR_END = (HEAP_VADDR + HEAP_SIZE), |
| 59 | 76 | ||
| 60 | HEAP_LINEAR_SIZE = 0x08000000, ///< Linear heap size... TODO: Define correctly? | 77 | HEAP_LINEAR_SIZE = 0x08000000, ///< Linear heap size... TODO: Define correctly? |
| 61 | HEAP_LINEAR_VADDR = 0x14000000, | 78 | HEAP_LINEAR_VADDR = 0x14000000, |
| 62 | HEAP_LINEAR_VADDR_END = (HEAP_LINEAR_VADDR + HEAP_LINEAR_SIZE), | 79 | HEAP_LINEAR_VADDR_END = (HEAP_LINEAR_VADDR + HEAP_LINEAR_SIZE), |
| 63 | HEAP_LINEAR_PADDR = 0x00000000, | 80 | HEAP_LINEAR_PADDR = 0x00000000, |
| 64 | HEAP_LINEAR_PADDR_END = (HEAP_LINEAR_PADDR + HEAP_LINEAR_SIZE), | 81 | HEAP_LINEAR_PADDR_END = (HEAP_LINEAR_PADDR + HEAP_LINEAR_SIZE), |
| 65 | 82 | ||
| 66 | HARDWARE_IO_SIZE = 0x01000000, | 83 | HARDWARE_IO_SIZE = 0x01000000, |
| 67 | HARDWARE_IO_PADDR = 0x10000000, ///< IO physical address start | 84 | HARDWARE_IO_PADDR = 0x10000000, ///< IO physical address start |
| 68 | HARDWARE_IO_VADDR = 0x1EC00000, ///< IO virtual address start | 85 | HARDWARE_IO_VADDR = 0x1EC00000, ///< IO virtual address start |
| 69 | HARDWARE_IO_PADDR_END = (HARDWARE_IO_PADDR + HARDWARE_IO_SIZE), | 86 | HARDWARE_IO_PADDR_END = (HARDWARE_IO_PADDR + HARDWARE_IO_SIZE), |
| 70 | HARDWARE_IO_VADDR_END = (HARDWARE_IO_VADDR + HARDWARE_IO_SIZE), | 87 | HARDWARE_IO_VADDR_END = (HARDWARE_IO_VADDR + HARDWARE_IO_SIZE), |
| 71 | 88 | ||
| 72 | VRAM_SIZE = 0x00600000, | 89 | VRAM_SIZE = 0x00600000, |
| 73 | VRAM_PADDR = 0x18000000, | 90 | VRAM_PADDR = 0x18000000, |
| 74 | VRAM_VADDR = 0x1F000000, | 91 | VRAM_VADDR = 0x1F000000, |
| 75 | VRAM_PADDR_END = (VRAM_PADDR + VRAM_SIZE), | 92 | VRAM_PADDR_END = (VRAM_PADDR + VRAM_SIZE), |
| 76 | VRAM_VADDR_END = (VRAM_VADDR + VRAM_SIZE), | 93 | VRAM_VADDR_END = (VRAM_VADDR + VRAM_SIZE), |
| 77 | 94 | ||
| 78 | SCRATCHPAD_SIZE = 0x00004000, ///< Typical stack size - TODO: Read from exheader | 95 | SCRATCHPAD_SIZE = 0x00004000, ///< Typical stack size - TODO: Read from exheader |
| 79 | SCRATCHPAD_VADDR_END = 0x10000000, | 96 | SCRATCHPAD_VADDR_END = 0x10000000, |
| 80 | SCRATCHPAD_VADDR = (SCRATCHPAD_VADDR_END - SCRATCHPAD_SIZE), ///< Stack space | 97 | SCRATCHPAD_VADDR = (SCRATCHPAD_VADDR_END - SCRATCHPAD_SIZE), ///< Stack space |
| 81 | }; | 98 | }; |
| 82 | 99 | ||
| 83 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 100 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp index 0f378eaee..fdf382ed6 100644 --- a/src/core/mem_map_funcs.cpp +++ b/src/core/mem_map_funcs.cpp | |||
| @@ -58,11 +58,6 @@ inline void Read(T &var, const VAddr vaddr) { | |||
| 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_VADDR]); | 59 | var = *((const T*)&g_kernel_mem[vaddr - KERNEL_MEMORY_VADDR]); |
| 60 | 60 | ||
| 61 | // Hardware I/O register reads | ||
| 62 | // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space | ||
| 63 | } else if ((vaddr >= HARDWARE_IO_VADDR) && (vaddr < HARDWARE_IO_VADDR_END)) { | ||
| 64 | HW::Read<T>(var, vaddr); | ||
| 65 | |||
| 66 | // ExeFS:/.code is loaded here | 61 | // ExeFS:/.code is loaded here |
| 67 | } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) { | 62 | } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) { |
| 68 | var = *((const T*)&g_exefs_code[vaddr - EXEFS_CODE_VADDR]); | 63 | var = *((const T*)&g_exefs_code[vaddr - EXEFS_CODE_VADDR]); |
| @@ -103,11 +98,6 @@ inline void Write(const VAddr vaddr, const T data) { | |||
| 103 | if (vaddr >= KERNEL_MEMORY_VADDR && vaddr < KERNEL_MEMORY_VADDR_END) { | 98 | if (vaddr >= KERNEL_MEMORY_VADDR && vaddr < KERNEL_MEMORY_VADDR_END) { |
| 104 | *(T*)&g_kernel_mem[vaddr - KERNEL_MEMORY_VADDR] = data; | 99 | *(T*)&g_kernel_mem[vaddr - KERNEL_MEMORY_VADDR] = data; |
| 105 | 100 | ||
| 106 | // Hardware I/O register writes | ||
| 107 | // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space | ||
| 108 | } else if ((vaddr >= HARDWARE_IO_VADDR) && (vaddr < HARDWARE_IO_VADDR_END)) { | ||
| 109 | HW::Write<T>(vaddr, data); | ||
| 110 | |||
| 111 | // ExeFS:/.code is loaded here | 101 | // ExeFS:/.code is loaded here |
| 112 | } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) { | 102 | } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) { |
| 113 | *(T*)&g_exefs_code[vaddr - EXEFS_CODE_VADDR] = data; | 103 | *(T*)&g_exefs_code[vaddr - EXEFS_CODE_VADDR] = data; |