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 1/2] 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<u32>(ProcessorID::AppCore); +} + void Kernel::setThreadPriority() { const Handle handle = regs[0]; const u32 priority = regs[1]; From 3292b051be97a0ff7bc522a8f37d19f1d7a09d5d Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Aug 2023 03:45:24 +0300 Subject: [PATCH 2/2] [SDMH] Fix function not returning a value --- src/core/loader/ncch.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index 82148541..d3d05839 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -286,6 +286,7 @@ bool NCCH::parseSMDH(const std::vector<u8>& smdh) { } else if (taiwan) { region = Regions::Taiwan; } + return true; } std::pair<bool, Crypto::AESKey> NCCH::getPrimaryKey(Crypto::AESEngine &aesEngine, const Crypto::AESKey &keyY) {