summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/audio_core/hle/dsp.cpp4
-rw-r--r--src/audio_core/hle/pipe.cpp4
-rw-r--r--src/citra/CMakeLists.txt2
-rw-r--r--src/citra_qt/CMakeLists.txt2
-rw-r--r--src/citra_qt/debugger/graphics_vertex_shader.cpp4
-rw-r--r--src/citra_qt/debugger/registers.cpp2
-rw-r--r--src/citra_qt/game_list_p.h2
-rw-r--r--src/common/file_util.cpp25
-rw-r--r--src/common/hash.cpp2
-rw-r--r--src/common/logging/backend.cpp1
-rw-r--r--src/common/logging/log.h1
-rw-r--r--src/common/logging/text_formatter.h2
-rw-r--r--src/common/swap.h7
-rw-r--r--src/common/thread.cpp12
-rw-r--r--src/common/vector_math.h3
-rw-r--r--src/common/x64/cpu_detect.cpp8
-rw-r--r--src/core/gdbstub/gdbstub.cpp2
-rw-r--r--src/core/hle/kernel/memory.cpp2
-rw-r--r--src/core/hle/kernel/thread.cpp2
-rw-r--r--src/core/hle/service/boss/boss.cpp967
-rw-r--r--src/core/hle/service/boss/boss.h785
-rw-r--r--src/core/hle/service/boss/boss_u.cpp60
-rw-r--r--src/core/hle/service/frd/frd.cpp2
-rw-r--r--src/core/hle/service/ldr_ro/cro_helper.cpp2
-rw-r--r--src/core/hle/service/soc_u.cpp8
-rw-r--r--src/core/loader/ncch.cpp2
-rw-r--r--src/core/loader/ncch.h2
-rw-r--r--src/video_core/command_processor.cpp2
-rw-r--r--src/video_core/shader/shader.cpp4
-rw-r--r--src/video_core/shader/shader_interpreter.cpp74
30 files changed, 1910 insertions, 85 deletions
diff --git a/src/audio_core/hle/dsp.cpp b/src/audio_core/hle/dsp.cpp
index 58690970a..31421fdc6 100644
--- a/src/audio_core/hle/dsp.cpp
+++ b/src/audio_core/hle/dsp.cpp
@@ -23,12 +23,12 @@ static size_t CurrentRegionIndex() {
// This function only returns a 0 or 1.
if (g_regions[0].frame_counter == 0xFFFFu && g_regions[1].frame_counter != 0xFFFEu) {
- // Wraparound has occured.
+ // Wraparound has occurred.
return 1;
}
if (g_regions[1].frame_counter == 0xFFFFu && g_regions[0].frame_counter != 0xFFFEu) {
- // Wraparound has occured.
+ // Wraparound has occurred.
return 0;
}
diff --git a/src/audio_core/hle/pipe.cpp b/src/audio_core/hle/pipe.cpp
index b472c81d8..bc69acbc2 100644
--- a/src/audio_core/hle/pipe.cpp
+++ b/src/audio_core/hle/pipe.cpp
@@ -117,7 +117,7 @@ void PipeWrite(DspPipe pipe_number, const std::vector<u8>& buffer) {
}
enum class StateChange {
- Initalize = 0,
+ Initialize = 0,
Shutdown = 1,
Wakeup = 2,
Sleep = 3,
@@ -130,7 +130,7 @@ void PipeWrite(DspPipe pipe_number, const std::vector<u8>& buffer) {
// sleeping and reset it back after wakeup on behalf of the DSP.
switch (static_cast<StateChange>(buffer[0])) {
- case StateChange::Initalize:
+ case StateChange::Initialize:
LOG_INFO(Audio_DSP, "Application has requested initialization of DSP hardware");
ResetPipes();
AudioPipeWriteStructAddresses();
diff --git a/src/citra/CMakeLists.txt b/src/citra/CMakeLists.txt
index 43fa06b4e..f9c488a1a 100644
--- a/src/citra/CMakeLists.txt
+++ b/src/citra/CMakeLists.txt
@@ -23,7 +23,7 @@ if (MSVC)
endif()
target_link_libraries(citra ${PLATFORM_LIBRARIES} Threads::Threads)
-if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|FreeBSD|OpenBSD|NetBSD")
+if(UNIX AND NOT APPLE)
install(TARGETS citra RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
endif()
diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt
index b3c01ddd8..384875450 100644
--- a/src/citra_qt/CMakeLists.txt
+++ b/src/citra_qt/CMakeLists.txt
@@ -104,7 +104,7 @@ target_link_libraries(citra-qt core video_core audio_core common qhexedit)
target_link_libraries(citra-qt ${OPENGL_gl_LIBRARY} ${CITRA_QT_LIBS})
target_link_libraries(citra-qt ${PLATFORM_LIBRARIES} Threads::Threads)
-if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|FreeBSD|OpenBSD|NetBSD")
+if(UNIX AND NOT APPLE)
install(TARGETS citra-qt RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
endif()
diff --git a/src/citra_qt/debugger/graphics_vertex_shader.cpp b/src/citra_qt/debugger/graphics_vertex_shader.cpp
index 0b4320da5..96b40db1e 100644
--- a/src/citra_qt/debugger/graphics_vertex_shader.cpp
+++ b/src/citra_qt/debugger/graphics_vertex_shader.cpp
@@ -424,7 +424,7 @@ GraphicsVertexShaderWidget::GraphicsVertexShaderWidget(
// Create an HBoxLayout to store the widgets used to specify a particular attribute
// and store it in a QWidget to allow for easy hiding and unhiding.
auto row_layout = new QHBoxLayout;
- // Remove unecessary padding between rows
+ // Remove unnecessary padding between rows
row_layout->setContentsMargins(0, 0, 0, 0);
row_layout->addWidget(new QLabel(tr("Attribute %1").arg(i, 2)));
@@ -590,7 +590,7 @@ void GraphicsVertexShaderWidget::OnCycleIndexChanged(int index) {
.arg(record.dest_out.w.ToFloat32());
if (record.mask & Pica::Shader::DebugDataRecord::ADDR_REG_OUT)
- text += tr("Addres Registers: %1, %2\n")
+ text += tr("Address Registers: %1, %2\n")
.arg(record.address_registers[0])
.arg(record.address_registers[1]);
if (record.mask & Pica::Shader::DebugDataRecord::CMP_RESULT)
diff --git a/src/citra_qt/debugger/registers.cpp b/src/citra_qt/debugger/registers.cpp
index 0b644432f..4c529d3c3 100644
--- a/src/citra_qt/debugger/registers.cpp
+++ b/src/citra_qt/debugger/registers.cpp
@@ -136,7 +136,7 @@ void RegistersWidget::UpdateCPSRValues() {
cpsr->child(2)->setText(1, QString::number((cpsr_val >> 6) & 1)); // F - FIQ disable
cpsr->child(3)->setText(1, QString::number((cpsr_val >> 7) & 1)); // I - IRQ disable
cpsr->child(4)->setText(1, QString::number((cpsr_val >> 8) & 1)); // A - Imprecise abort
- cpsr->child(5)->setText(1, QString::number((cpsr_val >> 9) & 1)); // E - Data endianess
+ cpsr->child(5)->setText(1, QString::number((cpsr_val >> 9) & 1)); // E - Data endianness
cpsr->child(6)->setText(1,
QString::number((cpsr_val >> 10) & 0x3F)); // IT - If-Then state (DNM)
cpsr->child(7)->setText(1,
diff --git a/src/citra_qt/game_list_p.h b/src/citra_qt/game_list_p.h
index 60ab4cf02..5ca3fe991 100644
--- a/src/citra_qt/game_list_p.h
+++ b/src/citra_qt/game_list_p.h
@@ -64,7 +64,7 @@ public:
* A specialization of GameListItem for path values.
* This class ensures that for every full path value it holds, a correct string representation
* of just the filename (with no extension) will be displayed to the user.
- * If this class recieves valid SMDH data, it will also display game icons and titles.
+ * If this class receives valid SMDH data, it will also display game icons and titles.
*/
class GameListItemPath : public GameListItem {
diff --git a/src/common/file_util.cpp b/src/common/file_util.cpp
index 14cbcac6b..407ed047a 100644
--- a/src/common/file_util.cpp
+++ b/src/common/file_util.cpp
@@ -23,8 +23,8 @@
#define fseeko _fseeki64
#define ftello _ftelli64
#define atoll _atoi64
-#define stat64 _stat64
-#define fstat64 _fstat64
+#define stat _stat64
+#define fstat _fstat64
#define fileno _fileno
#else
#ifdef __APPLE__
@@ -52,11 +52,6 @@
#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR)
#endif
-#ifdef BSD4_4
-#define stat64 stat
-#define fstat64 fstat
-#endif
-
// This namespace has various generic functions related to files and paths.
// The code still needs a ton of cleanup.
// REMEMBER: strdup considered harmful!
@@ -76,7 +71,7 @@ static void StripTailDirSlashes(std::string& fname) {
// Returns true if file filename exists
bool Exists(const std::string& filename) {
- struct stat64 file_info;
+ struct stat file_info;
std::string copy(filename);
StripTailDirSlashes(copy);
@@ -88,7 +83,7 @@ bool Exists(const std::string& filename) {
int result = _wstat64(Common::UTF8ToUTF16W(copy).c_str(), &file_info);
#else
- int result = stat64(copy.c_str(), &file_info);
+ int result = stat(copy.c_str(), &file_info);
#endif
return (result == 0);
@@ -96,7 +91,7 @@ bool Exists(const std::string& filename) {
// Returns true if filename is a directory
bool IsDirectory(const std::string& filename) {
- struct stat64 file_info;
+ struct stat file_info;
std::string copy(filename);
StripTailDirSlashes(copy);
@@ -108,7 +103,7 @@ bool IsDirectory(const std::string& filename) {
int result = _wstat64(Common::UTF8ToUTF16W(copy).c_str(), &file_info);
#else
- int result = stat64(copy.c_str(), &file_info);
+ int result = stat(copy.c_str(), &file_info);
#endif
if (result < 0) {
@@ -339,11 +334,11 @@ u64 GetSize(const std::string& filename) {
return 0;
}
- struct stat64 buf;
+ struct stat buf;
#ifdef _WIN32
if (_wstat64(Common::UTF8ToUTF16W(filename).c_str(), &buf) == 0)
#else
- if (stat64(filename.c_str(), &buf) == 0)
+ if (stat(filename.c_str(), &buf) == 0)
#endif
{
LOG_TRACE(Common_Filesystem, "%s: %lld", filename.c_str(), (long long)buf.st_size);
@@ -356,8 +351,8 @@ u64 GetSize(const std::string& filename) {
// Overloaded GetSize, accepts file descriptor
u64 GetSize(const int fd) {
- struct stat64 buf;
- if (fstat64(fd, &buf) != 0) {
+ struct stat buf;
+ if (fstat(fd, &buf) != 0) {
LOG_ERROR(Common_Filesystem, "GetSize: stat failed %i: %s", fd, GetLastErrorMsg());
return 0;
}
diff --git a/src/common/hash.cpp b/src/common/hash.cpp
index 5aa5118eb..2309320bb 100644
--- a/src/common/hash.cpp
+++ b/src/common/hash.cpp
@@ -31,7 +31,7 @@ static FORCE_INLINE u64 fmix64(u64 k) {
return k;
}
-// This is the 128-bit variant of the MurmurHash3 hash function that is targetted for 64-bit
+// This is the 128-bit variant of the MurmurHash3 hash function that is targeted for 64-bit
// platforms (MurmurHash3_x64_128). It was taken from:
// https://code.google.com/p/smhasher/source/browse/trunk/MurmurHash3.cpp
void MurmurHash3_128(const void* key, int len, u32 seed, void* out) {
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/common/logging/text_formatter.h b/src/common/logging/text_formatter.h
index 0da102bc6..749268310 100644
--- a/src/common/logging/text_formatter.h
+++ b/src/common/logging/text_formatter.h
@@ -17,7 +17,7 @@ struct Entry;
*
* @param path The input file path as a null-terminated string
* @param root The name of the root source directory as a null-terminated string. Path up to and
- * including the last occurence of this name will be stripped
+ * including the last occurrence of this name will be stripped
* @return A pointer to the same string passed as `path`, but starting at the trimmed portion
*/
const char* TrimSourcePath(const char* path, const char* root = "src");
diff --git a/src/common/swap.h b/src/common/swap.h
index e241c9f73..d94cbe6b2 100644
--- a/src/common/swap.h
+++ b/src/common/swap.h
@@ -21,7 +21,8 @@
#include <cstdlib>
#elif defined(__linux__)
#include <byteswap.h>
-#elif defined(__FreeBSD__)
+#elif defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || \
+ defined(__NetBSD__) || defined(__OpenBSD__)
#include <sys/endian.h>
#endif
#include <cstring>
@@ -101,7 +102,9 @@ inline __attribute__((always_inline)) u32 swap32(u32 _data) {
inline __attribute__((always_inline)) u64 swap64(u64 _data) {
return __builtin_bswap64(_data);
}
-#elif __FreeBSD__
+#elif defined(__Bitrig__) || defined(__OpenBSD__)
+// swap16, swap32, swap64 are left as is
+#elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__)
inline u16 swap16(u16 _data) {
return bswap16(_data);
}
diff --git a/src/common/thread.cpp b/src/common/thread.cpp
index 6e7b39b9a..9bb2f4e1d 100644
--- a/src/common/thread.cpp
+++ b/src/common/thread.cpp
@@ -8,7 +8,7 @@
#elif defined(_WIN32)
#include <Windows.h>
#else
-#if defined(BSD4_4) || defined(__OpenBSD__)
+#if defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__)
#include <pthread_np.h>
#else
#include <pthread.h>
@@ -19,6 +19,10 @@
#include <unistd.h>
#endif
+#ifdef __FreeBSD__
+#define cpu_set_t cpuset_t
+#endif
+
namespace Common {
int CurrentThreadId() {
@@ -86,7 +90,7 @@ void SetCurrentThreadName(const char* szThreadName) {
void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask) {
#ifdef __APPLE__
thread_policy_set(pthread_mach_thread_np(thread), THREAD_AFFINITY_POLICY, (integer_t*)&mask, 1);
-#elif (defined __linux__ || defined BSD4_4) && !(defined ANDROID)
+#elif (defined __linux__ || defined __FreeBSD__) && !(defined ANDROID)
cpu_set_t cpu_set;
CPU_ZERO(&cpu_set);
@@ -117,8 +121,10 @@ void SwitchCurrentThread() {
void SetCurrentThreadName(const char* szThreadName) {
#ifdef __APPLE__
pthread_setname_np(szThreadName);
-#elif defined(__OpenBSD__)
+#elif defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__)
pthread_set_name_np(pthread_self(), szThreadName);
+#elif defined(__NetBSD__)
+ pthread_setname_np(pthread_self(), "%s", (void*)szThreadName);
#else
pthread_setname_np(pthread_self(), szThreadName);
#endif
diff --git a/src/common/vector_math.h b/src/common/vector_math.h
index 2d56f168c..a57d86d88 100644
--- a/src/common/vector_math.h
+++ b/src/common/vector_math.h
@@ -60,7 +60,6 @@ public:
}
Vec2() = default;
- Vec2(const T a[2]) : x(a[0]), y(a[1]) {}
Vec2(const T& _x, const T& _y) : x(_x), y(_y) {}
template <typename T2>
@@ -199,7 +198,6 @@ public:
}
Vec3() = default;
- Vec3(const T a[3]) : x(a[0]), y(a[1]), z(a[2]) {}
Vec3(const T& _x, const T& _y, const T& _z) : x(_x), y(_y), z(_z) {}
template <typename T2>
@@ -405,7 +403,6 @@ public:
}
Vec4() = default;
- Vec4(const T a[4]) : x(a[0]), y(a[1]), z(a[2]), w(a[3]) {}
Vec4(const T& _x, const T& _y, const T& _z, const T& _w) : x(_x), y(_y), z(_z), w(_w) {}
template <typename T2>
diff --git a/src/common/x64/cpu_detect.cpp b/src/common/x64/cpu_detect.cpp
index 6ddf9b70c..370ae2c80 100644
--- a/src/common/x64/cpu_detect.cpp
+++ b/src/common/x64/cpu_detect.cpp
@@ -12,13 +12,15 @@ namespace Common {
#ifndef _MSC_VER
-#ifdef __FreeBSD__
-#include <machine/cpufunc.h>
+#if defined(__DragonFly__) || defined(__FreeBSD__)
+// clang-format off
#include <sys/types.h>
+#include <machine/cpufunc.h>
+// clang-format on
#endif
static inline void __cpuidex(int info[4], int function_id, int subfunction_id) {
-#ifdef __FreeBSD__
+#if defined(__DragonFly__) || defined(__FreeBSD__)
// Despite the name, this is just do_cpuid() with ECX as second input.
cpuid_count((u_int)function_id, (u_int)subfunction_id, (u_int*)info);
#else
diff --git a/src/core/gdbstub/gdbstub.cpp b/src/core/gdbstub/gdbstub.cpp
index 7fc72d801..ceb993ea1 100644
--- a/src/core/gdbstub/gdbstub.cpp
+++ b/src/core/gdbstub/gdbstub.cpp
@@ -413,7 +413,7 @@ static void HandleQuery() {
if (strcmp(query, "TStatus") == 0) {
SendReply("T0");
- } else if (strncmp(query, "Supported:", strlen("Supported:")) == 0) {
+ } else if (strncmp(query, "Supported", strlen("Supported")) == 0) {
// PacketSize needs to be large enough for target xml
SendReply("PacketSize=800;qXfer:features:read+");
} else if (strncmp(query, "Xfer:features:read:target.xml:",
diff --git a/src/core/hle/kernel/memory.cpp b/src/core/hle/kernel/memory.cpp
index e65fd5c41..33c165197 100644
--- a/src/core/hle/kernel/memory.cpp
+++ b/src/core/hle/kernel/memory.cpp
@@ -23,7 +23,7 @@ namespace Kernel {
static MemoryRegionInfo memory_regions[3];
-/// Size of the APPLICATION, SYSTEM and BASE memory regions (respectively) for each sytem
+/// Size of the APPLICATION, SYSTEM and BASE memory regions (respectively) for each system
/// memory configuration type.
static const u32 memory_region_sizes[8][3] = {
// Old 3DS layouts
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index c4eeeee56..84d6d24c6 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -204,7 +204,7 @@ static std::tuple<u32*, u32*> GetWaitSynchTimeoutParameterRegister(Thread* threa
}
/**
- * Updates the WaitSynchronization timeout paramter according to the difference
+ * Updates the WaitSynchronization timeout parameter according to the difference
* between ticks of the last WaitSynchronization call and the incoming one.
* @param timeout_low a pointer to the register for the low part of the timeout parameter
* @param timeout_high a pointer to the register for the high part of the timeout parameter
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() {
diff --git a/src/core/hle/service/frd/frd.cpp b/src/core/hle/service/frd/frd.cpp
index fa5080535..1d16f8732 100644
--- a/src/core/hle/service/frd/frd.cpp
+++ b/src/core/hle/service/frd/frd.cpp
@@ -87,7 +87,7 @@ void GetMyFriendKey(Service::Interface* self) {
u32* cmd_buff = Kernel::GetCommandBuffer();
cmd_buff[1] = RESULT_SUCCESS.raw; // No error
- Memory::WriteBlock(cmd_buff[2], &my_friend_key, sizeof(FriendKey));
+ std::memcpy(&cmd_buff[2], &my_friend_key, sizeof(FriendKey));
LOG_WARNING(Service_FRD, "(STUBBED) called");
}
diff --git a/src/core/hle/service/ldr_ro/cro_helper.cpp b/src/core/hle/service/ldr_ro/cro_helper.cpp
index b7d250312..4f0aa77eb 100644
--- a/src/core/hle/service/ldr_ro/cro_helper.cpp
+++ b/src/core/hle/service/ldr_ro/cro_helper.cpp
@@ -1227,7 +1227,7 @@ ResultCode CROHelper::Link(VAddr crs_address, bool link_on_load_bug_fix) {
// The bug itself is:
// If a relocation target is in .data segment, it will relocate to the
// user-specified buffer. But if this is linking during loading,
- // the .data segment hasn't been tranfer from CRO to the buffer,
+ // the .data segment hasn't been transfer from CRO to the buffer,
// thus the relocation will be overwritten by data transfer.
// To fix this bug, we need temporarily restore the old .data segment
// offset and apply imported symbols.
diff --git a/src/core/hle/service/soc_u.cpp b/src/core/hle/service/soc_u.cpp
index 4279b67fb..46b75db25 100644
--- a/src/core/hle/service/soc_u.cpp
+++ b/src/core/hle/service/soc_u.cpp
@@ -104,7 +104,9 @@ static const std::unordered_map<int, int> error_map = {{
{ERRNO(ENETUNREACH), 40},
{ENFILE, 41},
{ERRNO(ENOBUFS), 42},
+#ifdef ENODATA
{ENODATA, 43},
+#endif
{ENODEV, 44},
{ENOENT, 45},
{ENOEXEC, 46},
@@ -114,8 +116,12 @@ static const std::unordered_map<int, int> error_map = {{
{ENOMSG, 50},
{ERRNO(ENOPROTOOPT), 51},
{ENOSPC, 52},
+#ifdef ENOSR
{ENOSR, 53},
+#endif
+#ifdef ENOSTR
{ENOSTR, 54},
+#endif
{ENOSYS, 55},
{ERRNO(ENOTCONN), 56},
{ENOTDIR, 57},
@@ -136,7 +142,9 @@ static const std::unordered_map<int, int> error_map = {{
{ESPIPE, 72},
{ESRCH, 73},
{ERRNO(ESTALE), 74},
+#ifdef ETIME
{ETIME, 75},
+#endif
{ERRNO(ETIMEDOUT), 76},
}};
diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp
index 2e4510857..fadd7b16b 100644
--- a/src/core/loader/ncch.cpp
+++ b/src/core/loader/ncch.cpp
@@ -163,7 +163,7 @@ ResultStatus AppLoader_NCCH::LoadExec() {
Kernel::g_current_process->ideal_processor =
exheader_header.arm11_system_local_caps.ideal_processor;
- // Copy data while converting endianess
+ // Copy data while converting endianness
std::array<u32, ARRAY_SIZE(exheader_header.arm11_kernel_caps.descriptors)> kernel_caps;
std::copy_n(exheader_header.arm11_kernel_caps.descriptors, kernel_caps.size(),
begin(kernel_caps));
diff --git a/src/core/loader/ncch.h b/src/core/loader/ncch.h
index 04350d006..f8718d063 100644
--- a/src/core/loader/ncch.h
+++ b/src/core/loader/ncch.h
@@ -11,7 +11,7 @@
#include "core/loader/loader.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
-/// NCCH header (Note: "NCCH" appears to be a publically unknown acronym)
+/// NCCH header (Note: "NCCH" appears to be a publicly unknown acronym)
struct NCCH_Header {
u8 signature[0x100];
diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp
index bb618cacd..fda91e29c 100644
--- a/src/video_core/command_processor.cpp
+++ b/src/video_core/command_processor.cpp
@@ -292,7 +292,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
}
}
- // Retreive vertex from register data
+ // Retrieve vertex from register data
Shader::OutputVertex output_vertex = output_registers.ToVertex(regs.vs);
// Send to renderer
diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp
index 272f3ffe1..3febe739c 100644
--- a/src/video_core/shader/shader.cpp
+++ b/src/video_core/shader/shader.cpp
@@ -146,10 +146,8 @@ DebugData<true> ShaderSetup::ProduceDebugInfo(const InputVertex& input, int num_
state.debug.max_opdesc_id = 0;
// Setup input register table
+ boost::fill(state.registers.input, Math::Vec4<float24>::AssignToAll(float24::Zero()));
const auto& attribute_register_map = config.input_register_map;
- float24 dummy_register;
- boost::fill(state.registers.input, &dummy_register);
-
for (unsigned i = 0; i < num_attributes; i++)
state.registers.input[attribute_register_map.GetRegisterForAttribute(i)] = input.attr[i];
diff --git a/src/video_core/shader/shader_interpreter.cpp b/src/video_core/shader/shader_interpreter.cpp
index 501d00b6b..6abb6761f 100644
--- a/src/video_core/shader/shader_interpreter.cpp
+++ b/src/video_core/shader/shader_interpreter.cpp
@@ -116,32 +116,36 @@ void RunInterpreter(const ShaderSetup& setup, UnitState<Debug>& state, unsigned
: state.address_registers[instr.common.address_register_index - 1];
const float24* src1_ = LookupSourceRegister(instr.common.GetSrc1(is_inverted) +
- (!is_inverted * address_offset));
+ (is_inverted ? 0 : address_offset));
const float24* src2_ = LookupSourceRegister(instr.common.GetSrc2(is_inverted) +
- (is_inverted * address_offset));
+ (is_inverted ? address_offset : 0));
const bool negate_src1 = ((bool)swizzle.negate_src1 != false);
const bool negate_src2 = ((bool)swizzle.negate_src2 != false);
float24 src1[4] = {
- src1_[(int)swizzle.GetSelectorSrc1(0)], src1_[(int)swizzle.GetSelectorSrc1(1)],
- src1_[(int)swizzle.GetSelectorSrc1(2)], src1_[(int)swizzle.GetSelectorSrc1(3)],
+ src1_[(int)swizzle.src1_selector_0.Value()],
+ src1_[(int)swizzle.src1_selector_1.Value()],
+ src1_[(int)swizzle.src1_selector_2.Value()],
+ src1_[(int)swizzle.src1_selector_3.Value()],
};
if (negate_src1) {
- src1[0] = src1[0] * float24::FromFloat32(-1);
- src1[1] = src1[1] * float24::FromFloat32(-1);
- src1[2] = src1[2] * float24::FromFloat32(-1);
- src1[3] = src1[3] * float24::FromFloat32(-1);
+ src1[0] = -src1[0];
+ src1[1] = -src1[1];
+ src1[2] = -src1[2];
+ src1[3] = -src1[3];
}
float24 src2[4] = {
- src2_[(int)swizzle.GetSelectorSrc2(0)], src2_[(int)swizzle.GetSelectorSrc2(1)],
- src2_[(int)swizzle.GetSelectorSrc2(2)], src2_[(int)swizzle.GetSelectorSrc2(3)],
+ src2_[(int)swizzle.src2_selector_0.Value()],
+ src2_[(int)swizzle.src2_selector_1.Value()],
+ src2_[(int)swizzle.src2_selector_2.Value()],
+ src2_[(int)swizzle.src2_selector_3.Value()],
};
if (negate_src2) {
- src2[0] = src2[0] * float24::FromFloat32(-1);
- src2[1] = src2[1] * float24::FromFloat32(-1);
- src2[2] = src2[2] * float24::FromFloat32(-1);
- src2[3] = src2[3] * float24::FromFloat32(-1);
+ src2[0] = -src2[0];
+ src2[1] = -src2[1];
+ src2[2] = -src2[2];
+ src2[3] = -src2[3];
}
float24* dest =
@@ -451,34 +455,40 @@ void RunInterpreter(const ShaderSetup& setup, UnitState<Debug>& state, unsigned
const bool negate_src3 = ((bool)swizzle.negate_src3 != false);
float24 src1[4] = {
- src1_[(int)swizzle.GetSelectorSrc1(0)], src1_[(int)swizzle.GetSelectorSrc1(1)],
- src1_[(int)swizzle.GetSelectorSrc1(2)], src1_[(int)swizzle.GetSelectorSrc1(3)],
+ src1_[(int)swizzle.src1_selector_0.Value()],
+ src1_[(int)swizzle.src1_selector_1.Value()],
+ src1_[(int)swizzle.src1_selector_2.Value()],
+ src1_[(int)swizzle.src1_selector_3.Value()],
};
if (negate_src1) {
- src1[0] = src1[0] * float24::FromFloat32(-1);
- src1[1] = src1[1] * float24::FromFloat32(-1);
- src1[2] = src1[2] * float24::FromFloat32(-1);
- src1[3] = src1[3] * float24::FromFloat32(-1);
+ src1[0] = -src1[0];
+ src1[1] = -src1[1];
+ src1[2] = -src1[2];
+ src1[3] = -src1[3];
}
float24 src2[4] = {
- src2_[(int)swizzle.GetSelectorSrc2(0)], src2_[(int)swizzle.GetSelectorSrc2(1)],
- src2_[(int)swizzle.GetSelectorSrc2(2)], src2_[(int)swizzle.GetSelectorSrc2(3)],
+ src2_[(int)swizzle.src2_selector_0.Value()],
+ src2_[(int)swizzle.src2_selector_1.Value()],
+ src2_[(int)swizzle.src2_selector_2.Value()],
+ src2_[(int)swizzle.src2_selector_3.Value()],
};
if (negate_src2) {
- src2[0] = src2[0] * float24::FromFloat32(-1);
- src2[1] = src2[1] * float24::FromFloat32(-1);
- src2[2] = src2[2] * float24::FromFloat32(-1);
- src2[3] = src2[3] * float24::FromFloat32(-1);
+ src2[0] = -src2[0];
+ src2[1] = -src2[1];
+ src2[2] = -src2[2];
+ src2[3] = -src2[3];
}
float24 src3[4] = {
- src3_[(int)swizzle.GetSelectorSrc3(0)], src3_[(int)swizzle.GetSelectorSrc3(1)],
- src3_[(int)swizzle.GetSelectorSrc3(2)], src3_[(int)swizzle.GetSelectorSrc3(3)],
+ src3_[(int)swizzle.src3_selector_0.Value()],
+ src3_[(int)swizzle.src3_selector_1.Value()],
+ src3_[(int)swizzle.src3_selector_2.Value()],
+ src3_[(int)swizzle.src3_selector_3.Value()],
};
if (negate_src3) {
- src3[0] = src3[0] * float24::FromFloat32(-1);
- src3[1] = src3[1] * float24::FromFloat32(-1);
- src3[2] = src3[2] * float24::FromFloat32(-1);
- src3[3] = src3[3] * float24::FromFloat32(-1);
+ src3[0] = -src3[0];
+ src3[1] = -src3[1];
+ src3[2] = -src3[2];
+ src3[3] = -src3[3];
}
float24* dest =