forked from eden-emu/eden
		
	IR: separate functions of each port to their own files
This commit is contained in:
		
							parent
							
								
									03277411f3
								
							
						
					
					
						commit
						bf2d045b5a
					
				
					 6 changed files with 159 additions and 147 deletions
				
			
		|  | @ -2,9 +2,6 @@ | ||||||
| // 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/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.h" | ||||||
| #include "core/hle/service/ir/ir_rst.h" | #include "core/hle/service/ir/ir_rst.h" | ||||||
| #include "core/hle/service/ir/ir_u.h" | #include "core/hle/service/ir/ir_u.h" | ||||||
|  | @ -14,101 +11,18 @@ | ||||||
| namespace Service { | namespace Service { | ||||||
| namespace IR { | 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() { | void Init() { | ||||||
|     using namespace Kernel; |  | ||||||
| 
 |  | ||||||
|     AddService(new IR_RST_Interface); |     AddService(new IR_RST_Interface); | ||||||
|     AddService(new IR_U_Interface); |     AddService(new IR_U_Interface); | ||||||
|     AddService(new IR_User_Interface); |     AddService(new IR_User_Interface); | ||||||
| 
 | 
 | ||||||
|     using Kernel::MemoryPermission; |     InitUser(); | ||||||
|     shared_memory = SharedMemory::Create(nullptr, 0x1000, Kernel::MemoryPermission::ReadWrite, |     InitRST(); | ||||||
|                                          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"); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Shutdown() { | void Shutdown() { | ||||||
|     transfer_shared_memory = nullptr; |     ShutdownUser(); | ||||||
|     shared_memory = nullptr; |     ShutdownRST(); | ||||||
|     handle_event = nullptr; |  | ||||||
|     conn_status_event = nullptr; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace IR
 | } // namespace IR
 | ||||||
|  |  | ||||||
|  | @ -10,63 +10,6 @@ class Interface; | ||||||
| 
 | 
 | ||||||
| namespace IR { | 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
 | /// Initialize IR service
 | ||||||
| void Init(); | void Init(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,12 +2,34 @@ | ||||||
| // 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/kernel/event.h" | ||||||
|  | #include "core/hle/kernel/shared_memory.h" | ||||||
| #include "core/hle/service/ir/ir.h" | #include "core/hle/service/ir/ir.h" | ||||||
| #include "core/hle/service/ir/ir_rst.h" | #include "core/hle/service/ir/ir_rst.h" | ||||||
| 
 | 
 | ||||||
| namespace Service { | namespace Service { | ||||||
| namespace IR { | 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[] = { | const Interface::FunctionInfo FunctionTable[] = { | ||||||
|     {0x00010000, GetHandles, "GetHandles"}, |     {0x00010000, GetHandles, "GetHandles"}, | ||||||
|     {0x00020080, nullptr, "Initialize"}, |     {0x00020080, nullptr, "Initialize"}, | ||||||
|  | @ -19,5 +41,20 @@ IR_RST_Interface::IR_RST_Interface() { | ||||||
|     Register(FunctionTable); |     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 IR
 | ||||||
| } // namespace Service
 | } // namespace Service
 | ||||||
|  |  | ||||||
|  | @ -18,5 +18,8 @@ public: | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | void InitRST(); | ||||||
|  | void ShutdownRST(); | ||||||
|  | 
 | ||||||
| } // namespace IR
 | } // namespace IR
 | ||||||
| } // namespace Service
 | } // namespace Service
 | ||||||
|  |  | ||||||
|  | @ -2,12 +2,112 @@ | ||||||
| // 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/kernel/event.h" | ||||||
|  | #include "core/hle/kernel/shared_memory.h" | ||||||
| #include "core/hle/service/ir/ir.h" | #include "core/hle/service/ir/ir.h" | ||||||
| #include "core/hle/service/ir/ir_user.h" | #include "core/hle/service/ir/ir_user.h" | ||||||
| 
 | 
 | ||||||
| namespace Service { | namespace Service { | ||||||
| namespace IR { | 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[] = { | const Interface::FunctionInfo FunctionTable[] = { | ||||||
|     {0x00010182, nullptr, "InitializeIrNop"}, |     {0x00010182, nullptr, "InitializeIrNop"}, | ||||||
|     {0x00020000, FinalizeIrNop, "FinalizeIrNop"}, |     {0x00020000, FinalizeIrNop, "FinalizeIrNop"}, | ||||||
|  | @ -41,5 +141,17 @@ IR_User_Interface::IR_User_Interface() { | ||||||
|     Register(FunctionTable); |     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 IR
 | ||||||
| } // namespace Service
 | } // namespace Service
 | ||||||
|  |  | ||||||
|  | @ -18,5 +18,8 @@ public: | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | void InitUser(); | ||||||
|  | void ShutdownUser(); | ||||||
|  | 
 | ||||||
| } // namespace IR
 | } // namespace IR
 | ||||||
| } // namespace Service
 | } // namespace Service
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 wwylele
						wwylele