diff options
| author | 2023-02-19 14:42:12 -0500 | |
|---|---|---|
| committer | 2023-03-01 10:39:49 -0500 | |
| commit | 65be230fdda302b25447f2f09b06e3238bd09e79 (patch) | |
| tree | 68250d7bc8151041b236dcd79483df98938952cd /src/core/hle/service/sm | |
| parent | sm:: remove unused member (diff) | |
| download | yuzu-65be230fdda302b25447f2f09b06e3238bd09e79.tar.gz yuzu-65be230fdda302b25447f2f09b06e3238bd09e79.tar.xz yuzu-65be230fdda302b25447f2f09b06e3238bd09e79.zip | |
service: move hle_ipc from kernel
Diffstat (limited to 'src/core/hle/service/sm')
| -rw-r--r-- | src/core/hle/service/sm/sm.cpp | 18 | ||||
| -rw-r--r-- | src/core/hle/service/sm/sm.h | 21 | ||||
| -rw-r--r-- | src/core/hle/service/sm/sm_controller.cpp | 10 | ||||
| -rw-r--r-- | src/core/hle/service/sm/sm_controller.h | 8 |
4 files changed, 28 insertions, 29 deletions
diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp index 53c877836..a46f47d3e 100644 --- a/src/core/hle/service/sm/sm.cpp +++ b/src/core/hle/service/sm/sm.cpp | |||
| @@ -5,13 +5,13 @@ | |||
| 5 | #include "common/assert.h" | 5 | #include "common/assert.h" |
| 6 | #include "common/scope_exit.h" | 6 | #include "common/scope_exit.h" |
| 7 | #include "core/core.h" | 7 | #include "core/core.h" |
| 8 | #include "core/hle/ipc_helpers.h" | ||
| 9 | #include "core/hle/kernel/k_client_port.h" | 8 | #include "core/hle/kernel/k_client_port.h" |
| 10 | #include "core/hle/kernel/k_client_session.h" | 9 | #include "core/hle/kernel/k_client_session.h" |
| 11 | #include "core/hle/kernel/k_port.h" | 10 | #include "core/hle/kernel/k_port.h" |
| 12 | #include "core/hle/kernel/k_scoped_resource_reservation.h" | 11 | #include "core/hle/kernel/k_scoped_resource_reservation.h" |
| 13 | #include "core/hle/kernel/k_server_port.h" | 12 | #include "core/hle/kernel/k_server_port.h" |
| 14 | #include "core/hle/result.h" | 13 | #include "core/hle/result.h" |
| 14 | #include "core/hle/service/ipc_helpers.h" | ||
| 15 | #include "core/hle/service/server_manager.h" | 15 | #include "core/hle/service/server_manager.h" |
| 16 | #include "core/hle/service/sm/sm.h" | 16 | #include "core/hle/service/sm/sm.h" |
| 17 | #include "core/hle/service/sm/sm_controller.h" | 17 | #include "core/hle/service/sm/sm_controller.h" |
| @@ -38,7 +38,7 @@ ServiceManager::~ServiceManager() { | |||
| 38 | } | 38 | } |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | void ServiceManager::InvokeControlRequest(Kernel::HLERequestContext& context) { | 41 | void ServiceManager::InvokeControlRequest(HLERequestContext& context) { |
| 42 | controller_interface->InvokeRequest(context); | 42 | controller_interface->InvokeRequest(context); |
| 43 | } | 43 | } |
| 44 | 44 | ||
| @@ -51,7 +51,7 @@ static Result ValidateServiceName(const std::string& name) { | |||
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | Result ServiceManager::RegisterService(std::string name, u32 max_sessions, | 53 | Result ServiceManager::RegisterService(std::string name, u32 max_sessions, |
| 54 | Kernel::SessionRequestHandlerPtr handler) { | 54 | SessionRequestHandlerPtr handler) { |
| 55 | 55 | ||
| 56 | CASCADE_CODE(ValidateServiceName(name)); | 56 | CASCADE_CODE(ValidateServiceName(name)); |
| 57 | 57 | ||
| @@ -109,7 +109,7 @@ ResultVal<Kernel::KPort*> ServiceManager::GetServicePort(const std::string& name | |||
| 109 | * Outputs: | 109 | * Outputs: |
| 110 | * 0: Result | 110 | * 0: Result |
| 111 | */ | 111 | */ |
| 112 | void SM::Initialize(Kernel::HLERequestContext& ctx) { | 112 | void SM::Initialize(HLERequestContext& ctx) { |
| 113 | LOG_DEBUG(Service_SM, "called"); | 113 | LOG_DEBUG(Service_SM, "called"); |
| 114 | 114 | ||
| 115 | ctx.GetManager()->SetIsInitializedForSm(); | 115 | ctx.GetManager()->SetIsInitializedForSm(); |
| @@ -118,7 +118,7 @@ void SM::Initialize(Kernel::HLERequestContext& ctx) { | |||
| 118 | rb.Push(ResultSuccess); | 118 | rb.Push(ResultSuccess); |
| 119 | } | 119 | } |
| 120 | 120 | ||
| 121 | void SM::GetService(Kernel::HLERequestContext& ctx) { | 121 | void SM::GetService(HLERequestContext& ctx) { |
| 122 | auto result = GetServiceImpl(ctx); | 122 | auto result = GetServiceImpl(ctx); |
| 123 | if (ctx.GetIsDeferred()) { | 123 | if (ctx.GetIsDeferred()) { |
| 124 | // Don't overwrite the command buffer. | 124 | // Don't overwrite the command buffer. |
| @@ -135,7 +135,7 @@ void SM::GetService(Kernel::HLERequestContext& ctx) { | |||
| 135 | } | 135 | } |
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | void SM::GetServiceTipc(Kernel::HLERequestContext& ctx) { | 138 | void SM::GetServiceTipc(HLERequestContext& ctx) { |
| 139 | auto result = GetServiceImpl(ctx); | 139 | auto result = GetServiceImpl(ctx); |
| 140 | if (ctx.GetIsDeferred()) { | 140 | if (ctx.GetIsDeferred()) { |
| 141 | // Don't overwrite the command buffer. | 141 | // Don't overwrite the command buffer. |
| @@ -158,7 +158,7 @@ static std::string PopServiceName(IPC::RequestParser& rp) { | |||
| 158 | return result; | 158 | return result; |
| 159 | } | 159 | } |
| 160 | 160 | ||
| 161 | ResultVal<Kernel::KClientSession*> SM::GetServiceImpl(Kernel::HLERequestContext& ctx) { | 161 | ResultVal<Kernel::KClientSession*> SM::GetServiceImpl(HLERequestContext& ctx) { |
| 162 | if (!ctx.GetManager()->GetIsInitializedForSm()) { | 162 | if (!ctx.GetManager()->GetIsInitializedForSm()) { |
| 163 | return ERR_NOT_INITIALIZED; | 163 | return ERR_NOT_INITIALIZED; |
| 164 | } | 164 | } |
| @@ -192,7 +192,7 @@ ResultVal<Kernel::KClientSession*> SM::GetServiceImpl(Kernel::HLERequestContext& | |||
| 192 | return session; | 192 | return session; |
| 193 | } | 193 | } |
| 194 | 194 | ||
| 195 | void SM::RegisterService(Kernel::HLERequestContext& ctx) { | 195 | void SM::RegisterService(HLERequestContext& ctx) { |
| 196 | IPC::RequestParser rp{ctx}; | 196 | IPC::RequestParser rp{ctx}; |
| 197 | std::string name(PopServiceName(rp)); | 197 | std::string name(PopServiceName(rp)); |
| 198 | 198 | ||
| @@ -219,7 +219,7 @@ void SM::RegisterService(Kernel::HLERequestContext& ctx) { | |||
| 219 | rb.PushMoveObjects(port->GetServerPort()); | 219 | rb.PushMoveObjects(port->GetServerPort()); |
| 220 | } | 220 | } |
| 221 | 221 | ||
| 222 | void SM::UnregisterService(Kernel::HLERequestContext& ctx) { | 222 | void SM::UnregisterService(HLERequestContext& ctx) { |
| 223 | IPC::RequestParser rp{ctx}; | 223 | IPC::RequestParser rp{ctx}; |
| 224 | std::string name(PopServiceName(rp)); | 224 | std::string name(PopServiceName(rp)); |
| 225 | 225 | ||
diff --git a/src/core/hle/service/sm/sm.h b/src/core/hle/service/sm/sm.h index 8dbf2c767..6697f4007 100644 --- a/src/core/hle/service/sm/sm.h +++ b/src/core/hle/service/sm/sm.h | |||
| @@ -36,13 +36,13 @@ public: | |||
| 36 | ~SM() override; | 36 | ~SM() override; |
| 37 | 37 | ||
| 38 | private: | 38 | private: |
| 39 | void Initialize(Kernel::HLERequestContext& ctx); | 39 | void Initialize(HLERequestContext& ctx); |
| 40 | void GetService(Kernel::HLERequestContext& ctx); | 40 | void GetService(HLERequestContext& ctx); |
| 41 | void GetServiceTipc(Kernel::HLERequestContext& ctx); | 41 | void GetServiceTipc(HLERequestContext& ctx); |
| 42 | void RegisterService(Kernel::HLERequestContext& ctx); | 42 | void RegisterService(HLERequestContext& ctx); |
| 43 | void UnregisterService(Kernel::HLERequestContext& ctx); | 43 | void UnregisterService(HLERequestContext& ctx); |
| 44 | 44 | ||
| 45 | ResultVal<Kernel::KClientSession*> GetServiceImpl(Kernel::HLERequestContext& ctx); | 45 | ResultVal<Kernel::KClientSession*> GetServiceImpl(HLERequestContext& ctx); |
| 46 | 46 | ||
| 47 | ServiceManager& service_manager; | 47 | ServiceManager& service_manager; |
| 48 | Kernel::KernelCore& kernel; | 48 | Kernel::KernelCore& kernel; |
| @@ -53,12 +53,11 @@ public: | |||
| 53 | explicit ServiceManager(Kernel::KernelCore& kernel_); | 53 | explicit ServiceManager(Kernel::KernelCore& kernel_); |
| 54 | ~ServiceManager(); | 54 | ~ServiceManager(); |
| 55 | 55 | ||
| 56 | Result RegisterService(std::string name, u32 max_sessions, | 56 | Result RegisterService(std::string name, u32 max_sessions, SessionRequestHandlerPtr handler); |
| 57 | Kernel::SessionRequestHandlerPtr handler); | ||
| 58 | Result UnregisterService(const std::string& name); | 57 | Result UnregisterService(const std::string& name); |
| 59 | ResultVal<Kernel::KPort*> GetServicePort(const std::string& name); | 58 | ResultVal<Kernel::KPort*> GetServicePort(const std::string& name); |
| 60 | 59 | ||
| 61 | template <Common::DerivedFrom<Kernel::SessionRequestHandler> T> | 60 | template <Common::DerivedFrom<SessionRequestHandler> T> |
| 62 | std::shared_ptr<T> GetService(const std::string& service_name) const { | 61 | std::shared_ptr<T> GetService(const std::string& service_name) const { |
| 63 | auto service = registered_services.find(service_name); | 62 | auto service = registered_services.find(service_name); |
| 64 | if (service == registered_services.end()) { | 63 | if (service == registered_services.end()) { |
| @@ -68,7 +67,7 @@ public: | |||
| 68 | return std::static_pointer_cast<T>(service->second); | 67 | return std::static_pointer_cast<T>(service->second); |
| 69 | } | 68 | } |
| 70 | 69 | ||
| 71 | void InvokeControlRequest(Kernel::HLERequestContext& context); | 70 | void InvokeControlRequest(HLERequestContext& context); |
| 72 | 71 | ||
| 73 | void SetDeferralEvent(Kernel::KEvent* deferral_event_) { | 72 | void SetDeferralEvent(Kernel::KEvent* deferral_event_) { |
| 74 | deferral_event = deferral_event_; | 73 | deferral_event = deferral_event_; |
| @@ -80,7 +79,7 @@ private: | |||
| 80 | 79 | ||
| 81 | /// Map of registered services, retrieved using GetServicePort. | 80 | /// Map of registered services, retrieved using GetServicePort. |
| 82 | std::mutex lock; | 81 | std::mutex lock; |
| 83 | std::unordered_map<std::string, Kernel::SessionRequestHandlerPtr> registered_services; | 82 | std::unordered_map<std::string, SessionRequestHandlerPtr> registered_services; |
| 84 | std::unordered_map<std::string, Kernel::KPort*> service_ports; | 83 | std::unordered_map<std::string, Kernel::KPort*> service_ports; |
| 85 | 84 | ||
| 86 | /// Kernel context | 85 | /// Kernel context |
diff --git a/src/core/hle/service/sm/sm_controller.cpp b/src/core/hle/service/sm/sm_controller.cpp index f52522d1d..0111c8d7f 100644 --- a/src/core/hle/service/sm/sm_controller.cpp +++ b/src/core/hle/service/sm/sm_controller.cpp | |||
| @@ -4,18 +4,18 @@ | |||
| 4 | #include "common/assert.h" | 4 | #include "common/assert.h" |
| 5 | #include "common/logging/log.h" | 5 | #include "common/logging/log.h" |
| 6 | #include "core/core.h" | 6 | #include "core/core.h" |
| 7 | #include "core/hle/ipc_helpers.h" | ||
| 8 | #include "core/hle/kernel/k_client_port.h" | 7 | #include "core/hle/kernel/k_client_port.h" |
| 9 | #include "core/hle/kernel/k_port.h" | 8 | #include "core/hle/kernel/k_port.h" |
| 10 | #include "core/hle/kernel/k_scoped_resource_reservation.h" | 9 | #include "core/hle/kernel/k_scoped_resource_reservation.h" |
| 11 | #include "core/hle/kernel/k_server_session.h" | 10 | #include "core/hle/kernel/k_server_session.h" |
| 12 | #include "core/hle/kernel/k_session.h" | 11 | #include "core/hle/kernel/k_session.h" |
| 12 | #include "core/hle/service/ipc_helpers.h" | ||
| 13 | #include "core/hle/service/server_manager.h" | 13 | #include "core/hle/service/server_manager.h" |
| 14 | #include "core/hle/service/sm/sm_controller.h" | 14 | #include "core/hle/service/sm/sm_controller.h" |
| 15 | 15 | ||
| 16 | namespace Service::SM { | 16 | namespace Service::SM { |
| 17 | 17 | ||
| 18 | void Controller::ConvertCurrentObjectToDomain(Kernel::HLERequestContext& ctx) { | 18 | void Controller::ConvertCurrentObjectToDomain(HLERequestContext& ctx) { |
| 19 | ASSERT_MSG(!ctx.GetManager()->IsDomain(), "Session is already a domain"); | 19 | ASSERT_MSG(!ctx.GetManager()->IsDomain(), "Session is already a domain"); |
| 20 | LOG_DEBUG(Service, "called, server_session={}", ctx.Session()->GetId()); | 20 | LOG_DEBUG(Service, "called, server_session={}", ctx.Session()->GetId()); |
| 21 | ctx.GetManager()->ConvertToDomainOnRequestEnd(); | 21 | ctx.GetManager()->ConvertToDomainOnRequestEnd(); |
| @@ -25,7 +25,7 @@ void Controller::ConvertCurrentObjectToDomain(Kernel::HLERequestContext& ctx) { | |||
| 25 | rb.Push<u32>(1); // Converted sessions start with 1 request handler | 25 | rb.Push<u32>(1); // Converted sessions start with 1 request handler |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | void Controller::CloneCurrentObject(Kernel::HLERequestContext& ctx) { | 28 | void Controller::CloneCurrentObject(HLERequestContext& ctx) { |
| 29 | LOG_DEBUG(Service, "called"); | 29 | LOG_DEBUG(Service, "called"); |
| 30 | 30 | ||
| 31 | auto& process = *ctx.GetThread().GetOwnerProcess(); | 31 | auto& process = *ctx.GetThread().GetOwnerProcess(); |
| @@ -59,13 +59,13 @@ void Controller::CloneCurrentObject(Kernel::HLERequestContext& ctx) { | |||
| 59 | rb.PushMoveObjects(session->GetClientSession()); | 59 | rb.PushMoveObjects(session->GetClientSession()); |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | void Controller::CloneCurrentObjectEx(Kernel::HLERequestContext& ctx) { | 62 | void Controller::CloneCurrentObjectEx(HLERequestContext& ctx) { |
| 63 | LOG_DEBUG(Service, "called"); | 63 | LOG_DEBUG(Service, "called"); |
| 64 | 64 | ||
| 65 | CloneCurrentObject(ctx); | 65 | CloneCurrentObject(ctx); |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | void Controller::QueryPointerBufferSize(Kernel::HLERequestContext& ctx) { | 68 | void Controller::QueryPointerBufferSize(HLERequestContext& ctx) { |
| 69 | LOG_WARNING(Service, "(STUBBED) called"); | 69 | LOG_WARNING(Service, "(STUBBED) called"); |
| 70 | 70 | ||
| 71 | IPC::ResponseBuilder rb{ctx, 3}; | 71 | IPC::ResponseBuilder rb{ctx, 3}; |
diff --git a/src/core/hle/service/sm/sm_controller.h b/src/core/hle/service/sm/sm_controller.h index ed386f660..4e748b36d 100644 --- a/src/core/hle/service/sm/sm_controller.h +++ b/src/core/hle/service/sm/sm_controller.h | |||
| @@ -17,10 +17,10 @@ public: | |||
| 17 | ~Controller() override; | 17 | ~Controller() override; |
| 18 | 18 | ||
| 19 | private: | 19 | private: |
| 20 | void ConvertCurrentObjectToDomain(Kernel::HLERequestContext& ctx); | 20 | void ConvertCurrentObjectToDomain(HLERequestContext& ctx); |
| 21 | void CloneCurrentObject(Kernel::HLERequestContext& ctx); | 21 | void CloneCurrentObject(HLERequestContext& ctx); |
| 22 | void CloneCurrentObjectEx(Kernel::HLERequestContext& ctx); | 22 | void CloneCurrentObjectEx(HLERequestContext& ctx); |
| 23 | void QueryPointerBufferSize(Kernel::HLERequestContext& ctx); | 23 | void QueryPointerBufferSize(HLERequestContext& ctx); |
| 24 | }; | 24 | }; |
| 25 | 25 | ||
| 26 | } // namespace Service::SM | 26 | } // namespace Service::SM |