mirror of
https://github.com/citra-emu/citra.git
synced 2024-11-27 23:50:05 +00:00
5c52c6e64a
* service/boss: Migrate to ServiceFramework * service/boss: Addressed comments * service/boss: Added TODO: verify ResetType
968 lines
34 KiB
C++
968 lines
34 KiB
C++
// Copyright 2015 Citra Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include "core/hle/kernel/event.h"
|
|
#include "core/hle/service/service.h"
|
|
|
|
namespace Service {
|
|
namespace BOSS {
|
|
|
|
class Module final {
|
|
public:
|
|
Module();
|
|
~Module() = default;
|
|
|
|
class Interface : public ServiceFramework<Interface> {
|
|
public:
|
|
Interface(std::shared_ptr<Module> boss, const char* name, u32 max_session);
|
|
~Interface() = default;
|
|
|
|
protected:
|
|
/**
|
|
* BOSS::InitializeSession service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00010082]
|
|
* 1-2 : programID, normally zero for using the programID determined from the input PID
|
|
* 3 : 0x20, ARM11-kernel processID translate-header.
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
*/
|
|
void InitializeSession(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::RegisterStorage service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00020100]
|
|
* 1-2 : u64 extdataID
|
|
* 3 : u32 boss_size
|
|
* 4 : u8 extdata_type: 0 = NAND, 1 = SD
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
*/
|
|
void SetStorageInfo(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::UnregisterStorage service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00030000]
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
*/
|
|
void UnregisterStorage(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::RegisterPrivateRootCa service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00050042]
|
|
* 1 : u32 Size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::RegisterPrivateClientCert service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00060084]
|
|
* 1 : u32 buffer 1 size
|
|
* 2 : u32 buffer 2 size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::RegisterTask service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x000B00C2]
|
|
* 1 : TaskID buffer size
|
|
* 2 : u8 unknown value, Usually zero, regardless of HTTP GET/POST.
|
|
* 3 : u8 unknown value, Usually zero, regardless of HTTP GET/POST.
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::UnregisterTask service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x000C0082]
|
|
* 1 : TaskID buffer size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::ReconfigureTask service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x000D0082]
|
|
* 1 : TaskID buffer size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskIdList service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x000E0000]
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
*/
|
|
void GetTaskIdList(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetStepIdList service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x000F0042]
|
|
* 1 : u32 buffer size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetNsDataIdList service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00100102]
|
|
* 1 : u32 filter
|
|
* 2 : u32 Buffer size in words(max entries)
|
|
* 3 : u16, starting word-index in the internal NsDataId list
|
|
* 4 : u32, start_NsDataId
|
|
* 5 : MappedBufferDesc(permission = W)
|
|
* 6 : u32 buff_addr
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u16 Actual number of output entries
|
|
* 3 : u16 Last word-index copied to output in the internal NsDataId list
|
|
* 4 : buff_size << 4 | 0xC
|
|
* 5 : u32 buff_addr
|
|
*/
|
|
void GetNsDataIdList(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetNsDataIdList1 service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00110102]
|
|
* 1 : u32 filter
|
|
* 2 : u32 Buffer size in words(max entries)
|
|
* 3 : u16, starting word-index in the internal NsDataId list
|
|
* 4 : u32, start_NsDataId
|
|
* 5 : MappedBufferDesc(permission = W)
|
|
* 6 : u32 buff_addr
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u16 Actual number of output entries
|
|
* 3 : u16 Last word-index copied to output in the internal NsDataId list
|
|
* 4 : buff_size << 4 | 0xC
|
|
* 5 : u32 buff_addr
|
|
*/
|
|
void GetNsDataIdList1(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetNsDataIdList2 service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00120102]
|
|
* 1 : u32 filter
|
|
* 2 : u32 Buffer size in words(max entries)
|
|
* 3 : u16, starting word-index in the internal NsDataId list
|
|
* 4 : u32, start_NsDataId
|
|
* 5 : MappedBufferDesc(permission = W)
|
|
* 6 : u32 buff_addr
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u16 Actual number of output entries
|
|
* 3 : u16 Last word-index copied to output in the internal NsDataId list
|
|
* 4 : buff_size << 4 | 0xC
|
|
* 5 : u32 buff_addr
|
|
*/
|
|
void GetNsDataIdList2(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetNsDataIdList3 service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00130102]
|
|
* 1 : u32 filter
|
|
* 2 : u32 Buffer size in words(max entries)
|
|
* 3 : u16, starting word-index in the internal NsDataId list
|
|
* 4 : u32, start_NsDataId
|
|
* 5 : MappedBufferDesc(permission = W)
|
|
* 6 : u32 buff_addr
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u16 Actual number of output entries
|
|
* 3 : u16 Last word-index copied to output in the internal NsDataId list
|
|
* 4 : buff_size << 4 | 0xC
|
|
* 5 : u32 buff_addr
|
|
|
|
*/
|
|
void GetNsDataIdList3(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::SendProperty service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00140082]
|
|
* 1 : u16 PropertyID
|
|
* 2 : u32 size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::SendPropertyHandle service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00150042]
|
|
* 2 : u16 PropertyID
|
|
* 3 : 0x0
|
|
* 4 : Handle
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
*/
|
|
void SendPropertyHandle(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::ReceiveProperty service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00160082]
|
|
* 1 : u16 PropertyID
|
|
* 2 : u32 Size
|
|
* 3 : MappedBufferDesc(permission = W)
|
|
* 4 : u32 buff addr
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : Actual read size
|
|
* 4 : buff_size << 4 | 0xC
|
|
* 5 : u32 buff_addr
|
|
*/
|
|
void ReceiveProperty(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskInterval service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00190042]
|
|
* 1 : u32 size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskCount service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x001A0042]
|
|
* 1 : u32 size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskServiceStatus service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x001B0042]
|
|
* 1 : u32 size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::StartTask service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x001C0042]
|
|
* 1 : TaskID buffer size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::StartTaskImmediate service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x001D0042]
|
|
* 1 : TaskID buffer size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::CancelTask service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x001E0042]
|
|
* 1 : TaskID buffer size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskFinishHandle service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x001F0000]
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : 0x0
|
|
* 3 : Task Finish Handle
|
|
*/
|
|
void GetTaskFinishHandle(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskState service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00200082]
|
|
* 1 : TaskID buffer size
|
|
* 2 : u8 state
|
|
* 3 : MappedBufferDesc(permission = R)
|
|
* 4 : u32 buff_addr
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u8 TaskStatus
|
|
* 3 : u32 Current state value for task PropertyID 0x4
|
|
* 4 : u8 unknown value
|
|
* 5 : buff_size << 4 | 0xA
|
|
* 6 : u32 buff_addr
|
|
*/
|
|
void GetTaskState(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskResult service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00210042]
|
|
* 1 : u32 size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskCommErrorCode service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00220042]
|
|
* 1 : u32 size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskStatus service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x002300C2]
|
|
* 1 : u32 size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskError service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00240082]
|
|
* 1 : u32 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 : buff_size << 4 | 0xA
|
|
* 4 : u32 buff_addr
|
|
*/
|
|
void GetTaskError(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskInfo service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00250082]
|
|
* 1 : u32 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 : buff_size << 4 | 0xA
|
|
* 3 : u32 buff_addr
|
|
*/
|
|
void GetTaskInfo(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::DeleteNsData service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00260040]
|
|
* 1 : u32 NsDataID
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
*/
|
|
void DeleteNsData(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetNsDataHeaderInfo service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x002700C2]
|
|
* 1 : u32, NsDataID
|
|
* 2 : u8, type
|
|
* 3 : u32, Size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::ReadNsData service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00280102]
|
|
* 1 : u32, NsDataID
|
|
* 2-3 : u64, offset
|
|
* 4 : u32, Size
|
|
* 5 : MappedBufferDesc(permission = W)
|
|
* 6 : u32, buff_addr
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u32 Actual read size
|
|
* 3 : u32, unknown value
|
|
* 4 : buff_size << 4 | 0xC
|
|
* 5 : u32, buff_addr
|
|
*/
|
|
void ReadNsData(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetErrorCode service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x002E0040]
|
|
* 1 : u8 input
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u32 unknown value
|
|
*/
|
|
void GetErrorCode(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::StartBgImmediate service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00330042]
|
|
* 1 : TaskID buffer size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskProperty0 service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00340042]
|
|
* 1 : u32 size
|
|
* 2 : MappedBufferDesc(permission = R)
|
|
* 3 : u32 buff_addr
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u8 current state
|
|
* 3 : buff_size << 4 | 0xA
|
|
* 4 : u32 buff_addr
|
|
*/
|
|
void GetTaskProperty0(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::RegisterImmediateTask service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x003500C2]
|
|
* 1 : u32 size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::SetTaskQuery service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00360084]
|
|
* 1 : u32 buffer1 size
|
|
* 2 : u32 buffer2 size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS::GetTaskQuery service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x00370084]
|
|
* 1 : u32 buffer1 size
|
|
* 2 : u32 buffer2 size
|
|
* 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(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS_P::InitializeSessionPrivileged service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x04010082]
|
|
* 1-2 : programID, normally zero for using the programID determined from the input PID
|
|
* 3 : 0x20, ARM11-kernel processID translate-header.
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
*/
|
|
void InitializeSessionPrivileged(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS_P::GetAppNewFlag service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x04040080]
|
|
* 1-2 : u64 ProgramID
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u8 flag, 0 = nothing new, 1 = new content
|
|
*/
|
|
void GetAppNewFlag(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS_P::GetNsDataIdListPrivileged service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x040D0182]
|
|
* 1-2 : u64 ProgramID
|
|
* 3 : u32 filter
|
|
* 4 : u32 Buffer size in words(max entries)
|
|
* 5 : u16, starting word-index in the internal NsDataId list
|
|
* 6 : u32, start_NsDataId
|
|
* 7 : MappedBufferDesc(permission = W)
|
|
* 8 : u32 buff_addr
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u16 Actual number of output entries
|
|
* 3 : u16 Last word-index copied to output in the internal NsDataId list
|
|
* 4 : buff_size << 4 | 0xC
|
|
* 5 : u32 buff_addr
|
|
*/
|
|
void GetNsDataIdListPrivileged(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS_P::GetNsDataIdListPrivileged1 service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x040E0182]
|
|
* 1-2 : u64 ProgramID
|
|
* 3 : u32 filter
|
|
* 4 : u32 Buffer size in words(max entries)
|
|
* 5 : u16, starting word-index in the internal NsDataId list
|
|
* 6 : u32, start_NsDataId
|
|
* 7 : MappedBufferDesc(permission = W)
|
|
* 8 : u32 buff_addr
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u16 Actual number of output entries
|
|
* 3 : u16 Last word-index copied to output in the internal NsDataId list
|
|
* 4 : buff_size << 4 | 0xC
|
|
* 5 : u32 buff_addr
|
|
*/
|
|
void GetNsDataIdListPrivileged1(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS_P::SendPropertyPrivileged service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x04130082]
|
|
* 1 : u16 PropertyID
|
|
* 2 : u32 size
|
|
* 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 SendPropertyPrivileged(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS_P::DeleteNsDataPrivileged service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x041500C0]
|
|
* 1-2 : u64 ProgramID
|
|
* 3 : u32 NsDataID
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
*/
|
|
void DeleteNsDataPrivileged(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS_P::GetNsDataHeaderInfoPrivileged service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x04160142]
|
|
* 1-2 : u64 ProgramID
|
|
* 3 : u32, NsDataID
|
|
* 4 : u8, type
|
|
* 5 : u32, Size
|
|
* 6 : MappedBufferDesc(permission = W)
|
|
* 7 : u32 buff_addr
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : buff_size << 4 | 0xC
|
|
* 3 : u32, buff_addr
|
|
*/
|
|
void GetNsDataHeaderInfoPrivileged(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS_P::ReadNsDataPrivileged service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x04170182]
|
|
* 1-2 : u64 ProgramID
|
|
* 3 : u32, NsDataID
|
|
* 4-5 : u64, offset
|
|
* 6 : u32, Size
|
|
* 7 : MappedBufferDesc(permission = W)
|
|
* 8 : u32, buff_addr
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u32 Actual read size
|
|
* 3 : u32, unknown value
|
|
* 4 : buff_size << 4 | 0xC
|
|
* 5 : u32, buff_addr
|
|
*/
|
|
void ReadNsDataPrivileged(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS_P::SetNsDataNewFlagPrivileged service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x041A0100]
|
|
* 1-2 : u64 ProgramID
|
|
* 3 : u32 unknown value
|
|
* 4 : u8 flag
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
*/
|
|
void SetNsDataNewFlagPrivileged(Kernel::HLERequestContext& ctx);
|
|
|
|
/**
|
|
* BOSS_P::GetNsDataNewFlagPrivileged service function
|
|
* Inputs:
|
|
* 0 : Header Code[0x041B00C0]
|
|
* 1-2 : u64 ProgramID
|
|
* 3 : u32 unknown value
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
* 2 : u8 flag
|
|
*/
|
|
void GetNsDataNewFlagPrivileged(Kernel::HLERequestContext& ctx);
|
|
|
|
private:
|
|
std::shared_ptr<Module> boss;
|
|
|
|
u8 new_arrival_flag;
|
|
u8 ns_data_new_flag;
|
|
u8 ns_data_new_flag_privileged;
|
|
u8 output_flag;
|
|
};
|
|
|
|
private:
|
|
Kernel::SharedPtr<Kernel::Event> task_finish_event;
|
|
};
|
|
|
|
void InstallInterfaces(SM::ServiceManager& service_manager);
|
|
|
|
} // namespace BOSS
|
|
} // namespace Service
|