summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/nvdrv
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/service/nvdrv')
-rw-r--r--src/core/hle/service/nvdrv/nvdrv.cpp23
-rw-r--r--src/core/hle/service/nvdrv/nvdrv.h4
-rw-r--r--src/core/hle/service/nvdrv/nvdrv_interface.cpp2
3 files changed, 16 insertions, 13 deletions
diff --git a/src/core/hle/service/nvdrv/nvdrv.cpp b/src/core/hle/service/nvdrv/nvdrv.cpp
index 52d27e755..a70ea9385 100644
--- a/src/core/hle/service/nvdrv/nvdrv.cpp
+++ b/src/core/hle/service/nvdrv/nvdrv.cpp
@@ -24,6 +24,7 @@
#include "core/hle/service/nvdrv/nvdrv_interface.h"
#include "core/hle/service/nvdrv/nvmemp.h"
#include "core/hle/service/nvflinger/nvflinger.h"
+#include "core/hle/service/server_manager.h"
#include "video_core/gpu.h"
namespace Service::Nvidia {
@@ -41,15 +42,19 @@ void EventInterface::FreeEvent(Kernel::KEvent* event) {
module.service_context.CloseEvent(event);
}
-void InstallInterfaces(SM::ServiceManager& service_manager, NVFlinger::NVFlinger& nvflinger,
- Core::System& system) {
- auto module_ = std::make_shared<Module>(system);
- std::make_shared<NVDRV>(system, module_, "nvdrv")->InstallAsService(service_manager);
- std::make_shared<NVDRV>(system, module_, "nvdrv:a")->InstallAsService(service_manager);
- std::make_shared<NVDRV>(system, module_, "nvdrv:s")->InstallAsService(service_manager);
- std::make_shared<NVDRV>(system, module_, "nvdrv:t")->InstallAsService(service_manager);
- std::make_shared<NVMEMP>(system)->InstallAsService(service_manager);
- nvflinger.SetNVDrvInstance(module_);
+void LoopProcess(NVFlinger::NVFlinger& nvflinger, Core::System& system) {
+ auto server_manager = std::make_unique<ServerManager>(system);
+ auto module = std::make_shared<Module>(system);
+ server_manager->RegisterNamedService("nvdrv", std::make_shared<NVDRV>(system, module, "nvdrv"));
+ server_manager->RegisterNamedService("nvdrv:a",
+ std::make_shared<NVDRV>(system, module, "nvdrv:a"));
+ server_manager->RegisterNamedService("nvdrv:s",
+ std::make_shared<NVDRV>(system, module, "nvdrv:s"));
+ server_manager->RegisterNamedService("nvdrv:t",
+ std::make_shared<NVDRV>(system, module, "nvdrv:t"));
+ server_manager->RegisterNamedService("nvmemp", std::make_shared<NVMEMP>(system));
+ nvflinger.SetNVDrvInstance(module);
+ ServerManager::RunServer(std::move(server_manager));
}
Module::Module(Core::System& system)
diff --git a/src/core/hle/service/nvdrv/nvdrv.h b/src/core/hle/service/nvdrv/nvdrv.h
index b09b6e585..b2270cf76 100644
--- a/src/core/hle/service/nvdrv/nvdrv.h
+++ b/src/core/hle/service/nvdrv/nvdrv.h
@@ -114,8 +114,6 @@ private:
std::unordered_map<std::string, std::function<FilesContainerType::iterator(DeviceFD)>> builders;
};
-/// Registers all NVDRV services with the specified service manager.
-void InstallInterfaces(SM::ServiceManager& service_manager, NVFlinger::NVFlinger& nvflinger,
- Core::System& system);
+void LoopProcess(NVFlinger::NVFlinger& nvflinger, Core::System& system);
} // namespace Service::Nvidia
diff --git a/src/core/hle/service/nvdrv/nvdrv_interface.cpp b/src/core/hle/service/nvdrv/nvdrv_interface.cpp
index edbdfee43..396fa7ed5 100644
--- a/src/core/hle/service/nvdrv/nvdrv_interface.cpp
+++ b/src/core/hle/service/nvdrv/nvdrv_interface.cpp
@@ -222,7 +222,7 @@ void NVDRV::DumpGraphicsMemoryInfo(Kernel::HLERequestContext& ctx) {
}
NVDRV::NVDRV(Core::System& system_, std::shared_ptr<Module> nvdrv_, const char* name)
- : ServiceFramework{system_, name, ServiceThreadType::CreateNew}, nvdrv{std::move(nvdrv_)} {
+ : ServiceFramework{system_, name}, nvdrv{std::move(nvdrv_)} {
static const FunctionInfo functions[] = {
{0, &NVDRV::Open, "Open"},
{1, &NVDRV::Ioctl1, "Ioctl"},