summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar David Marcec2018-10-06 16:49:01 +1000
committerGravatar David Marcec2018-10-06 16:49:01 +1000
commitf84b9ed4e8c38928e8e1bb57c2914256375b5af4 (patch)
tree248a593e98e8a14ed4a111dc9ad5241aa639784c
parentMerge pull request #1447 from lioncash/mutex (diff)
downloadyuzu-f84b9ed4e8c38928e8e1bb57c2914256375b5af4.tar.gz
yuzu-f84b9ed4e8c38928e8e1bb57c2914256375b5af4.tar.xz
yuzu-f84b9ed4e8c38928e8e1bb57c2914256375b5af4.zip
Ported #4296 from citra
This will allow us to easily remove the use of "NFC" in "System"
-rw-r--r--src/core/hle/kernel/client_port.h6
-rw-r--r--src/core/hle/kernel/server_port.h1
-rw-r--r--src/core/hle/service/sm/sm.h19
3 files changed, 25 insertions, 1 deletions
diff --git a/src/core/hle/kernel/client_port.h b/src/core/hle/kernel/client_port.h
index f3dfebbb1..a82b29417 100644
--- a/src/core/hle/kernel/client_port.h
+++ b/src/core/hle/kernel/client_port.h
@@ -7,13 +7,13 @@
7#include <string> 7#include <string>
8#include "common/common_types.h" 8#include "common/common_types.h"
9#include "core/hle/kernel/object.h" 9#include "core/hle/kernel/object.h"
10#include "core/hle/kernel/server_port.h"
10#include "core/hle/result.h" 11#include "core/hle/result.h"
11 12
12namespace Kernel { 13namespace Kernel {
13 14
14class ClientSession; 15class ClientSession;
15class KernelCore; 16class KernelCore;
16class ServerPort;
17 17
18class ClientPort final : public Object { 18class ClientPort final : public Object {
19public: 19public:
@@ -30,6 +30,10 @@ public:
30 return HANDLE_TYPE; 30 return HANDLE_TYPE;
31 } 31 }
32 32
33 SharedPtr<ServerPort> GetServerPort() const {
34 return server_port;
35 }
36
33 /** 37 /**
34 * Creates a new Session pair, adds the created ServerSession to the associated ServerPort's 38 * Creates a new Session pair, adds the created ServerSession to the associated ServerPort's
35 * list of pending sessions, and signals the ServerPort, causing any threads 39 * list of pending sessions, and signals the ServerPort, causing any threads
diff --git a/src/core/hle/kernel/server_port.h b/src/core/hle/kernel/server_port.h
index 62fb51349..e52f8245f 100644
--- a/src/core/hle/kernel/server_port.h
+++ b/src/core/hle/kernel/server_port.h
@@ -11,6 +11,7 @@
11#include "common/common_types.h" 11#include "common/common_types.h"
12#include "core/hle/kernel/object.h" 12#include "core/hle/kernel/object.h"
13#include "core/hle/kernel/wait_object.h" 13#include "core/hle/kernel/wait_object.h"
14#include "core/hle/result.h"
14 15
15namespace Kernel { 16namespace Kernel {
16 17
diff --git a/src/core/hle/service/sm/sm.h b/src/core/hle/service/sm/sm.h
index da2c51082..4f8145dda 100644
--- a/src/core/hle/service/sm/sm.h
+++ b/src/core/hle/service/sm/sm.h
@@ -6,9 +6,12 @@
6 6
7#include <memory> 7#include <memory>
8#include <string> 8#include <string>
9#include <type_traits>
9#include <unordered_map> 10#include <unordered_map>
10 11
12#include "core/hle/kernel/client_port.h"
11#include "core/hle/kernel/object.h" 13#include "core/hle/kernel/object.h"
14#include "core/hle/kernel/server_port.h"
12#include "core/hle/result.h" 15#include "core/hle/result.h"
13#include "core/hle/service/service.h" 16#include "core/hle/service/service.h"
14 17
@@ -48,6 +51,22 @@ public:
48 ResultVal<Kernel::SharedPtr<Kernel::ClientPort>> GetServicePort(const std::string& name); 51 ResultVal<Kernel::SharedPtr<Kernel::ClientPort>> GetServicePort(const std::string& name);
49 ResultVal<Kernel::SharedPtr<Kernel::ClientSession>> ConnectToService(const std::string& name); 52 ResultVal<Kernel::SharedPtr<Kernel::ClientSession>> ConnectToService(const std::string& name);
50 53
54 template <typename T>
55 std::shared_ptr<T> GetService(const std::string& service_name) const {
56 static_assert(std::is_base_of_v<Kernel::SessionRequestHandler, T>,
57 "Not a base of ServiceFrameworkBase");
58 auto service = registered_services.find(service_name);
59 if (service == registered_services.end()) {
60 LOG_DEBUG(Service, "Can't find service: {}", service_name);
61 return nullptr;
62 }
63 auto port = service->second->GetServerPort();
64 if (port == nullptr) {
65 return nullptr;
66 }
67 return std::static_pointer_cast<T>(port->hle_handler);
68 }
69
51 void InvokeControlRequest(Kernel::HLERequestContext& context); 70 void InvokeControlRequest(Kernel::HLERequestContext& context);
52 71
53private: 72private: