From 9d09d92c56c96a82bb9a5c7c2990bee1576ff780 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 13 Aug 2018 18:52:23 -0400 Subject: [PATCH 1/2] mm_u: Move implementation class into the cpp file Now if changes are ever made to the behavior of the class, it doesn't involve rebuilding everything that includes the mm_u header. --- src/core/hle/service/mm/mm_u.cpp | 83 +++++++++++++++++++------------- src/core/hle/service/mm/mm_u.h | 15 ------ 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/src/core/hle/service/mm/mm_u.cpp b/src/core/hle/service/mm/mm_u.cpp index 08f45b78a..0183c6e2e 100644 --- a/src/core/hle/service/mm/mm_u.cpp +++ b/src/core/hle/service/mm/mm_u.cpp @@ -9,42 +9,57 @@ namespace Service::MM { +class MM_U final : public ServiceFramework { +public: + explicit MM_U() : ServiceFramework{"mm:u"} { + // clang-format off + static const FunctionInfo functions[] = { + {0, nullptr, "InitializeOld"}, + {1, nullptr, "FinalizeOld"}, + {2, nullptr, "SetAndWaitOld"}, + {3, nullptr, "GetOld"}, + {4, &MM_U::Initialize, "Initialize"}, + {5, nullptr, "Finalize"}, + {6, &MM_U::SetAndWait, "SetAndWait"}, + {7, &MM_U::Get, "Get"}, + }; + // clang-format on + + RegisterHandlers(functions); + } + +private: + void Initialize(Kernel::HLERequestContext& ctx) { + LOG_WARNING(Service_MM, "(STUBBED) called"); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(RESULT_SUCCESS); + } + + void SetAndWait(Kernel::HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + min = rp.Pop(); + max = rp.Pop(); + current = min; + + LOG_WARNING(Service_MM, "(STUBBED) called, min=0x{:X}, max=0x{:X}", min, max); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(RESULT_SUCCESS); + } + + void Get(Kernel::HLERequestContext& ctx) { + LOG_WARNING(Service_MM, "(STUBBED) called"); + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(RESULT_SUCCESS); + rb.Push(current); + } + + u32 min{0}; + u32 max{0}; + u32 current{0}; +}; + void InstallInterfaces(SM::ServiceManager& service_manager) { std::make_shared()->InstallAsService(service_manager); } -void MM_U::Initialize(Kernel::HLERequestContext& ctx) { - LOG_WARNING(Service_MM, "(STUBBED) called"); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(RESULT_SUCCESS); -} - -void MM_U::SetAndWait(Kernel::HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - min = rp.Pop(); - max = rp.Pop(); - current = min; - - LOG_WARNING(Service_MM, "(STUBBED) called, min=0x{:X}, max=0x{:X}", min, max); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(RESULT_SUCCESS); -} - -void MM_U::Get(Kernel::HLERequestContext& ctx) { - LOG_WARNING(Service_MM, "(STUBBED) called"); - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(RESULT_SUCCESS); - rb.Push(current); -} - -MM_U::MM_U() : ServiceFramework("mm:u") { - static const FunctionInfo functions[] = { - {0, nullptr, "InitializeOld"}, {1, nullptr, "FinalizeOld"}, - {2, nullptr, "SetAndWaitOld"}, {3, nullptr, "GetOld"}, - {4, &MM_U::Initialize, "Initialize"}, {5, nullptr, "Finalize"}, - {6, &MM_U::SetAndWait, "SetAndWait"}, {7, &MM_U::Get, "Get"}, - }; - RegisterHandlers(functions); -} - } // namespace Service::MM diff --git a/src/core/hle/service/mm/mm_u.h b/src/core/hle/service/mm/mm_u.h index 79eeedf9c..5439fa653 100644 --- a/src/core/hle/service/mm/mm_u.h +++ b/src/core/hle/service/mm/mm_u.h @@ -8,21 +8,6 @@ namespace Service::MM { -class MM_U final : public ServiceFramework { -public: - MM_U(); - ~MM_U() = default; - -private: - void Initialize(Kernel::HLERequestContext& ctx); - void SetAndWait(Kernel::HLERequestContext& ctx); - void Get(Kernel::HLERequestContext& ctx); - - u32 min{0}; - u32 max{0}; - u32 current{0}; -}; - /// Registers all MM services with the specified service manager. void InstallInterfaces(SM::ServiceManager& service_manager); From b6c47b578f2945c0909728e26b1c3dd6982a59a5 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 13 Aug 2018 18:54:22 -0400 Subject: [PATCH 2/2] mm_u: Forward all old variants of functions to the new ones Ensures both variants go through the same interface, and while we're at it, add Finalize to provide the inverse of Initialize for consistency. --- src/core/hle/service/mm/mm_u.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/core/hle/service/mm/mm_u.cpp b/src/core/hle/service/mm/mm_u.cpp index 0183c6e2e..7b91bb258 100644 --- a/src/core/hle/service/mm/mm_u.cpp +++ b/src/core/hle/service/mm/mm_u.cpp @@ -14,12 +14,12 @@ public: explicit MM_U() : ServiceFramework{"mm:u"} { // clang-format off static const FunctionInfo functions[] = { - {0, nullptr, "InitializeOld"}, - {1, nullptr, "FinalizeOld"}, - {2, nullptr, "SetAndWaitOld"}, - {3, nullptr, "GetOld"}, + {0, &MM_U::Initialize, "InitializeOld"}, + {1, &MM_U::Finalize, "FinalizeOld"}, + {2, &MM_U::SetAndWait, "SetAndWaitOld"}, + {3, &MM_U::Get, "GetOld"}, {4, &MM_U::Initialize, "Initialize"}, - {5, nullptr, "Finalize"}, + {5, &MM_U::Finalize, "Finalize"}, {6, &MM_U::SetAndWait, "SetAndWait"}, {7, &MM_U::Get, "Get"}, }; @@ -35,6 +35,12 @@ private: rb.Push(RESULT_SUCCESS); } + void Finalize(Kernel::HLERequestContext& ctx) { + LOG_WARNING(Service_MM, "(STUBBED) called"); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(RESULT_SUCCESS); + } + void SetAndWait(Kernel::HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; min = rp.Pop();