diff options
Diffstat (limited to 'src/core/hle/svc.cpp')
-rw-r--r-- | src/core/hle/svc.cpp | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index fa6fd9ab1b..6ec151d946 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -194,16 +194,38 @@ static void OutputDebugString(VAddr address, s32 len) { LOG_DEBUG(Debug_Emulated, "%.*s", len, string.data()); } +/// Gets system/memory information for the current process static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) { - LOG_TRACE(Kernel_SVC, "called, info_id=0x%X, info_sub_id=0x%X, handle=0x%08X", info_id, info_sub_id, handle); + LOG_TRACE(Kernel_SVC, "called info_id=0x%X, info_sub_id=0x%X, handle=0x%08X", info_id, + info_sub_id, handle); - if (!handle) { - switch (info_id) { - case 0xB: - *result = 0; // Used for PRNG seed - return RESULT_SUCCESS; - } + auto& vm_manager = Kernel::g_current_process->vm_manager; + switch (static_cast<GetInfoType>(info_id)) { + case GetInfoType::TotalMemoryUsage: + *result = vm_manager.GetTotalMemoryUsage(); + break; + case GetInfoType::TotalHeapUsage: + *result = vm_manager.GetTotalHeapUsage(); + break; + case GetInfoType::RandomEntropy: + *result = 0; + break; + case GetInfoType::AddressSpaceBaseAddr: + *result = vm_manager.GetAddressSpaceBaseAddr(); + break; + case GetInfoType::AddressSpaceSize: + *result = vm_manager.GetAddressSpaceSize(); + break; + case GetInfoType::NewMapRegionBaseAddr: + *result = vm_manager.GetNewMapRegionBaseAddr(); + break; + case GetInfoType::NewMapRegionSize: + *result = vm_manager.GetNewMapRegionSize(); + break; + default: + UNIMPLEMENTED(); } + return RESULT_SUCCESS; } |