| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // Copyright 2014 Citra Emulator Project
- // Licensed under GPLv2 or any later version
- // Refer to the license.txt file included.
- #include "common/logging/log.h"
- #include "core/hle/hle.h"
- #include "core/hle/service/ldr_ro.h"
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // Namespace LDR_RO
- namespace LDR_RO {
- /**
- * LDR_RO::Initialize service function
- * Inputs:
- * 1 : CRS buffer pointer
- * 2 : CRS Size
- * 3 : Process memory address where the CRS will be mapped
- * 4 : Value, must be zero
- * 5 : KProcess handle
- * Outputs:
- * 0 : Return header
- * 1 : Result of function, 0 on success, otherwise error code
- */
- static void Initialize(Service::Interface* self) {
- u32* cmd_buff = Kernel::GetCommandBuffer();
- u32 crs_buffer_ptr = cmd_buff[1];
- u32 crs_size = cmd_buff[2];
- u32 address = cmd_buff[3];
- u32 value = cmd_buff[4];
- u32 process = cmd_buff[5];
- if (value != 0) {
- LOG_ERROR(Service_LDR, "This value should be zero, but is actually %u!", value);
- }
- // TODO(purpasmart96): Verify return header on HW
- cmd_buff[1] = RESULT_SUCCESS.raw; // No error
- LOG_WARNING(Service_LDR, "(STUBBED) called");
- }
- /**
- * LDR_RO::LoadCRR service function
- * Inputs:
- * 1 : CRS buffer pointer
- * 2 : CRS Size
- * 3 : Value, must be zero
- * 4 : KProcess handle
- * Outputs:
- * 0 : Return header
- * 1 : Result of function, 0 on success, otherwise error code
- */
- static void LoadCRR(Service::Interface* self) {
- u32* cmd_buff = Kernel::GetCommandBuffer();
- u32 crs_buffer_ptr = cmd_buff[1];
- u32 crs_size = cmd_buff[2];
- u32 value = cmd_buff[3];
- u32 process = cmd_buff[4];
- if (value != 0) {
- LOG_ERROR(Service_LDR, "This value should be zero, but is actually %u!", value);
- }
- // TODO(purpasmart96): Verify return header on HW
- cmd_buff[1] = RESULT_SUCCESS.raw; // No error
- LOG_WARNING(Service_LDR, "(STUBBED) called");
- }
- const Interface::FunctionInfo FunctionTable[] = {
- {0x000100C2, Initialize, "Initialize"},
- {0x00020082, LoadCRR, "LoadCRR"},
- {0x00030042, nullptr, "UnloadCCR"},
- {0x000402C2, nullptr, "LoadExeCRO"},
- {0x000500C2, nullptr, "LoadCROSymbols"},
- {0x00060042, nullptr, "CRO_Load?"},
- {0x00070042, nullptr, "LoadCROSymbols"},
- {0x00080042, nullptr, "Shutdown"},
- {0x000902C2, nullptr, "LoadExeCRO_New?"},
- };
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // Interface class
- Interface::Interface() {
- Register(FunctionTable);
- }
- } // namespace
|