summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/service/sm/sm.cpp25
-rw-r--r--src/core/hle/service/sm/sm.h7
2 files changed, 25 insertions, 7 deletions
diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp
index f2cdefa1c..296ee6e89 100644
--- a/src/core/hle/service/sm/sm.cpp
+++ b/src/core/hle/service/sm/sm.cpp
@@ -121,7 +121,7 @@ void SM::Initialize(HLERequestContext& ctx) {
121 rb.Push(ResultSuccess); 121 rb.Push(ResultSuccess);
122} 122}
123 123
124void SM::GetService(HLERequestContext& ctx) { 124void SM::GetServiceCmif(HLERequestContext& ctx) {
125 Kernel::KClientSession* client_session{}; 125 Kernel::KClientSession* client_session{};
126 auto result = GetServiceImpl(&client_session, ctx); 126 auto result = GetServiceImpl(&client_session, ctx);
127 if (ctx.GetIsDeferred()) { 127 if (ctx.GetIsDeferred()) {
@@ -196,13 +196,28 @@ Result SM::GetServiceImpl(Kernel::KClientSession** out_client_session, HLEReques
196 return ResultSuccess; 196 return ResultSuccess;
197} 197}
198 198
199void SM::RegisterService(HLERequestContext& ctx) { 199void SM::RegisterServiceCmif(HLERequestContext& ctx) {
200 IPC::RequestParser rp{ctx}; 200 IPC::RequestParser rp{ctx};
201 std::string name(PopServiceName(rp)); 201 std::string name(PopServiceName(rp));
202 202
203 const auto is_light = static_cast<bool>(rp.PopRaw<u32>()); 203 const auto is_light = static_cast<bool>(rp.PopRaw<u32>());
204 const auto max_session_count = rp.PopRaw<u32>(); 204 const auto max_session_count = rp.PopRaw<u32>();
205 205
206 this->RegisterServiceImpl(ctx, name, max_session_count, is_light);
207}
208
209void SM::RegisterServiceTipc(HLERequestContext& ctx) {
210 IPC::RequestParser rp{ctx};
211 std::string name(PopServiceName(rp));
212
213 const auto max_session_count = rp.PopRaw<u32>();
214 const auto is_light = static_cast<bool>(rp.PopRaw<u32>());
215
216 this->RegisterServiceImpl(ctx, name, max_session_count, is_light);
217}
218
219void SM::RegisterServiceImpl(HLERequestContext& ctx, std::string name, u32 max_session_count,
220 bool is_light) {
206 LOG_DEBUG(Service_SM, "called with name={}, max_session_count={}, is_light={}", name, 221 LOG_DEBUG(Service_SM, "called with name={}, max_session_count={}, is_light={}", name,
207 max_session_count, is_light); 222 max_session_count, is_light);
208 223
@@ -238,15 +253,15 @@ SM::SM(ServiceManager& service_manager_, Core::System& system_)
238 service_manager{service_manager_}, kernel{system_.Kernel()} { 253 service_manager{service_manager_}, kernel{system_.Kernel()} {
239 RegisterHandlers({ 254 RegisterHandlers({
240 {0, &SM::Initialize, "Initialize"}, 255 {0, &SM::Initialize, "Initialize"},
241 {1, &SM::GetService, "GetService"}, 256 {1, &SM::GetServiceCmif, "GetService"},
242 {2, &SM::RegisterService, "RegisterService"}, 257 {2, &SM::RegisterServiceCmif, "RegisterService"},
243 {3, &SM::UnregisterService, "UnregisterService"}, 258 {3, &SM::UnregisterService, "UnregisterService"},
244 {4, nullptr, "DetachClient"}, 259 {4, nullptr, "DetachClient"},
245 }); 260 });
246 RegisterHandlersTipc({ 261 RegisterHandlersTipc({
247 {0, &SM::Initialize, "Initialize"}, 262 {0, &SM::Initialize, "Initialize"},
248 {1, &SM::GetServiceTipc, "GetService"}, 263 {1, &SM::GetServiceTipc, "GetService"},
249 {2, &SM::RegisterService, "RegisterService"}, 264 {2, &SM::RegisterServiceTipc, "RegisterService"},
250 {3, &SM::UnregisterService, "UnregisterService"}, 265 {3, &SM::UnregisterService, "UnregisterService"},
251 {4, nullptr, "DetachClient"}, 266 {4, nullptr, "DetachClient"},
252 }); 267 });
diff --git a/src/core/hle/service/sm/sm.h b/src/core/hle/service/sm/sm.h
index cf102c339..ff74f588a 100644
--- a/src/core/hle/service/sm/sm.h
+++ b/src/core/hle/service/sm/sm.h
@@ -37,12 +37,15 @@ public:
37 37
38private: 38private:
39 void Initialize(HLERequestContext& ctx); 39 void Initialize(HLERequestContext& ctx);
40 void GetService(HLERequestContext& ctx); 40 void GetServiceCmif(HLERequestContext& ctx);
41 void GetServiceTipc(HLERequestContext& ctx); 41 void GetServiceTipc(HLERequestContext& ctx);
42 void RegisterService(HLERequestContext& ctx); 42 void RegisterServiceCmif(HLERequestContext& ctx);
43 void RegisterServiceTipc(HLERequestContext& ctx);
43 void UnregisterService(HLERequestContext& ctx); 44 void UnregisterService(HLERequestContext& ctx);
44 45
45 Result GetServiceImpl(Kernel::KClientSession** out_client_session, HLERequestContext& ctx); 46 Result GetServiceImpl(Kernel::KClientSession** out_client_session, HLERequestContext& ctx);
47 void RegisterServiceImpl(HLERequestContext& ctx, std::string name, u32 max_session_count,
48 bool is_light);
46 49
47 ServiceManager& service_manager; 50 ServiceManager& service_manager;
48 Kernel::KernelCore& kernel; 51 Kernel::KernelCore& kernel;