summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/logging/backend.cpp1
-rw-r--r--src/common/logging/log.h1
-rw-r--r--src/core/hle/service/boss/boss.cpp967
-rw-r--r--src/core/hle/service/boss/boss.h785
-rw-r--r--src/core/hle/service/boss/boss_u.cpp60
5 files changed, 1810 insertions, 4 deletions
diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp
index 9a13a9e90..88209081d 100644
--- a/src/common/logging/backend.cpp
+++ b/src/common/logging/backend.cpp
@@ -37,6 +37,7 @@ namespace Log {
37 SUB(Service, FS) \ 37 SUB(Service, FS) \
38 SUB(Service, ERR) \ 38 SUB(Service, ERR) \
39 SUB(Service, APT) \ 39 SUB(Service, APT) \
40 SUB(Service, BOSS) \
40 SUB(Service, GSP) \ 41 SUB(Service, GSP) \
41 SUB(Service, AC) \ 42 SUB(Service, AC) \
42 SUB(Service, AM) \ 43 SUB(Service, AM) \
diff --git a/src/common/logging/log.h b/src/common/logging/log.h
index a4b4750de..8d3a2d03e 100644
--- a/src/common/logging/log.h
+++ b/src/common/logging/log.h
@@ -54,6 +54,7 @@ enum class Class : ClassType {
54 Service_FS, ///< The FS (Filesystem) service implementation 54 Service_FS, ///< The FS (Filesystem) service implementation
55 Service_ERR, ///< The ERR (Error) port implementation 55 Service_ERR, ///< The ERR (Error) port implementation
56 Service_APT, ///< The APT (Applets) service 56 Service_APT, ///< The APT (Applets) service
57 Service_BOSS, ///< The BOSS (SpotPass) service
57 Service_GSP, ///< The GSP (GPU control) service 58 Service_GSP, ///< The GSP (GPU control) service
58 Service_AC, ///< The AC (WiFi status) service 59 Service_AC, ///< The AC (WiFi status) service
59 Service_AM, ///< The AM (Application manager) service 60 Service_AM, ///< The AM (Application manager) service
diff --git a/src/core/hle/service/boss/boss.cpp b/src/core/hle/service/boss/boss.cpp
index 757a8c2c7..6ab16ccd5 100644
--- a/src/core/hle/service/boss/boss.cpp
+++ b/src/core/hle/service/boss/boss.cpp
@@ -10,11 +10,978 @@
10namespace Service { 10namespace Service {
11namespace BOSS { 11namespace BOSS {
12 12
13static u32 new_arrival_flag;
14static u32 ns_data_new_flag;
15static u32 output_flag;
16
17void InitializeSession(Service::Interface* self) {
18 u32* cmd_buff = Kernel::GetCommandBuffer();
19 // TODO(JamePeng): Figure out the meaning of these parameters
20 u64 unk_param = ((u64)cmd_buff[1] | ((u64)cmd_buff[2] << 32));
21 u32 translation = cmd_buff[3];
22 u32 unk_param4 = cmd_buff[4];
23
24 if (translation != IPC::CallingPidDesc()) {
25 cmd_buff[0] = IPC::MakeHeader(0, 0x1, 0); // 0x40
26 cmd_buff[1] = ResultCode(ErrorDescription::OS_InvalidBufferDescriptor, ErrorModule::OS,
27 ErrorSummary::WrongArgument, ErrorLevel::Permanent)
28 .raw;
29 LOG_ERROR(Service_BOSS, "The translation was invalid, translation=0x%08X", translation);
30 return;
31 }
32
33 cmd_buff[0] = IPC::MakeHeader(0x1, 0x1, 0);
34 cmd_buff[1] = RESULT_SUCCESS.raw;
35
36 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param=0x%016X, translation=0x%08X, unk_param4=0x%08X",
37 unk_param, translation, unk_param4);
38}
39
40void RegisterStorage(Service::Interface* self) {
41 u32* cmd_buff = Kernel::GetCommandBuffer();
42 // TODO(JamePeng): Figure out the meaning of these parameters
43 u32 unk_param1 = cmd_buff[1];
44 u32 unk_param2 = cmd_buff[2];
45 u32 unk_param3 = cmd_buff[3];
46 u32 unk_flag = cmd_buff[4] & 0xFF;
47
48 cmd_buff[0] = IPC::MakeHeader(0x2, 0x1, 0);
49 cmd_buff[1] = RESULT_SUCCESS.raw;
50
51 LOG_WARNING(
52 Service_BOSS,
53 "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, unk_flag=0x%08X",
54 unk_param1, unk_param2, unk_param3, unk_flag);
55}
56
57void UnregisterStorage(Service::Interface* self) {
58 u32* cmd_buff = Kernel::GetCommandBuffer();
59
60 cmd_buff[0] = IPC::MakeHeader(0x3, 0x1, 0);
61 cmd_buff[1] = RESULT_SUCCESS.raw;
62
63 LOG_WARNING(Service_BOSS, "(STUBBED) called");
64}
65
66void GetStorageInfo(Service::Interface* self) {
67 u32* cmd_buff = Kernel::GetCommandBuffer();
68
69 cmd_buff[0] = IPC::MakeHeader(0x4, 0x2, 0);
70 cmd_buff[1] = RESULT_SUCCESS.raw;
71 cmd_buff[2] = 0; // stub 0
72
73 LOG_WARNING(Service_BOSS, "(STUBBED) called");
74}
75
76void RegisterPrivateRootCa(Service::Interface* self) {
77 u32* cmd_buff = Kernel::GetCommandBuffer();
78
79 u32 translation = cmd_buff[2];
80 u32 buff_addr = cmd_buff[3];
81 u32 buff_size = (translation >> 4);
82
83 cmd_buff[0] = IPC::MakeHeader(0x5, 0x1, 0x2);
84 cmd_buff[1] = RESULT_SUCCESS.raw;
85 cmd_buff[2] = (buff_size << 4 | 0xA);
86 cmd_buff[3] = buff_addr;
87
88 LOG_WARNING(Service_BOSS, "(STUBBED) translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
89 translation, buff_addr, buff_size);
90}
91
92void RegisterPrivateClientCert(Service::Interface* self) {
93 u32* cmd_buff = Kernel::GetCommandBuffer();
94 // TODO(JamePeng): Figure out the meaning of these parameters
95 u32 unk_param1 = cmd_buff[1];
96 u32 unk_param2 = cmd_buff[2];
97 u32 translation1 = cmd_buff[3];
98 u32 buff1_addr = cmd_buff[4];
99 u32 buff1_size = (translation1 >> 4);
100 u32 translation2 = cmd_buff[5];
101 u32 buff2_addr = cmd_buff[6];
102 u32 buff2_size = (translation2 >> 4);
103
104 cmd_buff[0] = IPC::MakeHeader(0x6, 0x1, 0x4);
105 cmd_buff[1] = RESULT_SUCCESS.raw;
106 cmd_buff[2] = (buff1_size << 4 | 0xA);
107 cmd_buff[3] = buff1_addr;
108 cmd_buff[2] = (buff2_size << 4 | 0xA);
109 cmd_buff[3] = buff2_addr;
110
111 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, "
112 "translation1=0x%08X, buff1_addr=0x%08X, buff1_size=0x%08X, "
113 "translation2=0x%08X, buff2_addr=0x%08X, buff2_size=0x%08X",
114 unk_param1, unk_param2, translation1, buff1_addr, buff1_size, translation2,
115 buff2_addr, buff2_size);
116}
117
118void GetNewArrivalFlag(Service::Interface* self) {
119 u32* cmd_buff = Kernel::GetCommandBuffer();
120
121 cmd_buff[0] = IPC::MakeHeader(0x7, 0x2, 0);
122 cmd_buff[1] = RESULT_SUCCESS.raw;
123 cmd_buff[2] = new_arrival_flag;
124
125 LOG_WARNING(Service_BOSS, "(STUBBED) new_arrival_flag=%u", new_arrival_flag);
126}
127
128void RegisterNewArrivalEvent(Service::Interface* self) {
129 u32* cmd_buff = Kernel::GetCommandBuffer();
130 // TODO(JamePeng): Figure out the meaning of these parameters
131 u32 unk_param1 = cmd_buff[1];
132 u32 unk_param2 = cmd_buff[2];
133
134 cmd_buff[0] = IPC::MakeHeader(0x8, 0x1, 0);
135 cmd_buff[1] = RESULT_SUCCESS.raw;
136
137 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X", unk_param1,
138 unk_param2);
139}
140
141void SetOptoutFlag(Service::Interface* self) {
142 u32* cmd_buff = Kernel::GetCommandBuffer();
143
144 output_flag = cmd_buff[1] & 0xFF;
145
146 cmd_buff[0] = IPC::MakeHeader(0x9, 0x1, 0);
147 cmd_buff[1] = RESULT_SUCCESS.raw;
148
149 LOG_WARNING(Service_BOSS, "output_flag=%u", output_flag);
150}
151
152void GetOptoutFlag(Service::Interface* self) {
153 u32* cmd_buff = Kernel::GetCommandBuffer();
154
155 cmd_buff[0] = IPC::MakeHeader(0xA, 0x2, 0);
156 cmd_buff[1] = RESULT_SUCCESS.raw;
157 cmd_buff[2] = output_flag;
158
159 LOG_WARNING(Service_BOSS, "output_flag=%u", output_flag);
160}
161
162void RegisterTask(Service::Interface* self) {
163 u32* cmd_buff = Kernel::GetCommandBuffer();
164 // TODO(JamePeng): Figure out the meaning of these parameters
165 u32 unk_param1 = cmd_buff[1];
166 u32 unk_param2 = cmd_buff[2] & 0xFF;
167 u32 unk_param3 = cmd_buff[3] & 0xFF;
168 u32 translation = cmd_buff[4];
169 u32 buff_addr = cmd_buff[5];
170 u32 buff_size = (translation >> 4);
171
172 cmd_buff[0] = IPC::MakeHeader(0xB, 0x1, 0x2);
173 cmd_buff[1] = RESULT_SUCCESS.raw;
174 cmd_buff[2] = (buff_size << 4 | 0xA);
175 cmd_buff[3] = buff_addr;
176
177 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
178 "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
179 unk_param1, unk_param2, unk_param3, translation, buff_addr, buff_size);
180}
181
182void UnregisterTask(Service::Interface* self) {
183 u32* cmd_buff = Kernel::GetCommandBuffer();
184 // TODO(JamePeng): Figure out the meaning of these parameters
185 u32 unk_param1 = cmd_buff[1];
186 u32 unk_param2 = cmd_buff[2] & 0xFF;
187 u32 translation = cmd_buff[3];
188 u32 buff_addr = cmd_buff[4];
189 u32 buff_size = (translation >> 4);
190
191 cmd_buff[0] = IPC::MakeHeader(0xC, 0x1, 0x2);
192 cmd_buff[1] = RESULT_SUCCESS.raw;
193 cmd_buff[2] = (buff_size << 4 | 0xA);
194 cmd_buff[3] = buff_addr;
195
196 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, "
197 "buff_addr=0x%08X, buff_size=0x%08X",
198 unk_param1, unk_param2, translation, buff_addr, buff_size);
199}
200
201void ReconfigureTask(Service::Interface* self) {
202 u32* cmd_buff = Kernel::GetCommandBuffer();
203 // TODO(JamePeng): Figure out the meaning of these parameters
204 u32 unk_param1 = cmd_buff[1];
205 u32 unk_param2 = cmd_buff[2] & 0xFF;
206 u32 translation = cmd_buff[3];
207 u32 buff_addr = cmd_buff[4];
208 u32 buff_size = (translation >> 4);
209
210 cmd_buff[0] = IPC::MakeHeader(0xD, 0x1, 0x2);
211 cmd_buff[1] = RESULT_SUCCESS.raw;
212 cmd_buff[2] = (buff_size << 4 | 0xA);
213 cmd_buff[3] = buff_addr;
214
215 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, "
216 "buff_addr=0x%08X, buff_size=0x%08X",
217 unk_param1, unk_param2, translation, buff_addr, buff_size);
218}
219
220void GetTaskIdList(Service::Interface* self) {
221 u32* cmd_buff = Kernel::GetCommandBuffer();
222
223 cmd_buff[0] = IPC::MakeHeader(0xE, 0x1, 0);
224 cmd_buff[1] = RESULT_SUCCESS.raw;
225
226 LOG_WARNING(Service_BOSS, "(STUBBED) called");
227}
228
229void GetStepIdList(Service::Interface* self) {
230 u32* cmd_buff = Kernel::GetCommandBuffer();
231
232 u32 translation = cmd_buff[2];
233 u32 buff_addr = cmd_buff[3];
234 u32 buff_size = (translation >> 4);
235
236 cmd_buff[0] = IPC::MakeHeader(0xF, 0x1, 0x2);
237 cmd_buff[1] = RESULT_SUCCESS.raw;
238 cmd_buff[2] = (buff_size << 4 | 0xA);
239 cmd_buff[3] = buff_addr;
240
241 LOG_WARNING(Service_BOSS, "(STUBBED) translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
242 translation, buff_addr, buff_size);
243}
244
245void GetNsDataIdList(Service::Interface* self) {
246 u32* cmd_buff = Kernel::GetCommandBuffer();
247 // TODO(JamePeng): Figure out the meaning of these parameters
248 u32 unk_param1 = cmd_buff[1];
249 u32 unk_param2 = cmd_buff[2];
250 u32 unk_param3 = cmd_buff[3];
251 u32 unk_param4 = cmd_buff[4];
252 u32 translation = cmd_buff[5];
253 u32 buff_addr = cmd_buff[6];
254 u32 buff_size = (translation >> 4);
255
256 cmd_buff[0] = IPC::MakeHeader(0x10, 0x3, 0x2);
257 cmd_buff[1] = RESULT_SUCCESS.raw;
258 cmd_buff[2] = 0; // stub 0 (16 bit value)
259 cmd_buff[3] = 0; // stub 0 (16 bit value)
260 cmd_buff[4] = (buff_size << 4 | 0xC);
261 cmd_buff[5] = buff_addr;
262
263 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
264 "unk_param4=0x%08X, translation=0x%08X, "
265 "buff_addr=0x%08X, buff_size=0x%08X",
266 unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size);
267}
268
269void GetOwnNsDataIdList(Service::Interface* self) {
270 u32* cmd_buff = Kernel::GetCommandBuffer();
271 // TODO(JamePeng): Figure out the meaning of these parameters
272 u32 unk_param1 = cmd_buff[1];
273 u32 unk_param2 = cmd_buff[2];
274 u32 unk_param3 = cmd_buff[3];
275 u32 unk_param4 = cmd_buff[4];
276 u32 translation = cmd_buff[5];
277 u32 buff_addr = cmd_buff[6];
278 u32 buff_size = (translation >> 4);
279
280 cmd_buff[0] = IPC::MakeHeader(0x11, 0x3, 0x2);
281 cmd_buff[1] = RESULT_SUCCESS.raw;
282 cmd_buff[2] = 0; // stub 0 (16 bit value)
283 cmd_buff[3] = 0; // stub 0 (16 bit value)
284 cmd_buff[4] = (buff_size << 4 | 0xC);
285 cmd_buff[5] = buff_addr;
286
287 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
288 "unk_param4=0x%08X, translation=0x%08X, "
289 "buff_addr=0x%08X, buff_size=0x%08X",
290 unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size);
291}
292
293void GetNewDataNsDataIdList(Service::Interface* self) {
294 u32* cmd_buff = Kernel::GetCommandBuffer();
295 // TODO(JamePeng): Figure out the meaning of these parameters
296 u32 unk_param1 = cmd_buff[1];
297 u32 unk_param2 = cmd_buff[2];
298 u32 unk_param3 = cmd_buff[3];
299 u32 unk_param4 = cmd_buff[4];
300 u32 translation = cmd_buff[5];
301 u32 buff_addr = cmd_buff[6];
302 u32 buff_size = (translation >> 4);
303
304 cmd_buff[0] = IPC::MakeHeader(0x12, 0x3, 0x2);
305 cmd_buff[1] = RESULT_SUCCESS.raw;
306 cmd_buff[2] = 0; // stub 0 (16 bit value)
307 cmd_buff[3] = 0; // stub 0 (16 bit value)
308 cmd_buff[4] = (buff_size << 4 | 0xC);
309 cmd_buff[5] = buff_addr;
310
311 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
312 "unk_param4=0x%08X, translation=0x%08X, "
313 "buff_addr=0x%08X, buff_size=0x%08X",
314 unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size);
315}
316
317void GetOwnNewDataNsDataIdList(Service::Interface* self) {
318 u32* cmd_buff = Kernel::GetCommandBuffer();
319 // TODO(JamePeng): Figure out the meaning of these parameters
320 u32 unk_param1 = cmd_buff[1];
321 u32 unk_param2 = cmd_buff[2];
322 u32 unk_param3 = cmd_buff[3];
323 u32 unk_param4 = cmd_buff[4];
324 u32 translation = cmd_buff[5];
325 u32 buff_addr = cmd_buff[6];
326 u32 buff_size = (translation >> 4);
327
328 cmd_buff[0] = IPC::MakeHeader(0x13, 0x3, 0x2);
329 cmd_buff[1] = RESULT_SUCCESS.raw;
330 cmd_buff[2] = 0; // stub 0 (16 bit value)
331 cmd_buff[3] = 0; // stub 0 (16 bit value)
332 cmd_buff[4] = (buff_size << 4 | 0xC);
333 cmd_buff[5] = buff_addr;
334
335 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
336 "unk_param4=0x%08X, translation=0x%08X, "
337 "buff_addr=0x%08X, buff_size=0x%08X",
338 unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size);
339}
340
341void SendProperty(Service::Interface* self) {
342 u32* cmd_buff = Kernel::GetCommandBuffer();
343 // TODO(JamePeng): Figure out the meaning of these parameters
344 u32 unk_param1 = cmd_buff[1];
345 u32 unk_param2 = cmd_buff[2];
346 u32 translation = cmd_buff[3];
347 u32 buff_addr = cmd_buff[4];
348 u32 buff_size = (translation >> 4);
349
350 cmd_buff[0] = IPC::MakeHeader(0x14, 0x1, 0x2);
351 cmd_buff[1] = RESULT_SUCCESS.raw;
352 cmd_buff[2] = (buff_size << 4 | 0xA);
353 cmd_buff[3] = buff_addr;
354
355 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, "
356 "buff_addr=0x%08X, buff_size=0x%08X",
357 unk_param1, unk_param2, translation, buff_addr, buff_size);
358}
359
360void SendPropertyHandle(Service::Interface* self) {
361 u32* cmd_buff = Kernel::GetCommandBuffer();
362 // TODO(JamePeng): Figure out the meaning of these parameters
363 u32 unk_param1 = cmd_buff[2] & 0xFF;
364 u32 translation = cmd_buff[3];
365 u32 buff_addr = cmd_buff[4];
366 u32 buff_size = (translation >> 4);
367
368 cmd_buff[0] = IPC::MakeHeader(0x15, 0x1, 0x2);
369 cmd_buff[1] = RESULT_SUCCESS.raw;
370 cmd_buff[2] = (buff_size << 4 | 0xA);
371 cmd_buff[3] = buff_addr;
372
373 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
374 "buff_addr=0x%08X, buff_size=0x%08X",
375 unk_param1, translation, buff_addr, buff_size);
376}
377
378void ReceiveProperty(Service::Interface* self) {
379 u32* cmd_buff = Kernel::GetCommandBuffer();
380 // TODO(JamePeng): Figure out the meaning of these parameters
381 u32 unk_param1 = cmd_buff[1];
382 u32 buff_size = cmd_buff[2];
383 u32 translation = cmd_buff[3];
384 u32 buff_addr = cmd_buff[4];
385
386 cmd_buff[0] = IPC::MakeHeader(0x16, 0x2, 0x2);
387 cmd_buff[1] = RESULT_SUCCESS.raw;
388 cmd_buff[2] = 0; // stub 0 (32 bit value)
389 cmd_buff[2] = (buff_size << 4 | 0xC);
390 cmd_buff[3] = buff_addr;
391
392 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, buff_size=0x%08X, "
393 "translation=0x%08X, buff_addr=0x%08X",
394 unk_param1, buff_size, translation, buff_addr);
395}
396
397void UpdateTaskInterval(Service::Interface* self) {
398 u32* cmd_buff = Kernel::GetCommandBuffer();
399 // TODO(JamePeng): Figure out the meaning of these parameters
400 u32 unk_param1 = cmd_buff[1];
401 u32 unk_param2 = cmd_buff[2] & 0xFF;
402 u32 translation = cmd_buff[3];
403 u32 buff_addr = cmd_buff[4];
404 u32 buff_size = (translation >> 4);
405
406 cmd_buff[0] = IPC::MakeHeader(0x17, 0x1, 0x2);
407 cmd_buff[1] = RESULT_SUCCESS.raw;
408 cmd_buff[2] = (buff_size << 4 | 0xA);
409 cmd_buff[3] = buff_addr;
410
411 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, "
412 "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
413 unk_param1, unk_param2, translation, buff_addr, buff_size);
414}
415
416void UpdateTaskCount(Service::Interface* self) {
417 u32* cmd_buff = Kernel::GetCommandBuffer();
418
419 u32 buff_size = cmd_buff[1];
420 u32 unk_param2 = cmd_buff[2]; // TODO(JamePeng): Figure out the meaning of these parameters
421 u32 translation = cmd_buff[3];
422 u32 buff_addr = cmd_buff[4];
423
424 cmd_buff[0] = IPC::MakeHeader(0x18, 0x1, 0x2);
425 cmd_buff[1] = RESULT_SUCCESS.raw;
426 cmd_buff[2] = (buff_size << 4 | 0xA);
427 cmd_buff[3] = buff_addr;
428
429 LOG_WARNING(Service_BOSS, "(STUBBED) buff_size=0x%08X, unk_param2=0x%08X, "
430 "translation=0x%08X, buff_addr=0x%08X",
431 buff_size, unk_param2, translation, buff_addr);
432}
433
434void GetTaskInterval(Service::Interface* self) {
435 u32* cmd_buff = Kernel::GetCommandBuffer();
436
437 u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
438 u32 translation = cmd_buff[2];
439 u32 buff_addr = cmd_buff[3];
440 u32 buff_size = (translation >> 4);
441
442 cmd_buff[0] = IPC::MakeHeader(0x19, 0x2, 0x2);
443 cmd_buff[1] = RESULT_SUCCESS.raw;
444 cmd_buff[2] = 0; // stub 0 ( 32bit value)
445 cmd_buff[3] = (buff_size << 4 | 0xA);
446 cmd_buff[4] = buff_addr;
447
448 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
449 "buff_addr=0x%08X, buff_size=0x%08X",
450 unk_param1, translation, buff_addr, buff_size);
451}
452
453void GetTaskCount(Service::Interface* self) {
454 u32* cmd_buff = Kernel::GetCommandBuffer();
455
456 u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
457 u32 translation = cmd_buff[2];
458 u32 buff_addr = cmd_buff[3];
459 u32 buff_size = (translation >> 4);
460
461 cmd_buff[0] = IPC::MakeHeader(0x1A, 0x2, 0x2);
462 cmd_buff[1] = RESULT_SUCCESS.raw;
463 cmd_buff[2] = 0; // stub 0 ( 32bit value)
464 cmd_buff[3] = (buff_size << 4 | 0xA);
465 cmd_buff[4] = buff_addr;
466
467 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
468 "buff_addr=0x%08X, buff_size=0x%08X",
469 unk_param1, translation, buff_addr, buff_size);
470}
471
472void GetTaskServiceStatus(Service::Interface* self) {
473 u32* cmd_buff = Kernel::GetCommandBuffer();
474
475 u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
476 u32 translation = cmd_buff[2];
477 u32 buff_addr = cmd_buff[3];
478 u32 buff_size = (translation >> 4);
479
480 cmd_buff[0] = IPC::MakeHeader(0x1B, 0x2, 0x2);
481 cmd_buff[1] = RESULT_SUCCESS.raw;
482 cmd_buff[2] = 0; // stub 0 ( 8bit value)
483 cmd_buff[3] = (buff_size << 4 | 0xA);
484 cmd_buff[4] = buff_addr;
485
486 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
487 "buff_addr=0x%08X, buff_size=0x%08X",
488 unk_param1, translation, buff_addr, buff_size);
489}
490
491void StartTask(Service::Interface* self) {
492 u32* cmd_buff = Kernel::GetCommandBuffer();
493
494 u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
495 u32 translation = cmd_buff[2];
496 u32 buff_addr = cmd_buff[3];
497 u32 buff_size = (translation >> 4);
498
499 cmd_buff[0] = IPC::MakeHeader(0x1C, 0x1, 0x2);
500 cmd_buff[1] = RESULT_SUCCESS.raw;
501 cmd_buff[2] = (buff_size << 4 | 0xA);
502 cmd_buff[3] = buff_addr;
503
504 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
505 "buff_addr=0x%08X, buff_size=0x%08X",
506 unk_param1, translation, buff_addr, buff_size);
507}
508
509void StartTaskImmediate(Service::Interface* self) {
510 u32* cmd_buff = Kernel::GetCommandBuffer();
511
512 u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
513 u32 translation = cmd_buff[2];
514 u32 buff_addr = cmd_buff[3];
515 u32 buff_size = (translation >> 4);
516
517 cmd_buff[0] = IPC::MakeHeader(0x1D, 0x1, 0x2);
518 cmd_buff[1] = RESULT_SUCCESS.raw;
519 cmd_buff[2] = (buff_size << 4 | 0xA);
520 cmd_buff[3] = buff_addr;
521
522 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
523 "buff_addr=0x%08X, buff_size=0x%08X",
524 unk_param1, translation, buff_addr, buff_size);
525}
526
527void CancelTask(Service::Interface* self) {
528 u32* cmd_buff = Kernel::GetCommandBuffer();
529 // TODO(JamePeng): Figure out the meaning of these parameters
530 u32 unk_param1 = cmd_buff[1];
531 u32 translation = cmd_buff[2];
532 u32 buff_addr = cmd_buff[3];
533 u32 buff_size = (translation >> 4);
534
535 cmd_buff[0] = IPC::MakeHeader(0x1E, 0x1, 0x2);
536 cmd_buff[1] = RESULT_SUCCESS.raw;
537 cmd_buff[2] = (buff_size << 4 | 0xA);
538 cmd_buff[3] = buff_addr;
539
540 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
541 "buff_addr=0x%08X, buff_size=0x%08X",
542 unk_param1, translation, buff_addr, buff_size);
543}
544
545void GetTaskFinishHandle(Service::Interface* self) {
546 u32* cmd_buff = Kernel::GetCommandBuffer();
547
548 cmd_buff[0] = IPC::MakeHeader(0x1F, 0x1, 0x2);
549 cmd_buff[1] = RESULT_SUCCESS.raw;
550 cmd_buff[2] = 0;
551 cmd_buff[3] = 0; // stub 0(This should be a handle of task_finish ?)
552
553 LOG_WARNING(Service_BOSS, "(STUBBED) called");
554}
555
556void GetTaskState(Service::Interface* self) {
557 u32* cmd_buff = Kernel::GetCommandBuffer();
558 // TODO(JamePeng): Figure out the meaning of these parameters
559 u32 buff_size = cmd_buff[1];
560 u32 unk_param2 = cmd_buff[2] & 0xFF;
561 u32 translation = cmd_buff[3];
562 u32 buff_addr = cmd_buff[4];
563
564 cmd_buff[0] = IPC::MakeHeader(0x20, 0x4, 0x2);
565 cmd_buff[1] = RESULT_SUCCESS.raw;
566 cmd_buff[2] = 0; // stub 0 (8 bit value)
567 cmd_buff[3] = 0; // stub 0 (32 bit value)
568 cmd_buff[4] = 0; // stub 0 (8 bit value)
569 cmd_buff[5] = (buff_size << 4 | 0xA);
570 cmd_buff[6] = buff_addr;
571
572 LOG_WARNING(Service_BOSS, "(STUBBED) buff_size=0x%08X, unk_param2=0x%08X, "
573 "translation=0x%08X, buff_addr=0x%08X",
574 buff_size, unk_param2, translation, buff_addr);
575}
576
577void GetTaskResult(Service::Interface* self) {
578 u32* cmd_buff = Kernel::GetCommandBuffer();
579 // TODO(JamePeng): Figure out the meaning of these parameters
580 u32 unk_param1 = cmd_buff[1];
581 u32 translation = cmd_buff[2];
582 u32 buff_addr = cmd_buff[3];
583 u32 buff_size = (translation >> 4);
584
585 cmd_buff[0] = IPC::MakeHeader(0x21, 0x4, 0x2);
586 cmd_buff[1] = RESULT_SUCCESS.raw;
587 cmd_buff[2] = 0; // stub 0 (8 bit value)
588 cmd_buff[3] = 0; // stub 0 (32 bit value)
589 cmd_buff[4] = 0; // stub 0 (8 bit value)
590 cmd_buff[5] = (buff_size << 4 | 0xA);
591 cmd_buff[6] = buff_addr;
592
593 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
594 "buff_addr=0x%08X, buff_size=0x%08X",
595 unk_param1, translation, buff_addr, buff_size);
596}
597
598void GetTaskCommErrorCode(Service::Interface* self) {
599 u32* cmd_buff = Kernel::GetCommandBuffer();
600 // TODO(JamePeng): Figure out the meaning of these parameters
601 u32 unk_param1 = cmd_buff[1];
602 u32 translation = cmd_buff[2];
603 u32 buff_addr = cmd_buff[3];
604 u32 buff_size = (translation >> 4);
605
606 cmd_buff[0] = IPC::MakeHeader(0x22, 0x4, 0x2);
607 cmd_buff[1] = RESULT_SUCCESS.raw;
608 cmd_buff[2] = 0; // stub 0 (32 bit value)
609 cmd_buff[3] = 0; // stub 0 (32 bit value)
610 cmd_buff[4] = 0; // stub 0 (8 bit value)
611 cmd_buff[5] = (buff_size << 4 | 0xA);
612 cmd_buff[6] = buff_addr;
613
614 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
615 "buff_addr=0x%08X, buff_size=0x%08X",
616 unk_param1, translation, buff_addr, buff_size);
617}
618
619void GetTaskStatus(Service::Interface* self) {
620 u32* cmd_buff = Kernel::GetCommandBuffer();
621 // TODO(JamePeng): Figure out the meaning of these parameters
622 u32 unk_param1 = cmd_buff[1];
623 u32 unk_param2 = cmd_buff[2] & 0xFF;
624 u32 unk_param3 = cmd_buff[3] & 0xFF;
625 u32 translation = cmd_buff[4];
626 u32 buff_addr = cmd_buff[5];
627 u32 buff_size = (translation >> 4);
628
629 cmd_buff[0] = IPC::MakeHeader(0x23, 0x2, 0x2);
630 cmd_buff[1] = RESULT_SUCCESS.raw;
631 cmd_buff[2] = 0; // stub 0 (8 bit value)
632 cmd_buff[3] = (buff_size << 4 | 0xA);
633 cmd_buff[4] = buff_addr;
634
635 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
636 "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
637 unk_param1, unk_param2, unk_param3, translation, buff_addr, buff_size);
638}
639
640void GetTaskError(Service::Interface* self) {
641 u32* cmd_buff = Kernel::GetCommandBuffer();
642 // TODO(JamePeng): Figure out the meaning of these parameters
643 u32 unk_param1 = cmd_buff[1];
644 u32 unk_param2 = cmd_buff[2] & 0xFF;
645 u32 translation = cmd_buff[4];
646 u32 buff_addr = cmd_buff[5];
647 u32 buff_size = (translation >> 4);
648
649 cmd_buff[0] = IPC::MakeHeader(0x24, 0x2, 0x2);
650 cmd_buff[1] = RESULT_SUCCESS.raw;
651 cmd_buff[2] = 0; // stub 0 (8 bit value)
652 cmd_buff[3] = (buff_size << 4 | 0xA);
653 cmd_buff[4] = buff_addr;
654
655 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, "
656 "buff_addr=0x%08X, buff_size=0x%08X",
657 unk_param1, unk_param2, translation, buff_addr, buff_size);
658}
659
660void GetTaskInfo(Service::Interface* self) {
661 u32* cmd_buff = Kernel::GetCommandBuffer();
662 // TODO(JamePeng): Figure out the meaning of these parameters
663 u32 unk_param1 = cmd_buff[1];
664 u32 unk_param2 = cmd_buff[2] & 0xFF;
665 u32 translation = cmd_buff[4];
666 u32 buff_addr = cmd_buff[5];
667 u32 buff_size = (translation >> 4);
668
669 cmd_buff[0] = IPC::MakeHeader(0x25, 0x1, 0x2);
670 cmd_buff[1] = RESULT_SUCCESS.raw;
671 cmd_buff[2] = (buff_size << 4 | 0xA);
672 cmd_buff[3] = buff_addr;
673
674 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, "
675 "buff_addr=0x%08X, buff_size=0x%08X",
676 unk_param1, unk_param2, translation, buff_addr, buff_size);
677}
678
679void DeleteNsData(Service::Interface* self) {
680 u32* cmd_buff = Kernel::GetCommandBuffer();
681 // TODO(JamePeng): Figure out the meaning of these parameters
682 u32 unk_param1 = cmd_buff[1];
683
684 cmd_buff[0] = IPC::MakeHeader(0x26, 0x1, 0);
685 cmd_buff[1] = RESULT_SUCCESS.raw;
686
687 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X", unk_param1);
688}
689
690void GetNsDataHeaderInfo(Service::Interface* self) {
691 u32* cmd_buff = Kernel::GetCommandBuffer();
692 // TODO(JamePeng): Figure out the meaning of these parameters
693 u32 unk_param1 = cmd_buff[1];
694 u32 unk_param2 = cmd_buff[2] & 0xFF;
695 u32 unk_param3 = cmd_buff[3];
696 u32 translation = cmd_buff[4];
697 u32 buff_addr = cmd_buff[5];
698 u32 buff_size = (translation >> 4);
699
700 cmd_buff[0] = IPC::MakeHeader(0x27, 0x1, 0x2);
701 cmd_buff[1] = RESULT_SUCCESS.raw;
702 cmd_buff[2] = (buff_size << 4 | 0xC);
703 cmd_buff[3] = buff_addr;
704
705 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
706 "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
707 unk_param1, unk_param2, unk_param3, translation, buff_addr, buff_size);
708}
709
710void ReadNsData(Service::Interface* self) {
711 u32* cmd_buff = Kernel::GetCommandBuffer();
712 // TODO(JamePeng): Figure out the meaning of these parameters
713 u32 unk_param1 = cmd_buff[1];
714 u32 unk_param2 = cmd_buff[2];
715 u32 unk_param3 = cmd_buff[3];
716 u32 unk_param4 = cmd_buff[4];
717 u32 translation = cmd_buff[5];
718 u32 buff_addr = cmd_buff[6];
719 u32 buff_size = (translation >> 4);
720
721 cmd_buff[0] = IPC::MakeHeader(0x28, 0x3, 0x2);
722 cmd_buff[1] = RESULT_SUCCESS.raw;
723 cmd_buff[2] = 0; // stub 0 (32bit value)
724 cmd_buff[3] = 0; // stub 0 (32bit value)
725 cmd_buff[4] = (buff_size << 4 | 0xC);
726 cmd_buff[5] = buff_addr;
727
728 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
729 "unk_param4=0x%08X, translation=0x%08X, "
730 "buff_addr=0x%08X, buff_size=0x%08X",
731 unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size);
732}
733
734void SetNsDataAdditionalInfo(Service::Interface* self) {
735 u32* cmd_buff = Kernel::GetCommandBuffer();
736 // TODO(JamePeng): Figure out the meaning of these parameters
737 u32 unk_param1 = cmd_buff[1];
738 u32 unk_param2 = cmd_buff[2];
739
740 cmd_buff[0] = IPC::MakeHeader(0x29, 0x1, 0);
741 cmd_buff[1] = RESULT_SUCCESS.raw;
742
743 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X", unk_param1,
744 unk_param2);
745}
746
747void GetNsDataAdditionalInfo(Service::Interface* self) {
748 u32* cmd_buff = Kernel::GetCommandBuffer();
749 // TODO(JamePeng): Figure out the meaning of these parameters
750 u32 unk_param1 = cmd_buff[1];
751
752 cmd_buff[0] = IPC::MakeHeader(0x2A, 0x2, 0);
753 cmd_buff[1] = RESULT_SUCCESS.raw;
754 cmd_buff[2] = 0; // stub 0 (32bit value)
755
756 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X", unk_param1);
757}
758
759void SetNsDataNewFlag(Service::Interface* self) {
760 u32* cmd_buff = Kernel::GetCommandBuffer();
761 // TODO(JamePeng): Figure out the meaning of these parameters
762 u32 unk_param1 = cmd_buff[1];
763 ns_data_new_flag = cmd_buff[2] & 0xFF;
764
765 cmd_buff[0] = IPC::MakeHeader(0x2B, 0x1, 0);
766 cmd_buff[1] = RESULT_SUCCESS.raw;
767
768 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, ns_data_new_flag=0x%08X", unk_param1,
769 ns_data_new_flag);
770}
771
772void GetNsDataNewFlag(Service::Interface* self) {
773 u32* cmd_buff = Kernel::GetCommandBuffer();
774 // TODO(JamePeng): Figure out the meaning of these parameters
775 u32 unk_param1 = cmd_buff[1];
776
777 cmd_buff[0] = IPC::MakeHeader(0x2C, 0x2, 0);
778 cmd_buff[1] = RESULT_SUCCESS.raw;
779 cmd_buff[2] = ns_data_new_flag;
780
781 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, ns_data_new_flag=0x%08X", unk_param1,
782 ns_data_new_flag);
783}
784
785void GetNsDataLastUpdate(Service::Interface* self) {
786 u32* cmd_buff = Kernel::GetCommandBuffer();
787 // TODO(JamePeng): Figure out the meaning of these parameters
788 u32 unk_param1 = cmd_buff[1];
789
790 cmd_buff[0] = IPC::MakeHeader(0x2D, 0x3, 0);
791 cmd_buff[1] = RESULT_SUCCESS.raw;
792 cmd_buff[2] = 0; // stub 0 (32bit value)
793 cmd_buff[3] = 0; // stub 0 (32bit value)
794
795 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X", unk_param1);
796}
797
798void GetErrorCode(Service::Interface* self) {
799 u32* cmd_buff = Kernel::GetCommandBuffer();
800 // TODO(JamePeng): Figure out the meaning of these parameters
801 u32 unk_param1 = cmd_buff[1];
802
803 cmd_buff[0] = IPC::MakeHeader(0x2E, 0x2, 0);
804 cmd_buff[1] = RESULT_SUCCESS.raw;
805 cmd_buff[2] = 0; // stub 0 (32bit value)
806
807 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X", unk_param1);
808}
809
810void RegisterStorageEntry(Service::Interface* self) {
811 u32* cmd_buff = Kernel::GetCommandBuffer();
812 // TODO(JamePeng): Figure out the meaning of these parameters
813 u32 unk_param1 = cmd_buff[1];
814 u32 unk_param2 = cmd_buff[2];
815 u32 unk_param3 = cmd_buff[3];
816 u32 unk_param4 = cmd_buff[4];
817 u32 unk_param5 = cmd_buff[5] & 0xFF;
818
819 cmd_buff[0] = IPC::MakeHeader(0x2F, 0x1, 0);
820 cmd_buff[1] = RESULT_SUCCESS.raw;
821
822 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
823 "unk_param4=0x%08X, unk_param5=0x%08X",
824 unk_param1, unk_param2, unk_param3, unk_param4, unk_param5);
825}
826
827void GetStorageEntryInfo(Service::Interface* self) {
828 u32* cmd_buff = Kernel::GetCommandBuffer();
829
830 cmd_buff[0] = IPC::MakeHeader(0x30, 0x3, 0);
831 cmd_buff[1] = RESULT_SUCCESS.raw;
832 cmd_buff[2] = 0; // stub 0 (32bit value)
833 cmd_buff[3] = 0; // stub 0 (16bit value)
834
835 LOG_WARNING(Service_BOSS, "(STUBBED) called");
836}
837
838void SetStorageOption(Service::Interface* self) {
839 u32* cmd_buff = Kernel::GetCommandBuffer();
840 // TODO(JamePeng): Figure out the meaning of these parameters
841 u32 unk_param1 = cmd_buff[1] & 0xFF;
842 u32 unk_param2 = cmd_buff[2];
843 u32 unk_param3 = cmd_buff[3];
844 u32 unk_param4 = cmd_buff[4];
845
846 cmd_buff[0] = IPC::MakeHeader(0x31, 0x1, 0);
847 cmd_buff[1] = RESULT_SUCCESS.raw;
848
849 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, "
850 "unk_param3=0x%08X, unk_param4=0x%08X",
851 unk_param1, unk_param2, unk_param3, unk_param4);
852}
853
854void GetStorageOption(Service::Interface* self) {
855 u32* cmd_buff = Kernel::GetCommandBuffer();
856
857 cmd_buff[0] = IPC::MakeHeader(0x32, 0x5, 0);
858 cmd_buff[1] = RESULT_SUCCESS.raw;
859 cmd_buff[2] = 0; // stub 0 (32bit value)
860 cmd_buff[3] = 0; // stub 0 (8bit value)
861 cmd_buff[4] = 0; // stub 0 (16bit value)
862 cmd_buff[5] = 0; // stub 0 (16bit value)
863
864 LOG_WARNING(Service_BOSS, "(STUBBED) called");
865}
866
867void StartBgImmediate(Service::Interface* self) {
868 u32* cmd_buff = Kernel::GetCommandBuffer();
869
870 u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
871 u32 translation = cmd_buff[2];
872 u32 buff_addr = cmd_buff[3];
873 u32 buff_size = (translation >> 4);
874
875 cmd_buff[0] = IPC::MakeHeader(0x33, 0x1, 0x2);
876 cmd_buff[1] = RESULT_SUCCESS.raw;
877 cmd_buff[2] = (buff_size << 4 | 0xA);
878 cmd_buff[3] = buff_addr;
879
880 LOG_WARNING(Service_BOSS, "(STUBBED) buff_size=0x%08X, unk_param2=0x%08X, "
881 "translation=0x%08X, buff_addr=0x%08X",
882 unk_param1, translation, buff_addr, buff_size);
883}
884
885void GetTaskActivePriority(Service::Interface* self) {
886 u32* cmd_buff = Kernel::GetCommandBuffer();
887
888 u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
889 u32 translation = cmd_buff[2];
890 u32 buff_addr = cmd_buff[3];
891 u32 buff_size = (translation >> 4);
892
893 cmd_buff[0] = IPC::MakeHeader(0x34, 0x2, 0x2);
894 cmd_buff[1] = RESULT_SUCCESS.raw;
895 cmd_buff[2] = 0; // stub 0 (8bit value)
896 cmd_buff[3] = (buff_size << 4 | 0xA);
897 cmd_buff[4] = buff_addr;
898
899 LOG_WARNING(Service_BOSS, "(STUBBED) buff_size=0x%08X, unk_param2=0x%08X, "
900 "translation=0x%08X, buff_addr=0x%08X",
901 unk_param1, translation, buff_addr, buff_size);
902}
903
904void RegisterImmediateTask(Service::Interface* self) {
905 u32* cmd_buff = Kernel::GetCommandBuffer();
906 // TODO(JamePeng): Figure out the meaning of these parameters
907 u32 unk_param1 = cmd_buff[1];
908 u32 unk_param2 = cmd_buff[2] & 0xFF;
909 u32 unk_param3 = cmd_buff[3] & 0xFF;
910 u32 translation = cmd_buff[4];
911 u32 buff_addr = cmd_buff[5];
912 u32 buff_size = (translation >> 4);
913
914 cmd_buff[0] = IPC::MakeHeader(0x35, 0x1, 0x2);
915 cmd_buff[1] = RESULT_SUCCESS.raw;
916 cmd_buff[3] = (buff_size << 4 | 0xA);
917 cmd_buff[4] = buff_addr;
918
919 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
920 "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
921 unk_param1, unk_param2, unk_param3, translation, buff_addr, buff_size);
922}
923
924void SetTaskQuery(Service::Interface* self) {
925 u32* cmd_buff = Kernel::GetCommandBuffer();
926 // TODO(JamePeng): Figure out the meaning of these parameters
927 u32 unk_param1 = cmd_buff[1];
928 u32 unk_param2 = cmd_buff[2];
929 u32 translation1 = cmd_buff[3];
930 u32 buff1_addr = cmd_buff[4];
931 u32 buff1_size = (translation1 >> 4);
932 u32 translation2 = cmd_buff[5];
933 u32 buff2_addr = cmd_buff[6];
934 u32 buff2_size = (translation2 >> 4);
935
936 cmd_buff[0] = IPC::MakeHeader(0x36, 0x1, 0x4);
937 cmd_buff[1] = RESULT_SUCCESS.raw;
938 cmd_buff[2] = (buff1_size << 4 | 0xA);
939 cmd_buff[3] = buff1_addr;
940 cmd_buff[2] = (buff2_size << 4 | 0xA);
941 cmd_buff[3] = buff2_addr;
942
943 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, "
944 "translation1=0x%08X, buff1_addr=0x%08X, buff1_size=0x%08X, "
945 "translation2=0x%08X, buff2_addr=0x%08X, buff2_size=0x%08X",
946 unk_param1, unk_param2, translation1, buff1_addr, buff1_size, translation2,
947 buff2_addr, buff2_size);
948}
949
950void GetTaskQuery(Service::Interface* self) {
951 u32* cmd_buff = Kernel::GetCommandBuffer();
952 // TODO(JamePeng): Figure out the meaning of these parameters
953 u32 unk_param1 = cmd_buff[1];
954 u32 unk_param2 = cmd_buff[2];
955 u32 translation1 = cmd_buff[3];
956 u32 buff1_addr = cmd_buff[4];
957 u32 buff1_size = (translation1 >> 4);
958 u32 translation2 = cmd_buff[5];
959 u32 buff2_addr = cmd_buff[6];
960 u32 buff2_size = (translation2 >> 4);
961
962 cmd_buff[0] = IPC::MakeHeader(0x37, 0x1, 0x4);
963 cmd_buff[1] = RESULT_SUCCESS.raw;
964 cmd_buff[2] = (buff1_size << 4 | 0xA);
965 cmd_buff[3] = buff1_addr;
966 cmd_buff[2] = (buff2_size << 4 | 0xC);
967 cmd_buff[3] = buff2_addr;
968
969 LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, "
970 "translation1=0x%08X, buff1_addr=0x%08X, buff1_size=0x%08X, "
971 "translation2=0x%08X, buff2_addr=0x%08X, buff2_size=0x%08X",
972 unk_param1, unk_param2, translation1, buff1_addr, buff1_size, translation2,
973 buff2_addr, buff2_size);
974}
975
13void Init() { 976void Init() {
14 using namespace Kernel; 977 using namespace Kernel;
15 978
16 AddService(new BOSS_P_Interface); 979 AddService(new BOSS_P_Interface);
17 AddService(new BOSS_U_Interface); 980 AddService(new BOSS_U_Interface);
981
982 new_arrival_flag = 0;
983 ns_data_new_flag = 0;
984 output_flag = 0;
18} 985}
19 986
20void Shutdown() {} 987void Shutdown() {}
diff --git a/src/core/hle/service/boss/boss.h b/src/core/hle/service/boss/boss.h
index d3b5d7101..8cdc663c8 100644
--- a/src/core/hle/service/boss/boss.h
+++ b/src/core/hle/service/boss/boss.h
@@ -4,9 +4,794 @@
4 4
5#pragma once 5#pragma once
6 6
7#include "core/hle/service/service.h"
8
7namespace Service { 9namespace Service {
8namespace BOSS { 10namespace BOSS {
9 11
12/**
13 * BOSS::InitializeSession service function
14 * Inputs:
15 * 0 : Header Code[0x00010082]
16 * 1 : u32 lower 64bit value
17 * 2 : u32 higher 64bit value
18 * 3 : 0x20
19 * 4 : u32 unknown value
20 * Outputs:
21 * 1 : Result of function, 0 on success, otherwise error code
22 */
23void InitializeSession(Service::Interface* self);
24
25/**
26 * BOSS::RegisterStorage service function
27 * Inputs:
28 * 0 : Header Code[0x00020010]
29 * 1 : u32 unknown1
30 * 2 : u32 unknown2
31 * 3 : u32 unknown3
32 * 4 : u8 unknown_flag
33 * Outputs:
34 * 1 : Result of function, 0 on success, otherwise error code
35 */
36void RegisterStorage(Service::Interface* self);
37
38/**
39 * BOSS::UnregisterStorage service function
40 * Inputs:
41 * 0 : Header Code[0x00030000]
42 * Outputs:
43 * 1 : Result of function, 0 on success, otherwise error code
44 */
45void UnregisterStorage(Service::Interface* self);
46
47/**
48 * BOSS::GetStorageInfo service function
49 * Inputs:
50 * 0 : Header Code[0x00040000]
51 * Outputs:
52 * 1 : Result of function, 0 on success, otherwise error code
53 * 2 : u32 unknown value
54 */
55void GetStorageInfo(Service::Interface* self);
56
57/**
58 * BOSS::RegisterPrivateRootCa service function
59 * Inputs:
60 * 0 : Header Code[0x00050042]
61 * 1 : u32 unknown value
62 * 2 : MappedBufferDesc(permission = R)
63 * 3 : u32 buff_addr
64 * Outputs:
65 * 1 : Result of function, 0 on success, otherwise error code
66 * 2 : buff_size << 4 | 0xA
67 * 3 : u32 buff_addr
68 */
69void RegisterPrivateRootCa(Service::Interface* self);
70
71/**
72 * BOSS::RegisterPrivateClientCert service function
73 * Inputs:
74 * 0 : Header Code[0x00060084]
75 * 1 : u32 unknown value
76 * 2 : u32 unknown value
77 * 3 : MappedBufferDesc1(permission = R)
78 * 4 : u32 buff_addr1
79 * 5 : MappedBufferDesc2(permission = R)
80 * 6 : u32 buff_addr2
81 * Outputs:
82 * 1 : Result of function, 0 on success, otherwise error code
83 * 2 : buff1_size << 4 | 0xA
84 * 3 : u32 buff_addr1
85 * 4 : buff2_size << 4 | 0xA
86 * 5 : u32 buff_addr2
87 */
88void RegisterPrivateClientCert(Service::Interface* self);
89
90/**
91 * BOSS::GetNewArrivalFlag service function
92 * Inputs:
93 * 0 : Header Code[0x00070000]
94 * Outputs:
95 * 1 : Result of function, 0 on success, otherwise error code
96 * 2 : u8 flag
97 */
98void GetNewArrivalFlag(Service::Interface* self);
99
100/**
101 * BOSS::RegisterNewArrivalEvent service function
102 * Inputs:
103 * 0 : Header Code[0x00080002]
104 * 1 : u32 unknown1
105 * 2 : u32 unknown2
106 * Outputs:
107 * 1 : Result of function, 0 on success, otherwise error code
108 */
109void RegisterNewArrivalEvent(Service::Interface* self);
110
111/**
112 * BOSS::SetOptoutFlag service function
113 * Inputs:
114 * 0 : Header Code[0x00090040]
115 * 1 : u8 output_flag
116 * Outputs:
117 * 1 : Result of function, 0 on success, otherwise error code
118 */
119void SetOptoutFlag(Service::Interface* self);
120
121/**
122 * BOSS::GetOptoutFlag service function
123 * Inputs:
124 * 0 : Header Code[0x000A0000]
125 * Outputs:
126 * 1 : Result of function, 0 on success, otherwise error code
127 * 2 : u8 output_flag
128 */
129void GetOptoutFlag(Service::Interface* self);
130
131/**
132 * BOSS::RegisterTask service function
133 * Inputs:
134 * 0 : Header Code[0x000B00C2]
135 * 1 : u32 unknown value
136 * 2 : u8 unknown value
137 * 3 : u8 unknown value
138 * 4 : MappedBufferDesc1(permission = R)
139 * 5 : buff_addr
140 * Outputs:
141 * 1 : Result of function, 0 on success, otherwise error code
142 * 2 : buff_size << 4 | 0xA
143 * 3 : u32 buff_addr
144 */
145void RegisterTask(Service::Interface* self);
146
147/**
148 * BOSS::UnregisterTask service function
149 * Inputs:
150 * 0 : Header Code[0x000C0082]
151 * 1 : u32 unknown value
152 * 2 : u8 unknown value
153 * 3 : MappedBufferDesc1(permission = R)
154 * 4 : buff_addr
155 * Outputs:
156 * 1 : Result of function, 0 on success, otherwise error code
157 * 2 : buff_size << 4 | 0xA
158 * 3 : u32 buff_addr
159 */
160void UnregisterTask(Service::Interface* self);
161
162/**
163 * BOSS::ReconfigureTask service function
164 * Inputs:
165 * 0 : Header Code[0x000D0082]
166 * 1 : u32 unknown value
167 * 2 : u8 unknown value
168 * 3 : MappedBufferDesc1(permission = R)
169 * 4 : buff_addr
170 * Outputs:
171 * 1 : Result of function, 0 on success, otherwise error code
172 * 2 : buff_size << 4 | 0xA
173 * 3 : u32 buff_addr
174 */
175void ReconfigureTask(Service::Interface* self);
176
177/**
178 * BOSS::GetTaskIdList service function
179 * Inputs:
180 * 0 : Header Code[0x000E0000]
181 * Outputs:
182 * 1 : Result of function, 0 on success, otherwise error code
183 */
184void GetTaskIdList(Service::Interface* self);
185
186/**
187 * BOSS::GetStepIdList service function
188 * Inputs:
189 * 0 : Header Code[0x000F0042]
190 * 2 : MappedBufferDesc(permission = R)
191 * 3 : u32 buff_addr
192 *
193 * Outputs:
194 * 1 : Result of function, 0 on success, otherwise error code
195 * 2 : buff_size << 4 | 0xA
196 * 3 : u32 buff_addr
197 */
198void GetStepIdList(Service::Interface* self);
199
200/**
201 * BOSS::GetNsDataIdList service function
202 * Inputs:
203 * 0 : Header Code[0x00100102]
204 * 1 : u32 unknown1
205 * 2 : u32 unknown2
206 * 3 : u32 unknown3
207 * 4 : u32 unknown4
208 * 5 : MappedBufferDesc(permission = W)
209 * 6 : u32 buff_addr
210 * Outputs:
211 * 1 : Result of function, 0 on success, otherwise error code
212 * 2 : u16 unknown value
213 * 3 : u16 unknown value
214 * 4 : buff_size << 4 | 0xC
215 * 5 : u32 buff_addr
216 */
217void GetNsDataIdList(Service::Interface* self);
218
219/**
220 * BOSS::GetOwnNsDataIdList service function
221 * Inputs:
222 * 0 : Header Code[0x00110102]
223 * 1 : u32 unknown1
224 * 2 : u32 unknown2
225 * 3 : u32 unknown3
226 * 4 : u32 unknown4
227 * 5 : MappedBufferDesc(permission = W)
228 * 6 : u32 buff_addr
229 * Outputs:
230 * 1 : Result of function, 0 on success, otherwise error code
231 * 2 : u16 unknown value
232 * 3 : u16 unknown value
233 * 4 : buff_size << 4 | 0xC
234 * 5 : u32 buff_addr
235 */
236void GetOwnNsDataIdList(Service::Interface* self);
237
238/**
239 * BOSS::GetNewDataNsDataIdList service function
240 * Inputs:
241 * 0 : Header Code[0x00120102]
242 * 1 : u32 unknown1
243 * 2 : u32 unknown2
244 * 3 : u32 unknown3
245 * 4 : u32 unknown4
246 * 5 : MappedBufferDesc(permission = W)
247 * 6 : u32 buff_addr
248 * Outputs:
249 * 1 : Result of function, 0 on success, otherwise error code
250 * 2 : u16 unknown value
251 * 3 : u16 unknown value
252 * 4 : buff_size << 4 | 0xC
253 * 5 : u32 buff_addr
254 */
255void GetNewDataNsDataIdList(Service::Interface* self);
256
257/**
258 * BOSS::GetOwnNewDataNsDataIdList service function
259 * Inputs:
260 * 0 : Header Code[0x00130102]
261 * 1 : u32 unknown1
262 * 2 : u32 unknown2
263 * 3 : u32 unknown3
264 * 4 : u32 unknown4
265 * 5 : MappedBufferDesc(permission = W)
266 * 6 : u32 buff_addr
267 * Outputs:
268 * 1 : Result of function, 0 on success, otherwise error code
269 * 2 : u16 unknown value
270 * 3 : u16 unknown value
271
272 */
273void GetOwnNewDataNsDataIdList(Service::Interface* self);
274
275/**
276 * BOSS::SendProperty service function
277 * Inputs:
278 * 0 : Header Code[0x00140082]
279 * 1 : u16 unknown value
280 * 2 : u32 unknown value
281 * 3 : MappedBufferDesc(permission = R)
282 * 4 : u32 buff_addr
283 * Outputs:
284 * 1 : Result of function, 0 on success, otherwise error code
285 * 2 : buff_size << 4 | 0xA
286 * 3 : u32 buff_addr
287 */
288void SendProperty(Service::Interface* self);
289
290/**
291 * BOSS::SendPropertyHandle service function
292 * Inputs:
293 * 0 : Header Code[0x00150042]
294 * 2 : u8 unknown value
295 * 3 : MappedBufferDesc(permission = R)
296 * 4 : u32 buff_addr
297 * Outputs:
298 * 1 : Result of function, 0 on success, otherwise error code
299 * 2 : buff_size << 4 | 0xA
300 * 3 : u32 buff_addr
301 */
302void SendPropertyHandle(Service::Interface* self);
303
304/**
305 * BOSS::ReceiveProperty service function
306 * Inputs:
307 * 0 : Header Code[0x00160082]
308 * 1 : u16 unknown1
309 * 2 : u32 buff_size
310 * 3 : MappedBufferDesc(permission = W)
311 * 4 : u32 buff addr
312 * Outputs:
313 * 1 : Result of function, 0 on success, otherwise error code
314 * 2 : u32 unknown value
315 * 3 : u16 unknown value
316 * 4 : buff_size << 4 | 0xC
317 * 5 : u32 buff_addr
318 */
319void ReceiveProperty(Service::Interface* self);
320
321/**
322 * BOSS::UpdateTaskInterval service function
323 * Inputs:
324 * 0 : Header Code[0x00170082]
325 * 1 : u32 unknown value
326 * 2 : u8 unknown value
327 * 3 : MappedBufferDesc1(permission = R)
328 * 4 : buff_addr
329 * Outputs:
330 * 1 : Result of function, 0 on success, otherwise error code
331 * 2 : buff_size << 4 | 0xA
332 * 3 : u32 buff_addr
333 */
334void UpdateTaskInterval(Service::Interface* self);
335
336/**
337 * BOSS::UpdateTaskCount service function
338 * Inputs:
339 * 0 : Header Code[0x00180082]
340 * 1 : u32 buff_size
341 * 2 : u32 unknown2
342 * 3 : MappedBufferDesc(permission = R)
343 * 4 : u32 buff_addr
344 * Outputs:
345 * 1 : Result of function, 0 on success, otherwise error code
346 * 2 : buff_size << 4 | 0xA
347 * 3 : u32 buff_addr
348 */
349void UpdateTaskCount(Service::Interface* self);
350
351/**
352 * BOSS::GetTaskInterval service function
353 * Inputs:
354 * 0 : Header Code[0x00190042]
355 * 1 : u32 unknown value
356 * 2 : MappedBufferDesc(permission = R)
357 * 3 : u32 buff_addr
358 * Outputs:
359 * 1 : Result of function, 0 on success, otherwise error code
360 * 2 : u32 unknown value
361 * 3 : buff_size << 4 | 0xA
362 * 4 : u32 buff_addr
363 */
364void GetTaskInterval(Service::Interface* self);
365
366/**
367 * BOSS::GetTaskCount service function
368 * Inputs:
369 * 0 : Header Code[0x001A0042]
370 * 1 : u32 unknown value
371 * 2 : MappedBufferDesc(permission = R)
372 * 3 : u32 buff_addr
373 * Outputs:
374 * 1 : Result of function, 0 on success, otherwise error code
375 * 2 : u32 unknown value
376 * 3 : buff_size << 4 | 0xA
377 * 4 : u32 buff_addr
378 */
379void GetTaskCount(Service::Interface* self);
380
381/**
382 * BOSS::GetTaskServiceStatus service function
383 * Inputs:
384 * 0 : Header Code[0x001B0042]
385 * 1 : u32 unknown value
386 * 2 : MappedBufferDesc(permission = R)
387 * 3 : u32 buff_addr
388 * Outputs:
389 * 1 : Result of function, 0 on success, otherwise error code
390 * 2 : u8 unknown value
391 * 3 : buff_size << 4 | 0xA
392 * 4 : u32 buff_addr
393 */
394void GetTaskServiceStatus(Service::Interface* self);
395
396/**
397 * BOSS::StartTask service function
398 * Inputs:
399 * 0 : Header Code[0x001C0042]
400 * 1 : u32 unknown value
401 * 2 : MappedBufferDesc(permission = R)
402 * 3 : u32 buff_addr
403 * Outputs:
404 * 1 : Result of function, 0 on success, otherwise error code
405 * 2 : buff_size << 4 | 0xA
406 * 3 : u32 buff_addr
407 */
408void StartTask(Service::Interface* self);
409
410/**
411 * BOSS::StartTaskImmediate service function
412 * Inputs:
413 * 0 : Header Code[0x001D0042]
414 * 1 : u32 unknown value
415 * 2 : MappedBufferDesc(permission = R)
416 * 3 : u32 buff_addr
417 * Outputs:
418 * 1 : Result of function, 0 on success, otherwise error code
419 * 2 : buff_size << 4 | 0xA
420 * 3 : u32 buff_addr
421 */
422void StartTaskImmediate(Service::Interface* self);
423
424/**
425 * BOSS::CancelTask service function
426 * Inputs:
427 * 0 : Header Code[0x001E0042]
428 * 1 : u32 unknown value
429 * 2 : MappedBufferDesc(permission = R)
430 * 3 : u32 buff_addr
431 * Outputs:
432 * 1 : Result of function, 0 on success, otherwise error code
433 * 2 : buff_size << 4 | 0xA
434 * 3 : u32 buff_addr
435 */
436void CancelTask(Service::Interface* self);
437
438/**
439 * BOSS::GetTaskFinishHandle service function
440 * Inputs:
441 * 0 : Header Code[0x001F0000]
442 * Outputs:
443 * 1 : Result of function, 0 on success, otherwise error code
444 * 2 : 0
445 * 3 : Task Finish Handle
446 */
447void GetTaskFinishHandle(Service::Interface* self);
448
449/**
450 * BOSS::GetTaskState service function
451 * Inputs:
452 * 0 : Header Code[0x00200082]
453 * 1 : u32 buff_size
454 * 2 : u8 unknown value
455 * 3 : MappedBufferDesc(permission = R)
456 * 4 : u32 buff_addr
457 * Outputs:
458 * 1 : Result of function, 0 on success, otherwise error code
459 * 2 : u8 unknown value
460 * 3 : u32 unknown value
461 * 4 : u8 unknown value
462 * 5 : buff_size << 4 | 0xA
463 * 6 : u32 buff_addr
464 */
465void GetTaskState(Service::Interface* self);
466
467/**
468 * BOSS::GetTaskResult service function
469 * Inputs:
470 * 0 : Header Code[0x00210042]
471 * 1 : u32 unknown value
472 * 2 : MappedBufferDesc(permission = R)
473 * 3 : u32 buff_addr
474 * Outputs:
475 * 1 : Result of function, 0 on success, otherwise error code
476 * 2 : u8 unknown value
477 * 3 : u32 unknown value
478 * 4 : u8 unknown value
479 * 5 : buff_size << 4 | 0xA
480 * 6 : u32 buff_addr
481 */
482void GetTaskResult(Service::Interface* self);
483
484/**
485 * BOSS::GetTaskCommErrorCode service function
486 * Inputs:
487 * 0 : Header Code[0x00220042]
488 * 1 : u32 unknown value
489 * 2 : MappedBufferDesc(permission = R)
490 * 3 : u32 buff_addr
491 * Outputs:
492 * 1 : Result of function, 0 on success, otherwise error code
493 * 2 : u32 unknown value
494 * 3 : u32 unknown value
495 * 4 : u8 unknown value
496 * 5 : buff_size << 4 | 0xA
497 * 6 : u32 buff_addr
498 */
499void GetTaskCommErrorCode(Service::Interface* self);
500
501/**
502 * BOSS::GetTaskStatus service function
503 * Inputs:
504 * 0 : Header Code[0x002300C2]
505 * 1 : u32 unknown value
506 * 2 : u8 unknown value
507 * 3 : u8 unknown value
508 * 4 : MappedBufferDesc(permission = R)
509 * 5 : u32 buff_addr
510 * Outputs:
511 * 1 : Result of function, 0 on success, otherwise error code
512 * 2 : u8 unknown value
513 * 3 : buff_size << 4 | 0xA
514 * 4 : u32 buff_addr
515 */
516void GetTaskStatus(Service::Interface* self);
517
518/**
519 * BOSS::GetTaskError service function
520 * Inputs:
521 * 0 : Header Code[0x00240082]
522 * 1 : u32 unknown value
523 * 2 : u8 unknown value
524 * 3 : MappedBufferDesc(permission = R)
525 * 4 : u32 buff_addr
526 * Outputs:
527 * 1 : Result of function, 0 on success, otherwise error code
528 * 2 : u8 unknown value
529 * 3 : buff_size << 4 | 0xA
530 * 4 : u32 buff_addr
531 */
532void GetTaskError(Service::Interface* self);
533
534/**
535 * BOSS::GetTaskInfo service function
536 * Inputs:
537 * 0 : Header Code[0x00250082]
538 * 1 : u32 unknown value
539 * 2 : u8 unknown value
540 * 3 : MappedBufferDesc(permission = R)
541 * 4 : u32 buff_addr
542 * Outputs:
543 * 1 : Result of function, 0 on success, otherwise error code
544 * 2 : buff_size << 4 | 0xA
545 * 3 : u32 buff_addr
546 */
547void GetTaskInfo(Service::Interface* self);
548
549/**
550 * BOSS::DeleteNsData service function
551 * Inputs:
552 * 0 : Header Code[0x00260040]
553 * 1 : u32 unknown value
554 * Outputs:
555 * 1 : Result of function, 0 on success, otherwise error code
556 */
557void DeleteNsData(Service::Interface* self);
558
559/**
560 * BOSS::GetNsDataHeaderInfo service function
561 * Inputs:
562 * 0 : Header Code[0x002700C2]
563 * 1 : u32 unknown value
564 * 2 : u8 unknown value
565 * 3 : u32 unknown value
566 * 4 : MappedBufferDesc(permission = W)
567 * 5 : u32 buff_addr
568 * Outputs:
569 * 1 : Result of function, 0 on success, otherwise error code
570 * 2 : buff_size << 4 | 0xC
571 * 3 : u32 buff_addr
572 */
573void GetNsDataHeaderInfo(Service::Interface* self);
574
575/**
576 * BOSS::ReadNsData service function
577 * Inputs:
578 * 0 : Header Code[0x00280102]
579 * 1 : u32 unknown value
580 * 2 : u32 unknown value
581 * 3 : u32 unknown value
582 * 4 : u32 unknown value
583 * 5 : MappedBufferDesc(permission = W)
584 * 6 : u32 buff_addr
585 * Outputs:
586 * 1 : Result of function, 0 on success, otherwise error code
587 * 2 : u32 unknown value
588 * 3 : u32 unknown value
589 * 4 : buff_size << 4 | 0xC
590 * 5 : u32 buff_addr
591 */
592void ReadNsData(Service::Interface* self);
593
594/**
595 * BOSS::SetNsDataAdditionalInfo service function
596 * Inputs:
597 * 0 : Header Code[0x00290080]
598 * 1 : u32 unknown value
599 * 2 : u32 unknown value
600 * Outputs:
601 * 1 : Result of function, 0 on success, otherwise error code
602 */
603void SetNsDataAdditionalInfo(Service::Interface* self);
604
605/**
606 * BOSS::GetNsDataAdditionalInfo service function
607 * Inputs:
608 * 0 : Header Code[0x002A0040]
609 * 1 : u32 unknown value
610 * Outputs:
611 * 1 : Result of function, 0 on success, otherwise error code
612 * 2 : u32 unknown value
613 */
614void GetNsDataAdditionalInfo(Service::Interface* self);
615
616/**
617 * BOSS::SetNsDataNewFlag service function
618 * Inputs:
619 * 0 : Header Code[0x002B0080]
620 * 1 : u32 unknown value
621 * 2 : u8 flag
622 * Outputs:
623 * 1 : Result of function, 0 on success, otherwise error code
624 */
625void SetNsDataNewFlag(Service::Interface* self);
626
627/**
628 * BOSS::GetNsDataNewFlag service function
629 * Inputs:
630 * 0 : Header Code[0x002C0040]
631 * 1 : u32 unknown value
632 * Outputs:
633 * 1 : Result of function, 0 on success, otherwise error code
634 * 2 : u8 flag
635 */
636void GetNsDataNewFlag(Service::Interface* self);
637
638/**
639 * BOSS::GetNsDataLastUpdate service function
640 * Inputs:
641 * 0 : Header Code[0x002D0040]
642 * 1 : u32 unknown value
643 * Outputs:
644 * 1 : Result of function, 0 on success, otherwise error code
645 * 2 : u32 unknown value
646 * 3 : u32 unknown value
647 */
648void GetNsDataLastUpdate(Service::Interface* self);
649
650/**
651 * BOSS::GetErrorCode service function
652 * Inputs:
653 * 0 : Header Code[0x002E0040]
654 * 1 : u8 unknown value
655 * Outputs:
656 * 1 : Result of function, 0 on success, otherwise error code
657 * 2 : u32 unknown value
658 */
659void GetErrorCode(Service::Interface* self);
660
661/**
662 * BOSS::RegisterStorageEntry service function
663 * Inputs:
664 * 0 : Header Code[0x002F0140]
665 * 1 : u32 unknown value
666 * 2 : u32 unknown value
667 * 3 : u32 unknown value
668 * 4 : u16 unknown value
669 * 5 : u8 unknown value
670 * Outputs:
671 * 1 : Result of function, 0 on success, otherwise error code
672 */
673void RegisterStorageEntry(Service::Interface* self);
674
675/**
676 * BOSS::GetStorageEntryInfo service function
677 * Inputs:
678 * 0 : Header Code[0x00300000]
679 * Outputs:
680 * 1 : Result of function, 0 on success, otherwise error code
681 * 2 : u32 unknown value
682 * 3 : u16 unknown value
683 */
684void GetStorageEntryInfo(Service::Interface* self);
685
686/**
687 * BOSS::SetStorageOption service function
688 * Inputs:
689 * 0 : Header Code[0x00310100]
690 * 1 : u8 unknown value
691 * 2 : u32 unknown value
692 * 3 : u16 unknown value
693 * 4 : u16 unknown value
694 * Outputs:
695 * 1 : Result of function, 0 on success, otherwise error code
696 */
697void SetStorageOption(Service::Interface* self);
698
699/**
700 * BOSS::GetStorageOption service function
701 * Inputs:
702 * 0 : Header Code[0x00320000]
703 * Outputs:
704 * 1 : Result of function, 0 on success, otherwise error code
705 * 2 : u8 unknown value
706 * 3 : u32 unknown value
707 * 4 : u16 unknown value
708 * 5 : u16 unknown value
709 */
710void GetStorageOption(Service::Interface* self);
711
712/**
713 * BOSS::StartBgImmediate service function
714 * Inputs:
715 * 0 : Header Code[0x00330042]
716 * 1 : u32 unknown value
717 * 2 : MappedBufferDesc(permission = R)
718 * 3 : u32 buff_addr
719 * Outputs:
720 * 1 : Result of function, 0 on success, otherwise error code
721 * 2 : buff_size << 4 | 0xA
722 * 3 : u32 buff_addr
723 */
724void StartBgImmediate(Service::Interface* self);
725
726/**
727 * BOSS::GetTaskActivePriority service function
728 * Inputs:
729 * 0 : Header Code[0x00340042]
730 * 1 : u32 unknown value
731 * 2 : MappedBufferDesc(permission = R)
732 * 3 : u32 buff_addr
733 * Outputs:
734 * 1 : Result of function, 0 on success, otherwise error code
735 * 2 : u8 unknown value
736 * 3 : buff_size << 4 | 0xA
737 * 4 : u32 buff_addr
738 */
739void GetTaskActivePriority(Service::Interface* self);
740
741/**
742 * BOSS::RegisterImmediateTask service function
743 * Inputs:
744 * 0 : Header Code[0x003500C2]
745 * 1 : u32 unknown value
746 * 2 : u8 unknown value
747 * 3 : u8 unknown value
748 * 4 : MappedBufferDesc(permission = R)
749 * 5 : u32 buff_addr
750 * Outputs:
751 * 1 : Result of function, 0 on success, otherwise error code
752 * 2 : buff_size << 4 | 0xA
753 * 3 : u32 buff_addr
754 */
755void RegisterImmediateTask(Service::Interface* self);
756
757/**
758 * BOSS::SetTaskQuery service function
759 * Inputs:
760 * 0 : Header Code[0x00360084]
761 * 1 : u32 unknown value
762 * 2 : u32 unknown value
763 * 3 : MappedBufferDesc1(permission = R)
764 * 4 : u32 buff1_addr
765 * 5 : MappedBufferDesc2(permission = R)
766 * 6 : u32 buff2_addr
767 * Outputs:
768 * 1 : Result of function, 0 on success, otherwise error code
769 * 2 : buff1_size << 4 | 0xA
770 * 3 : u32 buff1_addr
771 * 4 : buff2_size << 4 | 0xA
772 * 5 : u32 buff2_addr
773 */
774void SetTaskQuery(Service::Interface* self);
775
776/**
777 * BOSS::GetTaskQuery service function
778 * Inputs:
779 * 0 : Header Code[0x00370084]
780 * 1 : u32 unknown value
781 * 2 : u32 unknown value
782 * 3 : MappedBufferDesc1(permission = R)
783 * 4 : u32 buff1_addr
784 * 5 : MappedBufferDesc2(permission = W)
785 * 6 : u32 buff2_addr
786 * Outputs:
787 * 1 : Result of function, 0 on success, otherwise error code
788 * 2 : buff1_size << 4 | 0xA
789 * 3 : u32 buff1_addr
790 * 4 : buff2_size << 4 | 0xC
791 * 5 : u32 buff2_addr
792 */
793void GetTaskQuery(Service::Interface* self);
794
10/// Initialize BOSS service(s) 795/// Initialize BOSS service(s)
11void Init(); 796void Init();
12 797
diff --git a/src/core/hle/service/boss/boss_u.cpp b/src/core/hle/service/boss/boss_u.cpp
index 6affa23b1..371d702e0 100644
--- a/src/core/hle/service/boss/boss_u.cpp
+++ b/src/core/hle/service/boss/boss_u.cpp
@@ -2,16 +2,68 @@
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/service/boss/boss.h"
5#include "core/hle/service/boss/boss_u.h" 6#include "core/hle/service/boss/boss_u.h"
6 7
7namespace Service { 8namespace Service {
8namespace BOSS { 9namespace BOSS {
9 10
10const Interface::FunctionInfo FunctionTable[] = { 11const Interface::FunctionInfo FunctionTable[] = {
11 {0x00020100, nullptr, "GetStorageInfo"}, 12 {0x00010082, InitializeSession, "InitializeSession"},
12 {0x000C0082, nullptr, "UnregisterTask"}, 13 {0x00020100, RegisterStorage, "RegisterStorage"},
13 {0x001E0042, nullptr, "CancelTask"}, 14 {0x00030000, UnregisterStorage, "UnregisterStorage"},
14 {0x00330042, nullptr, "StartBgImmediate"}, 15 {0x00040000, GetStorageInfo, "GetStorageInfo"},
16 {0x00050042, RegisterPrivateRootCa, "RegisterPrivateRootCa"},
17 {0x00060084, RegisterPrivateClientCert, "RegisterPrivateClientCert"},
18 {0x00070000, GetNewArrivalFlag, "GetNewArrivalFlag"},
19 {0x00080002, RegisterNewArrivalEvent, "RegisterNewArrivalEvent"},
20 {0x00090040, SetOptoutFlag, "SetOptoutFlag"},
21 {0x000A0000, GetOptoutFlag, "GetOptoutFlag"},
22 {0x000B00C2, RegisterTask, "RegisterTask"},
23 {0x000C0082, UnregisterTask, "UnregisterTask"},
24 {0x000D0082, ReconfigureTask, "ReconfigureTask"},
25 {0x000E0000, GetTaskIdList, "GetTaskIdList"},
26 {0x000F0042, GetStepIdList, "GetStepIdList"},
27 {0x00100102, GetNsDataIdList, "GetNsDataIdList"},
28 {0x00110102, GetOwnNsDataIdList, "GetOwnNsDataIdList"},
29 {0x00120102, GetNewDataNsDataIdList, "GetNewDataNsDataIdList"},
30 {0x00130102, GetOwnNewDataNsDataIdList, "GetOwnNewDataNsDataIdList"},
31 {0x00140082, SendProperty, "SendProperty"},
32 {0x00150042, SendPropertyHandle, "SendPropertyHandle"},
33 {0x00160082, ReceiveProperty, "ReceiveProperty"},
34 {0x00170082, UpdateTaskInterval, "UpdateTaskInterval"},
35 {0x00180082, UpdateTaskCount, "UpdateTaskCount"},
36 {0x00190042, GetTaskInterval, "GetTaskInterval"},
37 {0x001A0042, GetTaskCount, "GetTaskCount"},
38 {0x001B0042, GetTaskServiceStatus, "GetTaskServiceStatus"},
39 {0x001C0042, StartTask, "StartTask"},
40 {0x001D0042, StartTaskImmediate, "StartTaskImmediate"},
41 {0x001E0042, CancelTask, "CancelTask"},
42 {0x001F0000, GetTaskFinishHandle, "GetTaskFinishHandle"},
43 {0x00200082, GetTaskState, "GetTaskState"},
44 {0x00210042, GetTaskResult, "GetTaskResult"},
45 {0x00220042, GetTaskCommErrorCode, "GetTaskCommErrorCode"},
46 {0x002300C2, GetTaskStatus, "GetTaskStatus"},
47 {0x00240082, GetTaskError, "GetTaskError"},
48 {0x00250082, GetTaskInfo, "GetTaskInfo"},
49 {0x00260040, DeleteNsData, "DeleteNsData"},
50 {0x002700C2, GetNsDataHeaderInfo, "GetNsDataHeaderInfo"},
51 {0x00280102, ReadNsData, "ReadNsData"},
52 {0x00290080, SetNsDataAdditionalInfo, "SetNsDataAdditionalInfo"},
53 {0x002A0040, GetNsDataAdditionalInfo, "GetNsDataAdditionalInfo"},
54 {0x002B0080, SetNsDataNewFlag, "SetNsDataNewFlag"},
55 {0x002C0040, GetNsDataNewFlag, "GetNsDataNewFlag"},
56 {0x002D0040, GetNsDataLastUpdate, "GetNsDataLastUpdate"},
57 {0x002E0040, GetErrorCode, "GetErrorCode"},
58 {0x002F0140, RegisterStorageEntry, "RegisterStorageEntry"},
59 {0x00300000, GetStorageEntryInfo, "GetStorageEntryInfo"},
60 {0x00310100, SetStorageOption, "SetStorageOption"},
61 {0x00320000, GetStorageOption, "GetStorageOption"},
62 {0x00330042, StartBgImmediate, "StartBgImmediate"},
63 {0x00340042, GetTaskActivePriority, "GetTaskActivePriority"},
64 {0x003500C2, RegisterImmediateTask, "RegisterImmediateTask"},
65 {0x00360084, SetTaskQuery, "SetTaskQuery"},
66 {0x00370084, GetTaskQuery, "GetTaskQuery"},
15}; 67};
16 68
17BOSS_U_Interface::BOSS_U_Interface() { 69BOSS_U_Interface::BOSS_U_Interface() {