mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Memory: Add TryVirtualToPhysicalAddress, returning a boost::optional
This commit is contained in:
		
							parent
							
								
									326e7c7020
								
							
						
					
					
						commit
						6ae0086b39
					
				@ -670,7 +670,7 @@ void WriteMMIO<u64>(MMIORegionPointer mmio_handler, VAddr addr, const u64 data)
 | 
				
			|||||||
    mmio_handler->Write64(addr, data);
 | 
					    mmio_handler->Write64(addr, data);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PAddr VirtualToPhysicalAddress(const VAddr addr) {
 | 
					boost::optional<PAddr> TryVirtualToPhysicalAddress(const VAddr addr) {
 | 
				
			||||||
    if (addr == 0) {
 | 
					    if (addr == 0) {
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    } else if (addr >= VRAM_VADDR && addr < VRAM_VADDR_END) {
 | 
					    } 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;
 | 
					        return addr - N3DS_EXTRA_RAM_VADDR + N3DS_EXTRA_RAM_PADDR;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    LOG_ERROR(HW_Memory, "Unknown virtual address @ 0x%08X", addr);
 | 
					    return boost::none;
 | 
				
			||||||
    // To help with debugging, set bit on address so that it's obviously invalid.
 | 
					}
 | 
				
			||||||
    return addr | 0x80000000;
 | 
					
 | 
				
			||||||
 | 
					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) {
 | 
					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);
 | 
					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
 | 
					 * 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.
 | 
					 * 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);
 | 
					PAddr VirtualToPhysicalAddress(VAddr addr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user