From da29cecf7a7498345a4cc72d36a7ac602334ae8a Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 10 Sep 2023 16:20:45 +0300 Subject: [PATCH] Make cfg:i not die --- include/services/cfg.hpp | 9 ++++++++- src/core/services/cfg.cpp | 2 +- src/core/services/service_manager.cpp | 3 ++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/include/services/cfg.hpp b/include/services/cfg.hpp index c8c8adde..91010e93 100644 --- a/include/services/cfg.hpp +++ b/include/services/cfg.hpp @@ -22,7 +22,14 @@ class CFGService { void secureInfoGetRegion(u32 messagePointer); public: + enum class Type { + U, // cfg:u + I, // cfg:i + S, // cfg:s + NOR, // cfg:nor + }; + CFGService(Memory& mem) : mem(mem) {} void reset(); - void handleSyncRequest(u32 messagePointer); + void handleSyncRequest(u32 messagePointer, Type type); }; \ No newline at end of file diff --git a/src/core/services/cfg.cpp b/src/core/services/cfg.cpp index 882de420..bcb095ca 100644 --- a/src/core/services/cfg.cpp +++ b/src/core/services/cfg.cpp @@ -21,7 +21,7 @@ namespace CFGCommands { void CFGService::reset() {} -void CFGService::handleSyncRequest(u32 messagePointer) { +void CFGService::handleSyncRequest(u32 messagePointer, CFGService::Type type) { const u32 command = mem.read32(messagePointer); switch (command) { case CFGCommands::GetConfigInfoBlk2: [[likely]] getConfigInfoBlk2(messagePointer); break; diff --git a/src/core/services/service_manager.cpp b/src/core/services/service_manager.cpp index 0e0f8a98..9ac08df4 100644 --- a/src/core/services/service_manager.cpp +++ b/src/core/services/service_manager.cpp @@ -203,7 +203,8 @@ void ServiceManager::sendCommandToService(u32 messagePointer, Handle handle) { case KernelHandles::BOSS: boss.handleSyncRequest(messagePointer); break; case KernelHandles::CAM: cam.handleSyncRequest(messagePointer); break; case KernelHandles::CECD: cecd.handleSyncRequest(messagePointer); break; - case KernelHandles::CFG_U: cfg.handleSyncRequest(messagePointer); break; + case KernelHandles::CFG_U: cfg.handleSyncRequest(messagePointer, CFGService::Type::U); break; + case KernelHandles::CFG_I: cfg.handleSyncRequest(messagePointer, CFGService::Type::I); break; case KernelHandles::CSND: csnd.handleSyncRequest(messagePointer); break; case KernelHandles::DLP_SRVR: dlp_srvr.handleSyncRequest(messagePointer); break; case KernelHandles::HID: hid.handleSyncRequest(messagePointer); break;