From fa80001513cf6d6b7017a8f3cb28a88cf6daf70c Mon Sep 17 00:00:00 2001 From: JPikachu Date: Sat, 28 Jun 2025 01:18:13 +0100 Subject: [PATCH] Revert "Rewrote mm:u to follow switchbrew.org documentation and update them" This reverts commit 6abd4d2f2b7bdd90dfe6e4ad02fd8d8bc7fd3b57. --- src/core/hle/service/mm/mm_u.cpp | 151 +++++-------------------------- 1 file changed, 21 insertions(+), 130 deletions(-) diff --git a/src/core/hle/service/mm/mm_u.cpp b/src/core/hle/service/mm/mm_u.cpp index 8fa2341ffb..6f43b19684 100644 --- a/src/core/hle/service/mm/mm_u.cpp +++ b/src/core/hle/service/mm/mm_u.cpp @@ -7,43 +7,8 @@ #include "core/hle/service/server_manager.h" #include "core/hle/service/sm/sm.h" -#include - namespace Service::MM { -enum class Module : u32 { - CPU = 0, - GPU = 1, - EMC = 2, - SYS_BUS = 3, - M_SELECT = 4, - NVDEC = 5, - NVENC = 6, - NVJPG = 7, - TEST = 8 -}; - -class Session { -public: - Session(Module module_, u32 request_id_, bool is_auto_clear_event_) { - this->module = module_; - this->request_id = request_id_; - this->is_auto_clear_event = is_auto_clear_event_; - this->min = 0; - this->max = -1; - }; - -public: - Module module; - u32 request_id, min; - s32 max; - bool is_auto_clear_event; - void SetAndWait(u32 min_, s32 max_) { - this->min = min_; - this->max = max_; - } -}; - class MM_U final : public ServiceFramework { public: explicit MM_U(Core::System& system_) : ServiceFramework{system_, "mm:u"} { @@ -65,53 +30,26 @@ public: private: void InitializeOld(HLERequestContext& ctx) { - LOG_DEBUG(Service_MM, "(STUBBED) called"); - - IPC::RequestParser rp{ctx}; - const auto module = rp.PopEnum(); - rp.Pop(); - const auto event_clear_mode = rp.Pop(); + LOG_WARNING(Service_MM, "(STUBBED) called"); - const bool is_auto_clear_event = event_clear_mode == 1; - - sessions.push_back({module, request_id++, is_auto_clear_event}); - IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } void FinalizeOld(HLERequestContext& ctx) { - LOG_DEBUG(Service_MM, "(STUBBED) called"); - - IPC::RequestParser rp{ctx}; - const auto module = rp.PopEnum(); - - for (auto it = sessions.begin(); it != sessions.end(); ++it) { - if (it->module == module) { - sessions.erase(it); - break; - } - } + LOG_WARNING(Service_MM, "(STUBBED) called"); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } void SetAndWaitOld(HLERequestContext& ctx) { - LOG_DEBUG(Service_MM, "(STUBBED) called"); - IPC::RequestParser rp{ctx}; - const auto module = rp.PopEnum(); - const auto min = rp.Pop(); - const auto max = rp.Pop(); + min = rp.Pop(); + max = rp.Pop(); + LOG_DEBUG(Service_MM, "(STUBBED) called, min=0x{:X}, max=0x{:X}", min, max); - for (auto& session : sessions) { - if (session.module == module) { - session.SetAndWait(min, max); - break; - } - } - + current = min; IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } @@ -119,72 +57,35 @@ private: void GetOld(HLERequestContext& ctx) { LOG_DEBUG(Service_MM, "(STUBBED) called"); - IPC::RequestParser rp{ctx}; - const auto module = rp.PopEnum(); - - for (const auto& session : sessions) { - if (session.module == module) { - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); - rb.Push(session.min); - return; - } - } - IPC::ResponseBuilder rb{ctx, 3}; rb.Push(ResultSuccess); - rb.Push(0); + rb.Push(current); } void Initialize(HLERequestContext& ctx) { - LOG_DEBUG(Service_MM, "(STUBBED) called"); - - IPC::RequestParser rp{ctx}; - const auto module = rp.PopEnum(); - rp.Pop(); - const auto event_clear_mode = rp.Pop(); - - const bool is_auto_clear_event = event_clear_mode == 1; - - sessions.push_back({module, request_id++, is_auto_clear_event}); + LOG_WARNING(Service_MM, "(STUBBED) called"); IPC::ResponseBuilder rb{ctx, 3}; rb.Push(ResultSuccess); - rb.Push(request_id - 1); + rb.Push(id); // Any non zero value } void Finalize(HLERequestContext& ctx) { - LOG_DEBUG(Service_MM, "(STUBBED) called"); + LOG_WARNING(Service_MM, "(STUBBED) called"); - IPC::RequestParser rp{ctx}; - const auto id = rp.Pop(); - - for (auto it = sessions.begin(); it != sessions.end(); ++it) { - if (it->request_id == id) { - sessions.erase(it); - break; - } - } - IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } void SetAndWait(HLERequestContext& ctx) { - LOG_DEBUG(Service_MM, "(STUBBED) called"); - IPC::RequestParser rp{ctx}; - const auto id = rp.Pop(); - const auto min = rp.Pop(); - const auto max = rp.Pop(); + u32 input_id = rp.Pop(); + min = rp.Pop(); + max = rp.Pop(); + LOG_DEBUG(Service_MM, "(STUBBED) called, input_id=0x{:X}, min=0x{:X}, max=0x{:X}", input_id, + min, max); - for (auto& session : sessions) { - if (session.request_id == id) { - session.SetAndWait(min, max); - break; - } - } - + current = min; IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } @@ -192,25 +93,15 @@ private: void Get(HLERequestContext& ctx) { LOG_DEBUG(Service_MM, "(STUBBED) called"); - IPC::RequestParser rp{ctx}; - const auto id = rp.Pop(); - - for (const auto& session : sessions) { - if (session.request_id == id) { - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(session.min); - return; - } - } - IPC::ResponseBuilder rb{ctx, 3}; rb.Push(ResultSuccess); - rb.Push(0); + rb.Push(current); } - std::vector sessions; - u32 request_id{1}; + u32 min{0}; + u32 max{0}; + u32 current{0}; + u32 id{1}; }; void LoopProcess(Core::System& system) {