diff options
author | bunnei <bunneidev@gmail.com> | 2018-01-01 16:01:06 -0500 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2018-01-01 16:01:06 -0500 |
commit | 72f671fd7a72d75d6fd697673bee1be18a6dda8b (patch) | |
tree | f03e2b4f75df1f50cbbbe29a70420d32b7467e90 /src/core/hle/svc.cpp | |
parent | e9710a2cf7ef7b9d98f9d8a7ed6f8ac5a04921ab (diff) |
svc: Improve svcGetInfo.
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; } |