aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/kernel.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2021-05-15 22:30:21 -0700
committerGitHub <noreply@github.com>2021-05-15 22:30:21 -0700
commit10ef4a9142d2b8efe493ec32734618d8b28051ad (patch)
treef213f5b011410022e8e98f7c3905d16d575ed413 /src/core/hle/kernel/kernel.cpp
parentfb753f4d8df6f4d97f8064ad1be135624016753d (diff)
parent9d01b31e3f3194f4934525bd39f0f5849783bc15 (diff)
Merge pull request #6299 from bunnei/ipc-improvements
Various improvements to IPC and session management
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
-rw-r--r--src/core/hle/kernel/kernel.cpp21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index bd4e4d3508..8b55df82ef 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -44,6 +44,7 @@
#include "core/hle/kernel/time_manager.h"
#include "core/hle/lock.h"
#include "core/hle/result.h"
+#include "core/hle/service/sm/sm.h"
#include "core/memory.h"
MICROPROFILE_DEFINE(Kernel_SVC, "Kernel", "SVC", MP_RGB(70, 200, 70));
@@ -656,6 +657,7 @@ struct KernelCore::Impl {
/// Map of named ports managed by the kernel, which can be retrieved using
/// the ConnectToPort SVC.
+ std::unordered_map<std::string, ServiceInterfaceFactory> service_interface_factory;
NamedPortTable named_ports;
std::unique_ptr<Core::ExclusiveMonitor> exclusive_monitor;
@@ -844,18 +846,17 @@ void KernelCore::PrepareReschedule(std::size_t id) {
// TODO: Reimplement, this
}
-void KernelCore::AddNamedPort(std::string name, KClientPort* port) {
- port->Open();
- impl->named_ports.emplace(std::move(name), port);
+void KernelCore::RegisterNamedService(std::string name, ServiceInterfaceFactory&& factory) {
+ impl->service_interface_factory.emplace(std::move(name), factory);
}
-KernelCore::NamedPortTable::iterator KernelCore::FindNamedPort(const std::string& name) {
- return impl->named_ports.find(name);
-}
-
-KernelCore::NamedPortTable::const_iterator KernelCore::FindNamedPort(
- const std::string& name) const {
- return impl->named_ports.find(name);
+KClientPort* KernelCore::CreateNamedServicePort(std::string name) {
+ auto search = impl->service_interface_factory.find(name);
+ if (search == impl->service_interface_factory.end()) {
+ UNIMPLEMENTED();
+ return {};
+ }
+ return &search->second(impl->system.ServiceManager(), impl->system);
}
bool KernelCore::IsValidNamedPort(NamedPortTable::const_iterator port) const {