diff options
| -rw-r--r-- | externals/libusb/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | src/common/fiber.cpp | 2 | ||||
| -rw-r--r-- | src/core/file_sys/system_archive/ng_word.cpp | 4 | ||||
| -rw-r--r-- | src/core/file_sys/system_archive/system_version.cpp | 10 | ||||
| -rw-r--r-- | src/core/hle/service/sockets/bsd.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/service/spl/module.cpp | 5 | ||||
| -rw-r--r-- | src/core/hle/service/spl/spl.cpp | 152 | ||||
| -rw-r--r-- | src/core/hle/service/spl/spl.h | 30 | ||||
| -rw-r--r-- | src/core/hle/service/vi/vi.cpp | 28 |
9 files changed, 224 insertions, 20 deletions
diff --git a/externals/libusb/CMakeLists.txt b/externals/libusb/CMakeLists.txt index c0d24b126..70d6735e3 100644 --- a/externals/libusb/CMakeLists.txt +++ b/externals/libusb/CMakeLists.txt | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | # Ensure libusb compiles with UTF-8 encoding on MSVC | ||
| 2 | if(MSVC) | ||
| 3 | add_compile_options(/utf-8) | ||
| 4 | endif() | ||
| 5 | |||
| 1 | add_library(usb STATIC EXCLUDE_FROM_ALL | 6 | add_library(usb STATIC EXCLUDE_FROM_ALL |
| 2 | libusb/libusb/core.c | 7 | libusb/libusb/core.c |
| 3 | libusb/libusb/core.c | 8 | libusb/libusb/core.c |
diff --git a/src/common/fiber.cpp b/src/common/fiber.cpp index 39532ff58..62010d762 100644 --- a/src/common/fiber.cpp +++ b/src/common/fiber.cpp | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | namespace Common { | 12 | namespace Common { |
| 13 | 13 | ||
| 14 | constexpr std::size_t default_stack_size = 256 * 1024; | 14 | constexpr std::size_t default_stack_size = 512 * 1024; |
| 15 | 15 | ||
| 16 | struct Fiber::FiberImpl { | 16 | struct Fiber::FiberImpl { |
| 17 | FiberImpl() : stack{default_stack_size}, rewind_stack{default_stack_size} {} | 17 | FiberImpl() : stack{default_stack_size}, rewind_stack{default_stack_size} {} |
diff --git a/src/core/file_sys/system_archive/ng_word.cpp b/src/core/file_sys/system_archive/ng_word.cpp index 100d3c5db..8d86d563a 100644 --- a/src/core/file_sys/system_archive/ng_word.cpp +++ b/src/core/file_sys/system_archive/ng_word.cpp | |||
| @@ -14,7 +14,7 @@ namespace NgWord1Data { | |||
| 14 | constexpr std::size_t NUMBER_WORD_TXT_FILES = 0x10; | 14 | constexpr std::size_t NUMBER_WORD_TXT_FILES = 0x10; |
| 15 | 15 | ||
| 16 | // Should this archive replacement mysteriously not work on a future game, consider updating. | 16 | // Should this archive replacement mysteriously not work on a future game, consider updating. |
| 17 | constexpr std::array<u8, 4> VERSION_DAT{0x0, 0x0, 0x0, 0x19}; // 5.1.0 System Version | 17 | constexpr std::array<u8, 4> VERSION_DAT{0x0, 0x0, 0x0, 0x20}; // 11.0.1 System Version |
| 18 | 18 | ||
| 19 | constexpr std::array<u8, 30> WORD_TXT{ | 19 | constexpr std::array<u8, 30> WORD_TXT{ |
| 20 | 0xFE, 0xFF, 0x00, 0x5E, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x79, 0x00, 0x62, 0x00, | 20 | 0xFE, 0xFF, 0x00, 0x5E, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x79, 0x00, 0x62, 0x00, |
| @@ -43,7 +43,7 @@ namespace NgWord2Data { | |||
| 43 | constexpr std::size_t NUMBER_AC_NX_FILES = 0x10; | 43 | constexpr std::size_t NUMBER_AC_NX_FILES = 0x10; |
| 44 | 44 | ||
| 45 | // Should this archive replacement mysteriously not work on a future game, consider updating. | 45 | // Should this archive replacement mysteriously not work on a future game, consider updating. |
| 46 | constexpr std::array<u8, 4> VERSION_DAT{0x0, 0x0, 0x0, 0x15}; // 5.1.0 System Version | 46 | constexpr std::array<u8, 4> VERSION_DAT{0x0, 0x0, 0x0, 0x1A}; // 11.0.1 System Version |
| 47 | 47 | ||
| 48 | constexpr std::array<u8, 0x2C> AC_NX_DATA{ | 48 | constexpr std::array<u8, 0x2C> AC_NX_DATA{ |
| 49 | 0x1F, 0x8B, 0x08, 0x08, 0xD5, 0x2C, 0x09, 0x5C, 0x04, 0x00, 0x61, 0x63, 0x72, 0x61, 0x77, | 49 | 0x1F, 0x8B, 0x08, 0x08, 0xD5, 0x2C, 0x09, 0x5C, 0x04, 0x00, 0x61, 0x63, 0x72, 0x61, 0x77, |
diff --git a/src/core/file_sys/system_archive/system_version.cpp b/src/core/file_sys/system_archive/system_version.cpp index 7bfbc9a67..54704105b 100644 --- a/src/core/file_sys/system_archive/system_version.cpp +++ b/src/core/file_sys/system_archive/system_version.cpp | |||
| @@ -14,15 +14,15 @@ namespace SystemVersionData { | |||
| 14 | 14 | ||
| 15 | constexpr u8 VERSION_MAJOR = 11; | 15 | constexpr u8 VERSION_MAJOR = 11; |
| 16 | constexpr u8 VERSION_MINOR = 0; | 16 | constexpr u8 VERSION_MINOR = 0; |
| 17 | constexpr u8 VERSION_MICRO = 0; | 17 | constexpr u8 VERSION_MICRO = 1; |
| 18 | 18 | ||
| 19 | constexpr u8 REVISION_MAJOR = 5; | 19 | constexpr u8 REVISION_MAJOR = 1; |
| 20 | constexpr u8 REVISION_MINOR = 0; | 20 | constexpr u8 REVISION_MINOR = 0; |
| 21 | 21 | ||
| 22 | constexpr char PLATFORM_STRING[] = "NX"; | 22 | constexpr char PLATFORM_STRING[] = "NX"; |
| 23 | constexpr char VERSION_HASH[] = "34197eba8810e2edd5e9dfcfbde7b340882e856d"; | 23 | constexpr char VERSION_HASH[] = "69103fcb2004dace877094c2f8c29e6113be5dbf"; |
| 24 | constexpr char DISPLAY_VERSION[] = "11.0.0"; | 24 | constexpr char DISPLAY_VERSION[] = "11.0.1"; |
| 25 | constexpr char DISPLAY_TITLE[] = "NintendoSDK Firmware for NX 11.0.0-5.0"; | 25 | constexpr char DISPLAY_TITLE[] = "NintendoSDK Firmware for NX 11.0.1-1.0"; |
| 26 | 26 | ||
| 27 | } // namespace SystemVersionData | 27 | } // namespace SystemVersionData |
| 28 | 28 | ||
diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index 78e9cd708..5fcd91f68 100644 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp | |||
| @@ -42,7 +42,9 @@ void BSD::PollWork::Execute(BSD* bsd) { | |||
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | void BSD::PollWork::Response(Kernel::HLERequestContext& ctx) { | 44 | void BSD::PollWork::Response(Kernel::HLERequestContext& ctx) { |
| 45 | ctx.WriteBuffer(write_buffer); | 45 | if (write_buffer.size() > 0) { |
| 46 | ctx.WriteBuffer(write_buffer); | ||
| 47 | } | ||
| 46 | 48 | ||
| 47 | IPC::ResponseBuilder rb{ctx, 4}; | 49 | IPC::ResponseBuilder rb{ctx, 4}; |
| 48 | rb.Push(RESULT_SUCCESS); | 50 | rb.Push(RESULT_SUCCESS); |
| @@ -55,7 +57,9 @@ void BSD::AcceptWork::Execute(BSD* bsd) { | |||
| 55 | } | 57 | } |
| 56 | 58 | ||
| 57 | void BSD::AcceptWork::Response(Kernel::HLERequestContext& ctx) { | 59 | void BSD::AcceptWork::Response(Kernel::HLERequestContext& ctx) { |
| 58 | ctx.WriteBuffer(write_buffer); | 60 | if (write_buffer.size() > 0) { |
| 61 | ctx.WriteBuffer(write_buffer); | ||
| 62 | } | ||
| 59 | 63 | ||
| 60 | IPC::ResponseBuilder rb{ctx, 5}; | 64 | IPC::ResponseBuilder rb{ctx, 5}; |
| 61 | rb.Push(RESULT_SUCCESS); | 65 | rb.Push(RESULT_SUCCESS); |
diff --git a/src/core/hle/service/spl/module.cpp b/src/core/hle/service/spl/module.cpp index dea6b0fe0..6903dd534 100644 --- a/src/core/hle/service/spl/module.cpp +++ b/src/core/hle/service/spl/module.cpp | |||
| @@ -43,6 +43,11 @@ void InstallInterfaces(SM::ServiceManager& service_manager, Core::System& system | |||
| 43 | auto module = std::make_shared<Module>(); | 43 | auto module = std::make_shared<Module>(); |
| 44 | std::make_shared<CSRNG>(system, module)->InstallAsService(service_manager); | 44 | std::make_shared<CSRNG>(system, module)->InstallAsService(service_manager); |
| 45 | std::make_shared<SPL>(system, module)->InstallAsService(service_manager); | 45 | std::make_shared<SPL>(system, module)->InstallAsService(service_manager); |
| 46 | std::make_shared<SPL_MIG>(system, module)->InstallAsService(service_manager); | ||
| 47 | std::make_shared<SPL_FS>(system, module)->InstallAsService(service_manager); | ||
| 48 | std::make_shared<SPL_SSL>(system, module)->InstallAsService(service_manager); | ||
| 49 | std::make_shared<SPL_ES>(system, module)->InstallAsService(service_manager); | ||
| 50 | std::make_shared<SPL_MANU>(system, module)->InstallAsService(service_manager); | ||
| 46 | } | 51 | } |
| 47 | 52 | ||
| 48 | } // namespace Service::SPL | 53 | } // namespace Service::SPL |
diff --git a/src/core/hle/service/spl/spl.cpp b/src/core/hle/service/spl/spl.cpp index 3fabc2c79..4e212610f 100644 --- a/src/core/hle/service/spl/spl.cpp +++ b/src/core/hle/service/spl/spl.cpp | |||
| @@ -8,6 +8,24 @@ namespace Service::SPL { | |||
| 8 | 8 | ||
| 9 | SPL::SPL(Core::System& system_, std::shared_ptr<Module> module_) | 9 | SPL::SPL(Core::System& system_, std::shared_ptr<Module> module_) |
| 10 | : Interface(system_, std::move(module_), "spl:") { | 10 | : Interface(system_, std::move(module_), "spl:") { |
| 11 | // clang-format off | ||
| 12 | static const FunctionInfo functions[] = { | ||
| 13 | {0, nullptr, "GetConfig"}, | ||
| 14 | {1, nullptr, "ModularExponentiate"}, | ||
| 15 | {5, nullptr, "SetConfig"}, | ||
| 16 | {7, &SPL::GetRandomBytes, "GetRandomBytes"}, | ||
| 17 | {11, nullptr, "IsDevelopment"}, | ||
| 18 | {24, nullptr, "SetBootReason"}, | ||
| 19 | {25, nullptr, "GetBootReason"}, | ||
| 20 | }; | ||
| 21 | // clang-format on | ||
| 22 | |||
| 23 | RegisterHandlers(functions); | ||
| 24 | } | ||
| 25 | |||
| 26 | SPL_MIG::SPL_MIG(Core::System& system_, std::shared_ptr<Module> module_) | ||
| 27 | : Interface(system_, std::move(module_), "spl:mig") { | ||
| 28 | // clang-format off | ||
| 11 | static const FunctionInfo functions[] = { | 29 | static const FunctionInfo functions[] = { |
| 12 | {0, nullptr, "GetConfig"}, | 30 | {0, nullptr, "GetConfig"}, |
| 13 | {1, nullptr, "ModularExponentiate"}, | 31 | {1, nullptr, "ModularExponentiate"}, |
| @@ -15,19 +33,67 @@ SPL::SPL(Core::System& system_, std::shared_ptr<Module> module_) | |||
| 15 | {3, nullptr, "LoadAesKey"}, | 33 | {3, nullptr, "LoadAesKey"}, |
| 16 | {4, nullptr, "GenerateAesKey"}, | 34 | {4, nullptr, "GenerateAesKey"}, |
| 17 | {5, nullptr, "SetConfig"}, | 35 | {5, nullptr, "SetConfig"}, |
| 18 | {7, &SPL::GetRandomBytes, "GetRandomBytes"}, | 36 | {7, &SPL::GetRandomBytes, "GenerateRandomBytes"}, |
| 19 | {9, nullptr, "ImportLotusKey"}, | 37 | {11, nullptr, "IsDevelopment"}, |
| 20 | {10, nullptr, "DecryptLotusMessage"}, | 38 | {14, nullptr, "DecryptAesKey"}, |
| 39 | {15, nullptr, "CryptAesCtr"}, | ||
| 40 | {16, nullptr, "ComputeCmac"}, | ||
| 41 | {21, nullptr, "AllocateAesKeyslot"}, | ||
| 42 | {22, nullptr, "DeallocateAesKeySlot"}, | ||
| 43 | {23, nullptr, "GetAesKeyslotAvailableEvent"}, | ||
| 44 | {24, nullptr, "SetBootReason"}, | ||
| 45 | {25, nullptr, "GetBootReason"}, | ||
| 46 | }; | ||
| 47 | // clang-format on | ||
| 48 | |||
| 49 | RegisterHandlers(functions); | ||
| 50 | } | ||
| 51 | |||
| 52 | SPL_FS::SPL_FS(Core::System& system_, std::shared_ptr<Module> module_) | ||
| 53 | : Interface(system_, std::move(module_), "spl:fs") { | ||
| 54 | // clang-format off | ||
| 55 | static const FunctionInfo functions[] = { | ||
| 56 | {0, nullptr, "GetConfig"}, | ||
| 57 | {1, nullptr, "ModularExponentiate"}, | ||
| 58 | {2, nullptr, "GenerateAesKek"}, | ||
| 59 | {3, nullptr, "LoadAesKey"}, | ||
| 60 | {4, nullptr, "GenerateAesKey"}, | ||
| 61 | {5, nullptr, "SetConfig"}, | ||
| 62 | {7, &SPL::GetRandomBytes, "GenerateRandomBytes"}, | ||
| 21 | {11, nullptr, "IsDevelopment"}, | 63 | {11, nullptr, "IsDevelopment"}, |
| 22 | {12, nullptr, "GenerateSpecificAesKey"}, | 64 | {12, nullptr, "GenerateSpecificAesKey"}, |
| 23 | {13, nullptr, "DecryptDeviceUniqueData"}, | ||
| 24 | {14, nullptr, "DecryptAesKey"}, | 65 | {14, nullptr, "DecryptAesKey"}, |
| 25 | {15, nullptr, "CryptAesCtr"}, | 66 | {15, nullptr, "CryptAesCtr"}, |
| 26 | {16, nullptr, "ComputeCmac"}, | 67 | {16, nullptr, "ComputeCmac"}, |
| 27 | {17, nullptr, "ImportEsKey"}, | ||
| 28 | {18, nullptr, "UnwrapTitleKey"}, | ||
| 29 | {19, nullptr, "LoadTitleKey"}, | 68 | {19, nullptr, "LoadTitleKey"}, |
| 30 | {20, nullptr, "PrepareEsCommonKey"}, | 69 | {21, nullptr, "AllocateAesKeyslot"}, |
| 70 | {22, nullptr, "DeallocateAesKeySlot"}, | ||
| 71 | {23, nullptr, "GetAesKeyslotAvailableEvent"}, | ||
| 72 | {24, nullptr, "SetBootReason"}, | ||
| 73 | {25, nullptr, "GetBootReason"}, | ||
| 74 | {31, nullptr, "GetPackage2Hash"}, | ||
| 75 | }; | ||
| 76 | // clang-format on | ||
| 77 | |||
| 78 | RegisterHandlers(functions); | ||
| 79 | } | ||
| 80 | |||
| 81 | SPL_SSL::SPL_SSL(Core::System& system_, std::shared_ptr<Module> module_) | ||
| 82 | : Interface(system_, std::move(module_), "spl:ssl") { | ||
| 83 | // clang-format off | ||
| 84 | static const FunctionInfo functions[] = { | ||
| 85 | {0, nullptr, "GetConfig"}, | ||
| 86 | {1, nullptr, "ModularExponentiate"}, | ||
| 87 | {2, nullptr, "GenerateAesKek"}, | ||
| 88 | {3, nullptr, "LoadAesKey"}, | ||
| 89 | {4, nullptr, "GenerateAesKey"}, | ||
| 90 | {5, nullptr, "SetConfig"}, | ||
| 91 | {7, &SPL::GetRandomBytes, "GetRandomBytes"}, | ||
| 92 | {11, nullptr, "IsDevelopment"}, | ||
| 93 | {13, nullptr, "DecryptDeviceUniqueData"}, | ||
| 94 | {14, nullptr, "DecryptAesKey"}, | ||
| 95 | {15, nullptr, "CryptAesCtr"}, | ||
| 96 | {16, nullptr, "ComputeCmac"}, | ||
| 31 | {21, nullptr, "AllocateAesKeyslot"}, | 97 | {21, nullptr, "AllocateAesKeyslot"}, |
| 32 | {22, nullptr, "DeallocateAesKeySlot"}, | 98 | {22, nullptr, "DeallocateAesKeySlot"}, |
| 33 | {23, nullptr, "GetAesKeyslotAvailableEvent"}, | 99 | {23, nullptr, "GetAesKeyslotAvailableEvent"}, |
| @@ -35,15 +101,83 @@ SPL::SPL(Core::System& system_, std::shared_ptr<Module> module_) | |||
| 35 | {25, nullptr, "GetBootReason"}, | 101 | {25, nullptr, "GetBootReason"}, |
| 36 | {26, nullptr, "DecryptAndStoreSslClientCertKey"}, | 102 | {26, nullptr, "DecryptAndStoreSslClientCertKey"}, |
| 37 | {27, nullptr, "ModularExponentiateWithSslClientCertKey"}, | 103 | {27, nullptr, "ModularExponentiateWithSslClientCertKey"}, |
| 104 | }; | ||
| 105 | // clang-format on | ||
| 106 | |||
| 107 | RegisterHandlers(functions); | ||
| 108 | } | ||
| 109 | |||
| 110 | SPL_ES::SPL_ES(Core::System& system_, std::shared_ptr<Module> module_) | ||
| 111 | : Interface(system_, std::move(module_), "spl:es") { | ||
| 112 | // clang-format off | ||
| 113 | static const FunctionInfo functions[] = { | ||
| 114 | {0, nullptr, "GetConfig"}, | ||
| 115 | {1, nullptr, "ModularExponentiate"}, | ||
| 116 | {2, nullptr, "GenerateAesKek"}, | ||
| 117 | {3, nullptr, "LoadAesKey"}, | ||
| 118 | {4, nullptr, "GenerateAesKey"}, | ||
| 119 | {5, nullptr, "SetConfig"}, | ||
| 120 | {7, &SPL::GetRandomBytes, "GenerateRandomBytes"}, | ||
| 121 | {11, nullptr, "IsDevelopment"}, | ||
| 122 | {13, nullptr, "DecryptDeviceUniqueData"}, | ||
| 123 | {14, nullptr, "DecryptAesKey"}, | ||
| 124 | {15, nullptr, "CryptAesCtr"}, | ||
| 125 | {16, nullptr, "ComputeCmac"}, | ||
| 126 | {18, nullptr, "UnwrapTitleKey"}, | ||
| 127 | {20, nullptr, "PrepareEsCommonKey"}, | ||
| 128 | {21, nullptr, "AllocateAesKeyslot"}, | ||
| 129 | {22, nullptr, "DeallocateAesKeySlot"}, | ||
| 130 | {23, nullptr, "GetAesKeyslotAvailableEvent"}, | ||
| 131 | {24, nullptr, "SetBootReason"}, | ||
| 132 | {25, nullptr, "GetBootReason"}, | ||
| 38 | {28, nullptr, "DecryptAndStoreDrmDeviceCertKey"}, | 133 | {28, nullptr, "DecryptAndStoreDrmDeviceCertKey"}, |
| 39 | {29, nullptr, "ModularExponentiateWithDrmDeviceCertKey"}, | 134 | {29, nullptr, "ModularExponentiateWithDrmDeviceCertKey"}, |
| 40 | {30, nullptr, "ReencryptDeviceUniqueData "}, | 135 | {31, nullptr, "PrepareEsArchiveKey"}, |
| 41 | {31, nullptr, "PrepareEsArchiveKey"}, // This is also GetPackage2Hash? | ||
| 42 | {32, nullptr, "LoadPreparedAesKey"}, | 136 | {32, nullptr, "LoadPreparedAesKey"}, |
| 43 | }; | 137 | }; |
| 138 | // clang-format on | ||
| 139 | |||
| 140 | RegisterHandlers(functions); | ||
| 141 | } | ||
| 142 | |||
| 143 | SPL_MANU::SPL_MANU(Core::System& system_, std::shared_ptr<Module> module_) | ||
| 144 | : Interface(system_, std::move(module_), "spl:manu") { | ||
| 145 | // clang-format off | ||
| 146 | static const FunctionInfo functions[] = { | ||
| 147 | {0, nullptr, "GetConfig"}, | ||
| 148 | {1, nullptr, "ModularExponentiate"}, | ||
| 149 | {2, nullptr, "GenerateAesKek"}, | ||
| 150 | {3, nullptr, "LoadAesKey"}, | ||
| 151 | {4, nullptr, "GenerateAesKey"}, | ||
| 152 | {5, nullptr, "SetConfig"}, | ||
| 153 | {7, &SPL::GetRandomBytes, "GetRandomBytes"}, | ||
| 154 | {11, nullptr, "IsDevelopment"}, | ||
| 155 | {13, nullptr, "DecryptDeviceUniqueData"}, | ||
| 156 | {14, nullptr, "DecryptAesKey"}, | ||
| 157 | {15, nullptr, "CryptAesCtr"}, | ||
| 158 | {16, nullptr, "ComputeCmac"}, | ||
| 159 | {21, nullptr, "AllocateAesKeyslot"}, | ||
| 160 | {22, nullptr, "DeallocateAesKeySlot"}, | ||
| 161 | {23, nullptr, "GetAesKeyslotAvailableEvent"}, | ||
| 162 | {24, nullptr, "SetBootReason"}, | ||
| 163 | {25, nullptr, "GetBootReason"}, | ||
| 164 | {30, nullptr, "ReencryptDeviceUniqueData"}, | ||
| 165 | }; | ||
| 166 | // clang-format on | ||
| 167 | |||
| 44 | RegisterHandlers(functions); | 168 | RegisterHandlers(functions); |
| 45 | } | 169 | } |
| 46 | 170 | ||
| 47 | SPL::~SPL() = default; | 171 | SPL::~SPL() = default; |
| 48 | 172 | ||
| 173 | SPL_MIG::~SPL_MIG() = default; | ||
| 174 | |||
| 175 | SPL_FS::~SPL_FS() = default; | ||
| 176 | |||
| 177 | SPL_SSL::~SPL_SSL() = default; | ||
| 178 | |||
| 179 | SPL_ES::~SPL_ES() = default; | ||
| 180 | |||
| 181 | SPL_MANU::~SPL_MANU() = default; | ||
| 182 | |||
| 49 | } // namespace Service::SPL | 183 | } // namespace Service::SPL |
diff --git a/src/core/hle/service/spl/spl.h b/src/core/hle/service/spl/spl.h index d27d16b86..9b35012ed 100644 --- a/src/core/hle/service/spl/spl.h +++ b/src/core/hle/service/spl/spl.h | |||
| @@ -18,4 +18,34 @@ public: | |||
| 18 | ~SPL() override; | 18 | ~SPL() override; |
| 19 | }; | 19 | }; |
| 20 | 20 | ||
| 21 | class SPL_MIG final : public Module::Interface { | ||
| 22 | public: | ||
| 23 | explicit SPL_MIG(Core::System& system_, std::shared_ptr<Module> module_); | ||
| 24 | ~SPL_MIG() override; | ||
| 25 | }; | ||
| 26 | |||
| 27 | class SPL_FS final : public Module::Interface { | ||
| 28 | public: | ||
| 29 | explicit SPL_FS(Core::System& system_, std::shared_ptr<Module> module_); | ||
| 30 | ~SPL_FS() override; | ||
| 31 | }; | ||
| 32 | |||
| 33 | class SPL_SSL final : public Module::Interface { | ||
| 34 | public: | ||
| 35 | explicit SPL_SSL(Core::System& system_, std::shared_ptr<Module> module_); | ||
| 36 | ~SPL_SSL() override; | ||
| 37 | }; | ||
| 38 | |||
| 39 | class SPL_ES final : public Module::Interface { | ||
| 40 | public: | ||
| 41 | explicit SPL_ES(Core::System& system_, std::shared_ptr<Module> module_); | ||
| 42 | ~SPL_ES() override; | ||
| 43 | }; | ||
| 44 | |||
| 45 | class SPL_MANU final : public Module::Interface { | ||
| 46 | public: | ||
| 47 | explicit SPL_MANU(Core::System& system_, std::shared_ptr<Module> module_); | ||
| 48 | ~SPL_MANU() override; | ||
| 49 | }; | ||
| 50 | |||
| 21 | } // namespace Service::SPL | 51 | } // namespace Service::SPL |
diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp index 8661895ae..7423287ea 100644 --- a/src/core/hle/service/vi/vi.cpp +++ b/src/core/hle/service/vi/vi.cpp | |||
| @@ -1217,6 +1217,32 @@ private: | |||
| 1217 | } | 1217 | } |
| 1218 | } | 1218 | } |
| 1219 | 1219 | ||
| 1220 | void GetIndirectLayerImageMap(Kernel::HLERequestContext& ctx) { | ||
| 1221 | IPC::RequestParser rp{ctx}; | ||
| 1222 | const auto width = rp.Pop<s64>(); | ||
| 1223 | const auto height = rp.Pop<s64>(); | ||
| 1224 | const auto indirect_layer_consumer_handle = rp.Pop<u64>(); | ||
| 1225 | const auto applet_resource_user_id = rp.Pop<u64>(); | ||
| 1226 | |||
| 1227 | LOG_WARNING(Service_VI, | ||
| 1228 | "(STUBBED) called, width={}, height={}, indirect_layer_consumer_handle={}, " | ||
| 1229 | "applet_resource_user_id={}", | ||
| 1230 | width, height, indirect_layer_consumer_handle, applet_resource_user_id); | ||
| 1231 | |||
| 1232 | std::vector<u8> out_buffer(0x46); | ||
| 1233 | ctx.WriteBuffer(out_buffer); | ||
| 1234 | |||
| 1235 | // TODO: Figure out what these are | ||
| 1236 | |||
| 1237 | constexpr s64 unknown_result_1 = 0; | ||
| 1238 | constexpr s64 unknown_result_2 = 0; | ||
| 1239 | |||
| 1240 | IPC::ResponseBuilder rb{ctx, 6}; | ||
| 1241 | rb.Push(unknown_result_1); | ||
| 1242 | rb.Push(unknown_result_2); | ||
| 1243 | rb.Push(RESULT_SUCCESS); | ||
| 1244 | } | ||
| 1245 | |||
| 1220 | void GetIndirectLayerImageRequiredMemoryInfo(Kernel::HLERequestContext& ctx) { | 1246 | void GetIndirectLayerImageRequiredMemoryInfo(Kernel::HLERequestContext& ctx) { |
| 1221 | IPC::RequestParser rp{ctx}; | 1247 | IPC::RequestParser rp{ctx}; |
| 1222 | const auto width = rp.Pop<u64>(); | 1248 | const auto width = rp.Pop<u64>(); |
| @@ -1276,7 +1302,7 @@ IApplicationDisplayService::IApplicationDisplayService(Core::System& system_, | |||
| 1276 | {2031, &IApplicationDisplayService::DestroyStrayLayer, "DestroyStrayLayer"}, | 1302 | {2031, &IApplicationDisplayService::DestroyStrayLayer, "DestroyStrayLayer"}, |
| 1277 | {2101, &IApplicationDisplayService::SetLayerScalingMode, "SetLayerScalingMode"}, | 1303 | {2101, &IApplicationDisplayService::SetLayerScalingMode, "SetLayerScalingMode"}, |
| 1278 | {2102, &IApplicationDisplayService::ConvertScalingMode, "ConvertScalingMode"}, | 1304 | {2102, &IApplicationDisplayService::ConvertScalingMode, "ConvertScalingMode"}, |
| 1279 | {2450, nullptr, "GetIndirectLayerImageMap"}, | 1305 | {2450, &IApplicationDisplayService::GetIndirectLayerImageMap, "GetIndirectLayerImageMap"}, |
| 1280 | {2451, nullptr, "GetIndirectLayerImageCropMap"}, | 1306 | {2451, nullptr, "GetIndirectLayerImageCropMap"}, |
| 1281 | {2460, &IApplicationDisplayService::GetIndirectLayerImageRequiredMemoryInfo, | 1307 | {2460, &IApplicationDisplayService::GetIndirectLayerImageRequiredMemoryInfo, |
| 1282 | "GetIndirectLayerImageRequiredMemoryInfo"}, | 1308 | "GetIndirectLayerImageRequiredMemoryInfo"}, |