summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/CMakeLists.txt2
-rw-r--r--src/core/hle/service/pm/pm.cpp70
-rw-r--r--src/core/hle/service/pm/pm.h16
-rw-r--r--src/core/hle/service/service.cpp2
4 files changed, 90 insertions, 0 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 87e381055..d513ce70a 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -203,6 +203,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
diff --git a/src/core/hle/service/pm/pm.cpp b/src/core/hle/service/pm/pm.cpp
new file mode 100644
index 000000000..e20a25689
--- /dev/null
+++ b/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
diff --git a/src/core/hle/service/pm/pm.h b/src/core/hle/service/pm/pm.h
new file mode 100644
index 000000000..9fc19fed6
--- /dev/null
+++ b/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
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index b70d0d517..4daf13fa3 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -33,6 +33,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"
@@ -201,6 +202,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);