summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2023-12-11 00:17:04 +0100
committerGitHub <noreply@github.com>2023-12-11 00:17:04 +0100
commit24e7ace876081f3fec8b53151ae802077e6c82d4 (patch)
tree02d084dd92c3bdbd350390478fb1b8e4dc5bdd62
parentMerge pull request #12317 from liamwhite/sc-fix (diff)
parentsm:: fix tipc deserialization (diff)
downloadyuzu-24e7ace876081f3fec8b53151ae802077e6c82d4.tar
yuzu-24e7ace876081f3fec8b53151ae802077e6c82d4.tar.gz
yuzu-24e7ace876081f3fec8b53151ae802077e6c82d4.tar.bz2
yuzu-24e7ace876081f3fec8b53151ae802077e6c82d4.tar.lz
yuzu-24e7ace876081f3fec8b53151ae802077e6c82d4.tar.xz
yuzu-24e7ace876081f3fec8b53151ae802077e6c82d4.tar.zst
yuzu-24e7ace876081f3fec8b53151ae802077e6c82d4.zip
-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) {
rb.Push(ResultSuccess);
}
-void SM::GetService(HLERequestContext& ctx) {
+void SM::GetServiceCmif(HLERequestContext& ctx) {
Kernel::KClientSession* client_session{};
auto result = GetServiceImpl(&client_session, ctx);
if (ctx.GetIsDeferred()) {
@@ -196,13 +196,28 @@ Result SM::GetServiceImpl(Kernel::KClientSession** out_client_session, HLEReques
return ResultSuccess;
}
-void SM::RegisterService(HLERequestContext& ctx) {
+void SM::RegisterServiceCmif(HLERequestContext& ctx) {
IPC::RequestParser rp{ctx};
std::string name(PopServiceName(rp));
const auto is_light = static_cast<bool>(rp.PopRaw<u32>());
const auto max_session_count = rp.PopRaw<u32>();
+ this->RegisterServiceImpl(ctx, name, max_session_count, is_light);
+}
+
+void SM::RegisterServiceTipc(HLERequestContext& ctx) {
+ IPC::RequestParser rp{ctx};
+ std::string name(PopServiceName(rp));
+
+ const auto max_session_count = rp.PopRaw<u32>();
+ const auto is_light = static_cast<bool>(rp.PopRaw<u32>());
+
+ this->RegisterServiceImpl(ctx, name, max_session_count, is_light);
+}
+
+void SM::RegisterServiceImpl(HLERequestContext& ctx, std::string name, u32 max_session_count,
+ bool is_light) {
LOG_DEBUG(Service_SM, "called with name={}, max_session_count={}, is_light={}", name,
max_session_count, is_light);
@@ -238,15 +253,15 @@ SM::SM(ServiceManager& service_manager_, Core::System& system_)
service_manager{service_manager_}, kernel{system_.Kernel()} {
RegisterHandlers({
{0, &SM::Initialize, "Initialize"},
- {1, &SM::GetService, "GetService"},
- {2, &SM::RegisterService, "RegisterService"},
+ {1, &SM::GetServiceCmif, "GetService"},
+ {2, &SM::RegisterServiceCmif, "RegisterService"},
{3, &SM::UnregisterService, "UnregisterService"},
{4, nullptr, "DetachClient"},
});
RegisterHandlersTipc({
{0, &SM::Initialize, "Initialize"},
{1, &SM::GetServiceTipc, "GetService"},
- {2, &SM::RegisterService, "RegisterService"},
+ {2, &SM::RegisterServiceTipc, "RegisterService"},
{3, &SM::UnregisterService, "UnregisterService"},
{4, nullptr, "DetachClient"},
});
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:
private:
void Initialize(HLERequestContext& ctx);
- void GetService(HLERequestContext& ctx);
+ void GetServiceCmif(HLERequestContext& ctx);
void GetServiceTipc(HLERequestContext& ctx);
- void RegisterService(HLERequestContext& ctx);
+ void RegisterServiceCmif(HLERequestContext& ctx);
+ void RegisterServiceTipc(HLERequestContext& ctx);
void UnregisterService(HLERequestContext& ctx);
Result GetServiceImpl(Kernel::KClientSession** out_client_session, HLERequestContext& ctx);
+ void RegisterServiceImpl(HLERequestContext& ctx, std::string name, u32 max_session_count,
+ bool is_light);
ServiceManager& service_manager;
Kernel::KernelCore& kernel;