summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar wwylele2017-02-25 21:09:37 +0200
committerGravatar wwylele2017-02-26 11:11:35 +0200
commit2d6113de094cb59c40d17aba7c98334ecd86791d (patch)
treea4ad6c6e741c9542df6d2420a25269d160d1f9f4
parentMerge pull request #2569 from wwylele/wrap-unwrap (diff)
downloadyuzu-2d6113de094cb59c40d17aba7c98334ecd86791d.tar.gz
yuzu-2d6113de094cb59c40d17aba7c98334ecd86791d.tar.xz
yuzu-2d6113de094cb59c40d17aba7c98334ecd86791d.zip
IR: separate functions of each port to their own files
-rw-r--r--src/core/hle/service/ir/ir.cpp94
-rw-r--r--src/core/hle/service/ir/ir.h57
-rw-r--r--src/core/hle/service/ir/ir_rst.cpp37
-rw-r--r--src/core/hle/service/ir/ir_rst.h3
-rw-r--r--src/core/hle/service/ir/ir_user.cpp112
-rw-r--r--src/core/hle/service/ir/ir_user.h3
6 files changed, 159 insertions, 147 deletions
diff --git a/src/core/hle/service/ir/ir.cpp b/src/core/hle/service/ir/ir.cpp
index 7f1731a50..7ac34a990 100644
--- a/src/core/hle/service/ir/ir.cpp
+++ b/src/core/hle/service/ir/ir.cpp
@@ -2,9 +2,6 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include "core/hle/kernel/event.h"
6#include "core/hle/kernel/kernel.h"
7#include "core/hle/kernel/shared_memory.h"
8#include "core/hle/service/ir/ir.h" 5#include "core/hle/service/ir/ir.h"
9#include "core/hle/service/ir/ir_rst.h" 6#include "core/hle/service/ir/ir_rst.h"
10#include "core/hle/service/ir/ir_u.h" 7#include "core/hle/service/ir/ir_u.h"
@@ -14,101 +11,18 @@
14namespace Service { 11namespace Service {
15namespace IR { 12namespace IR {
16 13
17static Kernel::SharedPtr<Kernel::Event> handle_event;
18static Kernel::SharedPtr<Kernel::Event> conn_status_event;
19static Kernel::SharedPtr<Kernel::SharedMemory> shared_memory;
20static Kernel::SharedPtr<Kernel::SharedMemory> transfer_shared_memory;
21
22void GetHandles(Service::Interface* self) {
23 u32* cmd_buff = Kernel::GetCommandBuffer();
24
25 cmd_buff[1] = RESULT_SUCCESS.raw;
26 cmd_buff[2] = 0x4000000;
27 cmd_buff[3] = Kernel::g_handle_table.Create(Service::IR::shared_memory).MoveFrom();
28 cmd_buff[4] = Kernel::g_handle_table.Create(Service::IR::handle_event).MoveFrom();
29}
30
31void InitializeIrNopShared(Interface* self) {
32 u32* cmd_buff = Kernel::GetCommandBuffer();
33
34 u32 transfer_buff_size = cmd_buff[1];
35 u32 recv_buff_size = cmd_buff[2];
36 u32 unk1 = cmd_buff[3];
37 u32 send_buff_size = cmd_buff[4];
38 u32 unk2 = cmd_buff[5];
39 u8 baud_rate = cmd_buff[6] & 0xFF;
40 Kernel::Handle handle = cmd_buff[8];
41
42 if (Kernel::g_handle_table.IsValid(handle)) {
43 transfer_shared_memory = Kernel::g_handle_table.Get<Kernel::SharedMemory>(handle);
44 transfer_shared_memory->name = "IR:TransferSharedMemory";
45 }
46
47 cmd_buff[1] = RESULT_SUCCESS.raw;
48
49 LOG_WARNING(Service_IR, "(STUBBED) called, transfer_buff_size=%d, recv_buff_size=%d, "
50 "unk1=%d, send_buff_size=%d, unk2=%d, baud_rate=%u, handle=0x%08X",
51 transfer_buff_size, recv_buff_size, unk1, send_buff_size, unk2, baud_rate, handle);
52}
53
54void RequireConnection(Interface* self) {
55 u32* cmd_buff = Kernel::GetCommandBuffer();
56
57 conn_status_event->Signal();
58
59 cmd_buff[1] = RESULT_SUCCESS.raw;
60
61 LOG_WARNING(Service_IR, "(STUBBED) called");
62}
63
64void Disconnect(Interface* self) {
65 u32* cmd_buff = Kernel::GetCommandBuffer();
66
67 cmd_buff[1] = RESULT_SUCCESS.raw;
68
69 LOG_WARNING(Service_IR, "(STUBBED) called");
70}
71
72void GetConnectionStatusEvent(Interface* self) {
73 u32* cmd_buff = Kernel::GetCommandBuffer();
74
75 cmd_buff[1] = RESULT_SUCCESS.raw;
76 cmd_buff[3] = Kernel::g_handle_table.Create(Service::IR::conn_status_event).MoveFrom();
77
78 LOG_WARNING(Service_IR, "(STUBBED) called");
79}
80
81void FinalizeIrNop(Interface* self) {
82 u32* cmd_buff = Kernel::GetCommandBuffer();
83
84 cmd_buff[1] = RESULT_SUCCESS.raw;
85
86 LOG_WARNING(Service_IR, "(STUBBED) called");
87}
88
89void Init() { 14void Init() {
90 using namespace Kernel;
91
92 AddService(new IR_RST_Interface); 15 AddService(new IR_RST_Interface);
93 AddService(new IR_U_Interface); 16 AddService(new IR_U_Interface);
94 AddService(new IR_User_Interface); 17 AddService(new IR_User_Interface);
95 18
96 using Kernel::MemoryPermission; 19 InitUser();
97 shared_memory = SharedMemory::Create(nullptr, 0x1000, Kernel::MemoryPermission::ReadWrite, 20 InitRST();
98 Kernel::MemoryPermission::ReadWrite, 0,
99 Kernel::MemoryRegion::BASE, "IR:SharedMemory");
100 transfer_shared_memory = nullptr;
101
102 // Create event handle(s)
103 handle_event = Event::Create(ResetType::OneShot, "IR:HandleEvent");
104 conn_status_event = Event::Create(ResetType::OneShot, "IR:ConnectionStatusEvent");
105} 21}
106 22
107void Shutdown() { 23void Shutdown() {
108 transfer_shared_memory = nullptr; 24 ShutdownUser();
109 shared_memory = nullptr; 25 ShutdownRST();
110 handle_event = nullptr;
111 conn_status_event = nullptr;
112} 26}
113 27
114} // namespace IR 28} // namespace IR
diff --git a/src/core/hle/service/ir/ir.h b/src/core/hle/service/ir/ir.h
index 72d44ce60..c741498e2 100644
--- a/src/core/hle/service/ir/ir.h
+++ b/src/core/hle/service/ir/ir.h
@@ -10,63 +10,6 @@ class Interface;
10 10
11namespace IR { 11namespace IR {
12 12
13/**
14 * IR::GetHandles service function
15 * Outputs:
16 * 1 : Result of function, 0 on success, otherwise error code
17 * 2 : Translate header, used by the ARM11-kernel
18 * 3 : Shared memory handle
19 * 4 : Event handle
20 */
21void GetHandles(Interface* self);
22
23/**
24 * IR::InitializeIrNopShared service function
25 * Inputs:
26 * 1 : Size of transfer buffer
27 * 2 : Recv buffer size
28 * 3 : unknown
29 * 4 : Send buffer size
30 * 5 : unknown
31 * 6 : BaudRate (u8)
32 * 7 : 0
33 * 8 : Handle of transfer shared memory
34 * Outputs:
35 * 1 : Result of function, 0 on success, otherwise error code
36 */
37void InitializeIrNopShared(Interface* self);
38
39/**
40 * IR::FinalizeIrNop service function
41 * Outputs:
42 * 1 : Result of function, 0 on success, otherwise error code
43 */
44void FinalizeIrNop(Interface* self);
45
46/**
47 * IR::GetConnectionStatusEvent service function
48 * Outputs:
49 * 1 : Result of function, 0 on success, otherwise error code
50 * 2 : Connection Status Event handle
51 */
52void GetConnectionStatusEvent(Interface* self);
53
54/**
55 * IR::Disconnect service function
56 * Outputs:
57 * 1 : Result of function, 0 on success, otherwise error code
58 */
59void Disconnect(Interface* self);
60
61/**
62 * IR::RequireConnection service function
63 * Inputs:
64 * 1 : unknown (u8), looks like always 1
65 * Outputs:
66 * 1 : Result of function, 0 on success, otherwise error code
67 */
68void RequireConnection(Interface* self);
69
70/// Initialize IR service 13/// Initialize IR service
71void Init(); 14void Init();
72 15
diff --git a/src/core/hle/service/ir/ir_rst.cpp b/src/core/hle/service/ir/ir_rst.cpp
index 1f10ebd3d..3f1275c53 100644
--- a/src/core/hle/service/ir/ir_rst.cpp
+++ b/src/core/hle/service/ir/ir_rst.cpp
@@ -2,12 +2,34 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include "core/hle/kernel/event.h"
6#include "core/hle/kernel/shared_memory.h"
5#include "core/hle/service/ir/ir.h" 7#include "core/hle/service/ir/ir.h"
6#include "core/hle/service/ir/ir_rst.h" 8#include "core/hle/service/ir/ir_rst.h"
7 9
8namespace Service { 10namespace Service {
9namespace IR { 11namespace IR {
10 12
13static Kernel::SharedPtr<Kernel::Event> handle_event;
14static Kernel::SharedPtr<Kernel::SharedMemory> shared_memory;
15
16/**
17 * IR::GetHandles service function
18 * Outputs:
19 * 1 : Result of function, 0 on success, otherwise error code
20 * 2 : Translate header, used by the ARM11-kernel
21 * 3 : Shared memory handle
22 * 4 : Event handle
23 */
24static void GetHandles(Interface* self) {
25 u32* cmd_buff = Kernel::GetCommandBuffer();
26
27 cmd_buff[1] = RESULT_SUCCESS.raw;
28 cmd_buff[2] = 0x4000000;
29 cmd_buff[3] = Kernel::g_handle_table.Create(Service::IR::shared_memory).MoveFrom();
30 cmd_buff[4] = Kernel::g_handle_table.Create(Service::IR::handle_event).MoveFrom();
31}
32
11const Interface::FunctionInfo FunctionTable[] = { 33const Interface::FunctionInfo FunctionTable[] = {
12 {0x00010000, GetHandles, "GetHandles"}, 34 {0x00010000, GetHandles, "GetHandles"},
13 {0x00020080, nullptr, "Initialize"}, 35 {0x00020080, nullptr, "Initialize"},
@@ -19,5 +41,20 @@ IR_RST_Interface::IR_RST_Interface() {
19 Register(FunctionTable); 41 Register(FunctionTable);
20} 42}
21 43
44void InitRST() {
45 using namespace Kernel;
46
47 shared_memory =
48 SharedMemory::Create(nullptr, 0x1000, MemoryPermission::ReadWrite,
49 MemoryPermission::ReadWrite, 0, MemoryRegion::BASE, "IR:SharedMemory");
50
51 handle_event = Event::Create(ResetType::OneShot, "IR:HandleEvent");
52}
53
54void ShutdownRST() {
55 shared_memory = nullptr;
56 handle_event = nullptr;
57}
58
22} // namespace IR 59} // namespace IR
23} // namespace Service 60} // namespace Service
diff --git a/src/core/hle/service/ir/ir_rst.h b/src/core/hle/service/ir/ir_rst.h
index a492e15c9..75b732627 100644
--- a/src/core/hle/service/ir/ir_rst.h
+++ b/src/core/hle/service/ir/ir_rst.h
@@ -18,5 +18,8 @@ public:
18 } 18 }
19}; 19};
20 20
21void InitRST();
22void ShutdownRST();
23
21} // namespace IR 24} // namespace IR
22} // namespace Service 25} // namespace Service
diff --git a/src/core/hle/service/ir/ir_user.cpp b/src/core/hle/service/ir/ir_user.cpp
index 6cff1d544..b326d7fc7 100644
--- a/src/core/hle/service/ir/ir_user.cpp
+++ b/src/core/hle/service/ir/ir_user.cpp
@@ -2,12 +2,112 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include "core/hle/kernel/event.h"
6#include "core/hle/kernel/shared_memory.h"
5#include "core/hle/service/ir/ir.h" 7#include "core/hle/service/ir/ir.h"
6#include "core/hle/service/ir/ir_user.h" 8#include "core/hle/service/ir/ir_user.h"
7 9
8namespace Service { 10namespace Service {
9namespace IR { 11namespace IR {
10 12
13static Kernel::SharedPtr<Kernel::Event> conn_status_event;
14static Kernel::SharedPtr<Kernel::SharedMemory> transfer_shared_memory;
15
16/**
17 * IR::InitializeIrNopShared service function
18 * Inputs:
19 * 1 : Size of transfer buffer
20 * 2 : Recv buffer size
21 * 3 : unknown
22 * 4 : Send buffer size
23 * 5 : unknown
24 * 6 : BaudRate (u8)
25 * 7 : 0
26 * 8 : Handle of transfer shared memory
27 * Outputs:
28 * 1 : Result of function, 0 on success, otherwise error code
29 */
30static void InitializeIrNopShared(Interface* self) {
31 u32* cmd_buff = Kernel::GetCommandBuffer();
32
33 u32 transfer_buff_size = cmd_buff[1];
34 u32 recv_buff_size = cmd_buff[2];
35 u32 unk1 = cmd_buff[3];
36 u32 send_buff_size = cmd_buff[4];
37 u32 unk2 = cmd_buff[5];
38 u8 baud_rate = cmd_buff[6] & 0xFF;
39 Kernel::Handle handle = cmd_buff[8];
40
41 if (Kernel::g_handle_table.IsValid(handle)) {
42 transfer_shared_memory = Kernel::g_handle_table.Get<Kernel::SharedMemory>(handle);
43 transfer_shared_memory->name = "IR:TransferSharedMemory";
44 }
45
46 cmd_buff[1] = RESULT_SUCCESS.raw;
47
48 LOG_WARNING(Service_IR, "(STUBBED) called, transfer_buff_size=%d, recv_buff_size=%d, "
49 "unk1=%d, send_buff_size=%d, unk2=%d, baud_rate=%u, handle=0x%08X",
50 transfer_buff_size, recv_buff_size, unk1, send_buff_size, unk2, baud_rate, handle);
51}
52
53/**
54 * IR::RequireConnection service function
55 * Inputs:
56 * 1 : unknown (u8), looks like always 1
57 * Outputs:
58 * 1 : Result of function, 0 on success, otherwise error code
59 */
60static void RequireConnection(Interface* self) {
61 u32* cmd_buff = Kernel::GetCommandBuffer();
62
63 conn_status_event->Signal();
64
65 cmd_buff[1] = RESULT_SUCCESS.raw;
66
67 LOG_WARNING(Service_IR, "(STUBBED) called");
68}
69
70/**
71 * IR::Disconnect service function
72 * Outputs:
73 * 1 : Result of function, 0 on success, otherwise error code
74 */
75static void Disconnect(Interface* self) {
76 u32* cmd_buff = Kernel::GetCommandBuffer();
77
78 cmd_buff[1] = RESULT_SUCCESS.raw;
79
80 LOG_WARNING(Service_IR, "(STUBBED) called");
81}
82
83/**
84 * IR::GetConnectionStatusEvent service function
85 * Outputs:
86 * 1 : Result of function, 0 on success, otherwise error code
87 * 2 : Connection Status Event handle
88 */
89static void GetConnectionStatusEvent(Interface* self) {
90 u32* cmd_buff = Kernel::GetCommandBuffer();
91
92 cmd_buff[1] = RESULT_SUCCESS.raw;
93 cmd_buff[3] = Kernel::g_handle_table.Create(Service::IR::conn_status_event).MoveFrom();
94
95 LOG_WARNING(Service_IR, "(STUBBED) called");
96}
97
98/**
99 * IR::FinalizeIrNop service function
100 * Outputs:
101 * 1 : Result of function, 0 on success, otherwise error code
102 */
103static void FinalizeIrNop(Interface* self) {
104 u32* cmd_buff = Kernel::GetCommandBuffer();
105
106 cmd_buff[1] = RESULT_SUCCESS.raw;
107
108 LOG_WARNING(Service_IR, "(STUBBED) called");
109}
110
11const Interface::FunctionInfo FunctionTable[] = { 111const Interface::FunctionInfo FunctionTable[] = {
12 {0x00010182, nullptr, "InitializeIrNop"}, 112 {0x00010182, nullptr, "InitializeIrNop"},
13 {0x00020000, FinalizeIrNop, "FinalizeIrNop"}, 113 {0x00020000, FinalizeIrNop, "FinalizeIrNop"},
@@ -41,5 +141,17 @@ IR_User_Interface::IR_User_Interface() {
41 Register(FunctionTable); 141 Register(FunctionTable);
42} 142}
43 143
144void InitUser() {
145 using namespace Kernel;
146
147 transfer_shared_memory = nullptr;
148 conn_status_event = Event::Create(ResetType::OneShot, "IR:ConnectionStatusEvent");
149}
150
151void ShutdownUser() {
152 transfer_shared_memory = nullptr;
153 conn_status_event = nullptr;
154}
155
44} // namespace IR 156} // namespace IR
45} // namespace Service 157} // namespace Service
diff --git a/src/core/hle/service/ir/ir_user.h b/src/core/hle/service/ir/ir_user.h
index 71c932ffa..3849bd923 100644
--- a/src/core/hle/service/ir/ir_user.h
+++ b/src/core/hle/service/ir/ir_user.h
@@ -18,5 +18,8 @@ public:
18 } 18 }
19}; 19};
20 20
21void InitUser();
22void ShutdownUser();
23
21} // namespace IR 24} // namespace IR
22} // namespace Service 25} // namespace Service