Procházet zdrojové kódy

olsc: move INativeHandleHolder, IOlscServiceForApplication, IOlscServiceForSystemService, ITransferTaskListController

Liam před 2 roky
rodič
revize
6334616b44

+ 8 - 0
src/core/CMakeLists.txt

@@ -860,8 +860,16 @@ add_library(core STATIC
     hle/service/nvnflinger/ui/graphic_buffer.cpp
     hle/service/nvnflinger/ui/graphic_buffer.h
     hle/service/nvnflinger/window.h
+    hle/service/olsc/native_handle_holder.cpp
+    hle/service/olsc/native_handle_holder.h
+    hle/service/olsc/olsc_service_for_application.cpp
+    hle/service/olsc/olsc_service_for_application.h
+    hle/service/olsc/olsc_service_for_system_service.cpp
+    hle/service/olsc/olsc_service_for_system_service.h
     hle/service/olsc/olsc.cpp
     hle/service/olsc/olsc.h
+    hle/service/olsc/transfer_task_list_controller.cpp
+    hle/service/olsc/transfer_task_list_controller.h
     hle/service/omm/omm.cpp
     hle/service/omm/omm.h
     hle/service/omm/operation_mode_manager.cpp

+ 21 - 0
src/core/hle/service/olsc/native_handle_holder.cpp

@@ -0,0 +1,21 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "core/hle/service/olsc/native_handle_holder.h"
+
+namespace Service::OLSC {
+
+INativeHandleHolder::INativeHandleHolder(Core::System& system_)
+    : ServiceFramework{system_, "INativeHandleHolder"} {
+    // clang-format off
+    static const FunctionInfo functions[] = {
+        {0, nullptr, "GetNativeHandle"},
+    };
+    // clang-format on
+
+    RegisterHandlers(functions);
+}
+
+INativeHandleHolder::~INativeHandleHolder() = default;
+
+} // namespace Service::OLSC

+ 14 - 0
src/core/hle/service/olsc/native_handle_holder.h

@@ -0,0 +1,14 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "core/hle/service/service.h"
+
+namespace Service::OLSC {
+
+class INativeHandleHolder final : public ServiceFramework<INativeHandleHolder> {
+public:
+    explicit INativeHandleHolder(Core::System& system_);
+    ~INativeHandleHolder() override;
+};
+
+} // namespace Service::OLSC

+ 2 - 207
src/core/hle/service/olsc/olsc.cpp

@@ -1,219 +1,14 @@
 // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
 // SPDX-License-Identifier: GPL-2.0-or-later
 
-#include "core/hle/service/ipc_helpers.h"
 #include "core/hle/service/olsc/olsc.h"
+#include "core/hle/service/olsc/olsc_service_for_application.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"
 
 namespace Service::OLSC {
 
-class IOlscServiceForApplication final : public ServiceFramework<IOlscServiceForApplication> {
-public:
-    explicit IOlscServiceForApplication(Core::System& system_)
-        : ServiceFramework{system_, "olsc:u"} {
-        // clang-format off
-        static const FunctionInfo functions[] = {
-            {0, &IOlscServiceForApplication::Initialize, "Initialize"},
-            {10, nullptr, "VerifySaveDataBackupLicenseAsync"},
-            {13, &IOlscServiceForApplication::GetSaveDataBackupSetting, "GetSaveDataBackupSetting"},
-            {14, &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);
-    }
-
-private:
-    void Initialize(HLERequestContext& ctx) {
-        LOG_WARNING(Service_OLSC, "(STUBBED) called");
-
-        initialized = true;
-
-        IPC::ResponseBuilder rb{ctx, 2};
-        rb.Push(ResultSuccess);
-    }
-
-    void GetSaveDataBackupSetting(HLERequestContext& ctx) {
-        LOG_WARNING(Service_OLSC, "(STUBBED) called");
-
-        // backup_setting is set to 0 since real value is unknown
-        constexpr u64 backup_setting = 0;
-
-        IPC::ResponseBuilder rb{ctx, 4};
-        rb.Push(ResultSuccess);
-        rb.Push(backup_setting);
-    }
-
-    void SetSaveDataBackupSettingEnabled(HLERequestContext& ctx) {
-        LOG_WARNING(Service_OLSC, "(STUBBED) called");
-
-        IPC::ResponseBuilder rb{ctx, 2};
-        rb.Push(ResultSuccess);
-    }
-
-    bool initialized{};
-};
-
-class INativeHandleHolder final : public ServiceFramework<INativeHandleHolder> {
-public:
-    explicit INativeHandleHolder(Core::System& system_)
-        : ServiceFramework{system_, "INativeHandleHolder"} {
-        // clang-format off
-        static const FunctionInfo functions[] = {
-            {0, nullptr, "GetNativeHandle"},
-        };
-        // clang-format on
-
-        RegisterHandlers(functions);
-    }
-};
-
-class ITransferTaskListController final : public ServiceFramework<ITransferTaskListController> {
-public:
-    explicit ITransferTaskListController(Core::System& system_)
-        : ServiceFramework{system_, "ITransferTaskListController"} {
-        // clang-format off
-        static const FunctionInfo functions[] = {
-            {0, nullptr, "Unknown0"},
-            {1, nullptr, "Unknown1"},
-            {2, nullptr, "Unknown2"},
-            {3, nullptr, "Unknown3"},
-            {4, nullptr, "Unknown4"},
-            {5, &ITransferTaskListController::GetNativeHandleHolder , "GetNativeHandleHolder"},
-            {6, nullptr, "Unknown6"},
-            {7, nullptr, "Unknown7"},
-            {8, nullptr, "GetRemoteStorageController"},
-            {9, &ITransferTaskListController::GetNativeHandleHolder, "GetNativeHandleHolder2"},
-            {10, nullptr, "Unknown10"},
-            {11, nullptr, "Unknown11"},
-            {12, nullptr, "Unknown12"},
-            {13, nullptr, "Unknown13"},
-            {14, nullptr, "Unknown14"},
-            {15, nullptr, "Unknown15"},
-            {16, nullptr, "Unknown16"},
-            {17, nullptr, "Unknown17"},
-            {18, nullptr, "Unknown18"},
-            {19, nullptr, "Unknown19"},
-            {20, nullptr, "Unknown20"},
-            {21, nullptr, "Unknown21"},
-            {22, nullptr, "Unknown22"},
-            {23, nullptr, "Unknown23"},
-            {24, nullptr, "Unknown24"},
-            {25, nullptr, "Unknown25"},
-        };
-        // clang-format on
-
-        RegisterHandlers(functions);
-    }
-
-private:
-    void GetNativeHandleHolder(HLERequestContext& ctx) {
-        LOG_INFO(Service_OLSC, "called");
-
-        IPC::ResponseBuilder rb{ctx, 2, 0, 1};
-        rb.Push(ResultSuccess);
-        rb.PushIpcInterface<INativeHandleHolder>(system);
-    }
-};
-
-class IOlscServiceForSystemService final : public ServiceFramework<IOlscServiceForSystemService> {
-public:
-    explicit IOlscServiceForSystemService(Core::System& system_)
-        : ServiceFramework{system_, "olsc:s"} {
-        // clang-format off
-        static const FunctionInfo functions[] = {
-            {0, &IOlscServiceForSystemService::OpenTransferTaskListController, "OpenTransferTaskListController"},
-            {1, nullptr, "OpenRemoteStorageController"},
-            {2, nullptr, "OpenDaemonController"},
-            {10, nullptr, "Unknown10"},
-            {11, nullptr, "Unknown11"},
-            {12, nullptr, "Unknown12"},
-            {13, nullptr, "Unknown13"},
-            {100, nullptr, "ListLastTransferTaskErrorInfo"},
-            {101, nullptr, "GetLastErrorInfoCount"},
-            {102, nullptr, "RemoveLastErrorInfoOld"},
-            {103, nullptr, "GetLastErrorInfo"},
-            {104, nullptr, "GetLastErrorEventHolder"},
-            {105, nullptr, "GetLastTransferTaskErrorInfo"},
-            {200, nullptr, "GetDataTransferPolicyInfo"},
-            {201, nullptr, "RemoveDataTransferPolicyInfo"},
-            {202, nullptr, "UpdateDataTransferPolicyOld"},
-            {203, nullptr, "UpdateDataTransferPolicy"},
-            {204, nullptr, "CleanupDataTransferPolicyInfo"},
-            {205, nullptr, "RequestDataTransferPolicy"},
-            {300, nullptr, "GetAutoTransferSeriesInfo"},
-            {301, nullptr, "UpdateAutoTransferSeriesInfo"},
-            {400, nullptr, "CleanupSaveDataArchiveInfoType1"},
-            {900, nullptr, "CleanupTransferTask"},
-            {902, nullptr, "CleanupSeriesInfoType0"},
-            {903, nullptr, "CleanupSaveDataArchiveInfoType0"},
-            {904, nullptr, "CleanupApplicationAutoTransferSetting"},
-            {905, nullptr, "CleanupErrorHistory"},
-            {906, nullptr, "SetLastError"},
-            {907, nullptr, "AddSaveDataArchiveInfoType0"},
-            {908, nullptr, "RemoveSeriesInfoType0"},
-            {909, nullptr, "GetSeriesInfoType0"},
-            {910, nullptr, "RemoveLastErrorInfo"},
-            {911, nullptr, "CleanupSeriesInfoType1"},
-            {912, nullptr, "RemoveSeriesInfoType1"},
-            {913, nullptr, "GetSeriesInfoType1"},
-            {1000, nullptr, "UpdateIssueOld"},
-            {1010, nullptr, "Unknown1010"},
-            {1011, nullptr, "ListIssueInfoOld"},
-            {1012, nullptr, "GetIssueOld"},
-            {1013, nullptr, "GetIssue2Old"},
-            {1014, nullptr, "GetIssue3Old"},
-            {1020, nullptr, "RepairIssueOld"},
-            {1021, nullptr, "RepairIssueWithUserIdOld"},
-            {1022, nullptr, "RepairIssue2Old"},
-            {1023, nullptr, "RepairIssue3Old"},
-            {1024, nullptr, "Unknown1024"},
-            {1100, nullptr, "UpdateIssue"},
-            {1110, nullptr, "Unknown1110"},
-            {1111, nullptr, "ListIssueInfo"},
-            {1112, nullptr, "GetIssue"},
-            {1113, nullptr, "GetIssue2"},
-            {1114, nullptr, "GetIssue3"},
-            {1120, nullptr, "RepairIssue"},
-            {1121, nullptr, "RepairIssueWithUserId"},
-            {1122, nullptr, "RepairIssue2"},
-            {1123, nullptr, "RepairIssue3"},
-            {1124, nullptr, "Unknown1124"},
-        };
-        // clang-format on
-
-        RegisterHandlers(functions);
-    }
-
-private:
-    void OpenTransferTaskListController(HLERequestContext& ctx) {
-        LOG_INFO(Service_OLSC, "called");
-
-        IPC::ResponseBuilder rb{ctx, 2, 0, 1};
-        rb.Push(ResultSuccess);
-        rb.PushIpcInterface<ITransferTaskListController>(system);
-    }
-};
-
 void LoopProcess(Core::System& system) {
     auto server_manager = std::make_unique<ServerManager>(system);
 

+ 70 - 0
src/core/hle/service/olsc/olsc_service_for_application.cpp

@@ -0,0 +1,70 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "core/hle/service/ipc_helpers.h"
+#include "core/hle/service/olsc/olsc_service_for_application.h"
+
+namespace Service::OLSC {
+
+IOlscServiceForApplication::IOlscServiceForApplication(Core::System& system_)
+    : ServiceFramework{system_, "olsc:u"} {
+    // clang-format off
+        static const FunctionInfo functions[] = {
+            {0, &IOlscServiceForApplication::Initialize, "Initialize"},
+            {10, nullptr, "VerifySaveDataBackupLicenseAsync"},
+            {13, &IOlscServiceForApplication::GetSaveDataBackupSetting, "GetSaveDataBackupSetting"},
+            {14, &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;
+
+void IOlscServiceForApplication::Initialize(HLERequestContext& ctx) {
+    LOG_WARNING(Service_OLSC, "(STUBBED) called");
+
+    initialized = true;
+
+    IPC::ResponseBuilder rb{ctx, 2};
+    rb.Push(ResultSuccess);
+}
+
+void IOlscServiceForApplication::GetSaveDataBackupSetting(HLERequestContext& ctx) {
+    LOG_WARNING(Service_OLSC, "(STUBBED) called");
+
+    // backup_setting is set to 0 since real value is unknown
+    constexpr u64 backup_setting = 0;
+
+    IPC::ResponseBuilder rb{ctx, 4};
+    rb.Push(ResultSuccess);
+    rb.Push(backup_setting);
+}
+
+void IOlscServiceForApplication::SetSaveDataBackupSettingEnabled(HLERequestContext& ctx) {
+    LOG_WARNING(Service_OLSC, "(STUBBED) called");
+
+    IPC::ResponseBuilder rb{ctx, 2};
+    rb.Push(ResultSuccess);
+}
+
+} // namespace Service::OLSC

+ 21 - 0
src/core/hle/service/olsc/olsc_service_for_application.h

@@ -0,0 +1,21 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "core/hle/service/service.h"
+
+namespace Service::OLSC {
+
+class IOlscServiceForApplication final : public ServiceFramework<IOlscServiceForApplication> {
+public:
+    explicit IOlscServiceForApplication(Core::System& system_);
+    ~IOlscServiceForApplication() override;
+
+private:
+    void Initialize(HLERequestContext& ctx);
+    void GetSaveDataBackupSetting(HLERequestContext& ctx);
+    void SetSaveDataBackupSettingEnabled(HLERequestContext& ctx);
+
+    bool initialized{};
+};
+
+} // namespace Service::OLSC

+ 87 - 0
src/core/hle/service/olsc/olsc_service_for_system_service.cpp

@@ -0,0 +1,87 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "core/hle/service/ipc_helpers.h"
+#include "core/hle/service/olsc/olsc_service_for_system_service.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, &IOlscServiceForSystemService::OpenTransferTaskListController, "OpenTransferTaskListController"},
+        {1, nullptr, "OpenRemoteStorageController"},
+        {2, nullptr, "OpenDaemonController"},
+        {10, nullptr, "Unknown10"},
+        {11, nullptr, "Unknown11"},
+        {12, nullptr, "Unknown12"},
+        {13, nullptr, "Unknown13"},
+        {100, nullptr, "ListLastTransferTaskErrorInfo"},
+        {101, nullptr, "GetLastErrorInfoCount"},
+        {102, nullptr, "RemoveLastErrorInfoOld"},
+        {103, nullptr, "GetLastErrorInfo"},
+        {104, nullptr, "GetLastErrorEventHolder"},
+        {105, nullptr, "GetLastTransferTaskErrorInfo"},
+        {200, nullptr, "GetDataTransferPolicyInfo"},
+        {201, nullptr, "RemoveDataTransferPolicyInfo"},
+        {202, nullptr, "UpdateDataTransferPolicyOld"},
+        {203, nullptr, "UpdateDataTransferPolicy"},
+        {204, nullptr, "CleanupDataTransferPolicyInfo"},
+        {205, nullptr, "RequestDataTransferPolicy"},
+        {300, nullptr, "GetAutoTransferSeriesInfo"},
+        {301, nullptr, "UpdateAutoTransferSeriesInfo"},
+        {400, nullptr, "CleanupSaveDataArchiveInfoType1"},
+        {900, nullptr, "CleanupTransferTask"},
+        {902, nullptr, "CleanupSeriesInfoType0"},
+        {903, nullptr, "CleanupSaveDataArchiveInfoType0"},
+        {904, nullptr, "CleanupApplicationAutoTransferSetting"},
+        {905, nullptr, "CleanupErrorHistory"},
+        {906, nullptr, "SetLastError"},
+        {907, nullptr, "AddSaveDataArchiveInfoType0"},
+        {908, nullptr, "RemoveSeriesInfoType0"},
+        {909, nullptr, "GetSeriesInfoType0"},
+        {910, nullptr, "RemoveLastErrorInfo"},
+        {911, nullptr, "CleanupSeriesInfoType1"},
+        {912, nullptr, "RemoveSeriesInfoType1"},
+        {913, nullptr, "GetSeriesInfoType1"},
+        {1000, nullptr, "UpdateIssueOld"},
+        {1010, nullptr, "Unknown1010"},
+        {1011, nullptr, "ListIssueInfoOld"},
+        {1012, nullptr, "GetIssueOld"},
+        {1013, nullptr, "GetIssue2Old"},
+        {1014, nullptr, "GetIssue3Old"},
+        {1020, nullptr, "RepairIssueOld"},
+        {1021, nullptr, "RepairIssueWithUserIdOld"},
+        {1022, nullptr, "RepairIssue2Old"},
+        {1023, nullptr, "RepairIssue3Old"},
+        {1024, nullptr, "Unknown1024"},
+        {1100, nullptr, "UpdateIssue"},
+        {1110, nullptr, "Unknown1110"},
+        {1111, nullptr, "ListIssueInfo"},
+        {1112, nullptr, "GetIssue"},
+        {1113, nullptr, "GetIssue2"},
+        {1114, nullptr, "GetIssue3"},
+        {1120, nullptr, "RepairIssue"},
+        {1121, nullptr, "RepairIssueWithUserId"},
+        {1122, nullptr, "RepairIssue2"},
+        {1123, nullptr, "RepairIssue3"},
+        {1124, nullptr, "Unknown1124"},
+    };
+    // clang-format on
+
+    RegisterHandlers(functions);
+}
+
+IOlscServiceForSystemService::~IOlscServiceForSystemService() = default;
+
+void IOlscServiceForSystemService::OpenTransferTaskListController(HLERequestContext& ctx) {
+    LOG_INFO(Service_OLSC, "called");
+
+    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
+    rb.Push(ResultSuccess);
+    rb.PushIpcInterface<ITransferTaskListController>(system);
+}
+
+} // namespace Service::OLSC

+ 17 - 0
src/core/hle/service/olsc/olsc_service_for_system_service.h

@@ -0,0 +1,17 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "core/hle/service/service.h"
+
+namespace Service::OLSC {
+
+class IOlscServiceForSystemService final : public ServiceFramework<IOlscServiceForSystemService> {
+public:
+    explicit IOlscServiceForSystemService(Core::System& system_);
+    ~IOlscServiceForSystemService() override;
+
+private:
+    void OpenTransferTaskListController(HLERequestContext& ctx);
+};
+
+} // namespace Service::OLSC

+ 56 - 0
src/core/hle/service/olsc/transfer_task_list_controller.cpp

@@ -0,0 +1,56 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "core/hle/service/ipc_helpers.h"
+#include "core/hle/service/olsc/native_handle_holder.h"
+#include "core/hle/service/olsc/transfer_task_list_controller.h"
+
+namespace Service::OLSC {
+
+ITransferTaskListController::ITransferTaskListController(Core::System& system_)
+    : ServiceFramework{system_, "ITransferTaskListController"} {
+    // clang-format off
+        static const FunctionInfo functions[] = {
+            {0, nullptr, "Unknown0"},
+            {1, nullptr, "Unknown1"},
+            {2, nullptr, "Unknown2"},
+            {3, nullptr, "Unknown3"},
+            {4, nullptr, "Unknown4"},
+            {5, &ITransferTaskListController::GetNativeHandleHolder , "GetNativeHandleHolder"},
+            {6, nullptr, "Unknown6"},
+            {7, nullptr, "Unknown7"},
+            {8, nullptr, "GetRemoteStorageController"},
+            {9, &ITransferTaskListController::GetNativeHandleHolder, "GetNativeHandleHolder2"},
+            {10, nullptr, "Unknown10"},
+            {11, nullptr, "Unknown11"},
+            {12, nullptr, "Unknown12"},
+            {13, nullptr, "Unknown13"},
+            {14, nullptr, "Unknown14"},
+            {15, nullptr, "Unknown15"},
+            {16, nullptr, "Unknown16"},
+            {17, nullptr, "Unknown17"},
+            {18, nullptr, "Unknown18"},
+            {19, nullptr, "Unknown19"},
+            {20, nullptr, "Unknown20"},
+            {21, nullptr, "Unknown21"},
+            {22, nullptr, "Unknown22"},
+            {23, nullptr, "Unknown23"},
+            {24, nullptr, "Unknown24"},
+            {25, nullptr, "Unknown25"},
+        };
+    // clang-format on
+
+    RegisterHandlers(functions);
+}
+
+ITransferTaskListController::~ITransferTaskListController() = default;
+
+void ITransferTaskListController::GetNativeHandleHolder(HLERequestContext& ctx) {
+    LOG_INFO(Service_OLSC, "called");
+
+    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
+    rb.Push(ResultSuccess);
+    rb.PushIpcInterface<INativeHandleHolder>(system);
+}
+
+} // namespace Service::OLSC

+ 17 - 0
src/core/hle/service/olsc/transfer_task_list_controller.h

@@ -0,0 +1,17 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "core/hle/service/service.h"
+
+namespace Service::OLSC {
+
+class ITransferTaskListController final : public ServiceFramework<ITransferTaskListController> {
+public:
+    explicit ITransferTaskListController(Core::System& system_);
+    ~ITransferTaskListController() override;
+
+private:
+    void GetNativeHandleHolder(HLERequestContext& ctx);
+};
+
+} // namespace Service::OLSC