forked from suyu/suyu
ef24e72b26
Involves making asserts use printf instead of the log functions (log functions are asynchronous and, as such, the log won't be printed in time) As such, the log type argument was removed (printf obviously can't use it, and it's made obsolete by the file and line printing) Also removed some GEKKO cruft.
109 lines
4.8 KiB
C++
109 lines
4.8 KiB
C++
// Copyright 2014 Citra Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#include "core/hle/hle.h"
|
|
#include "core/hle/service/cfg/cfg.h"
|
|
#include "core/hle/service/cfg/cfg_i.h"
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Namespace CFG_I
|
|
|
|
namespace CFG_I {
|
|
|
|
/**
|
|
* CFG_I::GetConfigInfoBlk8 service function
|
|
* This function is called by two command headers,
|
|
* there appears to be no difference between them according to 3dbrew
|
|
* Inputs:
|
|
* 0 : 0x04010082 / 0x08010082
|
|
* 1 : Size
|
|
* 2 : Block ID
|
|
* 3 : Descriptor for the output buffer
|
|
* 4 : Output buffer pointer
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
*/
|
|
static void GetConfigInfoBlk8(Service::Interface* self) {
|
|
u32* cmd_buffer = Kernel::GetCommandBuffer();
|
|
u32 size = cmd_buffer[1];
|
|
u32 block_id = cmd_buffer[2];
|
|
u8* data_pointer = Memory::GetPointer(cmd_buffer[4]);
|
|
|
|
if (data_pointer == nullptr) {
|
|
cmd_buffer[1] = -1; // TODO(Subv): Find the right error code
|
|
return;
|
|
}
|
|
|
|
cmd_buffer[1] = Service::CFG::GetConfigInfoBlock(block_id, size, 0x8, data_pointer).raw;
|
|
}
|
|
|
|
/**
|
|
* CFG_I::UpdateConfigNANDSavegame service function
|
|
* This function is called by two command headers,
|
|
* there appears to be no difference between them according to 3dbrew
|
|
* Inputs:
|
|
* 0 : 0x04030000 / 0x08030000
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
*/
|
|
static void UpdateConfigNANDSavegame(Service::Interface* self) {
|
|
u32* cmd_buffer = Kernel::GetCommandBuffer();
|
|
cmd_buffer[1] = Service::CFG::UpdateConfigNANDSavegame().raw;
|
|
}
|
|
|
|
/**
|
|
* CFG_I::FormatConfig service function
|
|
* Inputs:
|
|
* 0 : 0x08060000
|
|
* Outputs:
|
|
* 1 : Result of function, 0 on success, otherwise error code
|
|
*/
|
|
static void FormatConfig(Service::Interface* self) {
|
|
u32* cmd_buffer = Kernel::GetCommandBuffer();
|
|
cmd_buffer[1] = Service::CFG::FormatConfig().raw;
|
|
}
|
|
|
|
const Interface::FunctionInfo FunctionTable[] = {
|
|
{0x04010082, GetConfigInfoBlk8, "GetConfigInfoBlk8"},
|
|
{0x04020082, nullptr, "SetConfigInfoBlk4"},
|
|
{0x04030000, UpdateConfigNANDSavegame, "UpdateConfigNANDSavegame"},
|
|
{0x04040042, nullptr, "GetLocalFriendCodeSeedData"},
|
|
{0x04050000, nullptr, "GetLocalFriendCodeSeed"},
|
|
{0x04060000, nullptr, "SecureInfoGetRegion"},
|
|
{0x04070000, nullptr, "SecureInfoGetByte101"},
|
|
{0x04080042, nullptr, "SecureInfoGetSerialNo"},
|
|
{0x04090000, nullptr, "UpdateConfigBlk00040003"},
|
|
{0x08010082, GetConfigInfoBlk8, "GetConfigInfoBlk8"},
|
|
{0x08020082, nullptr, "SetConfigInfoBlk4"},
|
|
{0x08030000, UpdateConfigNANDSavegame, "UpdateConfigNANDSavegame"},
|
|
{0x080400C2, nullptr, "CreateConfigInfoBlk"},
|
|
{0x08050000, nullptr, "DeleteConfigNANDSavefile"},
|
|
{0x08060000, FormatConfig, "FormatConfig"},
|
|
{0x08080000, nullptr, "UpdateConfigBlk1"},
|
|
{0x08090000, nullptr, "UpdateConfigBlk2"},
|
|
{0x080A0000, nullptr, "UpdateConfigBlk3"},
|
|
{0x080B0082, nullptr, "SetGetLocalFriendCodeSeedData"},
|
|
{0x080C0042, nullptr, "SetLocalFriendCodeSeedSignature"},
|
|
{0x080D0000, nullptr, "DeleteCreateNANDLocalFriendCodeSeed"},
|
|
{0x080E0000, nullptr, "VerifySigLocalFriendCodeSeed"},
|
|
{0x080F0042, nullptr, "GetLocalFriendCodeSeedData"},
|
|
{0x08100000, nullptr, "GetLocalFriendCodeSeed"},
|
|
{0x08110084, nullptr, "SetSecureInfo"},
|
|
{0x08120000, nullptr, "DeleteCreateNANDSecureInfo"},
|
|
{0x08130000, nullptr, "VerifySigSecureInfo"},
|
|
{0x08140042, nullptr, "SecureInfoGetData"},
|
|
{0x08150042, nullptr, "SecureInfoGetSignature"},
|
|
{0x08160000, nullptr, "SecureInfoGetRegion"},
|
|
{0x08170000, nullptr, "SecureInfoGetByte101"},
|
|
{0x08180042, nullptr, "SecureInfoGetSerialNo"},
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Interface class
|
|
|
|
Interface::Interface() {
|
|
Register(FunctionTable);
|
|
}
|
|
|
|
} // namespace
|