boss.cpp 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994
  1. // Copyright 2015 Citra Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <cinttypes>
  5. #include "common/logging/log.h"
  6. #include "core/hle/ipc.h"
  7. #include "core/hle/result.h"
  8. #include "core/hle/service/boss/boss.h"
  9. #include "core/hle/service/boss/boss_p.h"
  10. #include "core/hle/service/boss/boss_u.h"
  11. #include "core/hle/service/service.h"
  12. namespace Service {
  13. namespace BOSS {
  14. static u32 new_arrival_flag;
  15. static u32 ns_data_new_flag;
  16. static u32 output_flag;
  17. void 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. if (translation != IPC::CallingPidDesc()) {
  24. cmd_buff[0] = IPC::MakeHeader(0, 0x1, 0); // 0x40
  25. cmd_buff[1] = IPC::ERR_INVALID_BUFFER_DESCRIPTOR.raw;
  26. LOG_ERROR(Service_BOSS, "The translation was invalid, translation=0x%08X", translation);
  27. return;
  28. }
  29. cmd_buff[0] = IPC::MakeHeader(0x1, 0x1, 0);
  30. cmd_buff[1] = RESULT_SUCCESS.raw;
  31. LOG_WARNING(Service_BOSS,
  32. "(STUBBED) unk_param=0x%016" PRIX64 ", translation=0x%08X, unk_param4=0x%08X",
  33. unk_param, translation, unk_param4);
  34. }
  35. void RegisterStorage(Service::Interface* self) {
  36. u32* cmd_buff = Kernel::GetCommandBuffer();
  37. // TODO(JamePeng): Figure out the meaning of these parameters
  38. u32 unk_param1 = cmd_buff[1];
  39. u32 unk_param2 = cmd_buff[2];
  40. u32 unk_param3 = cmd_buff[3];
  41. u32 unk_flag = cmd_buff[4] & 0xFF;
  42. cmd_buff[0] = IPC::MakeHeader(0x2, 0x1, 0);
  43. cmd_buff[1] = RESULT_SUCCESS.raw;
  44. LOG_WARNING(
  45. Service_BOSS,
  46. "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, unk_flag=0x%08X",
  47. unk_param1, unk_param2, unk_param3, unk_flag);
  48. }
  49. void UnregisterStorage(Service::Interface* self) {
  50. u32* cmd_buff = Kernel::GetCommandBuffer();
  51. cmd_buff[0] = IPC::MakeHeader(0x3, 0x1, 0);
  52. cmd_buff[1] = RESULT_SUCCESS.raw;
  53. LOG_WARNING(Service_BOSS, "(STUBBED) called");
  54. }
  55. void GetStorageInfo(Service::Interface* self) {
  56. u32* cmd_buff = Kernel::GetCommandBuffer();
  57. cmd_buff[0] = IPC::MakeHeader(0x4, 0x2, 0);
  58. cmd_buff[1] = RESULT_SUCCESS.raw;
  59. cmd_buff[2] = 0; // stub 0
  60. LOG_WARNING(Service_BOSS, "(STUBBED) called");
  61. }
  62. void RegisterPrivateRootCa(Service::Interface* self) {
  63. u32* cmd_buff = Kernel::GetCommandBuffer();
  64. u32 translation = cmd_buff[2];
  65. u32 buff_addr = cmd_buff[3];
  66. u32 buff_size = (translation >> 4);
  67. cmd_buff[0] = IPC::MakeHeader(0x5, 0x1, 0x2);
  68. cmd_buff[1] = RESULT_SUCCESS.raw;
  69. cmd_buff[2] = (buff_size << 4 | 0xA);
  70. cmd_buff[3] = buff_addr;
  71. LOG_WARNING(Service_BOSS, "(STUBBED) translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
  72. translation, buff_addr, buff_size);
  73. }
  74. void RegisterPrivateClientCert(Service::Interface* self) {
  75. u32* cmd_buff = Kernel::GetCommandBuffer();
  76. // TODO(JamePeng): Figure out the meaning of these parameters
  77. u32 unk_param1 = cmd_buff[1];
  78. u32 unk_param2 = cmd_buff[2];
  79. u32 translation1 = cmd_buff[3];
  80. u32 buff1_addr = cmd_buff[4];
  81. u32 buff1_size = (translation1 >> 4);
  82. u32 translation2 = cmd_buff[5];
  83. u32 buff2_addr = cmd_buff[6];
  84. u32 buff2_size = (translation2 >> 4);
  85. cmd_buff[0] = IPC::MakeHeader(0x6, 0x1, 0x4);
  86. cmd_buff[1] = RESULT_SUCCESS.raw;
  87. cmd_buff[2] = (buff1_size << 4 | 0xA);
  88. cmd_buff[3] = buff1_addr;
  89. cmd_buff[2] = (buff2_size << 4 | 0xA);
  90. cmd_buff[3] = buff2_addr;
  91. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, "
  92. "translation1=0x%08X, buff1_addr=0x%08X, buff1_size=0x%08X, "
  93. "translation2=0x%08X, buff2_addr=0x%08X, buff2_size=0x%08X",
  94. unk_param1, unk_param2, translation1, buff1_addr, buff1_size, translation2,
  95. buff2_addr, buff2_size);
  96. }
  97. void GetNewArrivalFlag(Service::Interface* self) {
  98. u32* cmd_buff = Kernel::GetCommandBuffer();
  99. cmd_buff[0] = IPC::MakeHeader(0x7, 0x2, 0);
  100. cmd_buff[1] = RESULT_SUCCESS.raw;
  101. cmd_buff[2] = new_arrival_flag;
  102. LOG_WARNING(Service_BOSS, "(STUBBED) new_arrival_flag=%u", new_arrival_flag);
  103. }
  104. void RegisterNewArrivalEvent(Service::Interface* self) {
  105. u32* cmd_buff = Kernel::GetCommandBuffer();
  106. // TODO(JamePeng): Figure out the meaning of these parameters
  107. u32 unk_param1 = cmd_buff[1];
  108. u32 unk_param2 = cmd_buff[2];
  109. cmd_buff[0] = IPC::MakeHeader(0x8, 0x1, 0);
  110. cmd_buff[1] = RESULT_SUCCESS.raw;
  111. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X", unk_param1,
  112. unk_param2);
  113. }
  114. void SetOptoutFlag(Service::Interface* self) {
  115. u32* cmd_buff = Kernel::GetCommandBuffer();
  116. output_flag = cmd_buff[1] & 0xFF;
  117. cmd_buff[0] = IPC::MakeHeader(0x9, 0x1, 0);
  118. cmd_buff[1] = RESULT_SUCCESS.raw;
  119. LOG_WARNING(Service_BOSS, "output_flag=%u", output_flag);
  120. }
  121. void GetOptoutFlag(Service::Interface* self) {
  122. u32* cmd_buff = Kernel::GetCommandBuffer();
  123. cmd_buff[0] = IPC::MakeHeader(0xA, 0x2, 0);
  124. cmd_buff[1] = RESULT_SUCCESS.raw;
  125. cmd_buff[2] = output_flag;
  126. LOG_WARNING(Service_BOSS, "output_flag=%u", output_flag);
  127. }
  128. void RegisterTask(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] & 0xFF;
  133. u32 unk_param3 = cmd_buff[3] & 0xFF;
  134. u32 translation = cmd_buff[4];
  135. u32 buff_addr = cmd_buff[5];
  136. u32 buff_size = (translation >> 4);
  137. cmd_buff[0] = IPC::MakeHeader(0xB, 0x1, 0x2);
  138. cmd_buff[1] = RESULT_SUCCESS.raw;
  139. cmd_buff[2] = (buff_size << 4 | 0xA);
  140. cmd_buff[3] = buff_addr;
  141. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
  142. "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
  143. unk_param1, unk_param2, unk_param3, translation, buff_addr, buff_size);
  144. }
  145. void UnregisterTask(Service::Interface* self) {
  146. u32* cmd_buff = Kernel::GetCommandBuffer();
  147. // TODO(JamePeng): Figure out the meaning of these parameters
  148. u32 unk_param1 = cmd_buff[1];
  149. u32 unk_param2 = cmd_buff[2] & 0xFF;
  150. u32 translation = cmd_buff[3];
  151. u32 buff_addr = cmd_buff[4];
  152. u32 buff_size = (translation >> 4);
  153. cmd_buff[0] = IPC::MakeHeader(0xC, 0x1, 0x2);
  154. cmd_buff[1] = RESULT_SUCCESS.raw;
  155. cmd_buff[2] = (buff_size << 4 | 0xA);
  156. cmd_buff[3] = buff_addr;
  157. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, "
  158. "buff_addr=0x%08X, buff_size=0x%08X",
  159. unk_param1, unk_param2, translation, buff_addr, buff_size);
  160. }
  161. void ReconfigureTask(Service::Interface* self) {
  162. u32* cmd_buff = Kernel::GetCommandBuffer();
  163. // TODO(JamePeng): Figure out the meaning of these parameters
  164. u32 unk_param1 = cmd_buff[1];
  165. u32 unk_param2 = cmd_buff[2] & 0xFF;
  166. u32 translation = cmd_buff[3];
  167. u32 buff_addr = cmd_buff[4];
  168. u32 buff_size = (translation >> 4);
  169. cmd_buff[0] = IPC::MakeHeader(0xD, 0x1, 0x2);
  170. cmd_buff[1] = RESULT_SUCCESS.raw;
  171. cmd_buff[2] = (buff_size << 4 | 0xA);
  172. cmd_buff[3] = buff_addr;
  173. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, "
  174. "buff_addr=0x%08X, buff_size=0x%08X",
  175. unk_param1, unk_param2, translation, buff_addr, buff_size);
  176. }
  177. void GetTaskIdList(Service::Interface* self) {
  178. u32* cmd_buff = Kernel::GetCommandBuffer();
  179. cmd_buff[0] = IPC::MakeHeader(0xE, 0x1, 0);
  180. cmd_buff[1] = RESULT_SUCCESS.raw;
  181. LOG_WARNING(Service_BOSS, "(STUBBED) called");
  182. }
  183. void GetStepIdList(Service::Interface* self) {
  184. u32* cmd_buff = Kernel::GetCommandBuffer();
  185. u32 translation = cmd_buff[2];
  186. u32 buff_addr = cmd_buff[3];
  187. u32 buff_size = (translation >> 4);
  188. cmd_buff[0] = IPC::MakeHeader(0xF, 0x1, 0x2);
  189. cmd_buff[1] = RESULT_SUCCESS.raw;
  190. cmd_buff[2] = (buff_size << 4 | 0xA);
  191. cmd_buff[3] = buff_addr;
  192. LOG_WARNING(Service_BOSS, "(STUBBED) translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
  193. translation, buff_addr, buff_size);
  194. }
  195. void GetNsDataIdList(Service::Interface* self) {
  196. u32* cmd_buff = Kernel::GetCommandBuffer();
  197. // TODO(JamePeng): Figure out the meaning of these parameters
  198. u32 unk_param1 = cmd_buff[1];
  199. u32 unk_param2 = cmd_buff[2];
  200. u32 unk_param3 = cmd_buff[3];
  201. u32 unk_param4 = cmd_buff[4];
  202. u32 translation = cmd_buff[5];
  203. u32 buff_addr = cmd_buff[6];
  204. u32 buff_size = (translation >> 4);
  205. cmd_buff[0] = IPC::MakeHeader(0x10, 0x3, 0x2);
  206. cmd_buff[1] = RESULT_SUCCESS.raw;
  207. cmd_buff[2] = 0; // stub 0 (16 bit value)
  208. cmd_buff[3] = 0; // stub 0 (16 bit value)
  209. cmd_buff[4] = (buff_size << 4 | 0xC);
  210. cmd_buff[5] = buff_addr;
  211. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
  212. "unk_param4=0x%08X, translation=0x%08X, "
  213. "buff_addr=0x%08X, buff_size=0x%08X",
  214. unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size);
  215. }
  216. void GetOwnNsDataIdList(Service::Interface* self) {
  217. u32* cmd_buff = Kernel::GetCommandBuffer();
  218. // TODO(JamePeng): Figure out the meaning of these parameters
  219. u32 unk_param1 = cmd_buff[1];
  220. u32 unk_param2 = cmd_buff[2];
  221. u32 unk_param3 = cmd_buff[3];
  222. u32 unk_param4 = cmd_buff[4];
  223. u32 translation = cmd_buff[5];
  224. u32 buff_addr = cmd_buff[6];
  225. u32 buff_size = (translation >> 4);
  226. cmd_buff[0] = IPC::MakeHeader(0x11, 0x3, 0x2);
  227. cmd_buff[1] = RESULT_SUCCESS.raw;
  228. cmd_buff[2] = 0; // stub 0 (16 bit value)
  229. cmd_buff[3] = 0; // stub 0 (16 bit value)
  230. cmd_buff[4] = (buff_size << 4 | 0xC);
  231. cmd_buff[5] = buff_addr;
  232. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
  233. "unk_param4=0x%08X, translation=0x%08X, "
  234. "buff_addr=0x%08X, buff_size=0x%08X",
  235. unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size);
  236. }
  237. void GetNewDataNsDataIdList(Service::Interface* self) {
  238. u32* cmd_buff = Kernel::GetCommandBuffer();
  239. // TODO(JamePeng): Figure out the meaning of these parameters
  240. u32 unk_param1 = cmd_buff[1];
  241. u32 unk_param2 = cmd_buff[2];
  242. u32 unk_param3 = cmd_buff[3];
  243. u32 unk_param4 = cmd_buff[4];
  244. u32 translation = cmd_buff[5];
  245. u32 buff_addr = cmd_buff[6];
  246. u32 buff_size = (translation >> 4);
  247. cmd_buff[0] = IPC::MakeHeader(0x12, 0x3, 0x2);
  248. cmd_buff[1] = RESULT_SUCCESS.raw;
  249. cmd_buff[2] = 0; // stub 0 (16 bit value)
  250. cmd_buff[3] = 0; // stub 0 (16 bit value)
  251. cmd_buff[4] = (buff_size << 4 | 0xC);
  252. cmd_buff[5] = buff_addr;
  253. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
  254. "unk_param4=0x%08X, translation=0x%08X, "
  255. "buff_addr=0x%08X, buff_size=0x%08X",
  256. unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size);
  257. }
  258. void GetOwnNewDataNsDataIdList(Service::Interface* self) {
  259. u32* cmd_buff = Kernel::GetCommandBuffer();
  260. // TODO(JamePeng): Figure out the meaning of these parameters
  261. u32 unk_param1 = cmd_buff[1];
  262. u32 unk_param2 = cmd_buff[2];
  263. u32 unk_param3 = cmd_buff[3];
  264. u32 unk_param4 = cmd_buff[4];
  265. u32 translation = cmd_buff[5];
  266. u32 buff_addr = cmd_buff[6];
  267. u32 buff_size = (translation >> 4);
  268. cmd_buff[0] = IPC::MakeHeader(0x13, 0x3, 0x2);
  269. cmd_buff[1] = RESULT_SUCCESS.raw;
  270. cmd_buff[2] = 0; // stub 0 (16 bit value)
  271. cmd_buff[3] = 0; // stub 0 (16 bit value)
  272. cmd_buff[4] = (buff_size << 4 | 0xC);
  273. cmd_buff[5] = buff_addr;
  274. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
  275. "unk_param4=0x%08X, translation=0x%08X, "
  276. "buff_addr=0x%08X, buff_size=0x%08X",
  277. unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size);
  278. }
  279. void SendProperty(Service::Interface* self) {
  280. u32* cmd_buff = Kernel::GetCommandBuffer();
  281. // TODO(JamePeng): Figure out the meaning of these parameters
  282. u32 unk_param1 = cmd_buff[1];
  283. u32 unk_param2 = cmd_buff[2];
  284. u32 translation = cmd_buff[3];
  285. u32 buff_addr = cmd_buff[4];
  286. u32 buff_size = (translation >> 4);
  287. cmd_buff[0] = IPC::MakeHeader(0x14, 0x1, 0x2);
  288. cmd_buff[1] = RESULT_SUCCESS.raw;
  289. cmd_buff[2] = (buff_size << 4 | 0xA);
  290. cmd_buff[3] = buff_addr;
  291. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, "
  292. "buff_addr=0x%08X, buff_size=0x%08X",
  293. unk_param1, unk_param2, translation, buff_addr, buff_size);
  294. }
  295. void SendPropertyHandle(Service::Interface* self) {
  296. u32* cmd_buff = Kernel::GetCommandBuffer();
  297. // TODO(JamePeng): Figure out the meaning of these parameters
  298. u32 unk_param1 = cmd_buff[2] & 0xFF;
  299. u32 translation = cmd_buff[3];
  300. u32 buff_addr = cmd_buff[4];
  301. u32 buff_size = (translation >> 4);
  302. cmd_buff[0] = IPC::MakeHeader(0x15, 0x1, 0x2);
  303. cmd_buff[1] = RESULT_SUCCESS.raw;
  304. cmd_buff[2] = (buff_size << 4 | 0xA);
  305. cmd_buff[3] = buff_addr;
  306. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
  307. "buff_addr=0x%08X, buff_size=0x%08X",
  308. unk_param1, translation, buff_addr, buff_size);
  309. }
  310. void ReceiveProperty(Service::Interface* self) {
  311. u32* cmd_buff = Kernel::GetCommandBuffer();
  312. // TODO(JamePeng): Figure out the meaning of these parameters
  313. u32 unk_param1 = cmd_buff[1];
  314. u32 buff_size = cmd_buff[2];
  315. u32 translation = cmd_buff[3];
  316. u32 buff_addr = cmd_buff[4];
  317. cmd_buff[0] = IPC::MakeHeader(0x16, 0x2, 0x2);
  318. cmd_buff[1] = RESULT_SUCCESS.raw;
  319. cmd_buff[2] = 0; // stub 0 (32 bit value)
  320. cmd_buff[2] = (buff_size << 4 | 0xC);
  321. cmd_buff[3] = buff_addr;
  322. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, buff_size=0x%08X, "
  323. "translation=0x%08X, buff_addr=0x%08X",
  324. unk_param1, buff_size, translation, buff_addr);
  325. }
  326. void UpdateTaskInterval(Service::Interface* self) {
  327. u32* cmd_buff = Kernel::GetCommandBuffer();
  328. // TODO(JamePeng): Figure out the meaning of these parameters
  329. u32 unk_param1 = cmd_buff[1];
  330. u32 unk_param2 = cmd_buff[2] & 0xFF;
  331. u32 translation = cmd_buff[3];
  332. u32 buff_addr = cmd_buff[4];
  333. u32 buff_size = (translation >> 4);
  334. cmd_buff[0] = IPC::MakeHeader(0x17, 0x1, 0x2);
  335. cmd_buff[1] = RESULT_SUCCESS.raw;
  336. cmd_buff[2] = (buff_size << 4 | 0xA);
  337. cmd_buff[3] = buff_addr;
  338. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, "
  339. "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
  340. unk_param1, unk_param2, translation, buff_addr, buff_size);
  341. }
  342. void UpdateTaskCount(Service::Interface* self) {
  343. u32* cmd_buff = Kernel::GetCommandBuffer();
  344. u32 buff_size = cmd_buff[1];
  345. u32 unk_param2 = cmd_buff[2]; // TODO(JamePeng): Figure out the meaning of these parameters
  346. u32 translation = cmd_buff[3];
  347. u32 buff_addr = cmd_buff[4];
  348. cmd_buff[0] = IPC::MakeHeader(0x18, 0x1, 0x2);
  349. cmd_buff[1] = RESULT_SUCCESS.raw;
  350. cmd_buff[2] = (buff_size << 4 | 0xA);
  351. cmd_buff[3] = buff_addr;
  352. LOG_WARNING(Service_BOSS, "(STUBBED) buff_size=0x%08X, unk_param2=0x%08X, "
  353. "translation=0x%08X, buff_addr=0x%08X",
  354. buff_size, unk_param2, translation, buff_addr);
  355. }
  356. void GetTaskInterval(Service::Interface* self) {
  357. u32* cmd_buff = Kernel::GetCommandBuffer();
  358. u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
  359. u32 translation = cmd_buff[2];
  360. u32 buff_addr = cmd_buff[3];
  361. u32 buff_size = (translation >> 4);
  362. cmd_buff[0] = IPC::MakeHeader(0x19, 0x2, 0x2);
  363. cmd_buff[1] = RESULT_SUCCESS.raw;
  364. cmd_buff[2] = 0; // stub 0 ( 32bit value)
  365. cmd_buff[3] = (buff_size << 4 | 0xA);
  366. cmd_buff[4] = buff_addr;
  367. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
  368. "buff_addr=0x%08X, buff_size=0x%08X",
  369. unk_param1, translation, buff_addr, buff_size);
  370. }
  371. void GetTaskCount(Service::Interface* self) {
  372. u32* cmd_buff = Kernel::GetCommandBuffer();
  373. u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
  374. u32 translation = cmd_buff[2];
  375. u32 buff_addr = cmd_buff[3];
  376. u32 buff_size = (translation >> 4);
  377. cmd_buff[0] = IPC::MakeHeader(0x1A, 0x2, 0x2);
  378. cmd_buff[1] = RESULT_SUCCESS.raw;
  379. cmd_buff[2] = 0; // stub 0 ( 32bit value)
  380. cmd_buff[3] = (buff_size << 4 | 0xA);
  381. cmd_buff[4] = buff_addr;
  382. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
  383. "buff_addr=0x%08X, buff_size=0x%08X",
  384. unk_param1, translation, buff_addr, buff_size);
  385. }
  386. void GetTaskServiceStatus(Service::Interface* self) {
  387. u32* cmd_buff = Kernel::GetCommandBuffer();
  388. u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
  389. u32 translation = cmd_buff[2];
  390. u32 buff_addr = cmd_buff[3];
  391. u32 buff_size = (translation >> 4);
  392. cmd_buff[0] = IPC::MakeHeader(0x1B, 0x2, 0x2);
  393. cmd_buff[1] = RESULT_SUCCESS.raw;
  394. cmd_buff[2] = 0; // stub 0 ( 8bit value)
  395. cmd_buff[3] = (buff_size << 4 | 0xA);
  396. cmd_buff[4] = buff_addr;
  397. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
  398. "buff_addr=0x%08X, buff_size=0x%08X",
  399. unk_param1, translation, buff_addr, buff_size);
  400. }
  401. void StartTask(Service::Interface* self) {
  402. u32* cmd_buff = Kernel::GetCommandBuffer();
  403. u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
  404. u32 translation = cmd_buff[2];
  405. u32 buff_addr = cmd_buff[3];
  406. u32 buff_size = (translation >> 4);
  407. cmd_buff[0] = IPC::MakeHeader(0x1C, 0x1, 0x2);
  408. cmd_buff[1] = RESULT_SUCCESS.raw;
  409. cmd_buff[2] = (buff_size << 4 | 0xA);
  410. cmd_buff[3] = buff_addr;
  411. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
  412. "buff_addr=0x%08X, buff_size=0x%08X",
  413. unk_param1, translation, buff_addr, buff_size);
  414. }
  415. void StartTaskImmediate(Service::Interface* self) {
  416. u32* cmd_buff = Kernel::GetCommandBuffer();
  417. u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
  418. u32 translation = cmd_buff[2];
  419. u32 buff_addr = cmd_buff[3];
  420. u32 buff_size = (translation >> 4);
  421. cmd_buff[0] = IPC::MakeHeader(0x1D, 0x1, 0x2);
  422. cmd_buff[1] = RESULT_SUCCESS.raw;
  423. cmd_buff[2] = (buff_size << 4 | 0xA);
  424. cmd_buff[3] = buff_addr;
  425. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
  426. "buff_addr=0x%08X, buff_size=0x%08X",
  427. unk_param1, translation, buff_addr, buff_size);
  428. }
  429. void CancelTask(Service::Interface* self) {
  430. u32* cmd_buff = Kernel::GetCommandBuffer();
  431. // TODO(JamePeng): Figure out the meaning of these parameters
  432. u32 unk_param1 = cmd_buff[1];
  433. u32 translation = cmd_buff[2];
  434. u32 buff_addr = cmd_buff[3];
  435. u32 buff_size = (translation >> 4);
  436. cmd_buff[0] = IPC::MakeHeader(0x1E, 0x1, 0x2);
  437. cmd_buff[1] = RESULT_SUCCESS.raw;
  438. cmd_buff[2] = (buff_size << 4 | 0xA);
  439. cmd_buff[3] = buff_addr;
  440. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
  441. "buff_addr=0x%08X, buff_size=0x%08X",
  442. unk_param1, translation, buff_addr, buff_size);
  443. }
  444. void GetTaskFinishHandle(Service::Interface* self) {
  445. u32* cmd_buff = Kernel::GetCommandBuffer();
  446. cmd_buff[0] = IPC::MakeHeader(0x1F, 0x1, 0x2);
  447. cmd_buff[1] = RESULT_SUCCESS.raw;
  448. cmd_buff[2] = 0;
  449. cmd_buff[3] = 0; // stub 0(This should be a handle of task_finish ?)
  450. LOG_WARNING(Service_BOSS, "(STUBBED) called");
  451. }
  452. void GetTaskState(Service::Interface* self) {
  453. u32* cmd_buff = Kernel::GetCommandBuffer();
  454. // TODO(JamePeng): Figure out the meaning of these parameters
  455. u32 buff_size = cmd_buff[1];
  456. u32 unk_param2 = cmd_buff[2] & 0xFF;
  457. u32 translation = cmd_buff[3];
  458. u32 buff_addr = cmd_buff[4];
  459. cmd_buff[0] = IPC::MakeHeader(0x20, 0x4, 0x2);
  460. cmd_buff[1] = RESULT_SUCCESS.raw;
  461. cmd_buff[2] = 0; // stub 0 (8 bit value)
  462. cmd_buff[3] = 0; // stub 0 (32 bit value)
  463. cmd_buff[4] = 0; // stub 0 (8 bit value)
  464. cmd_buff[5] = (buff_size << 4 | 0xA);
  465. cmd_buff[6] = buff_addr;
  466. LOG_WARNING(Service_BOSS, "(STUBBED) buff_size=0x%08X, unk_param2=0x%08X, "
  467. "translation=0x%08X, buff_addr=0x%08X",
  468. buff_size, unk_param2, translation, buff_addr);
  469. }
  470. void GetTaskResult(Service::Interface* self) {
  471. u32* cmd_buff = Kernel::GetCommandBuffer();
  472. // TODO(JamePeng): Figure out the meaning of these parameters
  473. u32 unk_param1 = cmd_buff[1];
  474. u32 translation = cmd_buff[2];
  475. u32 buff_addr = cmd_buff[3];
  476. u32 buff_size = (translation >> 4);
  477. cmd_buff[0] = IPC::MakeHeader(0x21, 0x4, 0x2);
  478. cmd_buff[1] = RESULT_SUCCESS.raw;
  479. cmd_buff[2] = 0; // stub 0 (8 bit value)
  480. cmd_buff[3] = 0; // stub 0 (32 bit value)
  481. cmd_buff[4] = 0; // stub 0 (8 bit value)
  482. cmd_buff[5] = (buff_size << 4 | 0xA);
  483. cmd_buff[6] = buff_addr;
  484. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
  485. "buff_addr=0x%08X, buff_size=0x%08X",
  486. unk_param1, translation, buff_addr, buff_size);
  487. }
  488. void GetTaskCommErrorCode(Service::Interface* self) {
  489. u32* cmd_buff = Kernel::GetCommandBuffer();
  490. // TODO(JamePeng): Figure out the meaning of these parameters
  491. u32 unk_param1 = cmd_buff[1];
  492. u32 translation = cmd_buff[2];
  493. u32 buff_addr = cmd_buff[3];
  494. u32 buff_size = (translation >> 4);
  495. cmd_buff[0] = IPC::MakeHeader(0x22, 0x4, 0x2);
  496. cmd_buff[1] = RESULT_SUCCESS.raw;
  497. cmd_buff[2] = 0; // stub 0 (32 bit value)
  498. cmd_buff[3] = 0; // stub 0 (32 bit value)
  499. cmd_buff[4] = 0; // stub 0 (8 bit value)
  500. cmd_buff[5] = (buff_size << 4 | 0xA);
  501. cmd_buff[6] = buff_addr;
  502. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, translation=0x%08X, "
  503. "buff_addr=0x%08X, buff_size=0x%08X",
  504. unk_param1, translation, buff_addr, buff_size);
  505. }
  506. void GetTaskStatus(Service::Interface* self) {
  507. u32* cmd_buff = Kernel::GetCommandBuffer();
  508. // TODO(JamePeng): Figure out the meaning of these parameters
  509. u32 unk_param1 = cmd_buff[1];
  510. u32 unk_param2 = cmd_buff[2] & 0xFF;
  511. u32 unk_param3 = cmd_buff[3] & 0xFF;
  512. u32 translation = cmd_buff[4];
  513. u32 buff_addr = cmd_buff[5];
  514. u32 buff_size = (translation >> 4);
  515. cmd_buff[0] = IPC::MakeHeader(0x23, 0x2, 0x2);
  516. cmd_buff[1] = RESULT_SUCCESS.raw;
  517. cmd_buff[2] = 0; // stub 0 (8 bit value)
  518. cmd_buff[3] = (buff_size << 4 | 0xA);
  519. cmd_buff[4] = buff_addr;
  520. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
  521. "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
  522. unk_param1, unk_param2, unk_param3, translation, buff_addr, buff_size);
  523. }
  524. void GetTaskError(Service::Interface* self) {
  525. u32* cmd_buff = Kernel::GetCommandBuffer();
  526. // TODO(JamePeng): Figure out the meaning of these parameters
  527. u32 unk_param1 = cmd_buff[1];
  528. u32 unk_param2 = cmd_buff[2] & 0xFF;
  529. u32 translation = cmd_buff[4];
  530. u32 buff_addr = cmd_buff[5];
  531. u32 buff_size = (translation >> 4);
  532. cmd_buff[0] = IPC::MakeHeader(0x24, 0x2, 0x2);
  533. cmd_buff[1] = RESULT_SUCCESS.raw;
  534. cmd_buff[2] = 0; // stub 0 (8 bit value)
  535. cmd_buff[3] = (buff_size << 4 | 0xA);
  536. cmd_buff[4] = buff_addr;
  537. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, "
  538. "buff_addr=0x%08X, buff_size=0x%08X",
  539. unk_param1, unk_param2, translation, buff_addr, buff_size);
  540. }
  541. void GetTaskInfo(Service::Interface* self) {
  542. u32* cmd_buff = Kernel::GetCommandBuffer();
  543. // TODO(JamePeng): Figure out the meaning of these parameters
  544. u32 unk_param1 = cmd_buff[1];
  545. u32 unk_param2 = cmd_buff[2] & 0xFF;
  546. u32 translation = cmd_buff[4];
  547. u32 buff_addr = cmd_buff[5];
  548. u32 buff_size = (translation >> 4);
  549. cmd_buff[0] = IPC::MakeHeader(0x25, 0x1, 0x2);
  550. cmd_buff[1] = RESULT_SUCCESS.raw;
  551. cmd_buff[2] = (buff_size << 4 | 0xA);
  552. cmd_buff[3] = buff_addr;
  553. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, translation=0x%08X, "
  554. "buff_addr=0x%08X, buff_size=0x%08X",
  555. unk_param1, unk_param2, translation, buff_addr, buff_size);
  556. }
  557. void DeleteNsData(Service::Interface* self) {
  558. u32* cmd_buff = Kernel::GetCommandBuffer();
  559. // TODO(JamePeng): Figure out the meaning of these parameters
  560. u32 unk_param1 = cmd_buff[1];
  561. cmd_buff[0] = IPC::MakeHeader(0x26, 0x1, 0);
  562. cmd_buff[1] = RESULT_SUCCESS.raw;
  563. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X", unk_param1);
  564. }
  565. void GetNsDataHeaderInfo(Service::Interface* self) {
  566. u32* cmd_buff = Kernel::GetCommandBuffer();
  567. // TODO(JamePeng): Figure out the meaning of these parameters
  568. u32 unk_param1 = cmd_buff[1];
  569. u32 unk_param2 = cmd_buff[2] & 0xFF;
  570. u32 unk_param3 = cmd_buff[3];
  571. u32 translation = cmd_buff[4];
  572. u32 buff_addr = cmd_buff[5];
  573. u32 buff_size = (translation >> 4);
  574. cmd_buff[0] = IPC::MakeHeader(0x27, 0x1, 0x2);
  575. cmd_buff[1] = RESULT_SUCCESS.raw;
  576. cmd_buff[2] = (buff_size << 4 | 0xC);
  577. cmd_buff[3] = buff_addr;
  578. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
  579. "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
  580. unk_param1, unk_param2, unk_param3, translation, buff_addr, buff_size);
  581. }
  582. void ReadNsData(Service::Interface* self) {
  583. u32* cmd_buff = Kernel::GetCommandBuffer();
  584. // TODO(JamePeng): Figure out the meaning of these parameters
  585. u32 unk_param1 = cmd_buff[1];
  586. u32 unk_param2 = cmd_buff[2];
  587. u32 unk_param3 = cmd_buff[3];
  588. u32 unk_param4 = cmd_buff[4];
  589. u32 translation = cmd_buff[5];
  590. u32 buff_addr = cmd_buff[6];
  591. u32 buff_size = (translation >> 4);
  592. cmd_buff[0] = IPC::MakeHeader(0x28, 0x3, 0x2);
  593. cmd_buff[1] = RESULT_SUCCESS.raw;
  594. cmd_buff[2] = 0; // stub 0 (32bit value)
  595. cmd_buff[3] = 0; // stub 0 (32bit value)
  596. cmd_buff[4] = (buff_size << 4 | 0xC);
  597. cmd_buff[5] = buff_addr;
  598. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
  599. "unk_param4=0x%08X, translation=0x%08X, "
  600. "buff_addr=0x%08X, buff_size=0x%08X",
  601. unk_param1, unk_param2, unk_param3, unk_param4, translation, buff_addr, buff_size);
  602. }
  603. void SetNsDataAdditionalInfo(Service::Interface* self) {
  604. u32* cmd_buff = Kernel::GetCommandBuffer();
  605. // TODO(JamePeng): Figure out the meaning of these parameters
  606. u32 unk_param1 = cmd_buff[1];
  607. u32 unk_param2 = cmd_buff[2];
  608. cmd_buff[0] = IPC::MakeHeader(0x29, 0x1, 0);
  609. cmd_buff[1] = RESULT_SUCCESS.raw;
  610. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X", unk_param1,
  611. unk_param2);
  612. }
  613. void GetNsDataAdditionalInfo(Service::Interface* self) {
  614. u32* cmd_buff = Kernel::GetCommandBuffer();
  615. // TODO(JamePeng): Figure out the meaning of these parameters
  616. u32 unk_param1 = cmd_buff[1];
  617. cmd_buff[0] = IPC::MakeHeader(0x2A, 0x2, 0);
  618. cmd_buff[1] = RESULT_SUCCESS.raw;
  619. cmd_buff[2] = 0; // stub 0 (32bit value)
  620. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X", unk_param1);
  621. }
  622. void SetNsDataNewFlag(Service::Interface* self) {
  623. u32* cmd_buff = Kernel::GetCommandBuffer();
  624. // TODO(JamePeng): Figure out the meaning of these parameters
  625. u32 unk_param1 = cmd_buff[1];
  626. ns_data_new_flag = cmd_buff[2] & 0xFF;
  627. cmd_buff[0] = IPC::MakeHeader(0x2B, 0x1, 0);
  628. cmd_buff[1] = RESULT_SUCCESS.raw;
  629. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, ns_data_new_flag=0x%08X", unk_param1,
  630. ns_data_new_flag);
  631. }
  632. void GetNsDataNewFlag(Service::Interface* self) {
  633. u32* cmd_buff = Kernel::GetCommandBuffer();
  634. // TODO(JamePeng): Figure out the meaning of these parameters
  635. u32 unk_param1 = cmd_buff[1];
  636. cmd_buff[0] = IPC::MakeHeader(0x2C, 0x2, 0);
  637. cmd_buff[1] = RESULT_SUCCESS.raw;
  638. cmd_buff[2] = ns_data_new_flag;
  639. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, ns_data_new_flag=0x%08X", unk_param1,
  640. ns_data_new_flag);
  641. }
  642. void GetNsDataLastUpdate(Service::Interface* self) {
  643. u32* cmd_buff = Kernel::GetCommandBuffer();
  644. // TODO(JamePeng): Figure out the meaning of these parameters
  645. u32 unk_param1 = cmd_buff[1];
  646. cmd_buff[0] = IPC::MakeHeader(0x2D, 0x3, 0);
  647. cmd_buff[1] = RESULT_SUCCESS.raw;
  648. cmd_buff[2] = 0; // stub 0 (32bit value)
  649. cmd_buff[3] = 0; // stub 0 (32bit value)
  650. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X", unk_param1);
  651. }
  652. void GetErrorCode(Service::Interface* self) {
  653. u32* cmd_buff = Kernel::GetCommandBuffer();
  654. // TODO(JamePeng): Figure out the meaning of these parameters
  655. u32 unk_param1 = cmd_buff[1];
  656. cmd_buff[0] = IPC::MakeHeader(0x2E, 0x2, 0);
  657. cmd_buff[1] = RESULT_SUCCESS.raw;
  658. cmd_buff[2] = 0; // stub 0 (32bit value)
  659. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X", unk_param1);
  660. }
  661. void RegisterStorageEntry(Service::Interface* self) {
  662. u32* cmd_buff = Kernel::GetCommandBuffer();
  663. // TODO(JamePeng): Figure out the meaning of these parameters
  664. u32 unk_param1 = cmd_buff[1];
  665. u32 unk_param2 = cmd_buff[2];
  666. u32 unk_param3 = cmd_buff[3];
  667. u32 unk_param4 = cmd_buff[4];
  668. u32 unk_param5 = cmd_buff[5] & 0xFF;
  669. cmd_buff[0] = IPC::MakeHeader(0x2F, 0x1, 0);
  670. cmd_buff[1] = RESULT_SUCCESS.raw;
  671. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
  672. "unk_param4=0x%08X, unk_param5=0x%08X",
  673. unk_param1, unk_param2, unk_param3, unk_param4, unk_param5);
  674. }
  675. void GetStorageEntryInfo(Service::Interface* self) {
  676. u32* cmd_buff = Kernel::GetCommandBuffer();
  677. cmd_buff[0] = IPC::MakeHeader(0x30, 0x3, 0);
  678. cmd_buff[1] = RESULT_SUCCESS.raw;
  679. cmd_buff[2] = 0; // stub 0 (32bit value)
  680. cmd_buff[3] = 0; // stub 0 (16bit value)
  681. LOG_WARNING(Service_BOSS, "(STUBBED) called");
  682. }
  683. void SetStorageOption(Service::Interface* self) {
  684. u32* cmd_buff = Kernel::GetCommandBuffer();
  685. // TODO(JamePeng): Figure out the meaning of these parameters
  686. u32 unk_param1 = cmd_buff[1] & 0xFF;
  687. u32 unk_param2 = cmd_buff[2];
  688. u32 unk_param3 = cmd_buff[3];
  689. u32 unk_param4 = cmd_buff[4];
  690. cmd_buff[0] = IPC::MakeHeader(0x31, 0x1, 0);
  691. cmd_buff[1] = RESULT_SUCCESS.raw;
  692. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, "
  693. "unk_param3=0x%08X, unk_param4=0x%08X",
  694. unk_param1, unk_param2, unk_param3, unk_param4);
  695. }
  696. void GetStorageOption(Service::Interface* self) {
  697. u32* cmd_buff = Kernel::GetCommandBuffer();
  698. cmd_buff[0] = IPC::MakeHeader(0x32, 0x5, 0);
  699. cmd_buff[1] = RESULT_SUCCESS.raw;
  700. cmd_buff[2] = 0; // stub 0 (32bit value)
  701. cmd_buff[3] = 0; // stub 0 (8bit value)
  702. cmd_buff[4] = 0; // stub 0 (16bit value)
  703. cmd_buff[5] = 0; // stub 0 (16bit value)
  704. LOG_WARNING(Service_BOSS, "(STUBBED) called");
  705. }
  706. void StartBgImmediate(Service::Interface* self) {
  707. u32* cmd_buff = Kernel::GetCommandBuffer();
  708. u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
  709. u32 translation = cmd_buff[2];
  710. u32 buff_addr = cmd_buff[3];
  711. u32 buff_size = (translation >> 4);
  712. cmd_buff[0] = IPC::MakeHeader(0x33, 0x1, 0x2);
  713. cmd_buff[1] = RESULT_SUCCESS.raw;
  714. cmd_buff[2] = (buff_size << 4 | 0xA);
  715. cmd_buff[3] = buff_addr;
  716. LOG_WARNING(Service_BOSS, "(STUBBED) buff_size=0x%08X, unk_param2=0x%08X, "
  717. "translation=0x%08X, buff_addr=0x%08X",
  718. unk_param1, translation, buff_addr, buff_size);
  719. }
  720. void GetTaskActivePriority(Service::Interface* self) {
  721. u32* cmd_buff = Kernel::GetCommandBuffer();
  722. u32 unk_param1 = cmd_buff[1]; // TODO(JamePeng): Figure out the meaning of these parameters
  723. u32 translation = cmd_buff[2];
  724. u32 buff_addr = cmd_buff[3];
  725. u32 buff_size = (translation >> 4);
  726. cmd_buff[0] = IPC::MakeHeader(0x34, 0x2, 0x2);
  727. cmd_buff[1] = RESULT_SUCCESS.raw;
  728. cmd_buff[2] = 0; // stub 0 (8bit value)
  729. cmd_buff[3] = (buff_size << 4 | 0xA);
  730. cmd_buff[4] = buff_addr;
  731. LOG_WARNING(Service_BOSS, "(STUBBED) buff_size=0x%08X, unk_param2=0x%08X, "
  732. "translation=0x%08X, buff_addr=0x%08X",
  733. unk_param1, translation, buff_addr, buff_size);
  734. }
  735. void RegisterImmediateTask(Service::Interface* self) {
  736. u32* cmd_buff = Kernel::GetCommandBuffer();
  737. // TODO(JamePeng): Figure out the meaning of these parameters
  738. u32 unk_param1 = cmd_buff[1];
  739. u32 unk_param2 = cmd_buff[2] & 0xFF;
  740. u32 unk_param3 = cmd_buff[3] & 0xFF;
  741. u32 translation = cmd_buff[4];
  742. u32 buff_addr = cmd_buff[5];
  743. u32 buff_size = (translation >> 4);
  744. cmd_buff[0] = IPC::MakeHeader(0x35, 0x1, 0x2);
  745. cmd_buff[1] = RESULT_SUCCESS.raw;
  746. cmd_buff[3] = (buff_size << 4 | 0xA);
  747. cmd_buff[4] = buff_addr;
  748. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, unk_param3=0x%08X, "
  749. "translation=0x%08X, buff_addr=0x%08X, buff_size=0x%08X",
  750. unk_param1, unk_param2, unk_param3, translation, buff_addr, buff_size);
  751. }
  752. void SetTaskQuery(Service::Interface* self) {
  753. u32* cmd_buff = Kernel::GetCommandBuffer();
  754. // TODO(JamePeng): Figure out the meaning of these parameters
  755. u32 unk_param1 = cmd_buff[1];
  756. u32 unk_param2 = cmd_buff[2];
  757. u32 translation1 = cmd_buff[3];
  758. u32 buff1_addr = cmd_buff[4];
  759. u32 buff1_size = (translation1 >> 4);
  760. u32 translation2 = cmd_buff[5];
  761. u32 buff2_addr = cmd_buff[6];
  762. u32 buff2_size = (translation2 >> 4);
  763. cmd_buff[0] = IPC::MakeHeader(0x36, 0x1, 0x4);
  764. cmd_buff[1] = RESULT_SUCCESS.raw;
  765. cmd_buff[2] = (buff1_size << 4 | 0xA);
  766. cmd_buff[3] = buff1_addr;
  767. cmd_buff[2] = (buff2_size << 4 | 0xA);
  768. cmd_buff[3] = buff2_addr;
  769. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, "
  770. "translation1=0x%08X, buff1_addr=0x%08X, buff1_size=0x%08X, "
  771. "translation2=0x%08X, buff2_addr=0x%08X, buff2_size=0x%08X",
  772. unk_param1, unk_param2, translation1, buff1_addr, buff1_size, translation2,
  773. buff2_addr, buff2_size);
  774. }
  775. void GetTaskQuery(Service::Interface* self) {
  776. u32* cmd_buff = Kernel::GetCommandBuffer();
  777. // TODO(JamePeng): Figure out the meaning of these parameters
  778. u32 unk_param1 = cmd_buff[1];
  779. u32 unk_param2 = cmd_buff[2];
  780. u32 translation1 = cmd_buff[3];
  781. u32 buff1_addr = cmd_buff[4];
  782. u32 buff1_size = (translation1 >> 4);
  783. u32 translation2 = cmd_buff[5];
  784. u32 buff2_addr = cmd_buff[6];
  785. u32 buff2_size = (translation2 >> 4);
  786. cmd_buff[0] = IPC::MakeHeader(0x37, 0x1, 0x4);
  787. cmd_buff[1] = RESULT_SUCCESS.raw;
  788. cmd_buff[2] = (buff1_size << 4 | 0xA);
  789. cmd_buff[3] = buff1_addr;
  790. cmd_buff[2] = (buff2_size << 4 | 0xC);
  791. cmd_buff[3] = buff2_addr;
  792. LOG_WARNING(Service_BOSS, "(STUBBED) unk_param1=0x%08X, unk_param2=0x%08X, "
  793. "translation1=0x%08X, buff1_addr=0x%08X, buff1_size=0x%08X, "
  794. "translation2=0x%08X, buff2_addr=0x%08X, buff2_size=0x%08X",
  795. unk_param1, unk_param2, translation1, buff1_addr, buff1_size, translation2,
  796. buff2_addr, buff2_size);
  797. }
  798. void Init() {
  799. using namespace Kernel;
  800. AddService(new BOSS_P_Interface);
  801. AddService(new BOSS_U_Interface);
  802. new_arrival_flag = 0;
  803. ns_data_new_flag = 0;
  804. output_flag = 0;
  805. }
  806. void Shutdown() {}
  807. } // namespace BOSS
  808. } // namespace Service