mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Update the stub code of BOSS
This commit is contained in:
		
							parent
							
								
									4b14e17b18
								
							
						
					
					
						commit
						bd8c80a7b4
					
				
					 5 changed files with 1810 additions and 4 deletions
				
			
		|  | @ -37,6 +37,7 @@ namespace Log { | ||||||
|     SUB(Service, FS)                                                                               \ |     SUB(Service, FS)                                                                               \ | ||||||
|     SUB(Service, ERR)                                                                              \ |     SUB(Service, ERR)                                                                              \ | ||||||
|     SUB(Service, APT)                                                                              \ |     SUB(Service, APT)                                                                              \ | ||||||
|  |     SUB(Service, BOSS)                                                                             \ | ||||||
|     SUB(Service, GSP)                                                                              \ |     SUB(Service, GSP)                                                                              \ | ||||||
|     SUB(Service, AC)                                                                               \ |     SUB(Service, AC)                                                                               \ | ||||||
|     SUB(Service, AM)                                                                               \ |     SUB(Service, AM)                                                                               \ | ||||||
|  |  | ||||||
|  | @ -54,6 +54,7 @@ enum class Class : ClassType { | ||||||
|     Service_FS,        ///< The FS (Filesystem) service implementation
 |     Service_FS,        ///< The FS (Filesystem) service implementation
 | ||||||
|     Service_ERR,       ///< The ERR (Error) port implementation
 |     Service_ERR,       ///< The ERR (Error) port implementation
 | ||||||
|     Service_APT,       ///< The APT (Applets) service
 |     Service_APT,       ///< The APT (Applets) service
 | ||||||
|  |     Service_BOSS,      ///< The BOSS (SpotPass) service
 | ||||||
|     Service_GSP,       ///< The GSP (GPU control) service
 |     Service_GSP,       ///< The GSP (GPU control) service
 | ||||||
|     Service_AC,        ///< The AC (WiFi status) service
 |     Service_AC,        ///< The AC (WiFi status) service
 | ||||||
|     Service_AM,        ///< The AM (Application manager) service
 |     Service_AM,        ///< The AM (Application manager) service
 | ||||||
|  |  | ||||||
|  | @ -10,11 +10,978 @@ | ||||||
| namespace Service { | namespace Service { | ||||||
| namespace BOSS { | 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() { | void Init() { | ||||||
|     using namespace Kernel; |     using namespace Kernel; | ||||||
| 
 | 
 | ||||||
|     AddService(new BOSS_P_Interface); |     AddService(new BOSS_P_Interface); | ||||||
|     AddService(new BOSS_U_Interface); |     AddService(new BOSS_U_Interface); | ||||||
|  | 
 | ||||||
|  |     new_arrival_flag = 0; | ||||||
|  |     ns_data_new_flag = 0; | ||||||
|  |     output_flag = 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Shutdown() {} | void Shutdown() {} | ||||||
|  |  | ||||||
|  | @ -4,9 +4,794 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include "core/hle/service/service.h" | ||||||
|  | 
 | ||||||
| namespace Service { | namespace Service { | ||||||
| namespace BOSS { | 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)
 | /// Initialize BOSS service(s)
 | ||||||
| void Init(); | void Init(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,16 +2,68 @@ | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
|  | #include "core/hle/service/boss/boss.h" | ||||||
| #include "core/hle/service/boss/boss_u.h" | #include "core/hle/service/boss/boss_u.h" | ||||||
| 
 | 
 | ||||||
| namespace Service { | namespace Service { | ||||||
| namespace BOSS { | namespace BOSS { | ||||||
| 
 | 
 | ||||||
| const Interface::FunctionInfo FunctionTable[] = { | const Interface::FunctionInfo FunctionTable[] = { | ||||||
|     {0x00020100, nullptr, "GetStorageInfo"}, |     {0x00010082, InitializeSession, "InitializeSession"}, | ||||||
|     {0x000C0082, nullptr, "UnregisterTask"}, |     {0x00020100, RegisterStorage, "RegisterStorage"}, | ||||||
|     {0x001E0042, nullptr, "CancelTask"}, |     {0x00030000, UnregisterStorage, "UnregisterStorage"}, | ||||||
|     {0x00330042, nullptr, "StartBgImmediate"}, |     {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() { | BOSS_U_Interface::BOSS_U_Interface() { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue