summaryrefslogtreecommitdiff
path: root/src/core/hle/service/sm
diff options
context:
space:
mode:
authorGravatar Liam2023-02-19 14:42:12 -0500
committerGravatar Liam2023-03-01 10:39:49 -0500
commit65be230fdda302b25447f2f09b06e3238bd09e79 (patch)
tree68250d7bc8151041b236dcd79483df98938952cd /src/core/hle/service/sm
parentsm:: remove unused member (diff)
downloadyuzu-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.cpp18
-rw-r--r--src/core/hle/service/sm/sm.h21
-rw-r--r--src/core/hle/service/sm/sm_controller.cpp10
-rw-r--r--src/core/hle/service/sm/sm_controller.h8
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
41void ServiceManager::InvokeControlRequest(Kernel::HLERequestContext& context) { 41void 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
53Result ServiceManager::RegisterService(std::string name, u32 max_sessions, 53Result 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 */
112void SM::Initialize(Kernel::HLERequestContext& ctx) { 112void 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
121void SM::GetService(Kernel::HLERequestContext& ctx) { 121void 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
138void SM::GetServiceTipc(Kernel::HLERequestContext& ctx) { 138void 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
161ResultVal<Kernel::KClientSession*> SM::GetServiceImpl(Kernel::HLERequestContext& ctx) { 161ResultVal<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
195void SM::RegisterService(Kernel::HLERequestContext& ctx) { 195void 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
222void SM::UnregisterService(Kernel::HLERequestContext& ctx) { 222void 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
38private: 38private:
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
16namespace Service::SM { 16namespace Service::SM {
17 17
18void Controller::ConvertCurrentObjectToDomain(Kernel::HLERequestContext& ctx) { 18void 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
28void Controller::CloneCurrentObject(Kernel::HLERequestContext& ctx) { 28void 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
62void Controller::CloneCurrentObjectEx(Kernel::HLERequestContext& ctx) { 62void 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
68void Controller::QueryPointerBufferSize(Kernel::HLERequestContext& ctx) { 68void 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
19private: 19private:
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