mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Memory: Properly cleanup & shutdown.
This commit is contained in:
		
							parent
							
								
									28df8dbfeb
								
							
						
					
					
						commit
						bbabed8e98
					
				
					 3 changed files with 56 additions and 34 deletions
				
			
		|  | @ -11,30 +11,30 @@ | |||
| 
 | ||||
| namespace Memory { | ||||
| 
 | ||||
| u8* g_base                      = nullptr;   ///< The base pointer to the auto-mirrored arena.
 | ||||
| u8* g_base;                     ///< The base pointer to the auto-mirrored arena.
 | ||||
| 
 | ||||
| static MemArena arena;                       ///< The MemArena class
 | ||||
| static MemArena arena;          ///< The MemArena class
 | ||||
| 
 | ||||
| u8* g_exefs_code                = nullptr;   ///< ExeFS:/.code is loaded here
 | ||||
| u8* g_system_mem                = nullptr;   ///< System memory
 | ||||
| u8* g_heap                      = nullptr;   ///< Application heap (main memory)
 | ||||
| u8* g_heap_linear               = nullptr;   ///< Linear heap
 | ||||
| u8* g_vram                      = nullptr;   ///< Video memory (VRAM) pointer
 | ||||
| u8* g_shared_mem                = nullptr;   ///< Shared memory
 | ||||
| u8* g_dsp_mem                   = nullptr;   ///< DSP memory
 | ||||
| u8* g_kernel_mem;                              ///< Kernel memory
 | ||||
| u8* g_exefs_code;               ///< ExeFS:/.code is loaded here
 | ||||
| u8* g_system_mem;               ///< System memory
 | ||||
| u8* g_heap;                     ///< Application heap (main memory)
 | ||||
| u8* g_heap_linear;              ///< Linear heap
 | ||||
| u8* g_vram;                     ///< Video memory (VRAM) pointer
 | ||||
| u8* g_shared_mem;               ///< Shared memory
 | ||||
| u8* g_dsp_mem;                  ///< DSP memory
 | ||||
| u8* g_kernel_mem;               ///< Kernel memory
 | ||||
| 
 | ||||
| static u8* physical_bootrom     = nullptr;   ///< Bootrom physical memory
 | ||||
| static u8* uncached_bootrom     = nullptr; | ||||
| static u8* physical_bootrom;    ///< Bootrom physical memory
 | ||||
| static u8* uncached_bootrom; | ||||
| 
 | ||||
| static u8* physical_exefs_code  = nullptr;   ///< Phsical ExeFS:/.code is loaded here
 | ||||
| static u8* physical_system_mem  = nullptr;   ///< System physical memory
 | ||||
| static u8* physical_fcram       = nullptr;   ///< Main physical memory (FCRAM)
 | ||||
| static u8* physical_heap_gsp    = nullptr;   ///< GSP heap physical memory
 | ||||
| static u8* physical_vram        = nullptr;   ///< Video physical memory (VRAM)
 | ||||
| static u8* physical_shared_mem  = nullptr;   ///< Physical shared memory
 | ||||
| static u8* physical_dsp_mem     = nullptr;   ///< Physical DSP memory
 | ||||
| static u8* physical_kernel_mem;              ///< Kernel memory
 | ||||
| static u8* physical_exefs_code; ///< Phsical ExeFS:/.code is loaded here
 | ||||
| static u8* physical_system_mem; ///< System physical memory
 | ||||
| static u8* physical_fcram;      ///< Main physical memory (FCRAM)
 | ||||
| static u8* physical_heap_gsp;   ///< GSP heap physical memory
 | ||||
| static u8* physical_vram;       ///< Video physical memory (VRAM)
 | ||||
| static u8* physical_shared_mem; ///< Physical shared memory
 | ||||
| static u8* physical_dsp_mem;    ///< Physical DSP memory
 | ||||
| static u8* physical_kernel_mem; ///< Kernel memory
 | ||||
| 
 | ||||
| // We don't declare the IO region in here since its handled by other means.
 | ||||
| static MemoryView g_views[] = { | ||||
|  | @ -73,6 +73,7 @@ void Init() { | |||
|     } | ||||
| 
 | ||||
|     g_base = MemoryMap_Setup(g_views, kNumMemViews, flags, &arena); | ||||
|     MemBlock_Init(); | ||||
| 
 | ||||
|     LOG_DEBUG(HW_Memory, "initialized OK, RAM at %p (mirror at 0 @ %p)", g_heap, | ||||
|         physical_fcram); | ||||
|  | @ -81,9 +82,29 @@ void Init() { | |||
| void Shutdown() { | ||||
|     u32 flags = 0; | ||||
|     MemoryMap_Shutdown(g_views, kNumMemViews, flags, &arena); | ||||
| 
 | ||||
|     arena.ReleaseSpace(); | ||||
|     MemBlock_Shutdown(); | ||||
| 
 | ||||
|     g_base = nullptr; | ||||
|     g_exefs_code = nullptr; | ||||
|     g_system_mem = nullptr; | ||||
|     g_heap = nullptr; | ||||
|     g_heap_linear = nullptr; | ||||
|     g_vram = nullptr; | ||||
|     g_shared_mem = nullptr; | ||||
|     g_dsp_mem = nullptr; | ||||
|     g_kernel_mem = nullptr; | ||||
| 
 | ||||
|     physical_bootrom = nullptr; | ||||
|     uncached_bootrom = nullptr; | ||||
|     physical_exefs_code = nullptr; | ||||
|     physical_system_mem = nullptr; | ||||
|     physical_fcram = nullptr; | ||||
|     physical_heap_gsp = nullptr; | ||||
|     physical_vram = nullptr; | ||||
|     physical_shared_mem = nullptr; | ||||
|     physical_dsp_mem = nullptr; | ||||
|     physical_kernel_mem = nullptr; | ||||
| 
 | ||||
|     LOG_DEBUG(HW_Memory, "shutdown OK"); | ||||
| } | ||||
|  |  | |||
|  | @ -171,6 +171,12 @@ u32 MapBlock_Heap(u32 size, u32 operation, u32 permissions); | |||
|  */ | ||||
| u32 MapBlock_HeapLinear(u32 size, u32 operation, u32 permissions); | ||||
| 
 | ||||
| /// Initialize mapped memory blocks
 | ||||
| void MemBlock_Init(); | ||||
| 
 | ||||
| /// Shutdown mapped memory blocks
 | ||||
| void MemBlock_Shutdown(); | ||||
| 
 | ||||
| inline const char* GetCharPointer(const VAddr address) { | ||||
|     return (const char *)GetPointer(address); | ||||
| } | ||||
|  |  | |||
|  | @ -15,7 +15,6 @@ namespace Memory { | |||
| 
 | ||||
| static std::map<u32, MemoryBlock> heap_map; | ||||
| static std::map<u32, MemoryBlock> heap_linear_map; | ||||
| static std::map<u32, MemoryBlock> shared_map; | ||||
| 
 | ||||
| /// Convert a physical address to virtual address
 | ||||
| VAddr PhysicalToVirtualAddress(const PAddr addr) { | ||||
|  | @ -185,12 +184,6 @@ u8 *GetPointer(const VAddr vaddr) { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * 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) { | ||||
|     MemoryBlock block; | ||||
| 
 | ||||
|  | @ -208,12 +201,6 @@ u32 MapBlock_Heap(u32 size, u32 operation, u32 permissions) { | |||
|     return block.GetVirtualAddress(); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * Maps a block of memory on the linear heap | ||||
|  * @param size Size of block in bytes | ||||
|  * @param operation Memory map operation type | ||||
|  * @param flags Memory allocation flags | ||||
|  */ | ||||
| u32 MapBlock_HeapLinear(u32 size, u32 operation, u32 permissions) { | ||||
|     MemoryBlock block; | ||||
| 
 | ||||
|  | @ -231,6 +218,14 @@ u32 MapBlock_HeapLinear(u32 size, u32 operation, u32 permissions) { | |||
|     return block.GetVirtualAddress(); | ||||
| } | ||||
| 
 | ||||
| void MemBlock_Init() { | ||||
| } | ||||
| 
 | ||||
| void MemBlock_Shutdown() { | ||||
|     heap_map.clear(); | ||||
|     heap_linear_map.clear(); | ||||
| } | ||||
| 
 | ||||
| u8 Read8(const VAddr addr) { | ||||
|     u8 data = 0; | ||||
|     Read<u8>(data, addr); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue