mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	IR: separate functions of each port to their own files
This commit is contained in:
		
							parent
							
								
									892888ed9e
								
							
						
					
					
						commit
						2d6113de09
					
				@ -2,9 +2,6 @@
 | 
			
		||||
// Licensed under GPLv2 or any later version
 | 
			
		||||
// Refer to the license.txt file included.
 | 
			
		||||
 | 
			
		||||
#include "core/hle/kernel/event.h"
 | 
			
		||||
#include "core/hle/kernel/kernel.h"
 | 
			
		||||
#include "core/hle/kernel/shared_memory.h"
 | 
			
		||||
#include "core/hle/service/ir/ir.h"
 | 
			
		||||
#include "core/hle/service/ir/ir_rst.h"
 | 
			
		||||
#include "core/hle/service/ir/ir_u.h"
 | 
			
		||||
@ -14,101 +11,18 @@
 | 
			
		||||
namespace Service {
 | 
			
		||||
namespace IR {
 | 
			
		||||
 | 
			
		||||
static Kernel::SharedPtr<Kernel::Event> handle_event;
 | 
			
		||||
static Kernel::SharedPtr<Kernel::Event> conn_status_event;
 | 
			
		||||
static Kernel::SharedPtr<Kernel::SharedMemory> shared_memory;
 | 
			
		||||
static Kernel::SharedPtr<Kernel::SharedMemory> transfer_shared_memory;
 | 
			
		||||
 | 
			
		||||
void GetHandles(Service::Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
    cmd_buff[2] = 0x4000000;
 | 
			
		||||
    cmd_buff[3] = Kernel::g_handle_table.Create(Service::IR::shared_memory).MoveFrom();
 | 
			
		||||
    cmd_buff[4] = Kernel::g_handle_table.Create(Service::IR::handle_event).MoveFrom();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void InitializeIrNopShared(Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    u32 transfer_buff_size = cmd_buff[1];
 | 
			
		||||
    u32 recv_buff_size = cmd_buff[2];
 | 
			
		||||
    u32 unk1 = cmd_buff[3];
 | 
			
		||||
    u32 send_buff_size = cmd_buff[4];
 | 
			
		||||
    u32 unk2 = cmd_buff[5];
 | 
			
		||||
    u8 baud_rate = cmd_buff[6] & 0xFF;
 | 
			
		||||
    Kernel::Handle handle = cmd_buff[8];
 | 
			
		||||
 | 
			
		||||
    if (Kernel::g_handle_table.IsValid(handle)) {
 | 
			
		||||
        transfer_shared_memory = Kernel::g_handle_table.Get<Kernel::SharedMemory>(handle);
 | 
			
		||||
        transfer_shared_memory->name = "IR:TransferSharedMemory";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_IR, "(STUBBED) called, transfer_buff_size=%d, recv_buff_size=%d, "
 | 
			
		||||
                            "unk1=%d, send_buff_size=%d, unk2=%d, baud_rate=%u, handle=0x%08X",
 | 
			
		||||
                transfer_buff_size, recv_buff_size, unk1, send_buff_size, unk2, baud_rate, handle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RequireConnection(Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    conn_status_event->Signal();
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_IR, "(STUBBED) called");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Disconnect(Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_IR, "(STUBBED) called");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GetConnectionStatusEvent(Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
    cmd_buff[3] = Kernel::g_handle_table.Create(Service::IR::conn_status_event).MoveFrom();
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_IR, "(STUBBED) called");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FinalizeIrNop(Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_IR, "(STUBBED) called");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Init() {
 | 
			
		||||
    using namespace Kernel;
 | 
			
		||||
 | 
			
		||||
    AddService(new IR_RST_Interface);
 | 
			
		||||
    AddService(new IR_U_Interface);
 | 
			
		||||
    AddService(new IR_User_Interface);
 | 
			
		||||
 | 
			
		||||
    using Kernel::MemoryPermission;
 | 
			
		||||
    shared_memory = SharedMemory::Create(nullptr, 0x1000, Kernel::MemoryPermission::ReadWrite,
 | 
			
		||||
                                         Kernel::MemoryPermission::ReadWrite, 0,
 | 
			
		||||
                                         Kernel::MemoryRegion::BASE, "IR:SharedMemory");
 | 
			
		||||
    transfer_shared_memory = nullptr;
 | 
			
		||||
 | 
			
		||||
    // Create event handle(s)
 | 
			
		||||
    handle_event = Event::Create(ResetType::OneShot, "IR:HandleEvent");
 | 
			
		||||
    conn_status_event = Event::Create(ResetType::OneShot, "IR:ConnectionStatusEvent");
 | 
			
		||||
    InitUser();
 | 
			
		||||
    InitRST();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Shutdown() {
 | 
			
		||||
    transfer_shared_memory = nullptr;
 | 
			
		||||
    shared_memory = nullptr;
 | 
			
		||||
    handle_event = nullptr;
 | 
			
		||||
    conn_status_event = nullptr;
 | 
			
		||||
    ShutdownUser();
 | 
			
		||||
    ShutdownRST();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace IR
 | 
			
		||||
 | 
			
		||||
@ -10,63 +10,6 @@ class Interface;
 | 
			
		||||
 | 
			
		||||
namespace IR {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * IR::GetHandles service function
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 *      2 : Translate header, used by the ARM11-kernel
 | 
			
		||||
 *      3 : Shared memory handle
 | 
			
		||||
 *      4 : Event handle
 | 
			
		||||
 */
 | 
			
		||||
void GetHandles(Interface* self);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * IR::InitializeIrNopShared service function
 | 
			
		||||
 *  Inputs:
 | 
			
		||||
 *      1 : Size of transfer buffer
 | 
			
		||||
 *      2 : Recv buffer size
 | 
			
		||||
 *      3 : unknown
 | 
			
		||||
 *      4 : Send buffer size
 | 
			
		||||
 *      5 : unknown
 | 
			
		||||
 *      6 : BaudRate (u8)
 | 
			
		||||
 *      7 : 0
 | 
			
		||||
 *      8 : Handle of transfer shared memory
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
void InitializeIrNopShared(Interface* self);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * IR::FinalizeIrNop service function
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
void FinalizeIrNop(Interface* self);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * IR::GetConnectionStatusEvent service function
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 *      2 : Connection Status Event handle
 | 
			
		||||
 */
 | 
			
		||||
void GetConnectionStatusEvent(Interface* self);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * IR::Disconnect service function
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
void Disconnect(Interface* self);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * IR::RequireConnection service function
 | 
			
		||||
 *  Inputs:
 | 
			
		||||
 *      1 : unknown (u8), looks like always 1
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
void RequireConnection(Interface* self);
 | 
			
		||||
 | 
			
		||||
/// Initialize IR service
 | 
			
		||||
void Init();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,34 @@
 | 
			
		||||
// Licensed under GPLv2 or any later version
 | 
			
		||||
// Refer to the license.txt file included.
 | 
			
		||||
 | 
			
		||||
#include "core/hle/kernel/event.h"
 | 
			
		||||
#include "core/hle/kernel/shared_memory.h"
 | 
			
		||||
#include "core/hle/service/ir/ir.h"
 | 
			
		||||
#include "core/hle/service/ir/ir_rst.h"
 | 
			
		||||
 | 
			
		||||
namespace Service {
 | 
			
		||||
namespace IR {
 | 
			
		||||
 | 
			
		||||
static Kernel::SharedPtr<Kernel::Event> handle_event;
 | 
			
		||||
static Kernel::SharedPtr<Kernel::SharedMemory> shared_memory;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * IR::GetHandles service function
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 *      2 : Translate header, used by the ARM11-kernel
 | 
			
		||||
 *      3 : Shared memory handle
 | 
			
		||||
 *      4 : Event handle
 | 
			
		||||
 */
 | 
			
		||||
static void GetHandles(Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
    cmd_buff[2] = 0x4000000;
 | 
			
		||||
    cmd_buff[3] = Kernel::g_handle_table.Create(Service::IR::shared_memory).MoveFrom();
 | 
			
		||||
    cmd_buff[4] = Kernel::g_handle_table.Create(Service::IR::handle_event).MoveFrom();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const Interface::FunctionInfo FunctionTable[] = {
 | 
			
		||||
    {0x00010000, GetHandles, "GetHandles"},
 | 
			
		||||
    {0x00020080, nullptr, "Initialize"},
 | 
			
		||||
@ -19,5 +41,20 @@ IR_RST_Interface::IR_RST_Interface() {
 | 
			
		||||
    Register(FunctionTable);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void InitRST() {
 | 
			
		||||
    using namespace Kernel;
 | 
			
		||||
 | 
			
		||||
    shared_memory =
 | 
			
		||||
        SharedMemory::Create(nullptr, 0x1000, MemoryPermission::ReadWrite,
 | 
			
		||||
                             MemoryPermission::ReadWrite, 0, MemoryRegion::BASE, "IR:SharedMemory");
 | 
			
		||||
 | 
			
		||||
    handle_event = Event::Create(ResetType::OneShot, "IR:HandleEvent");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ShutdownRST() {
 | 
			
		||||
    shared_memory = nullptr;
 | 
			
		||||
    handle_event = nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace IR
 | 
			
		||||
} // namespace Service
 | 
			
		||||
 | 
			
		||||
@ -18,5 +18,8 @@ public:
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void InitRST();
 | 
			
		||||
void ShutdownRST();
 | 
			
		||||
 | 
			
		||||
} // namespace IR
 | 
			
		||||
} // namespace Service
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,112 @@
 | 
			
		||||
// Licensed under GPLv2 or any later version
 | 
			
		||||
// Refer to the license.txt file included.
 | 
			
		||||
 | 
			
		||||
#include "core/hle/kernel/event.h"
 | 
			
		||||
#include "core/hle/kernel/shared_memory.h"
 | 
			
		||||
#include "core/hle/service/ir/ir.h"
 | 
			
		||||
#include "core/hle/service/ir/ir_user.h"
 | 
			
		||||
 | 
			
		||||
namespace Service {
 | 
			
		||||
namespace IR {
 | 
			
		||||
 | 
			
		||||
static Kernel::SharedPtr<Kernel::Event> conn_status_event;
 | 
			
		||||
static Kernel::SharedPtr<Kernel::SharedMemory> transfer_shared_memory;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * IR::InitializeIrNopShared service function
 | 
			
		||||
 *  Inputs:
 | 
			
		||||
 *      1 : Size of transfer buffer
 | 
			
		||||
 *      2 : Recv buffer size
 | 
			
		||||
 *      3 : unknown
 | 
			
		||||
 *      4 : Send buffer size
 | 
			
		||||
 *      5 : unknown
 | 
			
		||||
 *      6 : BaudRate (u8)
 | 
			
		||||
 *      7 : 0
 | 
			
		||||
 *      8 : Handle of transfer shared memory
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
static void InitializeIrNopShared(Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    u32 transfer_buff_size = cmd_buff[1];
 | 
			
		||||
    u32 recv_buff_size = cmd_buff[2];
 | 
			
		||||
    u32 unk1 = cmd_buff[3];
 | 
			
		||||
    u32 send_buff_size = cmd_buff[4];
 | 
			
		||||
    u32 unk2 = cmd_buff[5];
 | 
			
		||||
    u8 baud_rate = cmd_buff[6] & 0xFF;
 | 
			
		||||
    Kernel::Handle handle = cmd_buff[8];
 | 
			
		||||
 | 
			
		||||
    if (Kernel::g_handle_table.IsValid(handle)) {
 | 
			
		||||
        transfer_shared_memory = Kernel::g_handle_table.Get<Kernel::SharedMemory>(handle);
 | 
			
		||||
        transfer_shared_memory->name = "IR:TransferSharedMemory";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_IR, "(STUBBED) called, transfer_buff_size=%d, recv_buff_size=%d, "
 | 
			
		||||
                            "unk1=%d, send_buff_size=%d, unk2=%d, baud_rate=%u, handle=0x%08X",
 | 
			
		||||
                transfer_buff_size, recv_buff_size, unk1, send_buff_size, unk2, baud_rate, handle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * IR::RequireConnection service function
 | 
			
		||||
 *  Inputs:
 | 
			
		||||
 *      1 : unknown (u8), looks like always 1
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
static void RequireConnection(Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    conn_status_event->Signal();
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_IR, "(STUBBED) called");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * IR::Disconnect service function
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
static void Disconnect(Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_IR, "(STUBBED) called");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * IR::GetConnectionStatusEvent service function
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 *      2 : Connection Status Event handle
 | 
			
		||||
 */
 | 
			
		||||
static void GetConnectionStatusEvent(Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
    cmd_buff[3] = Kernel::g_handle_table.Create(Service::IR::conn_status_event).MoveFrom();
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_IR, "(STUBBED) called");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * IR::FinalizeIrNop service function
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
static void FinalizeIrNop(Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_IR, "(STUBBED) called");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const Interface::FunctionInfo FunctionTable[] = {
 | 
			
		||||
    {0x00010182, nullptr, "InitializeIrNop"},
 | 
			
		||||
    {0x00020000, FinalizeIrNop, "FinalizeIrNop"},
 | 
			
		||||
@ -41,5 +141,17 @@ IR_User_Interface::IR_User_Interface() {
 | 
			
		||||
    Register(FunctionTable);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void InitUser() {
 | 
			
		||||
    using namespace Kernel;
 | 
			
		||||
 | 
			
		||||
    transfer_shared_memory = nullptr;
 | 
			
		||||
    conn_status_event = Event::Create(ResetType::OneShot, "IR:ConnectionStatusEvent");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ShutdownUser() {
 | 
			
		||||
    transfer_shared_memory = nullptr;
 | 
			
		||||
    conn_status_event = nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace IR
 | 
			
		||||
} // namespace Service
 | 
			
		||||
 | 
			
		||||
@ -18,5 +18,8 @@ public:
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void InitUser();
 | 
			
		||||
void ShutdownUser();
 | 
			
		||||
 | 
			
		||||
} // namespace IR
 | 
			
		||||
} // namespace Service
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user