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);
|
||||
}
|
||||
|
||||
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,10 +687,18 @@ PAddr VirtualToPhysicalAddress(const VAddr addr) {
|
|||
return addr - N3DS_EXTRA_RAM_VADDR + N3DS_EXTRA_RAM_PADDR;
|
||||
}
|
||||
|
||||
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) {
|
||||
if (addr == 0) {
|
||||
|
|
|
@ -152,6 +152,14 @@ 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.
|
||||
*/
|
||||
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);
|
||||
|
||||
/**
|
||||
|
|
Reference in New Issue