mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Memory: Add TryVirtualToPhysicalAddress, returning a boost::optional
This commit is contained in:
		
							parent
							
								
									326e7c7020
								
							
						
					
					
						commit
						6ae0086b39
					
				
					 2 changed files with 23 additions and 7 deletions
				
			
		|  | @ -670,7 +670,7 @@ void WriteMMIO<u64>(MMIORegionPointer mmio_handler, VAddr addr, const u64 data) | |||
|     mmio_handler->Write64(addr, data); | ||||
| } | ||||
| 
 | ||||
| PAddr VirtualToPhysicalAddress(const VAddr addr) { | ||||
| boost::optional<PAddr> TryVirtualToPhysicalAddress(const VAddr addr) { | ||||
|     if (addr == 0) { | ||||
|         return 0; | ||||
|     } else if (addr >= VRAM_VADDR && addr < VRAM_VADDR_END) { | ||||
|  | @ -687,9 +687,17 @@ PAddr VirtualToPhysicalAddress(const VAddr addr) { | |||
|         return addr - N3DS_EXTRA_RAM_VADDR + N3DS_EXTRA_RAM_PADDR; | ||||
|     } | ||||
| 
 | ||||
|     LOG_ERROR(HW_Memory, "Unknown virtual address @ 0x%08X", addr); | ||||
|     // To help with debugging, set bit on address so that it's obviously invalid.
 | ||||
|     return addr | 0x80000000; | ||||
|     return boost::none; | ||||
| } | ||||
| 
 | ||||
| PAddr VirtualToPhysicalAddress(const VAddr addr) { | ||||
|     auto paddr = TryVirtualToPhysicalAddress(addr); | ||||
|     if (!paddr) { | ||||
|         LOG_ERROR(HW_Memory, "Unknown virtual address @ 0x%08X", addr); | ||||
|         // To help with debugging, set bit on address so that it's obviously invalid.
 | ||||
|         return addr | 0x80000000; | ||||
|     } | ||||
|     return *paddr; | ||||
| } | ||||
| 
 | ||||
| boost::optional<VAddr> PhysicalToVirtualAddress(const PAddr addr) { | ||||
|  |  | |||
|  | @ -149,9 +149,17 @@ u8* GetPointer(VAddr virtual_address); | |||
| std::string ReadCString(VAddr virtual_address, std::size_t max_length); | ||||
| 
 | ||||
| /**
 | ||||
| * Converts a virtual address inside a region with 1:1 mapping to physical memory to a physical | ||||
| * address. This should be used by services to translate addresses for use by the hardware. | ||||
| */ | ||||
|  * Converts a virtual address inside a region with 1:1 mapping to physical memory to a physical | ||||
|  * address. This should be used by services to translate addresses for use by the hardware. | ||||
|  */ | ||||
| boost::optional<PAddr> TryVirtualToPhysicalAddress(VAddr addr); | ||||
| 
 | ||||
| /**
 | ||||
|  * Converts a virtual address inside a region with 1:1 mapping to physical memory to a physical | ||||
|  * address. This should be used by services to translate addresses for use by the hardware. | ||||
|  * | ||||
|  * @deprecated Use TryVirtualToPhysicalAddress(), which reports failure. | ||||
|  */ | ||||
| PAddr VirtualToPhysicalAddress(VAddr addr); | ||||
| 
 | ||||
| /**
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue