diff options
author | JamePeng <jame_peng@sina.com> | 2016-10-02 09:45:58 +0200 |
---|---|---|
committer | JamePeng <jame_peng@sina.com> | 2016-10-02 11:36:57 +0200 |
commit | bd8c80a7b4836702f889c1e215599f558ed89c82 (patch) | |
tree | fa1019fe1e8e6c091c822a5f0b473d6adb382fa5 | |
parent | Merge pull request #2083 from yuriks/opengl-scissor-cached-rect (diff) | |
download | yuzu-bd8c80a7b4836702f889c1e215599f558ed89c82.tar yuzu-bd8c80a7b4836702f889c1e215599f558ed89c82.tar.gz yuzu-bd8c80a7b4836702f889c1e215599f558ed89c82.tar.bz2 yuzu-bd8c80a7b4836702f889c1e215599f558ed89c82.tar.lz yuzu-bd8c80a7b4836702f889c1e215599f558ed89c82.tar.xz yuzu-bd8c80a7b4836702f889c1e215599f558ed89c82.tar.zst yuzu-bd8c80a7b4836702f889c1e215599f558ed89c82.zip |
Diffstat (limited to '')
-rw-r--r-- | src/common/logging/backend.cpp | 1 | ||||
-rw-r--r-- | src/common/logging/log.h | 1 | ||||
-rw-r--r-- | src/core/hle/service/boss/boss.cpp | 967 | ||||
-rw-r--r-- | src/core/hle/service/boss/boss.h | 785 | ||||
-rw-r--r-- | src/core/hle/service/boss/boss_u.cpp | 60 |
5 files changed, 1810 insertions, 4 deletions
diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp index 9a13a9e90..88209081d 100644 --- a/src/common/logging/backend.cpp +++ b/src/common/logging/backend.cpp @@ -37,6 +37,7 @@ namespace Log { SUB(Service, FS) \ SUB(Service, ERR) \ SUB(Service, APT) \ + SUB(Service, BOSS) \ SUB(Service, GSP) \ SUB(Service, AC) \ SUB(Service, AM) \ diff --git a/src/common/logging/log.h b/src/common/logging/log.h index a4b4750de..8d3a2d03e 100644 --- a/src/common/logging/log.h +++ b/src/common/logging/log.h @@ -54,6 +54,7 @@ enum class Class : ClassType { Service_FS, ///< The FS (Filesystem) service implementation Service_ERR, ///< The ERR (Error) port implementation Service_APT, ///< The APT (Applets) service + Service_BOSS, ///< The BOSS (SpotPass) service Service_GSP, ///< The GSP (GPU control) service Service_AC, ///< The AC (WiFi status) service Service_AM, ///< The AM (Application manager) service diff --git a/src/core/hle/service/boss/boss.cpp b/src/core/hle/service/boss/boss.cpp index 757a8c2c7..6ab16ccd5 100644 --- a/src/core/hle/service/boss/boss.cpp +++ b/src/core/hle/service/boss/boss.cpp @@ -10,11 +10,978 @@ namespace Service { namespace BOSS { +static u32 new_arrival_flag; +static u32 ns_data_new_flag; +static u32 output_flag; + +void InitializeSession(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u64 unk_param = ((u64)cmd_buff[1] | ((u64)cmd_buff[2] << 32)); + u32 translation = cmd_buff[3]; + u32 unk_param4 = cmd_buff[4]; + + if (translation != IPC::CallingPidDesc()) { + cmd_buff[0] = IPC::MakeHeader(0, 0x1, 0); // 0x40 + cmd_buff[1] = ResultCode(ErrorDescription::OS_InvalidBufferDescriptor, ErrorModule::OS, + ErrorSummary::WrongArgument, ErrorLevel::Permanent) + .raw; + LOG_ERROR(Service_BOSS, "The translation was invalid, translation=0x%08X", translation); + return; + } + + cmd_buff[0] = IPC::MakeHeader(0x1, 0x1, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param=0x%016X, translation=0x%08X, unk_param4=0x%08X", + unk_param, translation, unk_param4); +} + +void RegisterStorage(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + u32 unk_param3 = cmd_buff[3]; + u32 unk_flag = cmd_buff[4] & 0xFF; + + cmd_buff[0] = IPC::MakeHeader(0x2, 0x1, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + + LOG_WARNING( + Service_BOSS, + "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, unk_flag=0x%08X", + unk_param1, unk_param2, unk_param3, unk_flag); +} + +void UnregisterStorage(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + cmd_buff[0] = IPC::MakeHeader(0x3, 0x1, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + + LOG_WARNING(Service_BOSS, "(STUBBED) called"); +} + +void GetStorageInfo(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + cmd_buff[0] = IPC::MakeHeader(0x4, 0x2, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 + + LOG_WARNING(Service_BOSS, "(STUBBED) called"); +} + +void RegisterPrivateRootCa(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + u32 translation = cmd_buff[2]; + u32 buff_addr = cmd_buff[3]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x5, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X", + translation, buff_addr, buff_size); +} + +void RegisterPrivateClientCert(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + u32 translation1 = cmd_buff[3]; + u32 buff1_addr = cmd_buff[4]; + u32 buff1_size = (translation1 >> 4); + u32 translation2 = cmd_buff[5]; + u32 buff2_addr = cmd_buff[6]; + u32 buff2_size = (translation2 >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x6, 0x1, 0x4); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff1_size << 4 | 0xA); + cmd_buff[3] = buff1_addr; + cmd_buff[2] = (buff2_size << 4 | 0xA); + cmd_buff[3] = buff2_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, " + "translation1=0x%08X, buff1_addr=0x%08X, buff1_size=0x%08X, " + "translation2=0x%08X, buff2_addr=0x%08X, buff2_size=0x%08X", + unk_param1, unk_param2, translation1, buff1_addr, buff1_size, translation2, + buff2_addr, buff2_size); +} + +void GetNewArrivalFlag(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + cmd_buff[0] = IPC::MakeHeader(0x7, 0x2, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = new_arrival_flag; + + LOG_WARNING(Service_BOSS, "(STUBBED) new_arrival_flag=%u", new_arrival_flag); +} + +void RegisterNewArrivalEvent(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + + cmd_buff[0] = IPC::MakeHeader(0x8, 0x1, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X", unk_param1, + unk_param2); +} + +void SetOptoutFlag(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + output_flag = cmd_buff[1] & 0xFF; + + cmd_buff[0] = IPC::MakeHeader(0x9, 0x1, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + + LOG_WARNING(Service_BOSS, "output_flag=%u", output_flag); +} + +void GetOptoutFlag(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + cmd_buff[0] = IPC::MakeHeader(0xA, 0x2, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = output_flag; + + LOG_WARNING(Service_BOSS, "output_flag=%u", output_flag); +} + +void RegisterTask(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2] & 0xFF; + u32 unk_param3 = cmd_buff[3] & 0xFF; + u32 translation = cmd_buff[4]; + u32 buff_addr = cmd_buff[5]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0xB, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, " + "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, unk_param3, translation, buff_addr, buff_size); +} + +void UnregisterTask(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2] & 0xFF; + u32 translation = cmd_buff[3]; + u32 buff_addr = cmd_buff[4]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0xC, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, translation, buff_addr, buff_size); +} + +void ReconfigureTask(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2] & 0xFF; + u32 translation = cmd_buff[3]; + u32 buff_addr = cmd_buff[4]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0xD, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, translation, buff_addr, buff_size); +} + +void GetTaskIdList(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + cmd_buff[0] = IPC::MakeHeader(0xE, 0x1, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + + LOG_WARNING(Service_BOSS, "(STUBBED) called"); +} + +void GetStepIdList(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + u32 translation = cmd_buff[2]; + u32 buff_addr = cmd_buff[3]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0xF, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X", + translation, buff_addr, buff_size); +} + +void GetNsDataIdList(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + u32 unk_param3 = cmd_buff[3]; + u32 unk_param4 = cmd_buff[4]; + u32 translation = cmd_buff[5]; + u32 buff_addr = cmd_buff[6]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x10, 0x3, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (16 bit value) + cmd_buff[3] = 0; // stub 0 (16 bit value) + cmd_buff[4] = (buff_size << 4 | 0xC); + cmd_buff[5] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, " + "unk_param4=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size); +} + +void GetOwnNsDataIdList(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + u32 unk_param3 = cmd_buff[3]; + u32 unk_param4 = cmd_buff[4]; + u32 translation = cmd_buff[5]; + u32 buff_addr = cmd_buff[6]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x11, 0x3, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (16 bit value) + cmd_buff[3] = 0; // stub 0 (16 bit value) + cmd_buff[4] = (buff_size << 4 | 0xC); + cmd_buff[5] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, " + "unk_param4=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size); +} + +void GetNewDataNsDataIdList(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + u32 unk_param3 = cmd_buff[3]; + u32 unk_param4 = cmd_buff[4]; + u32 translation = cmd_buff[5]; + u32 buff_addr = cmd_buff[6]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x12, 0x3, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (16 bit value) + cmd_buff[3] = 0; // stub 0 (16 bit value) + cmd_buff[4] = (buff_size << 4 | 0xC); + cmd_buff[5] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, " + "unk_param4=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size); +} + +void GetOwnNewDataNsDataIdList(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + u32 unk_param3 = cmd_buff[3]; + u32 unk_param4 = cmd_buff[4]; + u32 translation = cmd_buff[5]; + u32 buff_addr = cmd_buff[6]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x13, 0x3, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (16 bit value) + cmd_buff[3] = 0; // stub 0 (16 bit value) + cmd_buff[4] = (buff_size << 4 | 0xC); + cmd_buff[5] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, " + "unk_param4=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size); +} + +void SendProperty(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + u32 translation = cmd_buff[3]; + u32 buff_addr = cmd_buff[4]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x14, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, translation, buff_addr, buff_size); +} + +void SendPropertyHandle(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[2] & 0xFF; + u32 translation = cmd_buff[3]; + u32 buff_addr = cmd_buff[4]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x15, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, translation, buff_addr, buff_size); +} + +void ReceiveProperty(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 buff_size = cmd_buff[2]; + u32 translation = cmd_buff[3]; + u32 buff_addr = cmd_buff[4]; + + cmd_buff[0] = IPC::MakeHeader(0x16, 0x2, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (32 bit value) + cmd_buff[2] = (buff_size << 4 | 0xC); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, buff_size=0x%08X, " + "translation=0x%08X, buff_addr=0x%08X", + unk_param1, buff_size, translation, buff_addr); +} + +void UpdateTaskInterval(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2] & 0xFF; + u32 translation = cmd_buff[3]; + u32 buff_addr = cmd_buff[4]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x17, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, " + "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, translation, buff_addr, buff_size); +} + +void UpdateTaskCount(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + u32 buff_size = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; // TODO(JamePeng): Figure out the meaning of these parameters + u32 translation = cmd_buff[3]; + u32 buff_addr = cmd_buff[4]; + + cmd_buff[0] = IPC::MakeHeader(0x18, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) buff_size=0x%08X, unk_param2=0x%08X, " + "translation=0x%08X, buff_addr=0x%08X", + buff_size, unk_param2, translation, buff_addr); +} + +void GetTaskInterval(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters + u32 translation = cmd_buff[2]; + u32 buff_addr = cmd_buff[3]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x19, 0x2, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 ( 32bit value) + cmd_buff[3] = (buff_size << 4 | 0xA); + cmd_buff[4] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, translation, buff_addr, buff_size); +} + +void GetTaskCount(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters + u32 translation = cmd_buff[2]; + u32 buff_addr = cmd_buff[3]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x1A, 0x2, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 ( 32bit value) + cmd_buff[3] = (buff_size << 4 | 0xA); + cmd_buff[4] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, translation, buff_addr, buff_size); +} + +void GetTaskServiceStatus(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters + u32 translation = cmd_buff[2]; + u32 buff_addr = cmd_buff[3]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x1B, 0x2, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 ( 8bit value) + cmd_buff[3] = (buff_size << 4 | 0xA); + cmd_buff[4] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, translation, buff_addr, buff_size); +} + +void StartTask(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters + u32 translation = cmd_buff[2]; + u32 buff_addr = cmd_buff[3]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x1C, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, translation, buff_addr, buff_size); +} + +void StartTaskImmediate(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters + u32 translation = cmd_buff[2]; + u32 buff_addr = cmd_buff[3]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x1D, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, translation, buff_addr, buff_size); +} + +void CancelTask(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 translation = cmd_buff[2]; + u32 buff_addr = cmd_buff[3]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x1E, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, translation, buff_addr, buff_size); +} + +void GetTaskFinishHandle(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + cmd_buff[0] = IPC::MakeHeader(0x1F, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; + cmd_buff[3] = 0; // stub 0(This should be a handle of task_finish ?) + + LOG_WARNING(Service_BOSS, "(STUBBED) called"); +} + +void GetTaskState(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 buff_size = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2] & 0xFF; + u32 translation = cmd_buff[3]; + u32 buff_addr = cmd_buff[4]; + + cmd_buff[0] = IPC::MakeHeader(0x20, 0x4, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (8 bit value) + cmd_buff[3] = 0; // stub 0 (32 bit value) + cmd_buff[4] = 0; // stub 0 (8 bit value) + cmd_buff[5] = (buff_size << 4 | 0xA); + cmd_buff[6] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) buff_size=0x%08X, unk_param2=0x%08X, " + "translation=0x%08X, buff_addr=0x%08X", + buff_size, unk_param2, translation, buff_addr); +} + +void GetTaskResult(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 translation = cmd_buff[2]; + u32 buff_addr = cmd_buff[3]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x21, 0x4, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (8 bit value) + cmd_buff[3] = 0; // stub 0 (32 bit value) + cmd_buff[4] = 0; // stub 0 (8 bit value) + cmd_buff[5] = (buff_size << 4 | 0xA); + cmd_buff[6] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, translation, buff_addr, buff_size); +} + +void GetTaskCommErrorCode(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 translation = cmd_buff[2]; + u32 buff_addr = cmd_buff[3]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x22, 0x4, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (32 bit value) + cmd_buff[3] = 0; // stub 0 (32 bit value) + cmd_buff[4] = 0; // stub 0 (8 bit value) + cmd_buff[5] = (buff_size << 4 | 0xA); + cmd_buff[6] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, translation, buff_addr, buff_size); +} + +void GetTaskStatus(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2] & 0xFF; + u32 unk_param3 = cmd_buff[3] & 0xFF; + u32 translation = cmd_buff[4]; + u32 buff_addr = cmd_buff[5]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x23, 0x2, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (8 bit value) + cmd_buff[3] = (buff_size << 4 | 0xA); + cmd_buff[4] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, " + "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, unk_param3, translation, buff_addr, buff_size); +} + +void GetTaskError(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2] & 0xFF; + u32 translation = cmd_buff[4]; + u32 buff_addr = cmd_buff[5]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x24, 0x2, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (8 bit value) + cmd_buff[3] = (buff_size << 4 | 0xA); + cmd_buff[4] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, translation, buff_addr, buff_size); +} + +void GetTaskInfo(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2] & 0xFF; + u32 translation = cmd_buff[4]; + u32 buff_addr = cmd_buff[5]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x25, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, translation, buff_addr, buff_size); +} + +void DeleteNsData(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + + cmd_buff[0] = IPC::MakeHeader(0x26, 0x1, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X", unk_param1); +} + +void GetNsDataHeaderInfo(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2] & 0xFF; + u32 unk_param3 = cmd_buff[3]; + u32 translation = cmd_buff[4]; + u32 buff_addr = cmd_buff[5]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x27, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xC); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, " + "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, unk_param3, translation, buff_addr, buff_size); +} + +void ReadNsData(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + u32 unk_param3 = cmd_buff[3]; + u32 unk_param4 = cmd_buff[4]; + u32 translation = cmd_buff[5]; + u32 buff_addr = cmd_buff[6]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x28, 0x3, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (32bit value) + cmd_buff[3] = 0; // stub 0 (32bit value) + cmd_buff[4] = (buff_size << 4 | 0xC); + cmd_buff[5] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, " + "unk_param4=0x%08X, translation=0x%08X, " + "buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size); +} + +void SetNsDataAdditionalInfo(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + + cmd_buff[0] = IPC::MakeHeader(0x29, 0x1, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X", unk_param1, + unk_param2); +} + +void GetNsDataAdditionalInfo(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + + cmd_buff[0] = IPC::MakeHeader(0x2A, 0x2, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (32bit value) + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X", unk_param1); +} + +void SetNsDataNewFlag(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + ns_data_new_flag = cmd_buff[2] & 0xFF; + + cmd_buff[0] = IPC::MakeHeader(0x2B, 0x1, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, ns_data_new_flag=0x%08X", unk_param1, + ns_data_new_flag); +} + +void GetNsDataNewFlag(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + + cmd_buff[0] = IPC::MakeHeader(0x2C, 0x2, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = ns_data_new_flag; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, ns_data_new_flag=0x%08X", unk_param1, + ns_data_new_flag); +} + +void GetNsDataLastUpdate(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + + cmd_buff[0] = IPC::MakeHeader(0x2D, 0x3, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (32bit value) + cmd_buff[3] = 0; // stub 0 (32bit value) + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X", unk_param1); +} + +void GetErrorCode(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + + cmd_buff[0] = IPC::MakeHeader(0x2E, 0x2, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (32bit value) + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X", unk_param1); +} + +void RegisterStorageEntry(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + u32 unk_param3 = cmd_buff[3]; + u32 unk_param4 = cmd_buff[4]; + u32 unk_param5 = cmd_buff[5] & 0xFF; + + cmd_buff[0] = IPC::MakeHeader(0x2F, 0x1, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, " + "unk_param4=0x%08X, unk_param5=0x%08X", + unk_param1, unk_param2, unk_param3, unk_param4, unk_param5); +} + +void GetStorageEntryInfo(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + cmd_buff[0] = IPC::MakeHeader(0x30, 0x3, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (32bit value) + cmd_buff[3] = 0; // stub 0 (16bit value) + + LOG_WARNING(Service_BOSS, "(STUBBED) called"); +} + +void SetStorageOption(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1] & 0xFF; + u32 unk_param2 = cmd_buff[2]; + u32 unk_param3 = cmd_buff[3]; + u32 unk_param4 = cmd_buff[4]; + + cmd_buff[0] = IPC::MakeHeader(0x31, 0x1, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, " + "unk_param3=0x%08X, unk_param4=0x%08X", + unk_param1, unk_param2, unk_param3, unk_param4); +} + +void GetStorageOption(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + cmd_buff[0] = IPC::MakeHeader(0x32, 0x5, 0); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (32bit value) + cmd_buff[3] = 0; // stub 0 (8bit value) + cmd_buff[4] = 0; // stub 0 (16bit value) + cmd_buff[5] = 0; // stub 0 (16bit value) + + LOG_WARNING(Service_BOSS, "(STUBBED) called"); +} + +void StartBgImmediate(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters + u32 translation = cmd_buff[2]; + u32 buff_addr = cmd_buff[3]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x33, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff_size << 4 | 0xA); + cmd_buff[3] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) buff_size=0x%08X, unk_param2=0x%08X, " + "translation=0x%08X, buff_addr=0x%08X", + unk_param1, translation, buff_addr, buff_size); +} + +void GetTaskActivePriority(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters + u32 translation = cmd_buff[2]; + u32 buff_addr = cmd_buff[3]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x34, 0x2, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = 0; // stub 0 (8bit value) + cmd_buff[3] = (buff_size << 4 | 0xA); + cmd_buff[4] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) buff_size=0x%08X, unk_param2=0x%08X, " + "translation=0x%08X, buff_addr=0x%08X", + unk_param1, translation, buff_addr, buff_size); +} + +void RegisterImmediateTask(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2] & 0xFF; + u32 unk_param3 = cmd_buff[3] & 0xFF; + u32 translation = cmd_buff[4]; + u32 buff_addr = cmd_buff[5]; + u32 buff_size = (translation >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x35, 0x1, 0x2); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[3] = (buff_size << 4 | 0xA); + cmd_buff[4] = buff_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, " + "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X", + unk_param1, unk_param2, unk_param3, translation, buff_addr, buff_size); +} + +void SetTaskQuery(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + u32 translation1 = cmd_buff[3]; + u32 buff1_addr = cmd_buff[4]; + u32 buff1_size = (translation1 >> 4); + u32 translation2 = cmd_buff[5]; + u32 buff2_addr = cmd_buff[6]; + u32 buff2_size = (translation2 >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x36, 0x1, 0x4); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff1_size << 4 | 0xA); + cmd_buff[3] = buff1_addr; + cmd_buff[2] = (buff2_size << 4 | 0xA); + cmd_buff[3] = buff2_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, " + "translation1=0x%08X, buff1_addr=0x%08X, buff1_size=0x%08X, " + "translation2=0x%08X, buff2_addr=0x%08X, buff2_size=0x%08X", + unk_param1, unk_param2, translation1, buff1_addr, buff1_size, translation2, + buff2_addr, buff2_size); +} + +void GetTaskQuery(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + // TODO(JamePeng): Figure out the meaning of these parameters + u32 unk_param1 = cmd_buff[1]; + u32 unk_param2 = cmd_buff[2]; + u32 translation1 = cmd_buff[3]; + u32 buff1_addr = cmd_buff[4]; + u32 buff1_size = (translation1 >> 4); + u32 translation2 = cmd_buff[5]; + u32 buff2_addr = cmd_buff[6]; + u32 buff2_size = (translation2 >> 4); + + cmd_buff[0] = IPC::MakeHeader(0x37, 0x1, 0x4); + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = (buff1_size << 4 | 0xA); + cmd_buff[3] = buff1_addr; + cmd_buff[2] = (buff2_size << 4 | 0xC); + cmd_buff[3] = buff2_addr; + + LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, " + "translation1=0x%08X, buff1_addr=0x%08X, buff1_size=0x%08X, " + "translation2=0x%08X, buff2_addr=0x%08X, buff2_size=0x%08X", + unk_param1, unk_param2, translation1, buff1_addr, buff1_size, translation2, + buff2_addr, buff2_size); +} + void Init() { using namespace Kernel; AddService(new BOSS_P_Interface); AddService(new BOSS_U_Interface); + + new_arrival_flag = 0; + ns_data_new_flag = 0; + output_flag = 0; } void Shutdown() {} diff --git a/src/core/hle/service/boss/boss.h b/src/core/hle/service/boss/boss.h index d3b5d7101..8cdc663c8 100644 --- a/src/core/hle/service/boss/boss.h +++ b/src/core/hle/service/boss/boss.h @@ -4,9 +4,794 @@ #pragma once +#include "core/hle/service/service.h" + namespace Service { namespace BOSS { +/** + * BOSS::InitializeSession service function + * Inputs: + * 0 : Header Code[0x00010082] + * 1 : u32 lower 64bit value + * 2 : u32 higher 64bit value + * 3 : 0x20 + * 4 : u32 unknown value + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + */ +void InitializeSession(Service::Interface* self); + +/** + * BOSS::RegisterStorage service function + * Inputs: + * 0 : Header Code[0x00020010] + * 1 : u32 unknown1 + * 2 : u32 unknown2 + * 3 : u32 unknown3 + * 4 : u8 unknown_flag + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + */ +void RegisterStorage(Service::Interface* self); + +/** + * BOSS::UnregisterStorage service function + * Inputs: + * 0 : Header Code[0x00030000] + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + */ +void UnregisterStorage(Service::Interface* self); + +/** + * BOSS::GetStorageInfo service function + * Inputs: + * 0 : Header Code[0x00040000] + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u32 unknown value + */ +void GetStorageInfo(Service::Interface* self); + +/** + * BOSS::RegisterPrivateRootCa service function + * Inputs: + * 0 : Header Code[0x00050042] + * 1 : u32 unknown value + * 2 : MappedBufferDesc(permission = R) + * 3 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void RegisterPrivateRootCa(Service::Interface* self); + +/** + * BOSS::RegisterPrivateClientCert service function + * Inputs: + * 0 : Header Code[0x00060084] + * 1 : u32 unknown value + * 2 : u32 unknown value + * 3 : MappedBufferDesc1(permission = R) + * 4 : u32 buff_addr1 + * 5 : MappedBufferDesc2(permission = R) + * 6 : u32 buff_addr2 + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff1_size << 4 | 0xA + * 3 : u32 buff_addr1 + * 4 : buff2_size << 4 | 0xA + * 5 : u32 buff_addr2 + */ +void RegisterPrivateClientCert(Service::Interface* self); + +/** + * BOSS::GetNewArrivalFlag service function + * Inputs: + * 0 : Header Code[0x00070000] + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u8 flag + */ +void GetNewArrivalFlag(Service::Interface* self); + +/** + * BOSS::RegisterNewArrivalEvent service function + * Inputs: + * 0 : Header Code[0x00080002] + * 1 : u32 unknown1 + * 2 : u32 unknown2 + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + */ +void RegisterNewArrivalEvent(Service::Interface* self); + +/** + * BOSS::SetOptoutFlag service function + * Inputs: + * 0 : Header Code[0x00090040] + * 1 : u8 output_flag + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + */ +void SetOptoutFlag(Service::Interface* self); + +/** + * BOSS::GetOptoutFlag service function + * Inputs: + * 0 : Header Code[0x000A0000] + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u8 output_flag + */ +void GetOptoutFlag(Service::Interface* self); + +/** + * BOSS::RegisterTask service function + * Inputs: + * 0 : Header Code[0x000B00C2] + * 1 : u32 unknown value + * 2 : u8 unknown value + * 3 : u8 unknown value + * 4 : MappedBufferDesc1(permission = R) + * 5 : buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void RegisterTask(Service::Interface* self); + +/** + * BOSS::UnregisterTask service function + * Inputs: + * 0 : Header Code[0x000C0082] + * 1 : u32 unknown value + * 2 : u8 unknown value + * 3 : MappedBufferDesc1(permission = R) + * 4 : buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void UnregisterTask(Service::Interface* self); + +/** + * BOSS::ReconfigureTask service function + * Inputs: + * 0 : Header Code[0x000D0082] + * 1 : u32 unknown value + * 2 : u8 unknown value + * 3 : MappedBufferDesc1(permission = R) + * 4 : buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void ReconfigureTask(Service::Interface* self); + +/** + * BOSS::GetTaskIdList service function + * Inputs: + * 0 : Header Code[0x000E0000] + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + */ +void GetTaskIdList(Service::Interface* self); + +/** + * BOSS::GetStepIdList service function + * Inputs: + * 0 : Header Code[0x000F0042] + * 2 : MappedBufferDesc(permission = R) + * 3 : u32 buff_addr + * + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void GetStepIdList(Service::Interface* self); + +/** + * BOSS::GetNsDataIdList service function + * Inputs: + * 0 : Header Code[0x00100102] + * 1 : u32 unknown1 + * 2 : u32 unknown2 + * 3 : u32 unknown3 + * 4 : u32 unknown4 + * 5 : MappedBufferDesc(permission = W) + * 6 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u16 unknown value + * 3 : u16 unknown value + * 4 : buff_size << 4 | 0xC + * 5 : u32 buff_addr + */ +void GetNsDataIdList(Service::Interface* self); + +/** + * BOSS::GetOwnNsDataIdList service function + * Inputs: + * 0 : Header Code[0x00110102] + * 1 : u32 unknown1 + * 2 : u32 unknown2 + * 3 : u32 unknown3 + * 4 : u32 unknown4 + * 5 : MappedBufferDesc(permission = W) + * 6 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u16 unknown value + * 3 : u16 unknown value + * 4 : buff_size << 4 | 0xC + * 5 : u32 buff_addr + */ +void GetOwnNsDataIdList(Service::Interface* self); + +/** + * BOSS::GetNewDataNsDataIdList service function + * Inputs: + * 0 : Header Code[0x00120102] + * 1 : u32 unknown1 + * 2 : u32 unknown2 + * 3 : u32 unknown3 + * 4 : u32 unknown4 + * 5 : MappedBufferDesc(permission = W) + * 6 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u16 unknown value + * 3 : u16 unknown value + * 4 : buff_size << 4 | 0xC + * 5 : u32 buff_addr + */ +void GetNewDataNsDataIdList(Service::Interface* self); + +/** + * BOSS::GetOwnNewDataNsDataIdList service function + * Inputs: + * 0 : Header Code[0x00130102] + * 1 : u32 unknown1 + * 2 : u32 unknown2 + * 3 : u32 unknown3 + * 4 : u32 unknown4 + * 5 : MappedBufferDesc(permission = W) + * 6 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u16 unknown value + * 3 : u16 unknown value + + */ +void GetOwnNewDataNsDataIdList(Service::Interface* self); + +/** + * BOSS::SendProperty service function + * Inputs: + * 0 : Header Code[0x00140082] + * 1 : u16 unknown value + * 2 : u32 unknown value + * 3 : MappedBufferDesc(permission = R) + * 4 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void SendProperty(Service::Interface* self); + +/** + * BOSS::SendPropertyHandle service function + * Inputs: + * 0 : Header Code[0x00150042] + * 2 : u8 unknown value + * 3 : MappedBufferDesc(permission = R) + * 4 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void SendPropertyHandle(Service::Interface* self); + +/** + * BOSS::ReceiveProperty service function + * Inputs: + * 0 : Header Code[0x00160082] + * 1 : u16 unknown1 + * 2 : u32 buff_size + * 3 : MappedBufferDesc(permission = W) + * 4 : u32 buff addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u32 unknown value + * 3 : u16 unknown value + * 4 : buff_size << 4 | 0xC + * 5 : u32 buff_addr + */ +void ReceiveProperty(Service::Interface* self); + +/** + * BOSS::UpdateTaskInterval service function + * Inputs: + * 0 : Header Code[0x00170082] + * 1 : u32 unknown value + * 2 : u8 unknown value + * 3 : MappedBufferDesc1(permission = R) + * 4 : buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void UpdateTaskInterval(Service::Interface* self); + +/** + * BOSS::UpdateTaskCount service function + * Inputs: + * 0 : Header Code[0x00180082] + * 1 : u32 buff_size + * 2 : u32 unknown2 + * 3 : MappedBufferDesc(permission = R) + * 4 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void UpdateTaskCount(Service::Interface* self); + +/** + * BOSS::GetTaskInterval service function + * Inputs: + * 0 : Header Code[0x00190042] + * 1 : u32 unknown value + * 2 : MappedBufferDesc(permission = R) + * 3 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u32 unknown value + * 3 : buff_size << 4 | 0xA + * 4 : u32 buff_addr + */ +void GetTaskInterval(Service::Interface* self); + +/** + * BOSS::GetTaskCount service function + * Inputs: + * 0 : Header Code[0x001A0042] + * 1 : u32 unknown value + * 2 : MappedBufferDesc(permission = R) + * 3 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u32 unknown value + * 3 : buff_size << 4 | 0xA + * 4 : u32 buff_addr + */ +void GetTaskCount(Service::Interface* self); + +/** + * BOSS::GetTaskServiceStatus service function + * Inputs: + * 0 : Header Code[0x001B0042] + * 1 : u32 unknown value + * 2 : MappedBufferDesc(permission = R) + * 3 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u8 unknown value + * 3 : buff_size << 4 | 0xA + * 4 : u32 buff_addr + */ +void GetTaskServiceStatus(Service::Interface* self); + +/** + * BOSS::StartTask service function + * Inputs: + * 0 : Header Code[0x001C0042] + * 1 : u32 unknown value + * 2 : MappedBufferDesc(permission = R) + * 3 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void StartTask(Service::Interface* self); + +/** + * BOSS::StartTaskImmediate service function + * Inputs: + * 0 : Header Code[0x001D0042] + * 1 : u32 unknown value + * 2 : MappedBufferDesc(permission = R) + * 3 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void StartTaskImmediate(Service::Interface* self); + +/** + * BOSS::CancelTask service function + * Inputs: + * 0 : Header Code[0x001E0042] + * 1 : u32 unknown value + * 2 : MappedBufferDesc(permission = R) + * 3 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void CancelTask(Service::Interface* self); + +/** + * BOSS::GetTaskFinishHandle service function + * Inputs: + * 0 : Header Code[0x001F0000] + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : 0 + * 3 : Task Finish Handle + */ +void GetTaskFinishHandle(Service::Interface* self); + +/** + * BOSS::GetTaskState service function + * Inputs: + * 0 : Header Code[0x00200082] + * 1 : u32 buff_size + * 2 : u8 unknown value + * 3 : MappedBufferDesc(permission = R) + * 4 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u8 unknown value + * 3 : u32 unknown value + * 4 : u8 unknown value + * 5 : buff_size << 4 | 0xA + * 6 : u32 buff_addr + */ +void GetTaskState(Service::Interface* self); + +/** + * BOSS::GetTaskResult service function + * Inputs: + * 0 : Header Code[0x00210042] + * 1 : u32 unknown value + * 2 : MappedBufferDesc(permission = R) + * 3 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u8 unknown value + * 3 : u32 unknown value + * 4 : u8 unknown value + * 5 : buff_size << 4 | 0xA + * 6 : u32 buff_addr + */ +void GetTaskResult(Service::Interface* self); + +/** + * BOSS::GetTaskCommErrorCode service function + * Inputs: + * 0 : Header Code[0x00220042] + * 1 : u32 unknown value + * 2 : MappedBufferDesc(permission = R) + * 3 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u32 unknown value + * 3 : u32 unknown value + * 4 : u8 unknown value + * 5 : buff_size << 4 | 0xA + * 6 : u32 buff_addr + */ +void GetTaskCommErrorCode(Service::Interface* self); + +/** + * BOSS::GetTaskStatus service function + * Inputs: + * 0 : Header Code[0x002300C2] + * 1 : u32 unknown value + * 2 : u8 unknown value + * 3 : u8 unknown value + * 4 : MappedBufferDesc(permission = R) + * 5 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u8 unknown value + * 3 : buff_size << 4 | 0xA + * 4 : u32 buff_addr + */ +void GetTaskStatus(Service::Interface* self); + +/** + * BOSS::GetTaskError service function + * Inputs: + * 0 : Header Code[0x00240082] + * 1 : u32 unknown value + * 2 : u8 unknown value + * 3 : MappedBufferDesc(permission = R) + * 4 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u8 unknown value + * 3 : buff_size << 4 | 0xA + * 4 : u32 buff_addr + */ +void GetTaskError(Service::Interface* self); + +/** + * BOSS::GetTaskInfo service function + * Inputs: + * 0 : Header Code[0x00250082] + * 1 : u32 unknown value + * 2 : u8 unknown value + * 3 : MappedBufferDesc(permission = R) + * 4 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void GetTaskInfo(Service::Interface* self); + +/** + * BOSS::DeleteNsData service function + * Inputs: + * 0 : Header Code[0x00260040] + * 1 : u32 unknown value + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + */ +void DeleteNsData(Service::Interface* self); + +/** + * BOSS::GetNsDataHeaderInfo service function + * Inputs: + * 0 : Header Code[0x002700C2] + * 1 : u32 unknown value + * 2 : u8 unknown value + * 3 : u32 unknown value + * 4 : MappedBufferDesc(permission = W) + * 5 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xC + * 3 : u32 buff_addr + */ +void GetNsDataHeaderInfo(Service::Interface* self); + +/** + * BOSS::ReadNsData service function + * Inputs: + * 0 : Header Code[0x00280102] + * 1 : u32 unknown value + * 2 : u32 unknown value + * 3 : u32 unknown value + * 4 : u32 unknown value + * 5 : MappedBufferDesc(permission = W) + * 6 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u32 unknown value + * 3 : u32 unknown value + * 4 : buff_size << 4 | 0xC + * 5 : u32 buff_addr + */ +void ReadNsData(Service::Interface* self); + +/** + * BOSS::SetNsDataAdditionalInfo service function + * Inputs: + * 0 : Header Code[0x00290080] + * 1 : u32 unknown value + * 2 : u32 unknown value + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + */ +void SetNsDataAdditionalInfo(Service::Interface* self); + +/** + * BOSS::GetNsDataAdditionalInfo service function + * Inputs: + * 0 : Header Code[0x002A0040] + * 1 : u32 unknown value + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u32 unknown value + */ +void GetNsDataAdditionalInfo(Service::Interface* self); + +/** + * BOSS::SetNsDataNewFlag service function + * Inputs: + * 0 : Header Code[0x002B0080] + * 1 : u32 unknown value + * 2 : u8 flag + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + */ +void SetNsDataNewFlag(Service::Interface* self); + +/** + * BOSS::GetNsDataNewFlag service function + * Inputs: + * 0 : Header Code[0x002C0040] + * 1 : u32 unknown value + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u8 flag + */ +void GetNsDataNewFlag(Service::Interface* self); + +/** + * BOSS::GetNsDataLastUpdate service function + * Inputs: + * 0 : Header Code[0x002D0040] + * 1 : u32 unknown value + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u32 unknown value + * 3 : u32 unknown value + */ +void GetNsDataLastUpdate(Service::Interface* self); + +/** + * BOSS::GetErrorCode service function + * Inputs: + * 0 : Header Code[0x002E0040] + * 1 : u8 unknown value + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u32 unknown value + */ +void GetErrorCode(Service::Interface* self); + +/** + * BOSS::RegisterStorageEntry service function + * Inputs: + * 0 : Header Code[0x002F0140] + * 1 : u32 unknown value + * 2 : u32 unknown value + * 3 : u32 unknown value + * 4 : u16 unknown value + * 5 : u8 unknown value + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + */ +void RegisterStorageEntry(Service::Interface* self); + +/** + * BOSS::GetStorageEntryInfo service function + * Inputs: + * 0 : Header Code[0x00300000] + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u32 unknown value + * 3 : u16 unknown value + */ +void GetStorageEntryInfo(Service::Interface* self); + +/** + * BOSS::SetStorageOption service function + * Inputs: + * 0 : Header Code[0x00310100] + * 1 : u8 unknown value + * 2 : u32 unknown value + * 3 : u16 unknown value + * 4 : u16 unknown value + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + */ +void SetStorageOption(Service::Interface* self); + +/** + * BOSS::GetStorageOption service function + * Inputs: + * 0 : Header Code[0x00320000] + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u8 unknown value + * 3 : u32 unknown value + * 4 : u16 unknown value + * 5 : u16 unknown value + */ +void GetStorageOption(Service::Interface* self); + +/** + * BOSS::StartBgImmediate service function + * Inputs: + * 0 : Header Code[0x00330042] + * 1 : u32 unknown value + * 2 : MappedBufferDesc(permission = R) + * 3 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void StartBgImmediate(Service::Interface* self); + +/** + * BOSS::GetTaskActivePriority service function + * Inputs: + * 0 : Header Code[0x00340042] + * 1 : u32 unknown value + * 2 : MappedBufferDesc(permission = R) + * 3 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : u8 unknown value + * 3 : buff_size << 4 | 0xA + * 4 : u32 buff_addr + */ +void GetTaskActivePriority(Service::Interface* self); + +/** + * BOSS::RegisterImmediateTask service function + * Inputs: + * 0 : Header Code[0x003500C2] + * 1 : u32 unknown value + * 2 : u8 unknown value + * 3 : u8 unknown value + * 4 : MappedBufferDesc(permission = R) + * 5 : u32 buff_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff_size << 4 | 0xA + * 3 : u32 buff_addr + */ +void RegisterImmediateTask(Service::Interface* self); + +/** + * BOSS::SetTaskQuery service function + * Inputs: + * 0 : Header Code[0x00360084] + * 1 : u32 unknown value + * 2 : u32 unknown value + * 3 : MappedBufferDesc1(permission = R) + * 4 : u32 buff1_addr + * 5 : MappedBufferDesc2(permission = R) + * 6 : u32 buff2_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff1_size << 4 | 0xA + * 3 : u32 buff1_addr + * 4 : buff2_size << 4 | 0xA + * 5 : u32 buff2_addr + */ +void SetTaskQuery(Service::Interface* self); + +/** + * BOSS::GetTaskQuery service function + * Inputs: + * 0 : Header Code[0x00370084] + * 1 : u32 unknown value + * 2 : u32 unknown value + * 3 : MappedBufferDesc1(permission = R) + * 4 : u32 buff1_addr + * 5 : MappedBufferDesc2(permission = W) + * 6 : u32 buff2_addr + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : buff1_size << 4 | 0xA + * 3 : u32 buff1_addr + * 4 : buff2_size << 4 | 0xC + * 5 : u32 buff2_addr + */ +void GetTaskQuery(Service::Interface* self); + /// Initialize BOSS service(s) void Init(); diff --git a/src/core/hle/service/boss/boss_u.cpp b/src/core/hle/service/boss/boss_u.cpp index 6affa23b1..371d702e0 100644 --- a/src/core/hle/service/boss/boss_u.cpp +++ b/src/core/hle/service/boss/boss_u.cpp @@ -2,16 +2,68 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include "core/hle/service/boss/boss.h" #include "core/hle/service/boss/boss_u.h" namespace Service { namespace BOSS { const Interface::FunctionInfo FunctionTable[] = { - {0x00020100, nullptr, "GetStorageInfo"}, - {0x000C0082, nullptr, "UnregisterTask"}, - {0x001E0042, nullptr, "CancelTask"}, - {0x00330042, nullptr, "StartBgImmediate"}, + {0x00010082, InitializeSession, "InitializeSession"}, + {0x00020100, RegisterStorage, "RegisterStorage"}, + {0x00030000, UnregisterStorage, "UnregisterStorage"}, + {0x00040000, GetStorageInfo, "GetStorageInfo"}, + {0x00050042, RegisterPrivateRootCa, "RegisterPrivateRootCa"}, + {0x00060084, RegisterPrivateClientCert, "RegisterPrivateClientCert"}, + {0x00070000, GetNewArrivalFlag, "GetNewArrivalFlag"}, + {0x00080002, RegisterNewArrivalEvent, "RegisterNewArrivalEvent"}, + {0x00090040, SetOptoutFlag, "SetOptoutFlag"}, + {0x000A0000, GetOptoutFlag, "GetOptoutFlag"}, + {0x000B00C2, RegisterTask, "RegisterTask"}, + {0x000C0082, UnregisterTask, "UnregisterTask"}, + {0x000D0082, ReconfigureTask, "ReconfigureTask"}, + {0x000E0000, GetTaskIdList, "GetTaskIdList"}, + {0x000F0042, GetStepIdList, "GetStepIdList"}, + {0x00100102, GetNsDataIdList, "GetNsDataIdList"}, + {0x00110102, GetOwnNsDataIdList, "GetOwnNsDataIdList"}, + {0x00120102, GetNewDataNsDataIdList, "GetNewDataNsDataIdList"}, + {0x00130102, GetOwnNewDataNsDataIdList, "GetOwnNewDataNsDataIdList"}, + {0x00140082, SendProperty, "SendProperty"}, + {0x00150042, SendPropertyHandle, "SendPropertyHandle"}, + {0x00160082, ReceiveProperty, "ReceiveProperty"}, + {0x00170082, UpdateTaskInterval, "UpdateTaskInterval"}, + {0x00180082, UpdateTaskCount, "UpdateTaskCount"}, + {0x00190042, GetTaskInterval, "GetTaskInterval"}, + {0x001A0042, GetTaskCount, "GetTaskCount"}, + {0x001B0042, GetTaskServiceStatus, "GetTaskServiceStatus"}, + {0x001C0042, StartTask, "StartTask"}, + {0x001D0042, StartTaskImmediate, "StartTaskImmediate"}, + {0x001E0042, CancelTask, "CancelTask"}, + {0x001F0000, GetTaskFinishHandle, "GetTaskFinishHandle"}, + {0x00200082, GetTaskState, "GetTaskState"}, + {0x00210042, GetTaskResult, "GetTaskResult"}, + {0x00220042, GetTaskCommErrorCode, "GetTaskCommErrorCode"}, + {0x002300C2, GetTaskStatus, "GetTaskStatus"}, + {0x00240082, GetTaskError, "GetTaskError"}, + {0x00250082, GetTaskInfo, "GetTaskInfo"}, + {0x00260040, DeleteNsData, "DeleteNsData"}, + {0x002700C2, GetNsDataHeaderInfo, "GetNsDataHeaderInfo"}, + {0x00280102, ReadNsData, "ReadNsData"}, + {0x00290080, SetNsDataAdditionalInfo, "SetNsDataAdditionalInfo"}, + {0x002A0040, GetNsDataAdditionalInfo, "GetNsDataAdditionalInfo"}, + {0x002B0080, SetNsDataNewFlag, "SetNsDataNewFlag"}, + {0x002C0040, GetNsDataNewFlag, "GetNsDataNewFlag"}, + {0x002D0040, GetNsDataLastUpdate, "GetNsDataLastUpdate"}, + {0x002E0040, GetErrorCode, "GetErrorCode"}, + {0x002F0140, RegisterStorageEntry, "RegisterStorageEntry"}, + {0x00300000, GetStorageEntryInfo, "GetStorageEntryInfo"}, + {0x00310100, SetStorageOption, "SetStorageOption"}, + {0x00320000, GetStorageOption, "GetStorageOption"}, + {0x00330042, StartBgImmediate, "StartBgImmediate"}, + {0x00340042, GetTaskActivePriority, "GetTaskActivePriority"}, + {0x003500C2, RegisterImmediateTask, "RegisterImmediateTask"}, + {0x00360084, SetTaskQuery, "SetTaskQuery"}, + {0x00370084, GetTaskQuery, "GetTaskQuery"}, }; BOSS_U_Interface::BOSS_U_Interface() { |