summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/kernel/svc_wrap.h73
1 files changed, 36 insertions, 37 deletions
diff --git a/src/core/hle/kernel/svc_wrap.h b/src/core/hle/kernel/svc_wrap.h
index 1eda5f879..fea9ba5ea 100644
--- a/src/core/hle/kernel/svc_wrap.h
+++ b/src/core/hle/kernel/svc_wrap.h
@@ -13,7 +13,9 @@
13 13
14namespace Kernel { 14namespace Kernel {
15 15
16#define PARAM(n) Core::CurrentArmInterface().GetReg(n) 16static inline u64 Param(int n) {
17 return Core::CurrentArmInterface().GetReg(n);
18}
17 19
18/** 20/**
19 * HLE a function return from the current ARM userland process 21 * HLE a function return from the current ARM userland process
@@ -28,23 +30,23 @@ static inline void FuncReturn(u64 res) {
28 30
29template <ResultCode func(u64)> 31template <ResultCode func(u64)>
30void SvcWrap() { 32void SvcWrap() {
31 FuncReturn(func(PARAM(0)).raw); 33 FuncReturn(func(Param(0)).raw);
32} 34}
33 35
34template <ResultCode func(u32)> 36template <ResultCode func(u32)>
35void SvcWrap() { 37void SvcWrap() {
36 FuncReturn(func((u32)PARAM(0)).raw); 38 FuncReturn(func((u32)Param(0)).raw);
37} 39}
38 40
39template <ResultCode func(u32, u32)> 41template <ResultCode func(u32, u32)>
40void SvcWrap() { 42void SvcWrap() {
41 FuncReturn(func((u32)PARAM(0), (u32)PARAM(1)).raw); 43 FuncReturn(func((u32)Param(0), (u32)Param(1)).raw);
42} 44}
43 45
44template <ResultCode func(u32*, u32)> 46template <ResultCode func(u32*, u32)>
45void SvcWrap() { 47void SvcWrap() {
46 u32 param_1 = 0; 48 u32 param_1 = 0;
47 u32 retval = func(&param_1, (u32)PARAM(1)).raw; 49 u32 retval = func(&param_1, (u32)Param(1)).raw;
48 Core::CurrentArmInterface().SetReg(1, param_1); 50 Core::CurrentArmInterface().SetReg(1, param_1);
49 FuncReturn(retval); 51 FuncReturn(retval);
50} 52}
@@ -52,39 +54,39 @@ void SvcWrap() {
52template <ResultCode func(u32*, u64)> 54template <ResultCode func(u32*, u64)>
53void SvcWrap() { 55void SvcWrap() {
54 u32 param_1 = 0; 56 u32 param_1 = 0;
55 u32 retval = func(&param_1, PARAM(1)).raw; 57 u32 retval = func(&param_1, Param(1)).raw;
56 Core::CurrentArmInterface().SetReg(1, param_1); 58 Core::CurrentArmInterface().SetReg(1, param_1);
57 FuncReturn(retval); 59 FuncReturn(retval);
58} 60}
59 61
60template <ResultCode func(u64, s32)> 62template <ResultCode func(u64, s32)>
61void SvcWrap() { 63void SvcWrap() {
62 FuncReturn(func(PARAM(0), (s32)PARAM(1)).raw); 64 FuncReturn(func(Param(0), (s32)Param(1)).raw);
63} 65}
64 66
65template <ResultCode func(u64*, u64)> 67template <ResultCode func(u64*, u64)>
66void SvcWrap() { 68void SvcWrap() {
67 u64 param_1 = 0; 69 u64 param_1 = 0;
68 u32 retval = func(&param_1, PARAM(1)).raw; 70 u32 retval = func(&param_1, Param(1)).raw;
69 Core::CurrentArmInterface().SetReg(1, param_1); 71 Core::CurrentArmInterface().SetReg(1, param_1);
70 FuncReturn(retval); 72 FuncReturn(retval);
71} 73}
72 74
73template <ResultCode func(u32, u64)> 75template <ResultCode func(u32, u64)>
74void SvcWrap() { 76void SvcWrap() {
75 FuncReturn(func((u32)(PARAM(0) & 0xFFFFFFFF), PARAM(1)).raw); 77 FuncReturn(func((u32)(Param(0) & 0xFFFFFFFF), Param(1)).raw);
76} 78}
77 79
78template <ResultCode func(u32, u32, u64)> 80template <ResultCode func(u32, u32, u64)>
79void SvcWrap() { 81void SvcWrap() {
80 FuncReturn(func((u32)(PARAM(0) & 0xFFFFFFFF), (u32)(PARAM(1) & 0xFFFFFFFF), PARAM(2)).raw); 82 FuncReturn(func((u32)(Param(0) & 0xFFFFFFFF), (u32)(Param(1) & 0xFFFFFFFF), Param(2)).raw);
81} 83}
82 84
83template <ResultCode func(u32, u32*, u64*)> 85template <ResultCode func(u32, u32*, u64*)>
84void SvcWrap() { 86void SvcWrap() {
85 u32 param_1 = 0; 87 u32 param_1 = 0;
86 u64 param_2 = 0; 88 u64 param_2 = 0;
87 ResultCode retval = func((u32)(PARAM(2) & 0xFFFFFFFF), &param_1, &param_2); 89 ResultCode retval = func((u32)(Param(2) & 0xFFFFFFFF), &param_1, &param_2);
88 Core::CurrentArmInterface().SetReg(1, param_1); 90 Core::CurrentArmInterface().SetReg(1, param_1);
89 Core::CurrentArmInterface().SetReg(2, param_2); 91 Core::CurrentArmInterface().SetReg(2, param_2);
90 FuncReturn(retval.raw); 92 FuncReturn(retval.raw);
@@ -93,46 +95,46 @@ void SvcWrap() {
93template <ResultCode func(u64, u64, u32, u32)> 95template <ResultCode func(u64, u64, u32, u32)>
94void SvcWrap() { 96void SvcWrap() {
95 FuncReturn( 97 FuncReturn(
96 func(PARAM(0), PARAM(1), (u32)(PARAM(3) & 0xFFFFFFFF), (u32)(PARAM(3) & 0xFFFFFFFF)).raw); 98 func(Param(0), Param(1), (u32)(Param(3) & 0xFFFFFFFF), (u32)(Param(3) & 0xFFFFFFFF)).raw);
97} 99}
98 100
99template <ResultCode func(u32, u64, u32)> 101template <ResultCode func(u32, u64, u32)>
100void SvcWrap() { 102void SvcWrap() {
101 FuncReturn(func((u32)PARAM(0), PARAM(1), (u32)PARAM(2)).raw); 103 FuncReturn(func((u32)Param(0), Param(1), (u32)Param(2)).raw);
102} 104}
103 105
104template <ResultCode func(u64, u64, u64)> 106template <ResultCode func(u64, u64, u64)>
105void SvcWrap() { 107void SvcWrap() {
106 FuncReturn(func(PARAM(0), PARAM(1), PARAM(2)).raw); 108 FuncReturn(func(Param(0), Param(1), Param(2)).raw);
107} 109}
108 110
109template <ResultCode func(u32, u64, u64, u32)> 111template <ResultCode func(u32, u64, u64, u32)>
110void SvcWrap() { 112void SvcWrap() {
111 FuncReturn(func((u32)PARAM(0), PARAM(1), PARAM(2), (u32)PARAM(3)).raw); 113 FuncReturn(func((u32)Param(0), Param(1), Param(2), (u32)Param(3)).raw);
112} 114}
113 115
114template <ResultCode func(u32, u64, u64)> 116template <ResultCode func(u32, u64, u64)>
115void SvcWrap() { 117void SvcWrap() {
116 FuncReturn(func((u32)PARAM(0), PARAM(1), PARAM(2)).raw); 118 FuncReturn(func((u32)Param(0), Param(1), Param(2)).raw);
117} 119}
118 120
119template <ResultCode func(u32*, u64, u64, s64)> 121template <ResultCode func(u32*, u64, u64, s64)>
120void SvcWrap() { 122void SvcWrap() {
121 u32 param_1 = 0; 123 u32 param_1 = 0;
122 ResultCode retval = func(&param_1, PARAM(1), (u32)(PARAM(2) & 0xFFFFFFFF), (s64)PARAM(3)); 124 ResultCode retval = func(&param_1, Param(1), (u32)(Param(2) & 0xFFFFFFFF), (s64)Param(3));
123 Core::CurrentArmInterface().SetReg(1, param_1); 125 Core::CurrentArmInterface().SetReg(1, param_1);
124 FuncReturn(retval.raw); 126 FuncReturn(retval.raw);
125} 127}
126 128
127template <ResultCode func(u64, u64, u32, s64)> 129template <ResultCode func(u64, u64, u32, s64)>
128void SvcWrap() { 130void SvcWrap() {
129 FuncReturn(func(PARAM(0), PARAM(1), (u32)PARAM(2), (s64)PARAM(3)).raw); 131 FuncReturn(func(Param(0), Param(1), (u32)Param(2), (s64)Param(3)).raw);
130} 132}
131 133
132template <ResultCode func(u64*, u64, u64, u64)> 134template <ResultCode func(u64*, u64, u64, u64)>
133void SvcWrap() { 135void SvcWrap() {
134 u64 param_1 = 0; 136 u64 param_1 = 0;
135 u32 retval = func(&param_1, PARAM(1), PARAM(2), PARAM(3)).raw; 137 u32 retval = func(&param_1, Param(1), Param(2), Param(3)).raw;
136 Core::CurrentArmInterface().SetReg(1, param_1); 138 Core::CurrentArmInterface().SetReg(1, param_1);
137 FuncReturn(retval); 139 FuncReturn(retval);
138} 140}
@@ -141,7 +143,7 @@ template <ResultCode func(u32*, u64, u64, u64, u32, s32)>
141void SvcWrap() { 143void SvcWrap() {
142 u32 param_1 = 0; 144 u32 param_1 = 0;
143 u32 retval = 145 u32 retval =
144 func(&param_1, PARAM(1), PARAM(2), PARAM(3), (u32)PARAM(4), (s32)(PARAM(5) & 0xFFFFFFFF)) 146 func(&param_1, Param(1), Param(2), Param(3), (u32)Param(4), (s32)(Param(5) & 0xFFFFFFFF))
145 .raw; 147 .raw;
146 Core::CurrentArmInterface().SetReg(1, param_1); 148 Core::CurrentArmInterface().SetReg(1, param_1);
147 FuncReturn(retval); 149 FuncReturn(retval);
@@ -151,13 +153,13 @@ template <ResultCode func(MemoryInfo*, PageInfo*, u64)>
151void SvcWrap() { 153void SvcWrap() {
152 MemoryInfo memory_info = {}; 154 MemoryInfo memory_info = {};
153 PageInfo page_info = {}; 155 PageInfo page_info = {};
154 u32 retval = func(&memory_info, &page_info, PARAM(2)).raw; 156 u32 retval = func(&memory_info, &page_info, Param(2)).raw;
155 157
156 Memory::Write64(PARAM(0), memory_info.base_address); 158 Memory::Write64(Param(0), memory_info.base_address);
157 Memory::Write64(PARAM(0) + 8, memory_info.size); 159 Memory::Write64(Param(0) + 8, memory_info.size);
158 Memory::Write32(PARAM(0) + 16, memory_info.type); 160 Memory::Write32(Param(0) + 16, memory_info.type);
159 Memory::Write32(PARAM(0) + 20, memory_info.attributes); 161 Memory::Write32(Param(0) + 20, memory_info.attributes);
160 Memory::Write32(PARAM(0) + 24, memory_info.permission); 162 Memory::Write32(Param(0) + 24, memory_info.permission);
161 163
162 FuncReturn(retval); 164 FuncReturn(retval);
163} 165}
@@ -165,7 +167,7 @@ void SvcWrap() {
165template <ResultCode func(u32*, u64, u64, u32)> 167template <ResultCode func(u32*, u64, u64, u32)>
166void SvcWrap() { 168void SvcWrap() {
167 u32 param_1 = 0; 169 u32 param_1 = 0;
168 u32 retval = func(&param_1, PARAM(1), PARAM(2), (u32)(PARAM(3) & 0xFFFFFFFF)).raw; 170 u32 retval = func(&param_1, Param(1), Param(2), (u32)(Param(3) & 0xFFFFFFFF)).raw;
169 Core::CurrentArmInterface().SetReg(1, param_1); 171 Core::CurrentArmInterface().SetReg(1, param_1);
170 FuncReturn(retval); 172 FuncReturn(retval);
171} 173}
@@ -174,7 +176,7 @@ template <ResultCode func(Handle*, u64, u32, u32)>
174void SvcWrap() { 176void SvcWrap() {
175 u32 param_1 = 0; 177 u32 param_1 = 0;
176 u32 retval = 178 u32 retval =
177 func(&param_1, PARAM(1), (u32)(PARAM(2) & 0xFFFFFFFF), (u32)(PARAM(3) & 0xFFFFFFFF)).raw; 179 func(&param_1, Param(1), (u32)(Param(2) & 0xFFFFFFFF), (u32)(Param(3) & 0xFFFFFFFF)).raw;
178 Core::CurrentArmInterface().SetReg(1, param_1); 180 Core::CurrentArmInterface().SetReg(1, param_1);
179 FuncReturn(retval); 181 FuncReturn(retval);
180} 182}
@@ -182,14 +184,14 @@ void SvcWrap() {
182template <ResultCode func(u64, u32, s32, s64)> 184template <ResultCode func(u64, u32, s32, s64)>
183void SvcWrap() { 185void SvcWrap() {
184 FuncReturn( 186 FuncReturn(
185 func(PARAM(0), (u32)(PARAM(1) & 0xFFFFFFFF), (s32)(PARAM(2) & 0xFFFFFFFF), (s64)PARAM(3)) 187 func(Param(0), (u32)(Param(1) & 0xFFFFFFFF), (s32)(Param(2) & 0xFFFFFFFF), (s64)Param(3))
186 .raw); 188 .raw);
187} 189}
188 190
189template <ResultCode func(u64, u32, s32, s32)> 191template <ResultCode func(u64, u32, s32, s32)>
190void SvcWrap() { 192void SvcWrap() {
191 FuncReturn(func(PARAM(0), (u32)(PARAM(1) & 0xFFFFFFFF), (s32)(PARAM(2) & 0xFFFFFFFF), 193 FuncReturn(func(Param(0), (u32)(Param(1) & 0xFFFFFFFF), (s32)(Param(2) & 0xFFFFFFFF),
192 (s32)(PARAM(3) & 0xFFFFFFFF)) 194 (s32)(Param(3) & 0xFFFFFFFF))
193 .raw); 195 .raw);
194} 196}
195 197
@@ -219,20 +221,17 @@ void SvcWrap() {
219 221
220template <void func(s64)> 222template <void func(s64)>
221void SvcWrap() { 223void SvcWrap() {
222 func((s64)PARAM(0)); 224 func((s64)Param(0));
223} 225}
224 226
225template <void func(u64, u64 len)> 227template <void func(u64, u64 len)>
226void SvcWrap() { 228void SvcWrap() {
227 func(PARAM(0), PARAM(1)); 229 func(Param(0), Param(1));
228} 230}
229 231
230template <void func(u64, u64, u64)> 232template <void func(u64, u64, u64)>
231void SvcWrap() { 233void SvcWrap() {
232 func(PARAM(0), PARAM(1), PARAM(2)); 234 func(Param(0), Param(1), Param(2));
233} 235}
234 236
235#undef PARAM
236#undef FuncReturn
237
238} // namespace Kernel 237} // namespace Kernel