Browse Source

service: Add pm services

Adds the skeleton for the process management services based off
information on Switch Brew.
Lioncash 8 years ago
parent
commit
c664f8a257

+ 2 - 0
src/core/CMakeLists.txt

@@ -201,6 +201,8 @@ add_library(core STATIC
     hle/service/pctl/module.h
     hle/service/pctl/pctl.cpp
     hle/service/pctl/pctl.h
+    hle/service/pm/pm.cpp
+    hle/service/pm/pm.h
     hle/service/prepo/prepo.cpp
     hle/service/prepo/prepo.h
     hle/service/service.cpp

+ 70 - 0
src/core/hle/service/pm/pm.cpp

@@ -0,0 +1,70 @@
+// Copyright 2018 yuzu emulator team
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#include "core/hle/service/service.h"
+
+namespace Service::PM {
+
+class BootMode final : public ServiceFramework<BootMode> {
+public:
+    explicit BootMode() : ServiceFramework{"pm:bm"} {
+        static const FunctionInfo functions[] = {
+            {0, nullptr, "GetBootMode"},
+            {1, nullptr, "SetMaintenanceBoot"},
+        };
+        RegisterHandlers(functions);
+    }
+};
+
+class DebugMonitor final : public ServiceFramework<DebugMonitor> {
+public:
+    explicit DebugMonitor() : ServiceFramework{"pm:dmnt"} {
+        static const FunctionInfo functions[] = {
+            {0, nullptr, "IsDebugMode"},
+            {1, nullptr, "GetDebugProcesses"},
+            {2, nullptr, "StartDebugProcess"},
+            {3, nullptr, "GetTitlePid"},
+            {4, nullptr, "EnableDebugForTitleId"},
+            {5, nullptr, "GetApplicationPid"},
+            {6, nullptr, "EnableDebugForApplication"},
+        };
+        RegisterHandlers(functions);
+    }
+};
+
+class Info final : public ServiceFramework<Info> {
+public:
+    explicit Info() : ServiceFramework{"pm:info"} {
+        static const FunctionInfo functions[] = {
+            {0, nullptr, "GetTitleId"},
+        };
+        RegisterHandlers(functions);
+    }
+};
+
+class Shell final : public ServiceFramework<Shell> {
+public:
+    explicit Shell() : ServiceFramework{"pm:shell"} {
+        static const FunctionInfo functions[] = {
+            {0, nullptr, "LaunchProcess"},
+            {1, nullptr, "TerminateProcessByPid"},
+            {2, nullptr, "TerminateProcessByTitleId"},
+            {3, nullptr, "GetProcessEventWaiter"},
+            {4, nullptr, "GetProcessEventType"},
+            {5, nullptr, "NotifyBootFinished"},
+            {6, nullptr, "GetApplicationPid"},
+            {7, nullptr, "BoostSystemMemoryResourceLimit"},
+        };
+        RegisterHandlers(functions);
+    }
+};
+
+void InstallInterfaces(SM::ServiceManager& sm) {
+    std::make_shared<BootMode>()->InstallAsService(sm);
+    std::make_shared<DebugMonitor>()->InstallAsService(sm);
+    std::make_shared<Info>()->InstallAsService(sm);
+    std::make_shared<Shell>()->InstallAsService(sm);
+}
+
+} // namespace Service::PM

+ 16 - 0
src/core/hle/service/pm/pm.h

@@ -0,0 +1,16 @@
+// Copyright 2018 yuzu emulator team
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+namespace Service::SM {
+class ServiceManager;
+}
+
+namespace Service::PM {
+
+/// Registers all PM services with the specified service manager.
+void InstallInterfaces(SM::ServiceManager& service_manager);
+
+} // namespace Service::PM

+ 2 - 0
src/core/hle/service/service.cpp

@@ -32,6 +32,7 @@
 #include "core/hle/service/ns/ns.h"
 #include "core/hle/service/nvdrv/nvdrv.h"
 #include "core/hle/service/pctl/pctl.h"
+#include "core/hle/service/pm/pm.h"
 #include "core/hle/service/prepo/prepo.h"
 #include "core/hle/service/service.h"
 #include "core/hle/service/set/settings.h"
@@ -199,6 +200,7 @@ void Init(std::shared_ptr<SM::ServiceManager>& sm) {
     Nvidia::InstallInterfaces(*sm);
     PCTL::InstallInterfaces(*sm);
     PlayReport::InstallInterfaces(*sm);
+    PM::InstallInterfaces(*sm);
     Sockets::InstallInterfaces(*sm);
     SPL::InstallInterfaces(*sm);
     SSL::InstallInterfaces(*sm);