From b7cd4c9e90be42476a2e242571d36cbbca2fbd4c Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 24 Apr 2014 22:32:26 -0400 Subject: added functions to map Heap and Shared memory space --- src/core/mem_map.h | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'src/core/mem_map.h') diff --git a/src/core/mem_map.h b/src/core/mem_map.h index ab1eb2606..5346d04ee 100644 --- a/src/core/mem_map.h +++ b/src/core/mem_map.h @@ -22,6 +22,8 @@ enum { HEAP_GSP_SIZE = 0x02000000, ///< GSP heap size... TODO: Define correctly? HEAP_SIZE = FCRAM_SIZE, ///< Application heap size + SHARED_MEMORY_VADDR = 0x10000000, ///< Shared memory + HEAP_PADDR = HEAP_GSP_SIZE, HEAP_PADDR_END = (HEAP_PADDR + HEAP_SIZE), HEAP_VADDR = 0x08000000, @@ -49,10 +51,11 @@ enum { //////////////////////////////////////////////////////////////////////////////////////////////////// -/// Represents a block of heap memory mapped by ControlMemory -struct HeapBlock { - HeapBlock() : base_address(0), address(0), size(0), operation(0), permissions(0) { +/// Represents a block of memory mapped by ControlMemory/MapMemoryBlock +struct MemoryBlock { + MemoryBlock() : handle(0), base_address(0), address(0), size(0), operation(0), permissions(0) { } + u32 handle; u32 base_address; u32 address; u32 size; @@ -98,10 +101,26 @@ void Write32(const u32 addr, const u32 data); u8* GetPointer(const u32 Address); +/** + * Maps a block of memory in shared memory + * @param handle Handle to map memory block for + * @param addr Address to map memory block to + * @param permissions Memory map permissions + */ +u32 MapBlock_Shared(u32 handle, u32 addr,u32 permissions) ; + +/** + * Maps a block of memory on the heap + * @param size Size of block in bytes + * @param operation Memory map operation type + * @param flags Memory allocation flags + */ +u32 MapBlock_Heap(u32 size, u32 operation, u32 permissions); + /** * Maps a block of memory on the GSP heap * @param size Size of block in bytes - * @param operation Control memory operation + * @param operation Memory map operation type * @param permissions Control memory permissions */ u32 MapBlock_HeapGSP(u32 size, u32 operation, u32 permissions); -- cgit v1.2.3 From 890c7261d2d6d6a760512ebe93c565ee87220983 Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 24 Apr 2014 23:56:06 -0400 Subject: - added preliminary support for svc_MapMemoryBlock - added shared memory region - moarrrr cleanups to memory_map --- src/core/mem_map.h | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/core/mem_map.h') diff --git a/src/core/mem_map.h b/src/core/mem_map.h index 5346d04ee..ab96e210f 100644 --- a/src/core/mem_map.h +++ b/src/core/mem_map.h @@ -21,8 +21,11 @@ enum { SCRATCHPAD_SIZE = 0x00004000, ///< Typical stack size - TODO: Read from exheader HEAP_GSP_SIZE = 0x02000000, ///< GSP heap size... TODO: Define correctly? HEAP_SIZE = FCRAM_SIZE, ///< Application heap size + SHARED_MEMORY_SIZE = 0x04000000, ///< Shared memory size + HARDWARE_IO_SIZE = 0x01000000, SHARED_MEMORY_VADDR = 0x10000000, ///< Shared memory + SHARED_MEMORY_VADDR_END = (SHARED_MEMORY_VADDR + SHARED_MEMORY_SIZE), HEAP_PADDR = HEAP_GSP_SIZE, HEAP_PADDR_END = (HEAP_PADDR + HEAP_SIZE), @@ -38,12 +41,17 @@ enum { SCRATCHPAD_MASK = (SCRATCHPAD_SIZE - 1), ///< Scratchpad memory mask HEAP_GSP_MASK = (HEAP_GSP_SIZE - 1), HEAP_MASK = (HEAP_SIZE - 1), + SHARED_MEMORY_MASK = (SHARED_MEMORY_SIZE - 1), FCRAM_PADDR = 0x20000000, ///< FCRAM physical address FCRAM_PADDR_END = (FCRAM_PADDR + FCRAM_SIZE), ///< FCRAM end of physical space FCRAM_VADDR = 0x08000000, ///< FCRAM virtual address FCRAM_VADDR_END = (FCRAM_VADDR + FCRAM_SIZE), ///< FCRAM end of virtual space + HARDWARE_IO_VADDR = 0x1EC00000, + HARDWARE_IO_VADDR_END = (HARDWARE_IO_VADDR + HARDWARE_IO_SIZE), + + VRAM_VADDR = 0x1F000000, SCRATCHPAD_VADDR_END = 0x10000000, SCRATCHPAD_VADDR = (SCRATCHPAD_VADDR_END - SCRATCHPAD_SIZE), ///< Stack space @@ -84,6 +92,7 @@ extern u8 *g_base; extern u8* g_heap_gsp; ///< GSP heap (main memory) extern u8* g_heap; ///< Application heap (main memory) extern u8* g_vram; ///< Video memory (VRAM) +extern u8* g_shared_mem; ///< Shared memory void Init(); void Shutdown(); -- cgit v1.2.3 From 86a515e5acd7e5fa3abd3a012ce4771d3b920754 Mon Sep 17 00:00:00 2001 From: bunnei Date: Sat, 26 Apr 2014 01:27:25 -0400 Subject: added vram to memory_map --- src/core/mem_map.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/core/mem_map.h') diff --git a/src/core/mem_map.h b/src/core/mem_map.h index ab96e210f..087e8d3bc 100644 --- a/src/core/mem_map.h +++ b/src/core/mem_map.h @@ -50,9 +50,10 @@ enum { HARDWARE_IO_VADDR = 0x1EC00000, HARDWARE_IO_VADDR_END = (HARDWARE_IO_VADDR + HARDWARE_IO_SIZE), - VRAM_VADDR = 0x1F000000, + VRAM_VADDR_END = (VRAM_VADDR + VRAM_SIZE), + SCRATCHPAD_VADDR_END = 0x10000000, SCRATCHPAD_VADDR = (SCRATCHPAD_VADDR_END - SCRATCHPAD_SIZE), ///< Stack space }; -- cgit v1.2.3 From f78794961e2bdcb0314516a3c2409afbfcd6d470 Mon Sep 17 00:00:00 2001 From: bunnei Date: Sat, 26 Apr 2014 14:21:40 -0400 Subject: - changed HW IO map to use virtual addresses - added hooks to catch LCD IO read/writes --- src/core/mem_map.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/core/mem_map.h') diff --git a/src/core/mem_map.h b/src/core/mem_map.h index 087e8d3bc..1a49cc98d 100644 --- a/src/core/mem_map.h +++ b/src/core/mem_map.h @@ -48,7 +48,9 @@ enum { FCRAM_VADDR = 0x08000000, ///< FCRAM virtual address FCRAM_VADDR_END = (FCRAM_VADDR + FCRAM_SIZE), ///< FCRAM end of virtual space - HARDWARE_IO_VADDR = 0x1EC00000, + HARDWARE_IO_PADDR = 0x10000000, ///< IO physical address start + HARDWARE_IO_VADDR = 0x1EC00000, ///< IO virtual address start + HARDWARE_IO_PADDR_END = (HARDWARE_IO_PADDR + HARDWARE_IO_SIZE), HARDWARE_IO_VADDR_END = (HARDWARE_IO_VADDR + HARDWARE_IO_SIZE), VRAM_VADDR = 0x1F000000, -- cgit v1.2.3 From b2a6ad52f4a059b66e2a0ea12813ce968fa04277 Mon Sep 17 00:00:00 2001 From: bunnei Date: Sun, 27 Apr 2014 12:40:31 -0400 Subject: added helper functions to mem_map to convert physical addresses to virtual addresses --- src/core/mem_map.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/core/mem_map.h') diff --git a/src/core/mem_map.h b/src/core/mem_map.h index 1a49cc98d..c744e377e 100644 --- a/src/core/mem_map.h +++ b/src/core/mem_map.h @@ -53,7 +53,9 @@ enum { HARDWARE_IO_PADDR_END = (HARDWARE_IO_PADDR + HARDWARE_IO_SIZE), HARDWARE_IO_VADDR_END = (HARDWARE_IO_VADDR + HARDWARE_IO_SIZE), + VRAM_PADDR = 0x18000000, VRAM_VADDR = 0x1F000000, + VRAM_PADDR_END = (VRAM_PADDR + VRAM_SIZE), VRAM_VADDR_END = (VRAM_VADDR + VRAM_SIZE), SCRATCHPAD_VADDR_END = 0x10000000, @@ -141,4 +143,16 @@ inline const char* GetCharPointer(const u32 address) { return (const char *)GetPointer(address); } +inline const u32 VirtualAddressFromPhysical_FCRAM(const u32 address) { + return ((address & FCRAM_MASK) | FCRAM_VADDR); +} + +inline const u32 VirtualAddressFromPhysical_IO(const u32 address) { + return (address + 0x0EB00000); +} + +inline const u32 VirtualAddressFromPhysical_VRAM(const u32 address) { + return (address + 0x07000000); +} + } // namespace -- cgit v1.2.3