Revert "[hle] constexpr handler dispatch maps, introduce version gating (#4480)" (#4532)

This reverts commit 218c6705d9.

- [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions).
- [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md).
- [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability.

-------------------

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4532
Reviewed-by: lizzie <lizzie@eden-emu.dev>
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-by: Maufeat <sahyno1996@gmail.com>
This commit is contained in:
PavelBARABANOV
2026-10-15 08:45:15 +02:00
committed by crueter
parent 14da4482a4
commit e255c20db4
588 changed files with 14723 additions and 12534 deletions
+19 -17
View File
@@ -9,24 +9,26 @@
namespace Service::OLSC {
std::optional<ServiceFrameworkBase::FunctionInfoBase> IDaemonController::FindRequest(u32 key) {
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, D<&IDaemonController::GetApplicationAutoTransferSetting>, "GetApplicationAutoTransferSetting"},
FunctionInfo{1, D<&IDaemonController::SetApplicationAutoTransferSetting>, "SetApplicationAutoTransferSetting"},
FunctionInfo{2, D<&IDaemonController::GetGlobalAutoUploadSetting>, "GetGlobalAutoUploadSetting"},
FunctionInfo{3, D<&IDaemonController::SetGlobalAutoUploadSetting>, "SetGlobalAutoUploadSetting"},
FunctionInfo{4, D<&IDaemonController::RunTransferTaskAutonomyRegistration>, "RunTransferTaskAutonomyRegistration"},
FunctionInfo{5, D<&IDaemonController::GetGlobalAutoDownloadSetting>, "GetGlobalAutoDownloadSetting", MakeVersionGate({11,0,0})},
FunctionInfo{6, D<&IDaemonController::SetGlobalAutoDownloadSetting>, "SetGlobalAutoDownloadSetting", MakeVersionGate({11,0,0})},
FunctionInfo{10, nullptr, "CreateForbiddenSaveDataInidication"},
FunctionInfo{11, D<&IDaemonController::StopAutonomyTaskExecution>, "StopAutonomyTaskExecution"},
FunctionInfo{12, D<&IDaemonController::GetAutonomyTaskStatus>, "GetAutonomyTaskStatus"},
FunctionInfo{13, nullptr, "Unknown13_20_0_0_Plus", MakeVersionGate({20,0,0})}
);
return HandlerTableGenerateWithFind(key, functions);
}
IDaemonController::IDaemonController(Core::System& system_)
: ServiceFramework{system_, "IDaemonController"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&IDaemonController::GetApplicationAutoTransferSetting>, "GetApplicationAutoTransferSetting"},
{1, D<&IDaemonController::SetApplicationAutoTransferSetting>, "SetApplicationAutoTransferSetting"},
{2, D<&IDaemonController::GetGlobalAutoUploadSetting>, "GetGlobalAutoUploadSetting"},
{3, D<&IDaemonController::SetGlobalAutoUploadSetting>, "SetGlobalAutoUploadSetting"},
{4, D<&IDaemonController::RunTransferTaskAutonomyRegistration>, "RunTransferTaskAutonomyRegistration"},
{5, D<&IDaemonController::GetGlobalAutoDownloadSetting>, "GetGlobalAutoDownloadSetting"}, // 11.0.0+
{6, D<&IDaemonController::SetGlobalAutoDownloadSetting>, "SetGlobalAutoDownloadSetting"}, // 11.0.0+
{10, nullptr, "CreateForbiddenSaveDataInidication"},
{11, D<&IDaemonController::StopAutonomyTaskExecution>, "StopAutonomyTaskExecution"},
{12, D<&IDaemonController::GetAutonomyTaskStatus>, "GetAutonomyTaskStatus"},
{13, nullptr, "Unknown13_20_0_0_Plus"}, // 20.0.0+
};
// clang-format on
IDaemonController::IDaemonController(Core::System& system_) : ServiceFramework{system_, "IDaemonController"} {}
RegisterHandlers(functions);
}
IDaemonController::~IDaemonController() = default;
@@ -38,8 +38,6 @@ private:
Result GetAutonomyTaskStatus(Out<u8> out_status, Common::UUID user_id);
std::optional<FunctionInfoBase> FindRequest(u32 key) override;
// Internal in-memory state to back the above APIs
struct AppKey {
Common::UUID user_id;
@@ -12,16 +12,16 @@
namespace Service::OLSC {
std::optional<ServiceFrameworkBase::FunctionInfoBase> INativeHandleHolder::FindRequest(u32 key) {
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, D<&INativeHandleHolder::GetNativeHandle>, "GetNativeHandle"}
);
return HandlerTableGenerateWithFind(key, functions);
}
INativeHandleHolder::INativeHandleHolder(Core::System& system_)
: ServiceFramework{system_, "INativeHandleHolder"}, service_context{system_, "OLSC"} {
event = service_context.CreateEvent("OLSC::INativeHandleHolder");
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&INativeHandleHolder::GetNativeHandle>, "GetNativeHandle"},
};
// clang-format on
RegisterHandlers(functions);
}
INativeHandleHolder::~INativeHandleHolder() {
@@ -25,7 +25,6 @@ public:
private:
Result GetNativeHandle(OutCopyHandle<Kernel::KReadableEvent> out_event);
std::optional<FunctionInfoBase> FindRequest(u32 key) override;
Service::KernelHelpers::ServiceContext service_context;
Kernel::KEvent* event{};
+8 -165
View File
@@ -6,179 +6,22 @@
#include "core/hle/service/olsc/olsc.h"
#include "core/hle/service/olsc/olsc_service_for_application.h"
#include "core/hle/service/olsc/native_handle_holder.h"
#include "core/hle/service/olsc/stopper_object.h"
#include "core/hle/service/olsc/daemon_controller.h"
#include "core/hle/service/olsc/transfer_task_list_controller.h"
#include "core/hle/service/olsc/remote_storage_controller.h"
#include "core/hle/service/olsc/olsc_service_for_system_service.h"
#include "core/hle/service/server_manager.h"
#include "core/hle/service/service.h"
#include "core/hle/service/cmif_serialization.h"
namespace Service::OLSC {
class ISProfileBgAgentForSystemProcess final : public ServiceFramework<ISProfileBgAgentForSystemProcess> {
public:
explicit ISProfileBgAgentForSystemProcess(Core::System& system_) : ServiceFramework{system_, "spbg:sp"} {}
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
explicit ISProfileBgAgentForSystemProcess(Core::System& system_)
: ServiceFramework{system_, "spbg:sp"}
{
static const FunctionInfo functions[] = {
{ 100, nullptr, "OpenBgAgentController" },
};
RegisterHandlers(functions);
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{100, nullptr, "OpenBgAgentController" }
);
};
class IDaemonController;
class IRemoteStorageController;
class ITransferTaskListController;
struct DataTransferPolicy {
u8 upload_policy;
u8 download_policy;
};
struct TransferTaskErrorInfo {
Common::UUID uid;
u64 application_id;
u8 unknown_0x18;
std::array<u8, 7> reserved_0x19;
u64 unknown_0x20;
u32 error_code;
u32 reserved_0x2C;
};
static_assert(sizeof(TransferTaskErrorInfo) == 0x30, "TransferTaskErrorInfo has incorrect size.");
class IOlscServiceForSystemService final : public ServiceFramework<IOlscServiceForSystemService> {
public:
explicit IOlscServiceForSystemService(Core::System& system_)
: ServiceFramework{system_, "olsc:s"} {
}
~IOlscServiceForSystemService() override = default;
Result GetTransferTaskListController(
Out<SharedPointer<ITransferTaskListController>> out_interface) {
LOG_INFO(Service_OLSC, "called");
*out_interface = std::make_shared<ITransferTaskListController>(system);
R_SUCCEED();
}
Result GetRemoteStorageController(
Out<SharedPointer<IRemoteStorageController>> out_interface) {
LOG_INFO(Service_OLSC, "called");
*out_interface = std::make_shared<IRemoteStorageController>(system);
R_SUCCEED();
}
Result GetDaemonController(
Out<SharedPointer<IDaemonController>> out_interface) {
LOG_INFO(Service_OLSC, "called");
*out_interface = std::make_shared<IDaemonController>(system);
R_SUCCEED();
}
Result GetDataTransferPolicy(
Out<DataTransferPolicy> out_policy, u64 application_id) {
LOG_WARNING(Service_OLSC, "(STUBBED) called");
DataTransferPolicy policy{};
policy.upload_policy = 0;
policy.download_policy = 0;
*out_policy = policy;
R_SUCCEED();
}
Result GetTransferTaskErrorInfo(Out<TransferTaskErrorInfo> out_info,
Common::UUID uuid, u64 application_id) {
LOG_WARNING(Service_OLSC, "(STUBBED) called, uuid={} application_id={:016X}",
uuid.FormattedString(), application_id);
TransferTaskErrorInfo info{};
info.uid = uuid;
info.application_id = application_id;
info.unknown_0x18 = 0;
info.reserved_0x19.fill(0);
info.unknown_0x20 = 0;
info.error_code = 0;
info.reserved_0x2C = 0;
*out_info = info;
R_SUCCEED();
}
Result GetOlscServiceForSystemService(
Out<SharedPointer<IOlscServiceForSystemService>> out_interface) {
LOG_INFO(Service_OLSC, "called");
*out_interface = std::static_pointer_cast<IOlscServiceForSystemService>(shared_from_this());
R_SUCCEED();
}
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, D<&IOlscServiceForSystemService::GetTransferTaskListController>, "GetTransferTaskListController"},
FunctionInfo{1, D<&IOlscServiceForSystemService::GetRemoteStorageController>, "GetRemoteStorageController"},
FunctionInfo{2, D<&IOlscServiceForSystemService::GetDaemonController>, "GetDaemonController"},
FunctionInfo{10, nullptr, "PrepareDeleteUserProperty"},
FunctionInfo{11, nullptr, "DeleteUserSaveDataProperty"},
FunctionInfo{12, nullptr, "InvalidateMountCache"},
FunctionInfo{13, nullptr, "DeleteDeviceSaveDataProperty"},
FunctionInfo{100, nullptr, "ListLastTransferTaskErrorInfo"},
FunctionInfo{101, nullptr, "GetLastErrorInfoCount"},
FunctionInfo{102, nullptr, "RemoveLastErrorInfoOld"},
FunctionInfo{103, nullptr, "GetLastErrorInfo"},
FunctionInfo{104, nullptr, "GetLastErrorEventHolder"},
FunctionInfo{105, D<&IOlscServiceForSystemService::GetTransferTaskErrorInfo>, "GetTransferTaskErrorInfo"},
FunctionInfo{200, D<&IOlscServiceForSystemService::GetDataTransferPolicy>, "GetDataTransferPolicy"},
FunctionInfo{201, nullptr, "DeleteDataTransferPolicyCache"},
FunctionInfo{202, nullptr, "Unknown202"},
FunctionInfo{203, nullptr, "RequestUpdateDataTransferPolicyCacheAsync"},
FunctionInfo{204, nullptr, "ClearDataTransferPolicyCache"},
FunctionInfo{205, nullptr, "RequestGetDataTransferPolicyAsync"},
FunctionInfo{206, nullptr, "Unknown206", MakeVersionGate({21,0,0})},
FunctionInfo{300, nullptr, "GetUserSaveDataProperty"},
FunctionInfo{301, nullptr, "SetUserSaveDataProperty"},
FunctionInfo{302, nullptr, "Unknown302", MakeVersionGate({21,0,0})},
FunctionInfo{400, nullptr, "CleanupSaveDataBackupContextForSpecificApplications"},
FunctionInfo{900, nullptr, "DeleteAllTransferTask"},
FunctionInfo{902, nullptr, "DeleteAllSeriesInfo"},
FunctionInfo{903, nullptr, "DeleteAllSdaInfoCache"},
FunctionInfo{904, nullptr, "DeleteAllApplicationSetting"},
FunctionInfo{905, nullptr, "DeleteAllTransferTaskErrorInfo"},
FunctionInfo{906, nullptr, "RegisterTransferTaskErrorInfo"},
FunctionInfo{907, nullptr, "AddSaveDataArchiveInfoCache"},
FunctionInfo{908, nullptr, "DeleteSeriesInfo"},
FunctionInfo{909, nullptr, "GetSeriesInfo"},
FunctionInfo{910, nullptr, "RemoveTransferTaskErrorInfo"},
FunctionInfo{911, nullptr, "DeleteAllSeriesInfoForSaveDataBackup"},
FunctionInfo{912, nullptr, "DeleteSeriesInfoForSaveDataBackup"},
FunctionInfo{913, nullptr, "GetSeriesInfoForSaveDataBackup"},
FunctionInfo{914, nullptr, "Unknown914", MakeVersionGate({20,2,0})},
FunctionInfo{1000, nullptr, "UpdateIssueOld"},
FunctionInfo{1010, nullptr, "Unknown1010"},
FunctionInfo{1011, nullptr, "Unknown1011"},
FunctionInfo{1012, nullptr, "Unknown1012"},
FunctionInfo{1013, nullptr, "Unkown1013"},
FunctionInfo{1014, nullptr, "Unknown1014"},
FunctionInfo{1020, nullptr, "Unknown1020"},
FunctionInfo{1021, nullptr, "Unknown1021"},
FunctionInfo{1022, nullptr, "Unknown1022"},
FunctionInfo{1023, nullptr, "Unknown1023"},
FunctionInfo{1024, nullptr, "Unknown1024"},
FunctionInfo{1100, nullptr, "RepairUpdateIssueInfoCacheAync"},
FunctionInfo{1110, nullptr, "RepairGetIssueInfo"},
FunctionInfo{1111, nullptr, "RepairListIssueInfo"},
FunctionInfo{1112, nullptr, "RepairListOperationPermissionInfo"},
FunctionInfo{1113, nullptr, "RepairListDataInfoForRepairedSaveDataDownload"},
FunctionInfo{1114, nullptr, "RepairListDataInfoForOriginalSaveDataDownload"},
FunctionInfo{1120, nullptr, "RepairUploadSaveDataAsync"},
FunctionInfo{1121, nullptr, "RepairUploadSaveDataAsync1"},
FunctionInfo{1122, nullptr, "RepairDownloadRepairedSaveDataAsync"},
FunctionInfo{1123, nullptr, "RepairDownloadOriginalSaveDataAsync"},
FunctionInfo{1124, nullptr, "RepairGetOperationProgressInfo"},
FunctionInfo{10000, D<&IOlscServiceForSystemService::GetOlscServiceForSystemService>, "GetOlscServiceForSystemService"}
);
};
void LoopProcess(Core::System& system) {
+3
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -9,36 +9,36 @@
namespace Service::OLSC {
std::optional<ServiceFrameworkBase::FunctionInfoBase> IOlscServiceForApplication::FindRequest(u32 key) {
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, D<&IOlscServiceForApplication::Initialize>, "Initialize"},
FunctionInfo{10, nullptr, "VerifySaveDataBackupLicenseAsync"},
FunctionInfo{13, D<&IOlscServiceForApplication::GetSaveDataBackupSetting>, "GetSaveDataBackupSetting"},
FunctionInfo{14, D<&IOlscServiceForApplication::SetSaveDataBackupSettingEnabled>, "SetSaveDataBackupSettingEnabled"},
FunctionInfo{15, nullptr, "SetCustomData"},
FunctionInfo{16, nullptr, "DeleteSaveDataBackupSetting"},
FunctionInfo{18, nullptr, "GetSaveDataBackupInfoCache"},
FunctionInfo{19, nullptr, "UpdateSaveDataBackupInfoCacheAsync"},
FunctionInfo{22, nullptr, "DeleteSaveDataBackupAsync"},
FunctionInfo{25, nullptr, "ListDownloadableSaveDataBackupInfoAsync"},
FunctionInfo{26, nullptr, "DownloadSaveDataBackupAsync"},
FunctionInfo{27, nullptr, "UploadSaveDataBackupAsync"},
FunctionInfo{9010, nullptr, "VerifySaveDataBackupLicenseAsyncForDebug"},
FunctionInfo{9013, nullptr, "GetSaveDataBackupSettingForDebug"},
FunctionInfo{9014, nullptr, "SetSaveDataBackupSettingEnabledForDebug"},
FunctionInfo{9015, nullptr, "SetCustomDataForDebug"},
FunctionInfo{9016, nullptr, "DeleteSaveDataBackupSettingForDebug"},
FunctionInfo{9018, nullptr, "GetSaveDataBackupInfoCacheForDebug"},
FunctionInfo{9019, nullptr, "UpdateSaveDataBackupInfoCacheAsyncForDebug"},
FunctionInfo{9022, nullptr, "DeleteSaveDataBackupAsyncForDebug"},
FunctionInfo{9025, nullptr, "ListDownloadableSaveDataBackupInfoAsyncForDebug"},
FunctionInfo{9026, nullptr, "DownloadSaveDataBackupAsyncForDebug"}
);
return HandlerTableGenerateWithFind(key, functions);
}
IOlscServiceForApplication::IOlscServiceForApplication(Core::System& system_)
: ServiceFramework{system_, "olsc:u"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&IOlscServiceForApplication::Initialize>, "Initialize"},
{10, nullptr, "VerifySaveDataBackupLicenseAsync"},
{13, D<&IOlscServiceForApplication::GetSaveDataBackupSetting>, "GetSaveDataBackupSetting"},
{14, D<&IOlscServiceForApplication::SetSaveDataBackupSettingEnabled>, "SetSaveDataBackupSettingEnabled"},
{15, nullptr, "SetCustomData"},
{16, nullptr, "DeleteSaveDataBackupSetting"},
{18, nullptr, "GetSaveDataBackupInfoCache"},
{19, nullptr, "UpdateSaveDataBackupInfoCacheAsync"},
{22, nullptr, "DeleteSaveDataBackupAsync"},
{25, nullptr, "ListDownloadableSaveDataBackupInfoAsync"},
{26, nullptr, "DownloadSaveDataBackupAsync"},
{27, nullptr, "UploadSaveDataBackupAsync"},
{9010, nullptr, "VerifySaveDataBackupLicenseAsyncForDebug"},
{9013, nullptr, "GetSaveDataBackupSettingForDebug"},
{9014, nullptr, "SetSaveDataBackupSettingEnabledForDebug"},
{9015, nullptr, "SetCustomDataForDebug"},
{9016, nullptr, "DeleteSaveDataBackupSettingForDebug"},
{9018, nullptr, "GetSaveDataBackupInfoCacheForDebug"},
{9019, nullptr, "UpdateSaveDataBackupInfoCacheAsyncForDebug"},
{9022, nullptr, "DeleteSaveDataBackupAsyncForDebug"},
{9025, nullptr, "ListDownloadableSaveDataBackupInfoAsyncForDebug"},
{9026, nullptr, "DownloadSaveDataBackupAsyncForDebug"},
};
// clang-format on
RegisterHandlers(functions);
}
IOlscServiceForApplication::~IOlscServiceForApplication() = default;
@@ -22,8 +22,6 @@ private:
Result GetSaveDataBackupSetting(Out<u8> out_save_data_backup_setting);
Result SetSaveDataBackupSettingEnabled(bool enabled, NS::Uid account_id);
std::optional<FunctionInfoBase> FindRequest(u32 key) override;
bool initialized{};
};
@@ -0,0 +1,144 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "core/hle/service/cmif_serialization.h"
#include "core/hle/service/olsc/daemon_controller.h"
#include "core/hle/service/olsc/olsc_service_for_system_service.h"
#include "core/hle/service/olsc/remote_storage_controller.h"
#include "core/hle/service/olsc/transfer_task_list_controller.h"
namespace Service::OLSC {
IOlscServiceForSystemService::IOlscServiceForSystemService(Core::System& system_)
: ServiceFramework{system_, "olsc:s"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&IOlscServiceForSystemService::GetTransferTaskListController>, "GetTransferTaskListController"},
{1, D<&IOlscServiceForSystemService::GetRemoteStorageController>, "GetRemoteStorageController"},
{2, D<&IOlscServiceForSystemService::GetDaemonController>, "GetDaemonController"},
{10, nullptr, "PrepareDeleteUserProperty"},
{11, nullptr, "DeleteUserSaveDataProperty"},
{12, nullptr, "InvalidateMountCache"},
{13, nullptr, "DeleteDeviceSaveDataProperty"},
{100, nullptr, "ListLastTransferTaskErrorInfo"},
{101, nullptr, "GetLastErrorInfoCount"},
{102, nullptr, "RemoveLastErrorInfoOld"},
{103, nullptr, "GetLastErrorInfo"},
{104, nullptr, "GetLastErrorEventHolder"},
{105, D<&IOlscServiceForSystemService::GetTransferTaskErrorInfo>, "GetTransferTaskErrorInfo"},
{200, D<&IOlscServiceForSystemService::GetDataTransferPolicy>, "GetDataTransferPolicy"},
{201, nullptr, "DeleteDataTransferPolicyCache"},
{202, nullptr, "Unknown202"},
{203, nullptr, "RequestUpdateDataTransferPolicyCacheAsync"},
{204, nullptr, "ClearDataTransferPolicyCache"},
{205, nullptr, "RequestGetDataTransferPolicyAsync"},
{206, nullptr, "Unknown206"}, //21.0.0+
{300, nullptr, "GetUserSaveDataProperty"},
{301, nullptr, "SetUserSaveDataProperty"},
{302, nullptr, "Unknown302"}, //21.0.0+
{400, nullptr, "CleanupSaveDataBackupContextForSpecificApplications"},
{900, nullptr, "DeleteAllTransferTask"},
{902, nullptr, "DeleteAllSeriesInfo"},
{903, nullptr, "DeleteAllSdaInfoCache"},
{904, nullptr, "DeleteAllApplicationSetting"},
{905, nullptr, "DeleteAllTransferTaskErrorInfo"},
{906, nullptr, "RegisterTransferTaskErrorInfo"},
{907, nullptr, "AddSaveDataArchiveInfoCache"},
{908, nullptr, "DeleteSeriesInfo"},
{909, nullptr, "GetSeriesInfo"},
{910, nullptr, "RemoveTransferTaskErrorInfo"},
{911, nullptr, "DeleteAllSeriesInfoForSaveDataBackup"},
{912, nullptr, "DeleteSeriesInfoForSaveDataBackup"},
{913, nullptr, "GetSeriesInfoForSaveDataBackup"},
{914, nullptr, "Unknown914"}, //20.2.0+
{1000, nullptr, "UpdateIssueOld"},
{1010, nullptr, "Unknown1010"},
{1011, nullptr, "Unknown1011"},
{1012, nullptr, "Unknown1012"},
{1013, nullptr, "Unkown1013"},
{1014, nullptr, "Unknown1014"},
{1020, nullptr, "Unknown1020"},
{1021, nullptr, "Unknown1021"},
{1022, nullptr, "Unknown1022"},
{1023, nullptr, "Unknown1023"},
{1024, nullptr, "Unknown1024"},
{1100, nullptr, "RepairUpdateIssueInfoCacheAync"},
{1110, nullptr, "RepairGetIssueInfo"},
{1111, nullptr, "RepairListIssueInfo"},
{1112, nullptr, "RepairListOperationPermissionInfo"},
{1113, nullptr, "RepairListDataInfoForRepairedSaveDataDownload"},
{1114, nullptr, "RepairListDataInfoForOriginalSaveDataDownload"},
{1120, nullptr, "RepairUploadSaveDataAsync"},
{1121, nullptr, "RepairUploadSaveDataAsync1"},
{1122, nullptr, "RepairDownloadRepairedSaveDataAsync"},
{1123, nullptr, "RepairDownloadOriginalSaveDataAsync"},
{1124, nullptr, "RepairGetOperationProgressInfo"},
{10000, D<&IOlscServiceForSystemService::GetOlscServiceForSystemService>, "GetOlscServiceForSystemService"},
};
// clang-format on
RegisterHandlers(functions);
}
IOlscServiceForSystemService::~IOlscServiceForSystemService() = default;
Result IOlscServiceForSystemService::GetTransferTaskListController(
Out<SharedPointer<ITransferTaskListController>> out_interface) {
LOG_INFO(Service_OLSC, "called");
*out_interface = std::make_shared<ITransferTaskListController>(system);
R_SUCCEED();
}
Result IOlscServiceForSystemService::GetRemoteStorageController(
Out<SharedPointer<IRemoteStorageController>> out_interface) {
LOG_INFO(Service_OLSC, "called");
*out_interface = std::make_shared<IRemoteStorageController>(system);
R_SUCCEED();
}
Result IOlscServiceForSystemService::GetDaemonController(
Out<SharedPointer<IDaemonController>> out_interface) {
LOG_INFO(Service_OLSC, "called");
*out_interface = std::make_shared<IDaemonController>(system);
R_SUCCEED();
}
Result IOlscServiceForSystemService::GetDataTransferPolicy(
Out<DataTransferPolicy> out_policy, u64 application_id) {
LOG_WARNING(Service_OLSC, "(STUBBED) called");
DataTransferPolicy policy{};
policy.upload_policy = 0;
policy.download_policy = 0;
*out_policy = policy;
R_SUCCEED();
}
Result IOlscServiceForSystemService::GetTransferTaskErrorInfo(Out<TransferTaskErrorInfo> out_info,
Common::UUID uuid, u64 application_id) {
LOG_WARNING(Service_OLSC, "(STUBBED) called, uuid={} application_id={:016X}",
uuid.FormattedString(), application_id);
TransferTaskErrorInfo info{};
info.uid = uuid;
info.application_id = application_id;
info.unknown_0x18 = 0;
info.reserved_0x19.fill(0);
info.unknown_0x20 = 0;
info.error_code = 0;
info.reserved_0x2C = 0;
*out_info = info;
R_SUCCEED();
}
Result IOlscServiceForSystemService::GetOlscServiceForSystemService(
Out<SharedPointer<IOlscServiceForSystemService>> out_interface) {
LOG_INFO(Service_OLSC, "called");
*out_interface = std::static_pointer_cast<IOlscServiceForSystemService>(shared_from_this());
R_SUCCEED();
}
} // namespace Service::OLSC
@@ -0,0 +1,53 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <array>
#include "common/uuid.h"
#include "core/hle/service/cmif_types.h"
#include "core/hle/service/service.h"
namespace Service::OLSC {
class IDaemonController;
class IRemoteStorageController;
class ITransferTaskListController;
struct DataTransferPolicy {
u8 upload_policy;
u8 download_policy;
};
struct TransferTaskErrorInfo {
Common::UUID uid;
u64 application_id;
u8 unknown_0x18;
std::array<u8, 7> reserved_0x19;
u64 unknown_0x20;
u32 error_code;
u32 reserved_0x2C;
};
static_assert(sizeof(TransferTaskErrorInfo) == 0x30, "TransferTaskErrorInfo has incorrect size.");
class IOlscServiceForSystemService final : public ServiceFramework<IOlscServiceForSystemService> {
public:
explicit IOlscServiceForSystemService(Core::System& system_);
~IOlscServiceForSystemService() override;
private:
Result GetTransferTaskListController(
Out<SharedPointer<ITransferTaskListController>> out_interface);
Result GetRemoteStorageController(Out<SharedPointer<IRemoteStorageController>> out_interface);
Result GetDaemonController(Out<SharedPointer<IDaemonController>> out_interface);
Result GetDataTransferPolicy(Out<DataTransferPolicy> out_policy, u64 application_id);
Result GetTransferTaskErrorInfo(Out<TransferTaskErrorInfo> out_info, Common::UUID uid, u64 application_id);
Result GetOlscServiceForSystemService(
Out<SharedPointer<IOlscServiceForSystemService>> out_interface);
};
} // namespace Service::OLSC
@@ -9,44 +9,44 @@
namespace Service::OLSC {
std::optional<ServiceFrameworkBase::FunctionInfoBase> IRemoteStorageController::FindRequest(u32 key) {
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, nullptr, "GetSaveDataArchiveInfoBySaveDataId"},
FunctionInfo{1, nullptr, "GetSaveDataArchiveInfoByApplicationId"},
FunctionInfo{3, nullptr, "GetSaveDataArchiveCount"},
FunctionInfo{6, nullptr, "CleanupSaveDataArchives"},
FunctionInfo{7, nullptr, "CreateSaveDataArchiveCacheUpdationTask"},
FunctionInfo{8, nullptr, "CreateSaveDataArchiveCacheUpdationForSpecifiedApplicationTask"},
FunctionInfo{9, nullptr, "Delete"},
FunctionInfo{10, nullptr, "GetSeriesInfo"},
FunctionInfo{11, nullptr, "CreateDeleteDataTask"},
FunctionInfo{12, nullptr, "DeleteSeriesInfo"},
FunctionInfo{13, nullptr, "CreateRegisterNotificationTokenTask"},
FunctionInfo{14, D<&IRemoteStorageController::GetDataNewnessByApplicationId>, "GetDataNewnessByApplicationId"},
FunctionInfo{15, nullptr, "RegisterUploadSaveDataTransferTaskForAutonomyRegistration"},
FunctionInfo{16, nullptr, "CreateCleanupToDeleteSaveDataArchiveInfoTask"},
FunctionInfo{17, nullptr, "ListDataInfo"},
FunctionInfo{18, D<&IRemoteStorageController::GetDataInfo>, "GetDataInfoV1"},
FunctionInfo{19, nullptr, "GetDataInfoCacheUpdateNativeHandleHolder"},
FunctionInfo{20, nullptr, "CreateSaveDataArchiveInfoCacheForSaveDataBackupUpdationTask"},
FunctionInfo{21, nullptr, "ListSecondarySaves"},
FunctionInfo{22, D<&IRemoteStorageController::GetSecondarySave>, "GetSecondarySave"},
FunctionInfo{23, nullptr, "TouchSecondarySave"},
FunctionInfo{24, nullptr, "GetSecondarySaveDataInfo"},
FunctionInfo{25, nullptr, "RegisterDownloadSaveDataTransferTaskForAutonomyRegistration"},
FunctionInfo{26, nullptr, "Unknown26", MakeVersionGate({20,0,0})},
FunctionInfo{27, D<&IRemoteStorageController::GetDataInfo>, "GetDataInfoV2", MakeVersionGate({20,0,0})},
FunctionInfo{28, nullptr, "Unknown28", MakeVersionGate({20,0,0})},
FunctionInfo{29, nullptr, "Unknown29", MakeVersionGate({21,0,0})},
FunctionInfo{800, nullptr, "Unknown800", MakeVersionGate({20,0,0})},
FunctionInfo{900, nullptr, "SetLoadedDataMissing"},
FunctionInfo{901, nullptr, "Unknown901", MakeVersionGate({20,2,0})}
);
return HandlerTableGenerateWithFind(key, functions);
}
IRemoteStorageController::IRemoteStorageController(Core::System& system_)
: ServiceFramework{system_, "IRemoteStorageController"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "GetSaveDataArchiveInfoBySaveDataId"},
{1, nullptr, "GetSaveDataArchiveInfoByApplicationId"},
{3, nullptr, "GetSaveDataArchiveCount"},
{6, nullptr, "CleanupSaveDataArchives"},
{7, nullptr, "CreateSaveDataArchiveCacheUpdationTask"},
{8, nullptr, "CreateSaveDataArchiveCacheUpdationForSpecifiedApplicationTask"},
{9, nullptr, "Delete"},
{10, nullptr, "GetSeriesInfo"},
{11, nullptr, "CreateDeleteDataTask"},
{12, nullptr, "DeleteSeriesInfo"},
{13, nullptr, "CreateRegisterNotificationTokenTask"},
{14, D<&IRemoteStorageController::GetDataNewnessByApplicationId>, "GetDataNewnessByApplicationId"},
{15, nullptr, "RegisterUploadSaveDataTransferTaskForAutonomyRegistration"},
{16, nullptr, "CreateCleanupToDeleteSaveDataArchiveInfoTask"},
{17, nullptr, "ListDataInfo"},
{18, D<&IRemoteStorageController::GetDataInfo>, "GetDataInfoV1"},
{19, nullptr, "GetDataInfoCacheUpdateNativeHandleHolder"},
{20, nullptr, "CreateSaveDataArchiveInfoCacheForSaveDataBackupUpdationTask"},
{21, nullptr, "ListSecondarySaves"},
{22, D<&IRemoteStorageController::GetSecondarySave>, "GetSecondarySave"},
{23, nullptr, "TouchSecondarySave"},
{24, nullptr, "GetSecondarySaveDataInfo"},
{25, nullptr, "RegisterDownloadSaveDataTransferTaskForAutonomyRegistration"},
{26, nullptr, "Unknown26"}, //20.0.0+
{27, D<&IRemoteStorageController::GetDataInfo>, "GetDataInfoV2"}, //20.0.0+
{28, nullptr, "Unknown28"}, //20.0.0+
{29, nullptr, "Unknown29"}, //21.0.0+
{800, nullptr, "Unknown800"}, //20.0.0+
{900, nullptr, "SetLoadedDataMissing"},
{901, nullptr, "Unknown901"}, //20.2.0+
};
// clang-format on
RegisterHandlers(functions);
}
IRemoteStorageController::~IRemoteStorageController() = default;
@@ -21,8 +21,6 @@ private:
u64 application_id);
Result GetDataNewnessByApplicationId(Out<u8> out_newness, u64 application_id);
Result GetDataInfo(Out<std::array<u8, 0x38>> out_data, u64 application_id);
std::optional<FunctionInfoBase> FindRequest(u32 key) override;
};
} // namespace Service::OLSC
@@ -11,45 +11,45 @@
namespace Service::OLSC {
std::optional<ServiceFrameworkBase::FunctionInfoBase> ITransferTaskListController::FindRequest(u32 key) {
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, nullptr, "GetTransferTaskCountForOcean"},
FunctionInfo{1, nullptr, "GetTransferTaskInfoForOcean"},
FunctionInfo{2, nullptr, "ListTransferTaskInfoForOcean"},
FunctionInfo{3, nullptr, "DeleteTransferTaskForOcean"},
FunctionInfo{4, nullptr, "RaiseTransferTaskPriorityForOcean"},
FunctionInfo{5, D<&ITransferTaskListController::GetTransferTaskEndEventNativeHandleHolder>, "GetTransferTaskEndEventNativeHandleHolder"},
FunctionInfo{6, nullptr, "GetTransferTaskProgressForOcean"},
FunctionInfo{7, nullptr, "GetTransferTaskLastResultForOcean"},
FunctionInfo{8, D<&ITransferTaskListController::StopNextTransferTaskExecution>, "StopNextTransferTaskExecution"},
FunctionInfo{9, D<&ITransferTaskListController::GetTransferTaskStartEventNativeHandleHolder>, "GetTransferTaskStartEventNativeHandleHolder"},
FunctionInfo{10, nullptr, "SuspendTransferTaskForOcean"},
FunctionInfo{11, nullptr, "GetCurrentTransferTaskInfoForOcean"},
FunctionInfo{12, nullptr, "FindTransferTaskInfoForOcean"},
FunctionInfo{13, nullptr, "CancelCurrentRepairTransferTask"},
FunctionInfo{14, nullptr, "GetRepairTransferTaskProgress"},
FunctionInfo{15, nullptr, "EnsureExecutableForRepairTransferTask"},
FunctionInfo{16, D<&ITransferTaskListController::GetTransferTaskCount>, "GetTransferTaskCount"},
FunctionInfo{17, nullptr, "GetTransferTaskInfo"},
FunctionInfo{18, nullptr, "ListTransferTaskInfo"},
FunctionInfo{19, nullptr, "DeleteTransferTask"},
FunctionInfo{20, nullptr, "RaiseTransferTaskPriority"},
FunctionInfo{21, D<&ITransferTaskListController::GetTransferTaskProgress>, "GetTransferTaskProgress", MakeVersionGate({10,1,0})},
FunctionInfo{22, nullptr, "GetTransferTaskLastResult"},
FunctionInfo{23, nullptr, "SuspendTransferTask"},
FunctionInfo{24, D<&ITransferTaskListController::GetCurrentTransferTaskInfo>, "GetCurrentTransferTaskInfo"},
FunctionInfo{25, D<&ITransferTaskListController::FindTransferTaskInfo>, "FindTransferTaskInfo"},
FunctionInfo{26, nullptr, "Unknown26", MakeVersionGate({20,1,0})},
FunctionInfo{27, nullptr, "Unknown27", MakeVersionGate({20,1,0})},
FunctionInfo{28, nullptr, "Unknown28", MakeVersionGate({20,1,0})},
FunctionInfo{29, nullptr, "Unknown29", MakeVersionGate({20,1,0})},
FunctionInfo{30, nullptr, "Unknown30", MakeVersionGate({20,1,0})}
);
return HandlerTableGenerateWithFind(key, functions);
}
ITransferTaskListController::ITransferTaskListController(Core::System& system_)
: ServiceFramework{system_, "ITransferTaskListController"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "GetTransferTaskCountForOcean"},
{1, nullptr, "GetTransferTaskInfoForOcean"},
{2, nullptr, "ListTransferTaskInfoForOcean"},
{3, nullptr, "DeleteTransferTaskForOcean"},
{4, nullptr, "RaiseTransferTaskPriorityForOcean"},
{5, D<&ITransferTaskListController::GetTransferTaskEndEventNativeHandleHolder>, "GetTransferTaskEndEventNativeHandleHolder"},
{6, nullptr, "GetTransferTaskProgressForOcean"},
{7, nullptr, "GetTransferTaskLastResultForOcean"},
{8, D<&ITransferTaskListController::StopNextTransferTaskExecution>, "StopNextTransferTaskExecution"},
{9, D<&ITransferTaskListController::GetTransferTaskStartEventNativeHandleHolder>, "GetTransferTaskStartEventNativeHandleHolder"},
{10, nullptr, "SuspendTransferTaskForOcean"},
{11, nullptr, "GetCurrentTransferTaskInfoForOcean"},
{12, nullptr, "FindTransferTaskInfoForOcean"},
{13, nullptr, "CancelCurrentRepairTransferTask"},
{14, nullptr, "GetRepairTransferTaskProgress"},
{15, nullptr, "EnsureExecutableForRepairTransferTask"},
{16, D<&ITransferTaskListController::GetTransferTaskCount>, "GetTransferTaskCount"},
{17, nullptr, "GetTransferTaskInfo"},
{18, nullptr, "ListTransferTaskInfo"},
{19, nullptr, "DeleteTransferTask"},
{20, nullptr, "RaiseTransferTaskPriority"},
{21, D<&ITransferTaskListController::GetTransferTaskProgress>, "GetTransferTaskProgress"}, //10.1.0+
{22, nullptr, "GetTransferTaskLastResult"},
{23, nullptr, "SuspendTransferTask"},
{24, D<&ITransferTaskListController::GetCurrentTransferTaskInfo>, "GetCurrentTransferTaskInfo"},
{25, D<&ITransferTaskListController::FindTransferTaskInfo>, "FindTransferTaskInfo"},
{26, nullptr, "Unknown26"}, //20.1.0+
{27, nullptr, "Unknown27"}, //20.1.0+
{28, nullptr, "Unknown28"}, //20.1.0+
{29, nullptr, "Unknown29"}, //20.1.0+
{30, nullptr, "Unknown30"}, //20.1.0+
};
// clang-format on
RegisterHandlers(functions);
}
ITransferTaskListController::~ITransferTaskListController() = default;
@@ -27,8 +27,6 @@ private:
Result GetTransferTaskProgress();
Result GetCurrentTransferTaskInfo(Out<std::array<u8, 0x30>> out_info, u8 unknown);
Result FindTransferTaskInfo(Out<std::array<u8, 0x30>> out_info, InBuffer<BufferAttr_HipcAutoSelect> in);
std::optional<FunctionInfoBase> FindRequest(u32 key) override;
};
} // namespace Service::OLSC