diff options
| -rw-r--r-- | src/core/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | src/core/core.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/ipc_helpers.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_client_port.cpp (renamed from src/core/hle/kernel/client_port.cpp) | 31 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_client_port.h (renamed from src/core/hle/kernel/client_port.h) | 45 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_server_session.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_session.h | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 10 | ||||
| -rw-r--r-- | src/core/hle/kernel/kernel.h | 6 | ||||
| -rw-r--r-- | src/core/hle/kernel/server_port.cpp | 15 | ||||
| -rw-r--r-- | src/core/hle/kernel/server_port.h | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/service.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/service/set/set_sys.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/sm/sm.cpp | 10 | ||||
| -rw-r--r-- | src/core/hle/service/sm/sm.h | 8 | ||||
| -rw-r--r-- | src/core/hle/service/time/time.cpp | 2 |
18 files changed, 92 insertions, 63 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 8e3b51ae7..cab1f5ae2 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt | |||
| @@ -144,8 +144,6 @@ add_library(core STATIC | |||
| 144 | hle/kernel/board/nintendo/nx/k_system_control.cpp | 144 | hle/kernel/board/nintendo/nx/k_system_control.cpp |
| 145 | hle/kernel/board/nintendo/nx/k_system_control.h | 145 | hle/kernel/board/nintendo/nx/k_system_control.h |
| 146 | hle/kernel/board/nintendo/nx/secure_monitor.h | 146 | hle/kernel/board/nintendo/nx/secure_monitor.h |
| 147 | hle/kernel/client_port.cpp | ||
| 148 | hle/kernel/client_port.h | ||
| 149 | hle/kernel/code_set.cpp | 147 | hle/kernel/code_set.cpp |
| 150 | hle/kernel/code_set.h | 148 | hle/kernel/code_set.h |
| 151 | hle/kernel/svc_results.h | 149 | hle/kernel/svc_results.h |
| @@ -168,6 +166,8 @@ add_library(core STATIC | |||
| 168 | hle/kernel/k_affinity_mask.h | 166 | hle/kernel/k_affinity_mask.h |
| 169 | hle/kernel/k_class_token.cpp | 167 | hle/kernel/k_class_token.cpp |
| 170 | hle/kernel/k_class_token.h | 168 | hle/kernel/k_class_token.h |
| 169 | hle/kernel/k_client_port.cpp | ||
| 170 | hle/kernel/k_client_port.h | ||
| 171 | hle/kernel/k_client_session.cpp | 171 | hle/kernel/k_client_session.cpp |
| 172 | hle/kernel/k_client_session.h | 172 | hle/kernel/k_client_session.h |
| 173 | hle/kernel/k_condition_variable.cpp | 173 | hle/kernel/k_condition_variable.cpp |
diff --git a/src/core/core.cpp b/src/core/core.cpp index b5bc903cd..4bb96d77d 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp | |||
| @@ -27,7 +27,7 @@ | |||
| 27 | #include "core/file_sys/vfs_concat.h" | 27 | #include "core/file_sys/vfs_concat.h" |
| 28 | #include "core/file_sys/vfs_real.h" | 28 | #include "core/file_sys/vfs_real.h" |
| 29 | #include "core/hardware_interrupt_manager.h" | 29 | #include "core/hardware_interrupt_manager.h" |
| 30 | #include "core/hle/kernel/client_port.h" | 30 | #include "core/hle/kernel/k_client_port.h" |
| 31 | #include "core/hle/kernel/k_scheduler.h" | 31 | #include "core/hle/kernel/k_scheduler.h" |
| 32 | #include "core/hle/kernel/k_thread.h" | 32 | #include "core/hle/kernel/k_thread.h" |
| 33 | #include "core/hle/kernel/kernel.h" | 33 | #include "core/hle/kernel/kernel.h" |
diff --git a/src/core/hle/ipc_helpers.h b/src/core/hle/ipc_helpers.h index 99b7d3d82..18aebf6ea 100644 --- a/src/core/hle/ipc_helpers.h +++ b/src/core/hle/ipc_helpers.h | |||
| @@ -13,8 +13,8 @@ | |||
| 13 | #include "common/assert.h" | 13 | #include "common/assert.h" |
| 14 | #include "common/common_types.h" | 14 | #include "common/common_types.h" |
| 15 | #include "core/hle/ipc.h" | 15 | #include "core/hle/ipc.h" |
| 16 | #include "core/hle/kernel/client_port.h" | ||
| 17 | #include "core/hle/kernel/hle_ipc.h" | 16 | #include "core/hle/kernel/hle_ipc.h" |
| 17 | #include "core/hle/kernel/k_client_port.h" | ||
| 18 | #include "core/hle/kernel/k_session.h" | 18 | #include "core/hle/kernel/k_session.h" |
| 19 | #include "core/hle/kernel/object.h" | 19 | #include "core/hle/kernel/object.h" |
| 20 | #include "core/hle/result.h" | 20 | #include "core/hle/result.h" |
diff --git a/src/core/hle/kernel/client_port.cpp b/src/core/hle/kernel/k_client_port.cpp index ce88da1c3..15bf0d4fc 100644 --- a/src/core/hle/kernel/client_port.cpp +++ b/src/core/hle/kernel/k_client_port.cpp | |||
| @@ -2,8 +2,8 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include "core/hle/kernel/client_port.h" | ||
| 6 | #include "core/hle/kernel/hle_ipc.h" | 5 | #include "core/hle/kernel/hle_ipc.h" |
| 6 | #include "core/hle/kernel/k_client_port.h" | ||
| 7 | #include "core/hle/kernel/k_session.h" | 7 | #include "core/hle/kernel/k_session.h" |
| 8 | #include "core/hle/kernel/object.h" | 8 | #include "core/hle/kernel/object.h" |
| 9 | #include "core/hle/kernel/server_port.h" | 9 | #include "core/hle/kernel/server_port.h" |
| @@ -11,18 +11,23 @@ | |||
| 11 | 11 | ||
| 12 | namespace Kernel { | 12 | namespace Kernel { |
| 13 | 13 | ||
| 14 | ClientPort::ClientPort(KernelCore& kernel) : Object{kernel} {} | 14 | KClientPort::KClientPort(KernelCore& kernel) : KSynchronizationObject{kernel} {} |
| 15 | ClientPort::~ClientPort() = default; | 15 | KClientPort::~KClientPort() = default; |
| 16 | 16 | ||
| 17 | std::shared_ptr<ServerPort> ClientPort::GetServerPort() const { | 17 | void KClientPort::Initialize(s32 max_sessions_, std::string&& name_) { |
| 18 | max_sessions = max_sessions_; | ||
| 19 | name = std::move(name_); | ||
| 20 | } | ||
| 21 | |||
| 22 | std::shared_ptr<ServerPort> KClientPort::GetServerPort() const { | ||
| 18 | return server_port; | 23 | return server_port; |
| 19 | } | 24 | } |
| 20 | 25 | ||
| 21 | ResultVal<KClientSession*> ClientPort::Connect() { | 26 | ResultVal<KClientSession*> KClientPort::Connect() { |
| 22 | if (active_sessions >= max_sessions) { | 27 | if (num_sessions >= max_sessions) { |
| 23 | return ResultOutOfSessions; | 28 | return ResultOutOfSessions; |
| 24 | } | 29 | } |
| 25 | active_sessions++; | 30 | num_sessions++; |
| 26 | 31 | ||
| 27 | auto* session = Kernel::KSession::Create(kernel); | 32 | auto* session = Kernel::KSession::Create(kernel); |
| 28 | session->Initialize(name + ":ClientPort"); | 33 | session->Initialize(name + ":ClientPort"); |
| @@ -36,12 +41,18 @@ ResultVal<KClientSession*> ClientPort::Connect() { | |||
| 36 | return MakeResult(std::addressof(session->GetClientSession())); | 41 | return MakeResult(std::addressof(session->GetClientSession())); |
| 37 | } | 42 | } |
| 38 | 43 | ||
| 39 | void ClientPort::ConnectionClosed() { | 44 | void KClientPort::ConnectionClosed() { |
| 40 | if (active_sessions == 0) { | 45 | if (num_sessions == 0) { |
| 41 | return; | 46 | return; |
| 42 | } | 47 | } |
| 43 | 48 | ||
| 44 | --active_sessions; | 49 | --num_sessions; |
| 50 | } | ||
| 51 | |||
| 52 | void KClientPort::Destroy() {} | ||
| 53 | |||
| 54 | bool KClientPort::IsSignaled() const { | ||
| 55 | return num_sessions < max_sessions; | ||
| 45 | } | 56 | } |
| 46 | 57 | ||
| 47 | } // namespace Kernel | 58 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/client_port.h b/src/core/hle/kernel/k_client_port.h index 0b20fef40..04ee2d664 100644 --- a/src/core/hle/kernel/client_port.h +++ b/src/core/hle/kernel/k_client_port.h | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | #include <string> | 8 | #include <string> |
| 9 | 9 | ||
| 10 | #include "common/common_types.h" | 10 | #include "common/common_types.h" |
| 11 | #include "core/hle/kernel/object.h" | 11 | #include "core/hle/kernel/k_synchronization_object.h" |
| 12 | #include "core/hle/result.h" | 12 | #include "core/hle/result.h" |
| 13 | 13 | ||
| 14 | namespace Kernel { | 14 | namespace Kernel { |
| @@ -17,23 +17,16 @@ class KClientSession; | |||
| 17 | class KernelCore; | 17 | class KernelCore; |
| 18 | class ServerPort; | 18 | class ServerPort; |
| 19 | 19 | ||
| 20 | class ClientPort final : public Object { | 20 | class KClientPort final : public KSynchronizationObject { |
| 21 | KERNEL_AUTOOBJECT_TRAITS(KClientPort, KSynchronizationObject); | ||
| 22 | |||
| 21 | public: | 23 | public: |
| 22 | explicit ClientPort(KernelCore& kernel); | 24 | explicit KClientPort(KernelCore& kernel); |
| 23 | ~ClientPort() override; | 25 | virtual ~KClientPort() override; |
| 24 | 26 | ||
| 25 | friend class ServerPort; | 27 | friend class ServerPort; |
| 26 | std::string GetTypeName() const override { | ||
| 27 | return "ClientPort"; | ||
| 28 | } | ||
| 29 | std::string GetName() const override { | ||
| 30 | return name; | ||
| 31 | } | ||
| 32 | 28 | ||
| 33 | static constexpr HandleType HANDLE_TYPE = HandleType::ClientPort; | 29 | void Initialize(s32 max_sessions_, std::string&& name_); |
| 34 | HandleType GetHandleType() const override { | ||
| 35 | return HANDLE_TYPE; | ||
| 36 | } | ||
| 37 | 30 | ||
| 38 | std::shared_ptr<ServerPort> GetServerPort() const; | 31 | std::shared_ptr<ServerPort> GetServerPort() const; |
| 39 | 32 | ||
| @@ -51,13 +44,29 @@ public: | |||
| 51 | */ | 44 | */ |
| 52 | void ConnectionClosed(); | 45 | void ConnectionClosed(); |
| 53 | 46 | ||
| 54 | void Finalize() override {} | 47 | // Overridden virtual functions. |
| 48 | virtual void Destroy() override; | ||
| 49 | virtual bool IsSignaled() const override; | ||
| 50 | |||
| 51 | // DEPRECATED | ||
| 52 | |||
| 53 | std::string GetTypeName() const override { | ||
| 54 | return "ClientPort"; | ||
| 55 | } | ||
| 56 | std::string GetName() const override { | ||
| 57 | return name; | ||
| 58 | } | ||
| 59 | |||
| 60 | static constexpr HandleType HANDLE_TYPE = HandleType::ClientPort; | ||
| 61 | HandleType GetHandleType() const override { | ||
| 62 | return HANDLE_TYPE; | ||
| 63 | } | ||
| 55 | 64 | ||
| 56 | private: | 65 | private: |
| 57 | std::shared_ptr<ServerPort> server_port; ///< ServerPort associated with this client port. | 66 | std::shared_ptr<ServerPort> server_port; ///< ServerPort associated with this client port. |
| 58 | u32 max_sessions = 0; ///< Maximum number of simultaneous sessions the port can have | 67 | s32 max_sessions = 0; ///< Maximum number of simultaneous sessions the port can have |
| 59 | u32 active_sessions = 0; ///< Number of currently open sessions to this port | 68 | std::atomic<s32> num_sessions = 0; ///< Number of currently open sessions to this port |
| 60 | std::string name; ///< Name of client port (optional) | 69 | std::string name; ///< Name of client port (optional) |
| 61 | }; | 70 | }; |
| 62 | 71 | ||
| 63 | } // namespace Kernel | 72 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/k_server_session.cpp b/src/core/hle/kernel/k_server_session.cpp index 8cd2c283c..46ba7081b 100644 --- a/src/core/hle/kernel/k_server_session.cpp +++ b/src/core/hle/kernel/k_server_session.cpp | |||
| @@ -10,9 +10,9 @@ | |||
| 10 | #include "common/logging/log.h" | 10 | #include "common/logging/log.h" |
| 11 | #include "core/core_timing.h" | 11 | #include "core/core_timing.h" |
| 12 | #include "core/hle/ipc_helpers.h" | 12 | #include "core/hle/ipc_helpers.h" |
| 13 | #include "core/hle/kernel/client_port.h" | ||
| 14 | #include "core/hle/kernel/handle_table.h" | 13 | #include "core/hle/kernel/handle_table.h" |
| 15 | #include "core/hle/kernel/hle_ipc.h" | 14 | #include "core/hle/kernel/hle_ipc.h" |
| 15 | #include "core/hle/kernel/k_client_port.h" | ||
| 16 | #include "core/hle/kernel/k_scheduler.h" | 16 | #include "core/hle/kernel/k_scheduler.h" |
| 17 | #include "core/hle/kernel/k_server_session.h" | 17 | #include "core/hle/kernel/k_server_session.h" |
| 18 | #include "core/hle/kernel/k_session.h" | 18 | #include "core/hle/kernel/k_session.h" |
diff --git a/src/core/hle/kernel/k_session.h b/src/core/hle/kernel/k_session.h index 1d24e80cd..6a6fcb588 100644 --- a/src/core/hle/kernel/k_session.h +++ b/src/core/hle/kernel/k_session.h | |||
| @@ -70,7 +70,7 @@ public: | |||
| 70 | return server; | 70 | return server; |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | const ClientPort* GetParent() const { | 73 | const KClientPort* GetParent() const { |
| 74 | return port; | 74 | return port; |
| 75 | } | 75 | } |
| 76 | 76 | ||
| @@ -99,7 +99,7 @@ private: | |||
| 99 | KClientSession client; | 99 | KClientSession client; |
| 100 | std::atomic<std::underlying_type<State>::type> atomic_state{ | 100 | std::atomic<std::underlying_type<State>::type> atomic_state{ |
| 101 | static_cast<std::underlying_type<State>::type>(State::Invalid)}; | 101 | static_cast<std::underlying_type<State>::type>(State::Invalid)}; |
| 102 | ClientPort* port{}; | 102 | KClientPort* port{}; |
| 103 | std::string name; | 103 | std::string name; |
| 104 | Process* process{}; | 104 | Process* process{}; |
| 105 | bool initialized{}; | 105 | bool initialized{}; |
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index ada993f46..c939bb903 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -26,9 +26,9 @@ | |||
| 26 | #include "core/cpu_manager.h" | 26 | #include "core/cpu_manager.h" |
| 27 | #include "core/device_memory.h" | 27 | #include "core/device_memory.h" |
| 28 | #include "core/hardware_properties.h" | 28 | #include "core/hardware_properties.h" |
| 29 | #include "core/hle/kernel/client_port.h" | ||
| 30 | #include "core/hle/kernel/handle_table.h" | 29 | #include "core/hle/kernel/handle_table.h" |
| 31 | #include "core/hle/kernel/init/init_slab_setup.h" | 30 | #include "core/hle/kernel/init/init_slab_setup.h" |
| 31 | #include "core/hle/kernel/k_client_port.h" | ||
| 32 | #include "core/hle/kernel/k_memory_layout.h" | 32 | #include "core/hle/kernel/k_memory_layout.h" |
| 33 | #include "core/hle/kernel/k_memory_manager.h" | 33 | #include "core/hle/kernel/k_memory_manager.h" |
| 34 | #include "core/hle/kernel/k_resource_limit.h" | 34 | #include "core/hle/kernel/k_resource_limit.h" |
| @@ -122,6 +122,9 @@ struct KernelCore::Impl { | |||
| 122 | 122 | ||
| 123 | preemption_event = nullptr; | 123 | preemption_event = nullptr; |
| 124 | 124 | ||
| 125 | for (auto& iter : named_ports) { | ||
| 126 | iter.second->Close(); | ||
| 127 | } | ||
| 125 | named_ports.clear(); | 128 | named_ports.clear(); |
| 126 | 129 | ||
| 127 | exclusive_monitor.reset(); | 130 | exclusive_monitor.reset(); |
| @@ -843,8 +846,9 @@ void KernelCore::PrepareReschedule(std::size_t id) { | |||
| 843 | // TODO: Reimplement, this | 846 | // TODO: Reimplement, this |
| 844 | } | 847 | } |
| 845 | 848 | ||
| 846 | void KernelCore::AddNamedPort(std::string name, std::shared_ptr<ClientPort> port) { | 849 | void KernelCore::AddNamedPort(std::string name, KClientPort* port) { |
| 847 | impl->named_ports.emplace(std::move(name), std::move(port)); | 850 | port->Open(); |
| 851 | impl->named_ports.emplace(std::move(name), port); | ||
| 848 | } | 852 | } |
| 849 | 853 | ||
| 850 | KernelCore::NamedPortTable::iterator KernelCore::FindNamedPort(const std::string& name) { | 854 | KernelCore::NamedPortTable::iterator KernelCore::FindNamedPort(const std::string& name) { |
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index 43e49603b..19b3530b4 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h | |||
| @@ -29,7 +29,7 @@ struct EventType; | |||
| 29 | 29 | ||
| 30 | namespace Kernel { | 30 | namespace Kernel { |
| 31 | 31 | ||
| 32 | class ClientPort; | 32 | class KClientPort; |
| 33 | class GlobalSchedulerContext; | 33 | class GlobalSchedulerContext; |
| 34 | class HandleTable; | 34 | class HandleTable; |
| 35 | class KAutoObjectWithListContainer; | 35 | class KAutoObjectWithListContainer; |
| @@ -60,7 +60,7 @@ constexpr EmuThreadHandle EmuThreadHandleReserved{1ULL << 63}; | |||
| 60 | /// Represents a single instance of the kernel. | 60 | /// Represents a single instance of the kernel. |
| 61 | class KernelCore { | 61 | class KernelCore { |
| 62 | private: | 62 | private: |
| 63 | using NamedPortTable = std::unordered_map<std::string, std::shared_ptr<ClientPort>>; | 63 | using NamedPortTable = std::unordered_map<std::string, KClientPort*>; |
| 64 | 64 | ||
| 65 | public: | 65 | public: |
| 66 | /// Constructs an instance of the kernel using the given System | 66 | /// Constructs an instance of the kernel using the given System |
| @@ -168,7 +168,7 @@ public: | |||
| 168 | void InvalidateCpuInstructionCacheRange(VAddr addr, std::size_t size); | 168 | void InvalidateCpuInstructionCacheRange(VAddr addr, std::size_t size); |
| 169 | 169 | ||
| 170 | /// Adds a port to the named port table | 170 | /// Adds a port to the named port table |
| 171 | void AddNamedPort(std::string name, std::shared_ptr<ClientPort> port); | 171 | void AddNamedPort(std::string name, KClientPort* port); |
| 172 | 172 | ||
| 173 | /// Finds a port within the named port table with the given name. | 173 | /// Finds a port within the named port table with the given name. |
| 174 | NamedPortTable::iterator FindNamedPort(const std::string& name); | 174 | NamedPortTable::iterator FindNamedPort(const std::string& name); |
diff --git a/src/core/hle/kernel/server_port.cpp b/src/core/hle/kernel/server_port.cpp index 8626b56fd..addaaa5cf 100644 --- a/src/core/hle/kernel/server_port.cpp +++ b/src/core/hle/kernel/server_port.cpp | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | #include <tuple> | 5 | #include <tuple> |
| 6 | #include "common/assert.h" | 6 | #include "common/assert.h" |
| 7 | #include "core/hle/kernel/client_port.h" | 7 | #include "core/hle/kernel/k_client_port.h" |
| 8 | #include "core/hle/kernel/k_server_session.h" | 8 | #include "core/hle/kernel/k_server_session.h" |
| 9 | #include "core/hle/kernel/k_thread.h" | 9 | #include "core/hle/kernel/k_thread.h" |
| 10 | #include "core/hle/kernel/object.h" | 10 | #include "core/hle/kernel/object.h" |
| @@ -40,15 +40,16 @@ bool ServerPort::IsSignaled() const { | |||
| 40 | ServerPort::PortPair ServerPort::CreatePortPair(KernelCore& kernel, u32 max_sessions, | 40 | ServerPort::PortPair ServerPort::CreatePortPair(KernelCore& kernel, u32 max_sessions, |
| 41 | std::string name) { | 41 | std::string name) { |
| 42 | std::shared_ptr<ServerPort> server_port = std::make_shared<ServerPort>(kernel); | 42 | std::shared_ptr<ServerPort> server_port = std::make_shared<ServerPort>(kernel); |
| 43 | std::shared_ptr<ClientPort> client_port = std::make_shared<ClientPort>(kernel); | 43 | KClientPort* client_port = new KClientPort(kernel); |
| 44 | 44 | ||
| 45 | server_port->name = name + "_Server"; | 45 | KAutoObject::Create(client_port); |
| 46 | client_port->name = name + "_Client"; | 46 | |
| 47 | client_port->Initialize(max_sessions, name + "_Client"); | ||
| 47 | client_port->server_port = server_port; | 48 | client_port->server_port = server_port; |
| 48 | client_port->max_sessions = max_sessions; | ||
| 49 | client_port->active_sessions = 0; | ||
| 50 | 49 | ||
| 51 | return std::make_pair(std::move(server_port), std::move(client_port)); | 50 | server_port->name = name + "_Server"; |
| 51 | |||
| 52 | return std::make_pair(std::move(server_port), client_port); | ||
| 52 | } | 53 | } |
| 53 | 54 | ||
| 54 | } // namespace Kernel | 55 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/server_port.h b/src/core/hle/kernel/server_port.h index eebceaa2a..f7d443df8 100644 --- a/src/core/hle/kernel/server_port.h +++ b/src/core/hle/kernel/server_port.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | namespace Kernel { | 16 | namespace Kernel { |
| 17 | 17 | ||
| 18 | class ClientPort; | 18 | class KClientPort; |
| 19 | class KernelCore; | 19 | class KernelCore; |
| 20 | class KServerSession; | 20 | class KServerSession; |
| 21 | class SessionRequestHandler; | 21 | class SessionRequestHandler; |
| @@ -26,7 +26,7 @@ public: | |||
| 26 | ~ServerPort() override; | 26 | ~ServerPort() override; |
| 27 | 27 | ||
| 28 | using HLEHandler = std::shared_ptr<SessionRequestHandler>; | 28 | using HLEHandler = std::shared_ptr<SessionRequestHandler>; |
| 29 | using PortPair = std::pair<std::shared_ptr<ServerPort>, std::shared_ptr<ClientPort>>; | 29 | using PortPair = std::pair<std::shared_ptr<ServerPort>, KClientPort*>; |
| 30 | 30 | ||
| 31 | /** | 31 | /** |
| 32 | * Creates a pair of ServerPort and an associated ClientPort. | 32 | * Creates a pair of ServerPort and an associated ClientPort. |
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index fa85bd631..8d8d3dd5a 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -21,9 +21,9 @@ | |||
| 21 | #include "core/core_timing.h" | 21 | #include "core/core_timing.h" |
| 22 | #include "core/core_timing_util.h" | 22 | #include "core/core_timing_util.h" |
| 23 | #include "core/cpu_manager.h" | 23 | #include "core/cpu_manager.h" |
| 24 | #include "core/hle/kernel/client_port.h" | ||
| 25 | #include "core/hle/kernel/handle_table.h" | 24 | #include "core/hle/kernel/handle_table.h" |
| 26 | #include "core/hle/kernel/k_address_arbiter.h" | 25 | #include "core/hle/kernel/k_address_arbiter.h" |
| 26 | #include "core/hle/kernel/k_client_port.h" | ||
| 27 | #include "core/hle/kernel/k_client_session.h" | 27 | #include "core/hle/kernel/k_client_session.h" |
| 28 | #include "core/hle/kernel/k_condition_variable.h" | 28 | #include "core/hle/kernel/k_condition_variable.h" |
| 29 | #include "core/hle/kernel/k_event.h" | 29 | #include "core/hle/kernel/k_event.h" |
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index d831aa214..49c17fd14 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | #include "core/frontend/input.h" | 13 | #include "core/frontend/input.h" |
| 14 | #include "core/hardware_properties.h" | 14 | #include "core/hardware_properties.h" |
| 15 | #include "core/hle/ipc_helpers.h" | 15 | #include "core/hle/ipc_helpers.h" |
| 16 | #include "core/hle/kernel/client_port.h" | 16 | #include "core/hle/kernel/k_client_port.h" |
| 17 | #include "core/hle/kernel/k_readable_event.h" | 17 | #include "core/hle/kernel/k_readable_event.h" |
| 18 | #include "core/hle/kernel/k_shared_memory.h" | 18 | #include "core/hle/kernel/k_shared_memory.h" |
| 19 | #include "core/hle/kernel/k_transfer_memory.h" | 19 | #include "core/hle/kernel/k_transfer_memory.h" |
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index 41a502d8d..d8ad09b49 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | #include "core/core.h" | 11 | #include "core/core.h" |
| 12 | #include "core/hle/ipc.h" | 12 | #include "core/hle/ipc.h" |
| 13 | #include "core/hle/ipc_helpers.h" | 13 | #include "core/hle/ipc_helpers.h" |
| 14 | #include "core/hle/kernel/client_port.h" | 14 | #include "core/hle/kernel/k_client_port.h" |
| 15 | #include "core/hle/kernel/k_thread.h" | 15 | #include "core/hle/kernel/k_thread.h" |
| 16 | #include "core/hle/kernel/kernel.h" | 16 | #include "core/hle/kernel/kernel.h" |
| 17 | #include "core/hle/kernel/process.h" | 17 | #include "core/hle/kernel/process.h" |
| @@ -119,7 +119,7 @@ void ServiceFrameworkBase::InstallAsNamedPort(Kernel::KernelCore& kernel) { | |||
| 119 | auto [server_port, client_port] = | 119 | auto [server_port, client_port] = |
| 120 | Kernel::ServerPort::CreatePortPair(kernel, max_sessions, service_name); | 120 | Kernel::ServerPort::CreatePortPair(kernel, max_sessions, service_name); |
| 121 | server_port->SetHleHandler(shared_from_this()); | 121 | server_port->SetHleHandler(shared_from_this()); |
| 122 | kernel.AddNamedPort(service_name, std::move(client_port)); | 122 | kernel.AddNamedPort(service_name, client_port); |
| 123 | port_installed = true; | 123 | port_installed = true; |
| 124 | } | 124 | } |
| 125 | 125 | ||
diff --git a/src/core/hle/service/set/set_sys.cpp b/src/core/hle/service/set/set_sys.cpp index 5909fdd85..4f1ffe55f 100644 --- a/src/core/hle/service/set/set_sys.cpp +++ b/src/core/hle/service/set/set_sys.cpp | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | #include "core/file_sys/errors.h" | 7 | #include "core/file_sys/errors.h" |
| 8 | #include "core/file_sys/system_archive/system_version.h" | 8 | #include "core/file_sys/system_archive/system_version.h" |
| 9 | #include "core/hle/ipc_helpers.h" | 9 | #include "core/hle/ipc_helpers.h" |
| 10 | #include "core/hle/kernel/client_port.h" | 10 | #include "core/hle/kernel/k_client_port.h" |
| 11 | #include "core/hle/service/filesystem/filesystem.h" | 11 | #include "core/hle/service/filesystem/filesystem.h" |
| 12 | #include "core/hle/service/set/set_sys.h" | 12 | #include "core/hle/service/set/set_sys.h" |
| 13 | 13 | ||
diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp index 66e41277f..39575ce3d 100644 --- a/src/core/hle/service/sm/sm.cpp +++ b/src/core/hle/service/sm/sm.cpp | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | #include "common/assert.h" | 6 | #include "common/assert.h" |
| 7 | #include "core/core.h" | 7 | #include "core/core.h" |
| 8 | #include "core/hle/ipc_helpers.h" | 8 | #include "core/hle/ipc_helpers.h" |
| 9 | #include "core/hle/kernel/client_port.h" | 9 | #include "core/hle/kernel/k_client_port.h" |
| 10 | #include "core/hle/kernel/k_client_session.h" | 10 | #include "core/hle/kernel/k_client_session.h" |
| 11 | #include "core/hle/kernel/k_server_session.h" | 11 | #include "core/hle/kernel/k_server_session.h" |
| 12 | #include "core/hle/kernel/k_session.h" | 12 | #include "core/hle/kernel/k_session.h" |
| @@ -62,6 +62,8 @@ ResultVal<std::shared_ptr<Kernel::ServerPort>> ServiceManager::RegisterService(s | |||
| 62 | auto [server_port, client_port] = | 62 | auto [server_port, client_port] = |
| 63 | Kernel::ServerPort::CreatePortPair(kernel, max_sessions, name); | 63 | Kernel::ServerPort::CreatePortPair(kernel, max_sessions, name); |
| 64 | 64 | ||
| 65 | client_port->Open(); | ||
| 66 | |||
| 65 | registered_services.emplace(std::move(name), std::move(client_port)); | 67 | registered_services.emplace(std::move(name), std::move(client_port)); |
| 66 | return MakeResult(std::move(server_port)); | 68 | return MakeResult(std::move(server_port)); |
| 67 | } | 69 | } |
| @@ -74,12 +76,14 @@ ResultCode ServiceManager::UnregisterService(const std::string& name) { | |||
| 74 | LOG_ERROR(Service_SM, "Server is not registered! service={}", name); | 76 | LOG_ERROR(Service_SM, "Server is not registered! service={}", name); |
| 75 | return ERR_SERVICE_NOT_REGISTERED; | 77 | return ERR_SERVICE_NOT_REGISTERED; |
| 76 | } | 78 | } |
| 79 | |||
| 80 | iter->second->Close(); | ||
| 81 | |||
| 77 | registered_services.erase(iter); | 82 | registered_services.erase(iter); |
| 78 | return RESULT_SUCCESS; | 83 | return RESULT_SUCCESS; |
| 79 | } | 84 | } |
| 80 | 85 | ||
| 81 | ResultVal<std::shared_ptr<Kernel::ClientPort>> ServiceManager::GetServicePort( | 86 | ResultVal<Kernel::KClientPort*> ServiceManager::GetServicePort(const std::string& name) { |
| 82 | const std::string& name) { | ||
| 83 | 87 | ||
| 84 | CASCADE_CODE(ValidateServiceName(name)); | 88 | CASCADE_CODE(ValidateServiceName(name)); |
| 85 | auto it = registered_services.find(name); | 89 | auto it = registered_services.find(name); |
diff --git a/src/core/hle/service/sm/sm.h b/src/core/hle/service/sm/sm.h index 8f6862fa9..aee9aefec 100644 --- a/src/core/hle/service/sm/sm.h +++ b/src/core/hle/service/sm/sm.h | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | #include <unordered_map> | 10 | #include <unordered_map> |
| 11 | 11 | ||
| 12 | #include "common/concepts.h" | 12 | #include "common/concepts.h" |
| 13 | #include "core/hle/kernel/client_port.h" | 13 | #include "core/hle/kernel/k_client_port.h" |
| 14 | #include "core/hle/kernel/object.h" | 14 | #include "core/hle/kernel/object.h" |
| 15 | #include "core/hle/kernel/server_port.h" | 15 | #include "core/hle/kernel/server_port.h" |
| 16 | #include "core/hle/result.h" | 16 | #include "core/hle/result.h" |
| @@ -21,7 +21,7 @@ class System; | |||
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | namespace Kernel { | 23 | namespace Kernel { |
| 24 | class ClientPort; | 24 | class KClientPort; |
| 25 | class KClientSession; | 25 | class KClientSession; |
| 26 | class KernelCore; | 26 | class KernelCore; |
| 27 | class ServerPort; | 27 | class ServerPort; |
| @@ -58,7 +58,7 @@ public: | |||
| 58 | ResultVal<std::shared_ptr<Kernel::ServerPort>> RegisterService(std::string name, | 58 | ResultVal<std::shared_ptr<Kernel::ServerPort>> RegisterService(std::string name, |
| 59 | u32 max_sessions); | 59 | u32 max_sessions); |
| 60 | ResultCode UnregisterService(const std::string& name); | 60 | ResultCode UnregisterService(const std::string& name); |
| 61 | ResultVal<std::shared_ptr<Kernel::ClientPort>> GetServicePort(const std::string& name); | 61 | ResultVal<Kernel::KClientPort*> GetServicePort(const std::string& name); |
| 62 | 62 | ||
| 63 | template <Common::DerivedFrom<Kernel::SessionRequestHandler> T> | 63 | template <Common::DerivedFrom<Kernel::SessionRequestHandler> T> |
| 64 | std::shared_ptr<T> GetService(const std::string& service_name) const { | 64 | std::shared_ptr<T> GetService(const std::string& service_name) const { |
| @@ -81,7 +81,7 @@ private: | |||
| 81 | std::unique_ptr<Controller> controller_interface; | 81 | std::unique_ptr<Controller> controller_interface; |
| 82 | 82 | ||
| 83 | /// Map of registered services, retrieved using GetServicePort. | 83 | /// Map of registered services, retrieved using GetServicePort. |
| 84 | std::unordered_map<std::string, std::shared_ptr<Kernel::ClientPort>> registered_services; | 84 | std::unordered_map<std::string, Kernel::KClientPort*> registered_services; |
| 85 | 85 | ||
| 86 | /// Kernel context | 86 | /// Kernel context |
| 87 | Kernel::KernelCore& kernel; | 87 | Kernel::KernelCore& kernel; |
diff --git a/src/core/hle/service/time/time.cpp b/src/core/hle/service/time/time.cpp index 413a00ae0..e7991012b 100644 --- a/src/core/hle/service/time/time.cpp +++ b/src/core/hle/service/time/time.cpp | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | #include "core/core_timing_util.h" | 8 | #include "core/core_timing_util.h" |
| 9 | #include "core/hardware_properties.h" | 9 | #include "core/hardware_properties.h" |
| 10 | #include "core/hle/ipc_helpers.h" | 10 | #include "core/hle/ipc_helpers.h" |
| 11 | #include "core/hle/kernel/client_port.h" | 11 | #include "core/hle/kernel/k_client_port.h" |
| 12 | #include "core/hle/kernel/k_scheduler.h" | 12 | #include "core/hle/kernel/k_scheduler.h" |
| 13 | #include "core/hle/kernel/kernel.h" | 13 | #include "core/hle/kernel/kernel.h" |
| 14 | #include "core/hle/service/time/interface.h" | 14 | #include "core/hle/service/time/interface.h" |