summaryrefslogtreecommitdiffstats
path: root/src/core/hle/svc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/svc.cpp')
-rw-r--r--src/core/hle/svc.cpp36
1 files changed, 29 insertions, 7 deletions
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp
index fa6fd9ab1..6ec151d94 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;
}