diff options
| author | 2023-12-09 22:16:35 -0500 | |
|---|---|---|
| committer | 2023-12-09 22:56:21 -0500 | |
| commit | a529ef4c09b1c8041800fc1a86d173388877da3c (patch) | |
| tree | 6c633cdbd85c1d833e9100b7bc168f3bc91dadb7 /src | |
| parent | Merge pull request #12296 from liamwhite/client-session (diff) | |
| download | yuzu-a529ef4c09b1c8041800fc1a86d173388877da3c.tar.gz yuzu-a529ef4c09b1c8041800fc1a86d173388877da3c.tar.xz yuzu-a529ef4c09b1c8041800fc1a86d173388877da3c.zip | |
sm:: fix tipc deserialization
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/sm/sm.cpp | 25 | ||||
| -rw-r--r-- | src/core/hle/service/sm/sm.h | 7 |
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 e0cde9a05..e9a101333 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 | ||
| 124 | void SM::GetService(HLERequestContext& ctx) { | 124 | void 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 | ||
| 199 | void SM::RegisterService(HLERequestContext& ctx) { | 199 | void 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 | |||
| 209 | void 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 | |||
| 219 | void 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 14bfaf8c2..f081a72d9 100644 --- a/src/core/hle/service/sm/sm.h +++ b/src/core/hle/service/sm/sm.h | |||
| @@ -37,12 +37,15 @@ public: | |||
| 37 | 37 | ||
| 38 | private: | 38 | private: |
| 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; |