|
|
@@ -691,6 +691,9 @@ static ResultCode GetInfo(Core::System& system, u64* result, u64 info_id, Handle
|
|
|
// 6.0.0+
|
|
|
TotalPhysicalMemoryAvailableWithoutSystemResource = 21,
|
|
|
TotalPhysicalMemoryUsedWithoutSystemResource = 22,
|
|
|
+
|
|
|
+ // Homebrew only
|
|
|
+ MesosphereCurrentProcess = 65001,
|
|
|
};
|
|
|
|
|
|
const auto info_id_type = static_cast<GetInfoType>(info_id);
|
|
|
@@ -913,6 +916,27 @@ static ResultCode GetInfo(Core::System& system, u64* result, u64 info_id, Handle
|
|
|
*result = system.Kernel().CurrentScheduler()->GetIdleThread()->GetCpuTime();
|
|
|
return ResultSuccess;
|
|
|
}
|
|
|
+ case GetInfoType::MesosphereCurrentProcess: {
|
|
|
+ // Verify the input handle is invalid.
|
|
|
+ R_UNLESS(handle == InvalidHandle, ResultInvalidHandle);
|
|
|
+
|
|
|
+ // Verify the sub-type is valid.
|
|
|
+ R_UNLESS(info_sub_id == 0, ResultInvalidCombination);
|
|
|
+
|
|
|
+ // Get the handle table.
|
|
|
+ KProcess* current_process = system.Kernel().CurrentProcess();
|
|
|
+ KHandleTable& handle_table = current_process->GetHandleTable();
|
|
|
+
|
|
|
+ // Get a new handle for the current process.
|
|
|
+ Handle tmp;
|
|
|
+ R_TRY(handle_table.Add(&tmp, current_process));
|
|
|
+
|
|
|
+ // Set the output.
|
|
|
+ *result = tmp;
|
|
|
+
|
|
|
+ // We succeeded.
|
|
|
+ return ResultSuccess;
|
|
|
+ }
|
|
|
default:
|
|
|
LOG_ERROR(Kernel_SVC, "Unimplemented svcGetInfo id=0x{:016X}", info_id);
|
|
|
return ResultInvalidEnumValue;
|