From 434827e11ebcf5a05ebb65a2928d6718b38d3ced Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Aug 2023 03:43:26 +0300 Subject: [PATCH] Add svcGetThreadIdealProcessor --- include/kernel/kernel.hpp | 1 + src/core/kernel/kernel.cpp | 1 + src/core/kernel/threads.cpp | 9 +++++++++ 3 files changed, 11 insertions(+) diff --git a/include/kernel/kernel.hpp b/include/kernel/kernel.hpp index 8e924c4d..7439cabb 100644 --- a/include/kernel/kernel.hpp +++ b/include/kernel/kernel.hpp @@ -135,6 +135,7 @@ private: void getSystemInfo(); void getSystemTick(); void getThreadID(); + void getThreadIdealProcessor(); void getThreadPriority(); void sendSyncRequest(); void setThreadPriority(); diff --git a/src/core/kernel/kernel.cpp b/src/core/kernel/kernel.cpp index 677a0d5f..408be358 100644 --- a/src/core/kernel/kernel.cpp +++ b/src/core/kernel/kernel.cpp @@ -35,6 +35,7 @@ void Kernel::serviceSVC(u32 svc) { case 0x0A: svcSleepThread(); break; case 0x0B: getThreadPriority(); break; case 0x0C: setThreadPriority(); break; + case 0x0F: getThreadIdealProcessor(); break; case 0x11: getCurrentProcessorNumber(); break; case 0x13: svcCreateMutex(); break; case 0x14: svcReleaseMutex(); break; diff --git a/src/core/kernel/threads.cpp b/src/core/kernel/threads.cpp index 2f6a27b9..19895b37 100644 --- a/src/core/kernel/threads.cpp +++ b/src/core/kernel/threads.cpp @@ -445,6 +445,15 @@ void Kernel::getThreadPriority() { } } +void Kernel::getThreadIdealProcessor() { + const Handle handle = regs[1]; // Thread handle + logSVC("GetThreadIdealProcessor (handle = %X)\n", handle); + + // TODO: Not documented what this is or what it does. Citra doesn't implement it at all. Return AppCore as the ideal processor for now + regs[0] = Result::Success; + regs[1] = static_cast(ProcessorID::AppCore); +} + void Kernel::setThreadPriority() { const Handle handle = regs[0]; const u32 priority = regs[1];