aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/vm_manager.cpp
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2018-12-12 11:34:01 -0500
committerLioncash <mathew1800@gmail.com>2018-12-12 15:07:30 -0500
commitd7ba5372f3ea20e32fc421d1e6b4a40f2df96181 (patch)
tree71084e1b71b5fd705143bbceb44c46e49f63cac2 /src/core/hle/kernel/vm_manager.cpp
parent1d3d7d08eb6f4968e5817b00233632375cd7f0c3 (diff)
vm_manager: Migrate memory querying to the VMManager interface
Gets rid of the need to directly access the managed VMAs outside of the memory manager itself just for querying memory.
Diffstat (limited to 'src/core/hle/kernel/vm_manager.cpp')
-rw-r--r--src/core/hle/kernel/vm_manager.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp
index e0f204b0b6..21bcee192e 100644
--- a/src/core/hle/kernel/vm_manager.cpp
+++ b/src/core/hle/kernel/vm_manager.cpp
@@ -302,6 +302,25 @@ ResultCode VMManager::HeapFree(VAddr target, u64 size) {
return RESULT_SUCCESS;
}
+MemoryInfo VMManager::QueryMemory(VAddr address) const {
+ const auto vma = FindVMA(address);
+ MemoryInfo memory_info{};
+
+ if (IsValidHandle(vma)) {
+ memory_info.base_address = vma->second.base;
+ memory_info.permission = static_cast<u32>(vma->second.permissions);
+ memory_info.size = vma->second.size;
+ memory_info.state = ToSvcMemoryState(vma->second.meminfo_state);
+ } else {
+ memory_info.base_address = 0;
+ memory_info.permission = static_cast<u32>(VMAPermission::None);
+ memory_info.size = 0;
+ memory_info.state = static_cast<u32>(MemoryState::Unmapped);
+ }
+
+ return memory_info;
+}
+
ResultCode VMManager::MirrorMemory(VAddr dst_addr, VAddr src_addr, u64 size, MemoryState state) {
const auto vma = FindVMA(src_addr);