summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Hexagon122018-04-13 15:17:50 +0300
committerGravatar GitHub2018-04-13 15:17:50 +0300
commitb1556309feb9717b68d12c1e55411928e797a243 (patch)
tree44141ddb2b3d6093b14886df22d84ff120e941e5 /src/core
parentMerge pull request #314 from jroweboy/tegra-progress-3b (diff)
parentMerge pull request #319 from Hexagon12/service-name-fix (diff)
downloadyuzu-b1556309feb9717b68d12c1e55411928e797a243.tar.gz
yuzu-b1556309feb9717b68d12c1e55411928e797a243.tar.xz
yuzu-b1556309feb9717b68d12c1e55411928e797a243.zip
Merge pull request #1 from yuzu-emu/master
Update fork
Diffstat (limited to 'src/core')
-rw-r--r--src/core/CMakeLists.txt6
-rw-r--r--src/core/hle/service/acc/acc.cpp130
-rw-r--r--src/core/hle/service/acc/acc.h19
-rw-r--r--src/core/hle/service/acc/acc_aa.cpp22
-rw-r--r--src/core/hle/service/acc/acc_aa.h18
-rw-r--r--src/core/hle/service/acc/acc_su.cpp55
-rw-r--r--src/core/hle/service/acc/acc_su.h18
-rw-r--r--src/core/hle/service/acc/acc_u0.cpp113
-rw-r--r--src/core/hle/service/acc/acc_u0.h28
-rw-r--r--src/core/hle/service/acc/acc_u1.cpp42
-rw-r--r--src/core/hle/service/acc/acc_u1.h18
-rw-r--r--src/core/hle/service/am/am.cpp84
-rw-r--r--src/core/hle/service/am/applet_ae.cpp1
-rw-r--r--src/core/hle/service/am/applet_oe.cpp1
-rw-r--r--src/core/hle/service/aoc/aoc_u.cpp1
-rw-r--r--src/core/hle/service/audio/audin_u.cpp29
-rw-r--r--src/core/hle/service/audio/audout_u.cpp29
-rw-r--r--src/core/hle/service/audio/audrec_u.cpp16
-rw-r--r--src/core/hle/service/audio/audren_u.cpp24
-rw-r--r--src/core/hle/service/audio/codecctl.cpp6
-rw-r--r--src/core/hle/service/filesystem/fsp_srv.cpp97
-rw-r--r--src/core/hle/service/friend/friend.cpp2
-rw-r--r--src/core/hle/service/friend/friend.h2
-rw-r--r--src/core/hle/service/friend/friend_a.cpp3
-rw-r--r--src/core/hle/service/friend/friend_u.cpp3
-rw-r--r--src/core/hle/service/hid/hid.cpp50
-rw-r--r--src/core/hle/service/ns/pl_u.cpp4
-rw-r--r--src/core/hle/service/nvdrv/interface.cpp7
-rw-r--r--src/core/hle/service/nvdrv/nvmemp.cpp8
-rw-r--r--src/core/hle/service/nvdrv/nvmemp.h4
-rw-r--r--src/core/hle/service/pctl/pctl_a.cpp105
-rw-r--r--src/core/hle/service/pctl/pctl_a.h2
-rw-r--r--src/core/hle/service/ssl/ssl.cpp96
-rw-r--r--src/core/hle/service/ssl/ssl.h3
34 files changed, 853 insertions, 193 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 97d795d5f..9877b83fe 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -88,8 +88,14 @@ add_library(core STATIC
88 hle/romfs.h 88 hle/romfs.h
89 hle/service/acc/acc.cpp 89 hle/service/acc/acc.cpp
90 hle/service/acc/acc.h 90 hle/service/acc/acc.h
91 hle/service/acc/acc_aa.cpp
92 hle/service/acc/acc_aa.h
93 hle/service/acc/acc_su.cpp
94 hle/service/acc/acc_su.h
91 hle/service/acc/acc_u0.cpp 95 hle/service/acc/acc_u0.cpp
92 hle/service/acc/acc_u0.h 96 hle/service/acc/acc_u0.h
97 hle/service/acc/acc_u1.cpp
98 hle/service/acc/acc_u1.h
93 hle/service/am/am.cpp 99 hle/service/am/am.cpp
94 hle/service/am/am.h 100 hle/service/am/am.h
95 hle/service/am/applet_ae.cpp 101 hle/service/am/applet_ae.cpp
diff --git a/src/core/hle/service/acc/acc.cpp b/src/core/hle/service/acc/acc.cpp
index 5716577d6..cfb6e05a5 100644
--- a/src/core/hle/service/acc/acc.cpp
+++ b/src/core/hle/service/acc/acc.cpp
@@ -2,14 +2,142 @@
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 "common/logging/log.h"
6#include "core/hle/ipc_helpers.h"
5#include "core/hle/service/acc/acc.h" 7#include "core/hle/service/acc/acc.h"
8#include "core/hle/service/acc/acc_aa.h"
9#include "core/hle/service/acc/acc_su.h"
6#include "core/hle/service/acc/acc_u0.h" 10#include "core/hle/service/acc/acc_u0.h"
11#include "core/hle/service/acc/acc_u1.h"
7 12
8namespace Service { 13namespace Service {
9namespace Account { 14namespace Account {
10 15
16// TODO: RE this structure
17struct UserData {
18 INSERT_PADDING_WORDS(1);
19 u32 icon_id;
20 u8 bg_color_id;
21 INSERT_PADDING_BYTES(0x7);
22 INSERT_PADDING_BYTES(0x10);
23 INSERT_PADDING_BYTES(0x60);
24};
25static_assert(sizeof(UserData) == 0x80, "UserData structure has incorrect size");
26
27struct ProfileBase {
28 u8 user_id[0x10];
29 u64 timestamp;
30 u8 username[0x20];
31};
32static_assert(sizeof(ProfileBase) == 0x38, "ProfileBase structure has incorrect size");
33
34using Uid = std::array<u64, 2>;
35static constexpr Uid DEFAULT_USER_ID{0x10ull, 0x20ull};
36
37class IProfile final : public ServiceFramework<IProfile> {
38public:
39 IProfile() : ServiceFramework("IProfile") {
40 static const FunctionInfo functions[] = {
41 {1, &IProfile::GetBase, "GetBase"},
42 };
43 RegisterHandlers(functions);
44 }
45
46private:
47 void GetBase(Kernel::HLERequestContext& ctx) {
48 LOG_WARNING(Service_ACC, "(STUBBED) called");
49 ProfileBase profile_base{};
50 IPC::ResponseBuilder rb{ctx, 16};
51 rb.Push(RESULT_SUCCESS);
52 rb.PushRaw(profile_base);
53 }
54};
55
56class IManagerForApplication final : public ServiceFramework<IManagerForApplication> {
57public:
58 IManagerForApplication() : ServiceFramework("IManagerForApplication") {
59 static const FunctionInfo functions[] = {
60 {0, &IManagerForApplication::CheckAvailability, "CheckAvailability"},
61 {1, &IManagerForApplication::GetAccountId, "GetAccountId"},
62 };
63 RegisterHandlers(functions);
64 }
65
66private:
67 void CheckAvailability(Kernel::HLERequestContext& ctx) {
68 LOG_WARNING(Service_ACC, "(STUBBED) called");
69 IPC::ResponseBuilder rb{ctx, 3};
70 rb.Push(RESULT_SUCCESS);
71 rb.Push(true); // TODO: Check when this is supposed to return true and when not
72 }
73
74 void GetAccountId(Kernel::HLERequestContext& ctx) {
75 LOG_WARNING(Service_ACC, "(STUBBED) called");
76 IPC::ResponseBuilder rb{ctx, 4};
77 rb.Push(RESULT_SUCCESS);
78 rb.Push<u64>(0x12345678ABCDEF);
79 }
80};
81
82void Module::Interface::GetUserExistence(Kernel::HLERequestContext& ctx) {
83 LOG_WARNING(Service_ACC, "(STUBBED) called");
84 IPC::ResponseBuilder rb{ctx, 3};
85 rb.Push(RESULT_SUCCESS);
86 rb.Push(true); // TODO: Check when this is supposed to return true and when not
87}
88
89void Module::Interface::ListAllUsers(Kernel::HLERequestContext& ctx) {
90 LOG_WARNING(Service_ACC, "(STUBBED) called");
91 constexpr std::array<u128, 10> user_ids{DEFAULT_USER_ID};
92 ctx.WriteBuffer(user_ids.data(), user_ids.size());
93 IPC::ResponseBuilder rb{ctx, 2};
94 rb.Push(RESULT_SUCCESS);
95}
96
97void Module::Interface::ListOpenUsers(Kernel::HLERequestContext& ctx) {
98 LOG_WARNING(Service_ACC, "(STUBBED) called");
99 constexpr std::array<u128, 10> user_ids{DEFAULT_USER_ID};
100 ctx.WriteBuffer(user_ids.data(), user_ids.size());
101 IPC::ResponseBuilder rb{ctx, 2};
102 rb.Push(RESULT_SUCCESS);
103}
104
105void Module::Interface::GetProfile(Kernel::HLERequestContext& ctx) {
106 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
107 rb.Push(RESULT_SUCCESS);
108 rb.PushIpcInterface<IProfile>();
109 LOG_DEBUG(Service_ACC, "called");
110}
111
112void Module::Interface::InitializeApplicationInfo(Kernel::HLERequestContext& ctx) {
113 LOG_WARNING(Service_ACC, "(STUBBED) called");
114 IPC::ResponseBuilder rb{ctx, 2};
115 rb.Push(RESULT_SUCCESS);
116}
117
118void Module::Interface::GetBaasAccountManagerForApplication(Kernel::HLERequestContext& ctx) {
119 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
120 rb.Push(RESULT_SUCCESS);
121 rb.PushIpcInterface<IManagerForApplication>();
122 LOG_DEBUG(Service_ACC, "called");
123}
124
125void Module::Interface::GetLastOpenedUser(Kernel::HLERequestContext& ctx) {
126 LOG_WARNING(Service_ACC, "(STUBBED) called");
127 IPC::ResponseBuilder rb{ctx, 6};
128 rb.Push(RESULT_SUCCESS);
129 rb.PushRaw(DEFAULT_USER_ID);
130}
131
132Module::Interface::Interface(std::shared_ptr<Module> module, const char* name)
133 : ServiceFramework(name), module(std::move(module)) {}
134
11void InstallInterfaces(SM::ServiceManager& service_manager) { 135void InstallInterfaces(SM::ServiceManager& service_manager) {
12 std::make_shared<ACC_U0>()->InstallAsService(service_manager); 136 auto module = std::make_shared<Module>();
137 std::make_shared<ACC_AA>(module)->InstallAsService(service_manager);
138 std::make_shared<ACC_SU>(module)->InstallAsService(service_manager);
139 std::make_shared<ACC_U0>(module)->InstallAsService(service_manager);
140 std::make_shared<ACC_U1>(module)->InstallAsService(service_manager);
13} 141}
14 142
15} // namespace Account 143} // namespace Account
diff --git a/src/core/hle/service/acc/acc.h b/src/core/hle/service/acc/acc.h
index 44d024f48..2d2f57b7d 100644
--- a/src/core/hle/service/acc/acc.h
+++ b/src/core/hle/service/acc/acc.h
@@ -9,6 +9,25 @@
9namespace Service { 9namespace Service {
10namespace Account { 10namespace Account {
11 11
12class Module final {
13public:
14 class Interface : public ServiceFramework<Interface> {
15 public:
16 Interface(std::shared_ptr<Module> module, const char* name);
17
18 void GetUserExistence(Kernel::HLERequestContext& ctx);
19 void ListAllUsers(Kernel::HLERequestContext& ctx);
20 void ListOpenUsers(Kernel::HLERequestContext& ctx);
21 void GetLastOpenedUser(Kernel::HLERequestContext& ctx);
22 void GetProfile(Kernel::HLERequestContext& ctx);
23 void InitializeApplicationInfo(Kernel::HLERequestContext& ctx);
24 void GetBaasAccountManagerForApplication(Kernel::HLERequestContext& ctx);
25
26 protected:
27 std::shared_ptr<Module> module;
28 };
29};
30
12/// Registers all ACC services with the specified service manager. 31/// Registers all ACC services with the specified service manager.
13void InstallInterfaces(SM::ServiceManager& service_manager); 32void InstallInterfaces(SM::ServiceManager& service_manager);
14 33
diff --git a/src/core/hle/service/acc/acc_aa.cpp b/src/core/hle/service/acc/acc_aa.cpp
new file mode 100644
index 000000000..76deaa07f
--- /dev/null
+++ b/src/core/hle/service/acc/acc_aa.cpp
@@ -0,0 +1,22 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/hle/service/acc/acc_aa.h"
6
7namespace Service {
8namespace Account {
9
10ACC_AA::ACC_AA(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "acc:aa") {
11 static const FunctionInfo functions[] = {
12 {0, nullptr, "EnsureCacheAsync"},
13 {1, nullptr, "LoadCache"},
14 {2, nullptr, "GetDeviceAccountId"},
15 {50, nullptr, "RegisterNotificationTokenAsync"},
16 {51, nullptr, "UnregisterNotificationTokenAsync"},
17 };
18 RegisterHandlers(functions);
19}
20
21} // namespace Account
22} // namespace Service
diff --git a/src/core/hle/service/acc/acc_aa.h b/src/core/hle/service/acc/acc_aa.h
new file mode 100644
index 000000000..5069c6890
--- /dev/null
+++ b/src/core/hle/service/acc/acc_aa.h
@@ -0,0 +1,18 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/service/acc/acc.h"
8
9namespace Service {
10namespace Account {
11
12class ACC_AA final : public Module::Interface {
13public:
14 explicit ACC_AA(std::shared_ptr<Module> module);
15};
16
17} // namespace Account
18} // namespace Service
diff --git a/src/core/hle/service/acc/acc_su.cpp b/src/core/hle/service/acc/acc_su.cpp
new file mode 100644
index 000000000..538f9d9b1
--- /dev/null
+++ b/src/core/hle/service/acc/acc_su.cpp
@@ -0,0 +1,55 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/hle/service/acc/acc_su.h"
6
7namespace Service {
8namespace Account {
9
10ACC_SU::ACC_SU(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "acc:su") {
11 static const FunctionInfo functions[] = {
12 {0, nullptr, "GetUserCount"},
13 {1, &ACC_SU::GetUserExistence, "GetUserExistence"},
14 {2, &ACC_SU::ListAllUsers, "ListAllUsers"},
15 {3, &ACC_SU::ListOpenUsers, "ListOpenUsers"},
16 {4, &ACC_SU::GetLastOpenedUser, "GetLastOpenedUser"},
17 {5, &ACC_SU::GetProfile, "GetProfile"},
18 {6, nullptr, "GetProfileDigest"},
19 {50, nullptr, "IsUserRegistrationRequestPermitted"},
20 {51, nullptr, "TrySelectUserWithoutInteraction"},
21 {60, nullptr, "ListOpenContextStoredUsers"},
22 {100, nullptr, "GetUserRegistrationNotifier"},
23 {101, nullptr, "GetUserStateChangeNotifier"},
24 {102, nullptr, "GetBaasAccountManagerForSystemService"},
25 {103, nullptr, "GetBaasUserAvailabilityChangeNotifier"},
26 {104, nullptr, "GetProfileUpdateNotifier"},
27 {105, nullptr, "CheckNetworkServiceAvailabilityAsync"},
28 {110, nullptr, "StoreSaveDataThumbnail"},
29 {111, nullptr, "ClearSaveDataThumbnail"},
30 {112, nullptr, "LoadSaveDataThumbnail"},
31 {113, nullptr, "GetSaveDataThumbnailExistence"},
32 {190, nullptr, "GetUserLastOpenedApplication"},
33 {191, nullptr, "ActivateOpenContextHolder"},
34 {200, nullptr, "BeginUserRegistration"},
35 {201, nullptr, "CompleteUserRegistration"},
36 {202, nullptr, "CancelUserRegistration"},
37 {203, nullptr, "DeleteUser"},
38 {204, nullptr, "SetUserPosition"},
39 {205, nullptr, "GetProfileEditor"},
40 {206, nullptr, "CompleteUserRegistrationForcibly"},
41 {210, nullptr, "CreateFloatingRegistrationRequest"},
42 {230, nullptr, "AuthenticateServiceAsync"},
43 {250, nullptr, "GetBaasAccountAdministrator"},
44 {290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"},
45 {291, nullptr, "ProxyProcedureForFloatingRegistrationWithNintendoAccount"},
46 {299, nullptr, "SuspendBackgroundDaemon"},
47 {997, nullptr, "DebugInvalidateTokenCacheForUser"},
48 {998, nullptr, "DebugSetUserStateClose"},
49 {999, nullptr, "DebugSetUserStateOpen"},
50 };
51 RegisterHandlers(functions);
52}
53
54} // namespace Account
55} // namespace Service
diff --git a/src/core/hle/service/acc/acc_su.h b/src/core/hle/service/acc/acc_su.h
new file mode 100644
index 000000000..3894a6991
--- /dev/null
+++ b/src/core/hle/service/acc/acc_su.h
@@ -0,0 +1,18 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/service/acc/acc.h"
8
9namespace Service {
10namespace Account {
11
12class ACC_SU final : public Module::Interface {
13public:
14 explicit ACC_SU(std::shared_ptr<Module> module);
15};
16
17} // namespace Account
18} // namespace Service
diff --git a/src/core/hle/service/acc/acc_u0.cpp b/src/core/hle/service/acc/acc_u0.cpp
index 52c3491d5..7b9c667ef 100644
--- a/src/core/hle/service/acc/acc_u0.cpp
+++ b/src/core/hle/service/acc/acc_u0.cpp
@@ -2,120 +2,31 @@
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 "common/logging/log.h"
6#include "core/hle/ipc_helpers.h"
7#include "core/hle/service/acc/acc_u0.h" 5#include "core/hle/service/acc/acc_u0.h"
8 6
9namespace Service { 7namespace Service {
10namespace Account { 8namespace Account {
11 9
12using Uid = std::array<u64, 2>; 10ACC_U0::ACC_U0(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "acc:u0") {
13static constexpr Uid DEFAULT_USER_ID{0x10ull, 0x20ull};
14
15class IProfile final : public ServiceFramework<IProfile> {
16public:
17 IProfile() : ServiceFramework("IProfile") {
18 static const FunctionInfo functions[] = {
19 {1, &IProfile::GetBase, "GetBase"},
20 };
21 RegisterHandlers(functions);
22 }
23
24private:
25 void GetBase(Kernel::HLERequestContext& ctx) {
26 LOG_WARNING(Service_ACC, "(STUBBED) called");
27 ProfileBase profile_base{};
28 IPC::ResponseBuilder rb{ctx, 16};
29 rb.Push(RESULT_SUCCESS);
30 rb.PushRaw(profile_base);
31 }
32};
33
34class IManagerForApplication final : public ServiceFramework<IManagerForApplication> {
35public:
36 IManagerForApplication() : ServiceFramework("IManagerForApplication") {
37 static const FunctionInfo functions[] = {
38 {0, &IManagerForApplication::CheckAvailability, "CheckAvailability"},
39 {1, &IManagerForApplication::GetAccountId, "GetAccountId"},
40 };
41 RegisterHandlers(functions);
42 }
43
44private:
45 void CheckAvailability(Kernel::HLERequestContext& ctx) {
46 LOG_WARNING(Service_ACC, "(STUBBED) called");
47 IPC::ResponseBuilder rb{ctx, 3};
48 rb.Push(RESULT_SUCCESS);
49 rb.Push(true); // TODO: Check when this is supposed to return true and when not
50 }
51
52 void GetAccountId(Kernel::HLERequestContext& ctx) {
53 LOG_WARNING(Service_ACC, "(STUBBED) called");
54 IPC::ResponseBuilder rb{ctx, 4};
55 rb.Push(RESULT_SUCCESS);
56 rb.Push<u64>(0x12345678ABCDEF);
57 }
58};
59
60void ACC_U0::GetUserExistence(Kernel::HLERequestContext& ctx) {
61 LOG_WARNING(Service_ACC, "(STUBBED) called");
62 IPC::ResponseBuilder rb{ctx, 3};
63 rb.Push(RESULT_SUCCESS);
64 rb.Push(true); // TODO: Check when this is supposed to return true and when not
65}
66
67void ACC_U0::ListAllUsers(Kernel::HLERequestContext& ctx) {
68 LOG_WARNING(Service_ACC, "(STUBBED) called");
69 constexpr std::array<u128, 10> user_ids{DEFAULT_USER_ID};
70 ctx.WriteBuffer(user_ids.data(), user_ids.size());
71 IPC::ResponseBuilder rb{ctx, 2};
72 rb.Push(RESULT_SUCCESS);
73}
74
75void ACC_U0::ListOpenUsers(Kernel::HLERequestContext& ctx) {
76 LOG_WARNING(Service_ACC, "(STUBBED) called");
77 constexpr std::array<u128, 10> user_ids{DEFAULT_USER_ID};
78 ctx.WriteBuffer(user_ids.data(), user_ids.size());
79 IPC::ResponseBuilder rb{ctx, 2};
80 rb.Push(RESULT_SUCCESS);
81}
82
83void ACC_U0::GetProfile(Kernel::HLERequestContext& ctx) {
84 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
85 rb.Push(RESULT_SUCCESS);
86 rb.PushIpcInterface<IProfile>();
87 LOG_DEBUG(Service_ACC, "called");
88}
89
90void ACC_U0::InitializeApplicationInfo(Kernel::HLERequestContext& ctx) {
91 LOG_WARNING(Service_ACC, "(STUBBED) called");
92 IPC::ResponseBuilder rb{ctx, 2};
93 rb.Push(RESULT_SUCCESS);
94}
95
96void ACC_U0::GetBaasAccountManagerForApplication(Kernel::HLERequestContext& ctx) {
97 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
98 rb.Push(RESULT_SUCCESS);
99 rb.PushIpcInterface<IManagerForApplication>();
100 LOG_DEBUG(Service_ACC, "called");
101}
102
103void ACC_U0::GetLastOpenedUser(Kernel::HLERequestContext& ctx) {
104 LOG_WARNING(Service_ACC, "(STUBBED) called");
105 IPC::ResponseBuilder rb{ctx, 6};
106 rb.Push(RESULT_SUCCESS);
107 rb.PushRaw(DEFAULT_USER_ID);
108}
109
110ACC_U0::ACC_U0() : ServiceFramework("acc:u0") {
111 static const FunctionInfo functions[] = { 11 static const FunctionInfo functions[] = {
12 {0, nullptr, "GetUserCount"},
112 {1, &ACC_U0::GetUserExistence, "GetUserExistence"}, 13 {1, &ACC_U0::GetUserExistence, "GetUserExistence"},
113 {2, &ACC_U0::ListAllUsers, "ListAllUsers"}, 14 {2, &ACC_U0::ListAllUsers, "ListAllUsers"},
114 {3, &ACC_U0::ListOpenUsers, "ListOpenUsers"}, 15 {3, &ACC_U0::ListOpenUsers, "ListOpenUsers"},
115 {4, &ACC_U0::GetLastOpenedUser, "GetLastOpenedUser"}, 16 {4, &ACC_U0::GetLastOpenedUser, "GetLastOpenedUser"},
116 {5, &ACC_U0::GetProfile, "GetProfile"}, 17 {5, &ACC_U0::GetProfile, "GetProfile"},
18 {6, nullptr, "GetProfileDigest"},
19 {50, nullptr, "IsUserRegistrationRequestPermitted"},
20 {51, nullptr, "TrySelectUserWithoutInteraction"},
21 {60, nullptr, "ListOpenContextStoredUsers"},
117 {100, &ACC_U0::InitializeApplicationInfo, "InitializeApplicationInfo"}, 22 {100, &ACC_U0::InitializeApplicationInfo, "InitializeApplicationInfo"},
118 {101, &ACC_U0::GetBaasAccountManagerForApplication, "GetBaasAccountManagerForApplication"}, 23 {101, &ACC_U0::GetBaasAccountManagerForApplication, "GetBaasAccountManagerForApplication"},
24 {102, nullptr, "AuthenticateApplicationAsync"},
25 {103, nullptr, "CheckNetworkServiceAvailabilityAsync"},
26 {110, nullptr, "StoreSaveDataThumbnail"},
27 {111, nullptr, "ClearSaveDataThumbnail"},
28 {120, nullptr, "CreateGuestLoginRequest"},
29 {130, nullptr, "LoadOpenContext"},
119 }; 30 };
120 RegisterHandlers(functions); 31 RegisterHandlers(functions);
121} 32}
diff --git a/src/core/hle/service/acc/acc_u0.h b/src/core/hle/service/acc/acc_u0.h
index 222f37282..d4f36e172 100644
--- a/src/core/hle/service/acc/acc_u0.h
+++ b/src/core/hle/service/acc/acc_u0.h
@@ -4,36 +4,14 @@
4 4
5#pragma once 5#pragma once
6 6
7#include "core/hle/service/service.h" 7#include "core/hle/service/acc/acc.h"
8 8
9namespace Service { 9namespace Service {
10namespace Account { 10namespace Account {
11 11
12// TODO: RE this structure 12class ACC_U0 final : public Module::Interface {
13struct UserData {
14 INSERT_PADDING_BYTES(0x80);
15};
16static_assert(sizeof(UserData) == 0x80, "UserData structure has incorrect size");
17
18// TODO: RE this structure
19struct ProfileBase {
20 INSERT_PADDING_BYTES(0x38);
21};
22static_assert(sizeof(ProfileBase) == 0x38, "ProfileBase structure has incorrect size");
23
24class ACC_U0 final : public ServiceFramework<ACC_U0> {
25public: 13public:
26 ACC_U0(); 14 explicit ACC_U0(std::shared_ptr<Module> module);
27 ~ACC_U0() = default;
28
29private:
30 void GetUserExistence(Kernel::HLERequestContext& ctx);
31 void ListAllUsers(Kernel::HLERequestContext& ctx);
32 void ListOpenUsers(Kernel::HLERequestContext& ctx);
33 void GetLastOpenedUser(Kernel::HLERequestContext& ctx);
34 void GetProfile(Kernel::HLERequestContext& ctx);
35 void InitializeApplicationInfo(Kernel::HLERequestContext& ctx);
36 void GetBaasAccountManagerForApplication(Kernel::HLERequestContext& ctx);
37}; 15};
38 16
39} // namespace Account 17} // namespace Account
diff --git a/src/core/hle/service/acc/acc_u1.cpp b/src/core/hle/service/acc/acc_u1.cpp
new file mode 100644
index 000000000..dea353554
--- /dev/null
+++ b/src/core/hle/service/acc/acc_u1.cpp
@@ -0,0 +1,42 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/hle/service/acc/acc_u1.h"
6
7namespace Service {
8namespace Account {
9
10ACC_U1::ACC_U1(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "acc:u1") {
11 static const FunctionInfo functions[] = {
12 {0, nullptr, "GetUserCount"},
13 {1, &ACC_U1::GetUserExistence, "GetUserExistence"},
14 {2, &ACC_U1::ListAllUsers, "ListAllUsers"},
15 {3, &ACC_U1::ListOpenUsers, "ListOpenUsers"},
16 {4, &ACC_U1::GetLastOpenedUser, "GetLastOpenedUser"},
17 {5, &ACC_U1::GetProfile, "GetProfile"},
18 {6, nullptr, "GetProfileDigest"},
19 {50, nullptr, "IsUserRegistrationRequestPermitted"},
20 {51, nullptr, "TrySelectUserWithoutInteraction"},
21 {60, nullptr, "ListOpenContextStoredUsers"},
22 {100, nullptr, "GetUserRegistrationNotifier"},
23 {101, nullptr, "GetUserStateChangeNotifier"},
24 {102, nullptr, "GetBaasAccountManagerForSystemService"},
25 {103, nullptr, "GetProfileUpdateNotifier"},
26 {104, nullptr, "CheckNetworkServiceAvailabilityAsync"},
27 {105, nullptr, "GetBaasUserAvailabilityChangeNotifier"},
28 {110, nullptr, "StoreSaveDataThumbnail"},
29 {111, nullptr, "ClearSaveDataThumbnail"},
30 {112, nullptr, "LoadSaveDataThumbnail"},
31 {113, nullptr, "GetSaveDataThumbnailExistence"},
32 {190, nullptr, "GetUserLastOpenedApplication"},
33 {191, nullptr, "ActivateOpenContextHolder"},
34 {997, nullptr, "DebugInvalidateTokenCacheForUser"},
35 {998, nullptr, "DebugSetUserStateClose"},
36 {999, nullptr, "DebugSetUserStateOpen"},
37 };
38 RegisterHandlers(functions);
39}
40
41} // namespace Account
42} // namespace Service
diff --git a/src/core/hle/service/acc/acc_u1.h b/src/core/hle/service/acc/acc_u1.h
new file mode 100644
index 000000000..432d5b3e9
--- /dev/null
+++ b/src/core/hle/service/acc/acc_u1.h
@@ -0,0 +1,18 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/service/acc/acc.h"
8
9namespace Service {
10namespace Account {
11
12class ACC_U1 final : public Module::Interface {
13public:
14 explicit ACC_U1(std::shared_ptr<Module> module);
15};
16
17} // namespace Account
18} // namespace Service
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp
index bab338205..bfc431e88 100644
--- a/src/core/hle/service/am/am.cpp
+++ b/src/core/hle/service/am/am.cpp
@@ -19,8 +19,11 @@ namespace AM {
19 19
20IWindowController::IWindowController() : ServiceFramework("IWindowController") { 20IWindowController::IWindowController() : ServiceFramework("IWindowController") {
21 static const FunctionInfo functions[] = { 21 static const FunctionInfo functions[] = {
22 {0, nullptr, "CreateWindow"},
22 {1, &IWindowController::GetAppletResourceUserId, "GetAppletResourceUserId"}, 23 {1, &IWindowController::GetAppletResourceUserId, "GetAppletResourceUserId"},
23 {10, &IWindowController::AcquireForegroundRights, "AcquireForegroundRights"}, 24 {10, &IWindowController::AcquireForegroundRights, "AcquireForegroundRights"},
25 {11, nullptr, "ReleaseForegroundRights"},
26 {12, nullptr, "RejectToChangeIntoBackground"},
24 }; 27 };
25 RegisterHandlers(functions); 28 RegisterHandlers(functions);
26} 29}
@@ -78,8 +81,11 @@ IDebugFunctions::IDebugFunctions() : ServiceFramework("IDebugFunctions") {}
78ISelfController::ISelfController(std::shared_ptr<NVFlinger::NVFlinger> nvflinger) 81ISelfController::ISelfController(std::shared_ptr<NVFlinger::NVFlinger> nvflinger)
79 : ServiceFramework("ISelfController"), nvflinger(std::move(nvflinger)) { 82 : ServiceFramework("ISelfController"), nvflinger(std::move(nvflinger)) {
80 static const FunctionInfo functions[] = { 83 static const FunctionInfo functions[] = {
84 {0, nullptr, "Exit"},
81 {1, &ISelfController::LockExit, "LockExit"}, 85 {1, &ISelfController::LockExit, "LockExit"},
82 {2, &ISelfController::UnlockExit, "UnlockExit"}, 86 {2, &ISelfController::UnlockExit, "UnlockExit"},
87 {3, nullptr, "EnterFatalSection"},
88 {4, nullptr, "LeaveFatalSection"},
83 {9, &ISelfController::GetLibraryAppletLaunchableEvent, "GetLibraryAppletLaunchableEvent"}, 89 {9, &ISelfController::GetLibraryAppletLaunchableEvent, "GetLibraryAppletLaunchableEvent"},
84 {10, &ISelfController::SetScreenShotPermission, "SetScreenShotPermission"}, 90 {10, &ISelfController::SetScreenShotPermission, "SetScreenShotPermission"},
85 {11, &ISelfController::SetOperationModeChangedNotification, 91 {11, &ISelfController::SetOperationModeChangedNotification,
@@ -88,8 +94,29 @@ ISelfController::ISelfController(std::shared_ptr<NVFlinger::NVFlinger> nvflinger
88 "SetPerformanceModeChangedNotification"}, 94 "SetPerformanceModeChangedNotification"},
89 {13, &ISelfController::SetFocusHandlingMode, "SetFocusHandlingMode"}, 95 {13, &ISelfController::SetFocusHandlingMode, "SetFocusHandlingMode"},
90 {14, &ISelfController::SetRestartMessageEnabled, "SetRestartMessageEnabled"}, 96 {14, &ISelfController::SetRestartMessageEnabled, "SetRestartMessageEnabled"},
97 {15, nullptr, "SetScreenShotAppletIdentityInfo"},
91 {16, &ISelfController::SetOutOfFocusSuspendingEnabled, "SetOutOfFocusSuspendingEnabled"}, 98 {16, &ISelfController::SetOutOfFocusSuspendingEnabled, "SetOutOfFocusSuspendingEnabled"},
99 {17, nullptr, "SetControllerFirmwareUpdateSection"},
100 {18, nullptr, "SetRequiresCaptureButtonShortPressedMessage"},
101 {19, nullptr, "SetScreenShotImageOrientation"},
102 {20, nullptr, "SetDesirableKeyboardLayout"},
92 {40, &ISelfController::CreateManagedDisplayLayer, "CreateManagedDisplayLayer"}, 103 {40, &ISelfController::CreateManagedDisplayLayer, "CreateManagedDisplayLayer"},
104 {41, nullptr, "IsSystemBufferSharingEnabled"},
105 {42, nullptr, "GetSystemSharedLayerHandle"},
106 {50, nullptr, "SetHandlesRequestToDisplay"},
107 {51, nullptr, "ApproveToDisplay"},
108 {60, nullptr, "OverrideAutoSleepTimeAndDimmingTime"},
109 {61, nullptr, "SetMediaPlaybackState"},
110 {62, nullptr, "SetIdleTimeDetectionExtension"},
111 {63, nullptr, "GetIdleTimeDetectionExtension"},
112 {64, nullptr, "SetInputDetectionSourceSet"},
113 {65, nullptr, "ReportUserIsActive"},
114 {66, nullptr, "GetCurrentIlluminance"},
115 {67, nullptr, "IsIlluminanceAvailable"},
116 {68, nullptr, "SetAutoSleepDisabled"},
117 {69, nullptr, "IsAutoSleepDisabled"},
118 {70, nullptr, "ReportMultimediaError"},
119 {80, nullptr, "SetWirelessPriorityMode"},
93 }; 120 };
94 RegisterHandlers(functions); 121 RegisterHandlers(functions);
95 122
@@ -206,9 +233,30 @@ ICommonStateGetter::ICommonStateGetter() : ServiceFramework("ICommonStateGetter"
206 static const FunctionInfo functions[] = { 233 static const FunctionInfo functions[] = {
207 {0, &ICommonStateGetter::GetEventHandle, "GetEventHandle"}, 234 {0, &ICommonStateGetter::GetEventHandle, "GetEventHandle"},
208 {1, &ICommonStateGetter::ReceiveMessage, "ReceiveMessage"}, 235 {1, &ICommonStateGetter::ReceiveMessage, "ReceiveMessage"},
236 {2, nullptr, "GetThisAppletKind"},
237 {3, nullptr, "AllowToEnterSleep"},
238 {4, nullptr, "DisallowToEnterSleep"},
209 {5, &ICommonStateGetter::GetOperationMode, "GetOperationMode"}, 239 {5, &ICommonStateGetter::GetOperationMode, "GetOperationMode"},
210 {6, &ICommonStateGetter::GetPerformanceMode, "GetPerformanceMode"}, 240 {6, &ICommonStateGetter::GetPerformanceMode, "GetPerformanceMode"},
241 {7, nullptr, "GetCradleStatus"},
242 {8, nullptr, "GetBootMode"},
211 {9, &ICommonStateGetter::GetCurrentFocusState, "GetCurrentFocusState"}, 243 {9, &ICommonStateGetter::GetCurrentFocusState, "GetCurrentFocusState"},
244 {10, nullptr, "RequestToAcquireSleepLock"},
245 {11, nullptr, "ReleaseSleepLock"},
246 {12, nullptr, "ReleaseSleepLockTransiently"},
247 {13, nullptr, "GetAcquiredSleepLockEvent"},
248 {20, nullptr, "PushToGeneralChannel"},
249 {30, nullptr, "GetHomeButtonReaderLockAccessor"},
250 {31, nullptr, "GetReaderLockAccessorEx"},
251 {40, nullptr, "GetCradleFwVersion"},
252 {50, nullptr, "IsVrModeEnabled"},
253 {51, nullptr, "SetVrModeEnabled"},
254 {52, nullptr, "SwitchLcdBacklight"},
255 {55, nullptr, "IsInControllerFirmwareUpdateSection"},
256 {60, nullptr, "GetDefaultDisplayResolution"},
257 {61, nullptr, "GetDefaultDisplayResolutionChangeEvent"},
258 {62, nullptr, "GetHdcpAuthenticationState"},
259 {63, nullptr, "GetHdcpAuthenticationStateChangeEvent"},
212 }; 260 };
213 RegisterHandlers(functions); 261 RegisterHandlers(functions);
214 262
@@ -278,7 +326,7 @@ public:
278 {104, nullptr, "PopInteractiveOutData"}, 326 {104, nullptr, "PopInteractiveOutData"},
279 {105, nullptr, "GetPopOutDataEvent"}, 327 {105, nullptr, "GetPopOutDataEvent"},
280 {106, nullptr, "GetPopInteractiveOutDataEvent"}, 328 {106, nullptr, "GetPopInteractiveOutDataEvent"},
281 {120, nullptr, "NeedsToExitProcess"}, 329 {110, nullptr, "NeedsToExitProcess"},
282 {120, nullptr, "GetLibraryAppletInfo"}, 330 {120, nullptr, "GetLibraryAppletInfo"},
283 {150, nullptr, "RequestForAppletToGetForeground"}, 331 {150, nullptr, "RequestForAppletToGetForeground"},
284 {160, nullptr, "GetIndirectLayerConsumerHandle"}, 332 {160, nullptr, "GetIndirectLayerConsumerHandle"},
@@ -330,6 +378,7 @@ public:
330 : ServiceFramework("IStorageAccessor"), buffer(std::move(buffer)) { 378 : ServiceFramework("IStorageAccessor"), buffer(std::move(buffer)) {
331 static const FunctionInfo functions[] = { 379 static const FunctionInfo functions[] = {
332 {0, &IStorageAccessor::GetSize, "GetSize"}, 380 {0, &IStorageAccessor::GetSize, "GetSize"},
381 {10, nullptr, "Write"},
333 {11, &IStorageAccessor::Read, "Read"}, 382 {11, &IStorageAccessor::Read, "Read"},
334 }; 383 };
335 RegisterHandlers(functions); 384 RegisterHandlers(functions);
@@ -372,6 +421,7 @@ public:
372 : ServiceFramework("IStorage"), buffer(std::move(buffer)) { 421 : ServiceFramework("IStorage"), buffer(std::move(buffer)) {
373 static const FunctionInfo functions[] = { 422 static const FunctionInfo functions[] = {
374 {0, &IStorage::Open, "Open"}, 423 {0, &IStorage::Open, "Open"},
424 {1, nullptr, "OpenTransferStorage"},
375 }; 425 };
376 RegisterHandlers(functions); 426 RegisterHandlers(functions);
377 } 427 }
@@ -392,12 +442,42 @@ private:
392IApplicationFunctions::IApplicationFunctions() : ServiceFramework("IApplicationFunctions") { 442IApplicationFunctions::IApplicationFunctions() : ServiceFramework("IApplicationFunctions") {
393 static const FunctionInfo functions[] = { 443 static const FunctionInfo functions[] = {
394 {1, &IApplicationFunctions::PopLaunchParameter, "PopLaunchParameter"}, 444 {1, &IApplicationFunctions::PopLaunchParameter, "PopLaunchParameter"},
445 {10, nullptr, "CreateApplicationAndPushAndRequestToStart"},
446 {11, nullptr, "CreateApplicationAndPushAndRequestToStartForQuest"},
447 {12, nullptr, "CreateApplicationAndRequestToStart"},
448 {13, nullptr, "CreateApplicationAndRequestToStartForQuest"},
395 {20, &IApplicationFunctions::EnsureSaveData, "EnsureSaveData"}, 449 {20, &IApplicationFunctions::EnsureSaveData, "EnsureSaveData"},
396 {21, &IApplicationFunctions::GetDesiredLanguage, "GetDesiredLanguage"}, 450 {21, &IApplicationFunctions::GetDesiredLanguage, "GetDesiredLanguage"},
397 {22, &IApplicationFunctions::SetTerminateResult, "SetTerminateResult"}, 451 {22, &IApplicationFunctions::SetTerminateResult, "SetTerminateResult"},
452 {23, nullptr, "GetDisplayVersion"},
453 {24, nullptr, "GetLaunchStorageInfoForDebug"},
454 {25, nullptr, "ExtendSaveData"},
455 {26, nullptr, "GetSaveDataSize"},
456 {30, nullptr, "BeginBlockingHomeButtonShortAndLongPressed"},
457 {31, nullptr, "EndBlockingHomeButtonShortAndLongPressed"},
458 {32, nullptr, "BeginBlockingHomeButton"},
459 {33, nullptr, "EndBlockingHomeButton"},
460 {40, &IApplicationFunctions::NotifyRunning, "NotifyRunning"},
461 {50, nullptr, "GetPseudoDeviceId"},
462 {60, nullptr, "SetMediaPlaybackStateForApplication"},
463 {65, nullptr, "IsGamePlayRecordingSupported"},
398 {66, &IApplicationFunctions::InitializeGamePlayRecording, "InitializeGamePlayRecording"}, 464 {66, &IApplicationFunctions::InitializeGamePlayRecording, "InitializeGamePlayRecording"},
399 {67, &IApplicationFunctions::SetGamePlayRecordingState, "SetGamePlayRecordingState"}, 465 {67, &IApplicationFunctions::SetGamePlayRecordingState, "SetGamePlayRecordingState"},
400 {40, &IApplicationFunctions::NotifyRunning, "NotifyRunning"}, 466 {68, nullptr, "RequestFlushGamePlayingMovieForDebug"},
467 {70, nullptr, "RequestToShutdown"},
468 {71, nullptr, "RequestToReboot"},
469 {80, nullptr, "ExitAndRequestToShowThanksMessage"},
470 {90, nullptr, "EnableApplicationCrashReport"},
471 {100, nullptr, "InitializeApplicationCopyrightFrameBuffer"},
472 {101, nullptr, "SetApplicationCopyrightImage"},
473 {102, nullptr, "SetApplicationCopyrightVisibility"},
474 {110, nullptr, "QueryApplicationPlayStatistics"},
475 {120, nullptr, "ExecuteProgram"},
476 {121, nullptr, "ClearUserChannel"},
477 {122, nullptr, "UnpopToUserChannel"},
478 {500, nullptr, "StartContinuousRecordingFlushForDebug"},
479 {1000, nullptr, "CreateMovieMaker"},
480 {1001, nullptr, "PrepareForJit"},
401 }; 481 };
402 RegisterHandlers(functions); 482 RegisterHandlers(functions);
403} 483}
diff --git a/src/core/hle/service/am/applet_ae.cpp b/src/core/hle/service/am/applet_ae.cpp
index 0e51caa70..154d346d5 100644
--- a/src/core/hle/service/am/applet_ae.cpp
+++ b/src/core/hle/service/am/applet_ae.cpp
@@ -21,6 +21,7 @@ public:
21 {2, &ILibraryAppletProxy::GetWindowController, "GetWindowController"}, 21 {2, &ILibraryAppletProxy::GetWindowController, "GetWindowController"},
22 {3, &ILibraryAppletProxy::GetAudioController, "GetAudioController"}, 22 {3, &ILibraryAppletProxy::GetAudioController, "GetAudioController"},
23 {4, &ILibraryAppletProxy::GetDisplayController, "GetDisplayController"}, 23 {4, &ILibraryAppletProxy::GetDisplayController, "GetDisplayController"},
24 {10, nullptr, "GetProcessWindingController"},
24 {11, &ILibraryAppletProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"}, 25 {11, &ILibraryAppletProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"},
25 {20, &ILibraryAppletProxy::GetApplicationFunctions, "GetApplicationFunctions"}, 26 {20, &ILibraryAppletProxy::GetApplicationFunctions, "GetApplicationFunctions"},
26 {1000, &ILibraryAppletProxy::GetDebugFunctions, "GetDebugFunctions"}, 27 {1000, &ILibraryAppletProxy::GetDebugFunctions, "GetDebugFunctions"},
diff --git a/src/core/hle/service/am/applet_oe.cpp b/src/core/hle/service/am/applet_oe.cpp
index bdcebe689..334c38392 100644
--- a/src/core/hle/service/am/applet_oe.cpp
+++ b/src/core/hle/service/am/applet_oe.cpp
@@ -21,6 +21,7 @@ public:
21 {2, &IApplicationProxy::GetWindowController, "GetWindowController"}, 21 {2, &IApplicationProxy::GetWindowController, "GetWindowController"},
22 {3, &IApplicationProxy::GetAudioController, "GetAudioController"}, 22 {3, &IApplicationProxy::GetAudioController, "GetAudioController"},
23 {4, &IApplicationProxy::GetDisplayController, "GetDisplayController"}, 23 {4, &IApplicationProxy::GetDisplayController, "GetDisplayController"},
24 {10, nullptr, "GetProcessWindingController"},
24 {11, &IApplicationProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"}, 25 {11, &IApplicationProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"},
25 {20, &IApplicationProxy::GetApplicationFunctions, "GetApplicationFunctions"}, 26 {20, &IApplicationProxy::GetApplicationFunctions, "GetApplicationFunctions"},
26 {1000, &IApplicationProxy::GetDebugFunctions, "GetDebugFunctions"}, 27 {1000, &IApplicationProxy::GetDebugFunctions, "GetDebugFunctions"},
diff --git a/src/core/hle/service/aoc/aoc_u.cpp b/src/core/hle/service/aoc/aoc_u.cpp
index 8b55d2fcb..f64001df3 100644
--- a/src/core/hle/service/aoc/aoc_u.cpp
+++ b/src/core/hle/service/aoc/aoc_u.cpp
@@ -19,6 +19,7 @@ AOC_U::AOC_U() : ServiceFramework("aoc:u") {
19 {5, nullptr, "GetAddOnContentBaseId"}, 19 {5, nullptr, "GetAddOnContentBaseId"},
20 {6, nullptr, "PrepareAddOnContentByApplicationId"}, 20 {6, nullptr, "PrepareAddOnContentByApplicationId"},
21 {7, nullptr, "PrepareAddOnContent"}, 21 {7, nullptr, "PrepareAddOnContent"},
22 {8, nullptr, "GetAddOnContentListChangedEvent"},
22 }; 23 };
23 RegisterHandlers(functions); 24 RegisterHandlers(functions);
24} 25}
diff --git a/src/core/hle/service/audio/audin_u.cpp b/src/core/hle/service/audio/audin_u.cpp
index ee749fddd..3c495b3a0 100644
--- a/src/core/hle/service/audio/audin_u.cpp
+++ b/src/core/hle/service/audio/audin_u.cpp
@@ -14,15 +14,20 @@ class IAudioIn final : public ServiceFramework<IAudioIn> {
14public: 14public:
15 IAudioIn() : ServiceFramework("IAudioIn") { 15 IAudioIn() : ServiceFramework("IAudioIn") {
16 static const FunctionInfo functions[] = { 16 static const FunctionInfo functions[] = {
17 {0x0, nullptr, "GetAudioInState"}, 17 {0, nullptr, "GetAudioInState"},
18 {0x1, nullptr, "StartAudioIn"}, 18 {1, nullptr, "StartAudioIn"},
19 {0x2, nullptr, "StopAudioIn"}, 19 {2, nullptr, "StopAudioIn"},
20 {0x3, nullptr, "AppendAudioInBuffer_1"}, 20 {3, nullptr, "AppendAudioInBuffer"},
21 {0x4, nullptr, "RegisterBufferEvent"}, 21 {4, nullptr, "RegisterBufferEvent"},
22 {0x5, nullptr, "GetReleasedAudioInBuffer_1"}, 22 {5, nullptr, "GetReleasedAudioInBuffer"},
23 {0x6, nullptr, "ContainsAudioInBuffer"}, 23 {6, nullptr, "ContainsAudioInBuffer"},
24 {0x7, nullptr, "AppendAudioInBuffer_2"}, 24 {7, nullptr, "AppendAudioInBufferWithUserEvent"},
25 {0x8, nullptr, "GetReleasedAudioInBuffer_2"}, 25 {8, nullptr, "AppendAudioInBufferAuto"},
26 {9, nullptr, "GetReleasedAudioInBufferAuto"},
27 {10, nullptr, "AppendAudioInBufferWithUserEventAuto"},
28 {11, nullptr, "GetAudioInBufferCount"},
29 {12, nullptr, "SetAudioInDeviceGain"},
30 {13, nullptr, "GetAudioInDeviceGain"},
26 }; 31 };
27 RegisterHandlers(functions); 32 RegisterHandlers(functions);
28 } 33 }
@@ -31,8 +36,10 @@ public:
31 36
32AudInU::AudInU() : ServiceFramework("audin:u") { 37AudInU::AudInU() : ServiceFramework("audin:u") {
33 static const FunctionInfo functions[] = { 38 static const FunctionInfo functions[] = {
34 {0x00000000, nullptr, "ListAudioIns"}, 39 {0, nullptr, "ListAudioIns"},
35 {0x00000001, nullptr, "OpenAudioIn"}, 40 {1, nullptr, "OpenAudioIn"},
41 {3, nullptr, "OpenAudioInAuto"},
42 {4, nullptr, "ListAudioInsAuto"},
36 }; 43 };
37 RegisterHandlers(functions); 44 RegisterHandlers(functions);
38} 45}
diff --git a/src/core/hle/service/audio/audout_u.cpp b/src/core/hle/service/audio/audout_u.cpp
index 8e935cb7f..db6e6647c 100644
--- a/src/core/hle/service/audio/audout_u.cpp
+++ b/src/core/hle/service/audio/audout_u.cpp
@@ -25,15 +25,18 @@ class IAudioOut final : public ServiceFramework<IAudioOut> {
25public: 25public:
26 IAudioOut() : ServiceFramework("IAudioOut"), audio_out_state(AudioState::Stopped) { 26 IAudioOut() : ServiceFramework("IAudioOut"), audio_out_state(AudioState::Stopped) {
27 static const FunctionInfo functions[] = { 27 static const FunctionInfo functions[] = {
28 {0x0, &IAudioOut::GetAudioOutState, "GetAudioOutState"}, 28 {0, &IAudioOut::GetAudioOutState, "GetAudioOutState"},
29 {0x1, &IAudioOut::StartAudioOut, "StartAudioOut"}, 29 {1, &IAudioOut::StartAudioOut, "StartAudioOut"},
30 {0x2, &IAudioOut::StopAudioOut, "StopAudioOut"}, 30 {2, &IAudioOut::StopAudioOut, "StopAudioOut"},
31 {0x3, &IAudioOut::AppendAudioOutBuffer_1, "AppendAudioOutBuffer_1"}, 31 {3, &IAudioOut::AppendAudioOutBuffer, "AppendAudioOutBuffer"},
32 {0x4, &IAudioOut::RegisterBufferEvent, "RegisterBufferEvent"}, 32 {4, &IAudioOut::RegisterBufferEvent, "RegisterBufferEvent"},
33 {0x5, &IAudioOut::GetReleasedAudioOutBuffer_1, "GetReleasedAudioOutBuffer_1"}, 33 {5, &IAudioOut::GetReleasedAudioOutBuffer, "GetReleasedAudioOutBuffer"},
34 {0x6, nullptr, "ContainsAudioOutBuffer"}, 34 {6, nullptr, "ContainsAudioOutBuffer"},
35 {0x7, nullptr, "AppendAudioOutBuffer_2"}, 35 {7, nullptr, "AppendAudioOutBufferAuto"},
36 {0x8, nullptr, "GetReleasedAudioOutBuffer_2"}, 36 {8, nullptr, "GetReleasedAudioOutBufferAuto"},
37 {9, nullptr, "GetAudioOutBufferCount"},
38 {10, nullptr, "GetAudioOutPlayedSampleCount"},
39 {11, nullptr, "FlushAudioOutBuffers"},
37 }; 40 };
38 RegisterHandlers(functions); 41 RegisterHandlers(functions);
39 42
@@ -94,7 +97,7 @@ private:
94 rb.PushCopyObjects(buffer_event); 97 rb.PushCopyObjects(buffer_event);
95 } 98 }
96 99
97 void AppendAudioOutBuffer_1(Kernel::HLERequestContext& ctx) { 100 void AppendAudioOutBuffer(Kernel::HLERequestContext& ctx) {
98 LOG_WARNING(Service_Audio, "(STUBBED) called"); 101 LOG_WARNING(Service_Audio, "(STUBBED) called");
99 IPC::RequestParser rp{ctx}; 102 IPC::RequestParser rp{ctx};
100 103
@@ -105,7 +108,7 @@ private:
105 rb.Push(RESULT_SUCCESS); 108 rb.Push(RESULT_SUCCESS);
106 } 109 }
107 110
108 void GetReleasedAudioOutBuffer_1(Kernel::HLERequestContext& ctx) { 111 void GetReleasedAudioOutBuffer(Kernel::HLERequestContext& ctx) {
109 LOG_WARNING(Service_Audio, "(STUBBED) called"); 112 LOG_WARNING(Service_Audio, "(STUBBED) called");
110 113
111 // TODO(st4rk): This is how libtransistor currently implements the 114 // TODO(st4rk): This is how libtransistor currently implements the
@@ -196,8 +199,8 @@ void AudOutU::OpenAudioOut(Kernel::HLERequestContext& ctx) {
196AudOutU::AudOutU() : ServiceFramework("audout:u") { 199AudOutU::AudOutU() : ServiceFramework("audout:u") {
197 static const FunctionInfo functions[] = {{0x00000000, &AudOutU::ListAudioOuts, "ListAudioOuts"}, 200 static const FunctionInfo functions[] = {{0x00000000, &AudOutU::ListAudioOuts, "ListAudioOuts"},
198 {0x00000001, &AudOutU::OpenAudioOut, "OpenAudioOut"}, 201 {0x00000001, &AudOutU::OpenAudioOut, "OpenAudioOut"},
199 {0x00000002, nullptr, "Unknown2"}, 202 {0x00000002, nullptr, "ListAudioOutsAuto"},
200 {0x00000003, nullptr, "Unknown3"}}; 203 {0x00000003, nullptr, "OpenAudioOutAuto"}};
201 RegisterHandlers(functions); 204 RegisterHandlers(functions);
202} 205}
203 206
diff --git a/src/core/hle/service/audio/audrec_u.cpp b/src/core/hle/service/audio/audrec_u.cpp
index f2626ec70..953104f19 100644
--- a/src/core/hle/service/audio/audrec_u.cpp
+++ b/src/core/hle/service/audio/audrec_u.cpp
@@ -14,13 +14,15 @@ class IFinalOutputRecorder final : public ServiceFramework<IFinalOutputRecorder>
14public: 14public:
15 IFinalOutputRecorder() : ServiceFramework("IFinalOutputRecorder") { 15 IFinalOutputRecorder() : ServiceFramework("IFinalOutputRecorder") {
16 static const FunctionInfo functions[] = { 16 static const FunctionInfo functions[] = {
17 {0x0, nullptr, "GetFinalOutputRecorderState"}, 17 {0, nullptr, "GetFinalOutputRecorderState"},
18 {0x1, nullptr, "StartFinalOutputRecorder"}, 18 {1, nullptr, "StartFinalOutputRecorder"},
19 {0x2, nullptr, "StopFinalOutputRecorder"}, 19 {2, nullptr, "StopFinalOutputRecorder"},
20 {0x3, nullptr, "AppendFinalOutputRecorderBuffer"}, 20 {3, nullptr, "AppendFinalOutputRecorderBuffer"},
21 {0x4, nullptr, "RegisterBufferEvent"}, 21 {4, nullptr, "RegisterBufferEvent"},
22 {0x5, nullptr, "GetReleasedFinalOutputRecorderBuffer"}, 22 {5, nullptr, "GetReleasedFinalOutputRecorderBuffer"},
23 {0x6, nullptr, "ContainsFinalOutputRecorderBuffer"}, 23 {6, nullptr, "ContainsFinalOutputRecorderBuffer"},
24 {8, nullptr, "AppendFinalOutputRecorderBufferAuto"},
25 {9, nullptr, "GetReleasedFinalOutputRecorderBufferAuto"},
24 }; 26 };
25 RegisterHandlers(functions); 27 RegisterHandlers(functions);
26 } 28 }
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp
index 7990595aa..0e78c57e9 100644
--- a/src/core/hle/service/audio/audren_u.cpp
+++ b/src/core/hle/service/audio/audren_u.cpp
@@ -19,16 +19,18 @@ class IAudioRenderer final : public ServiceFramework<IAudioRenderer> {
19public: 19public:
20 IAudioRenderer() : ServiceFramework("IAudioRenderer") { 20 IAudioRenderer() : ServiceFramework("IAudioRenderer") {
21 static const FunctionInfo functions[] = { 21 static const FunctionInfo functions[] = {
22 {0x0, nullptr, "GetAudioRendererSampleRate"}, 22 {0, nullptr, "GetAudioRendererSampleRate"},
23 {0x1, nullptr, "GetAudioRendererSampleCount"}, 23 {1, nullptr, "GetAudioRendererSampleCount"},
24 {0x2, nullptr, "GetAudioRendererMixBufferCount"}, 24 {2, nullptr, "GetAudioRendererMixBufferCount"},
25 {0x3, nullptr, "GetAudioRendererState"}, 25 {3, nullptr, "GetAudioRendererState"},
26 {0x4, &IAudioRenderer::RequestUpdateAudioRenderer, "RequestUpdateAudioRenderer"}, 26 {4, &IAudioRenderer::RequestUpdateAudioRenderer, "RequestUpdateAudioRenderer"},
27 {0x5, &IAudioRenderer::StartAudioRenderer, "StartAudioRenderer"}, 27 {5, &IAudioRenderer::StartAudioRenderer, "StartAudioRenderer"},
28 {0x6, &IAudioRenderer::StopAudioRenderer, "StopAudioRenderer"}, 28 {6, &IAudioRenderer::StopAudioRenderer, "StopAudioRenderer"},
29 {0x7, &IAudioRenderer::QuerySystemEvent, "QuerySystemEvent"}, 29 {7, &IAudioRenderer::QuerySystemEvent, "QuerySystemEvent"},
30 {0x8, nullptr, "SetAudioRendererRenderingTimeLimit"}, 30 {8, nullptr, "SetAudioRendererRenderingTimeLimit"},
31 {0x9, nullptr, "GetAudioRendererRenderingTimeLimit"}, 31 {9, nullptr, "GetAudioRendererRenderingTimeLimit"},
32 {10, nullptr, "RequestUpdateAudioRendererAuto"},
33 {11, nullptr, "ExecuteAudioRendererRendering"},
32 }; 34 };
33 RegisterHandlers(functions); 35 RegisterHandlers(functions);
34 36
@@ -237,6 +239,8 @@ AudRenU::AudRenU() : ServiceFramework("audren:u") {
237 {0, &AudRenU::OpenAudioRenderer, "OpenAudioRenderer"}, 239 {0, &AudRenU::OpenAudioRenderer, "OpenAudioRenderer"},
238 {1, &AudRenU::GetAudioRendererWorkBufferSize, "GetAudioRendererWorkBufferSize"}, 240 {1, &AudRenU::GetAudioRendererWorkBufferSize, "GetAudioRendererWorkBufferSize"},
239 {2, &AudRenU::GetAudioDevice, "GetAudioDevice"}, 241 {2, &AudRenU::GetAudioDevice, "GetAudioDevice"},
242 {3, nullptr, "OpenAudioRendererAuto"},
243 {4, nullptr, "GetAudioDeviceServiceWithRevisionInfo"},
240 }; 244 };
241 RegisterHandlers(functions); 245 RegisterHandlers(functions);
242} 246}
diff --git a/src/core/hle/service/audio/codecctl.cpp b/src/core/hle/service/audio/codecctl.cpp
index d2a7f4cd0..1c86d8d17 100644
--- a/src/core/hle/service/audio/codecctl.cpp
+++ b/src/core/hle/service/audio/codecctl.cpp
@@ -22,9 +22,9 @@ CodecCtl::CodecCtl() : ServiceFramework("codecctl") {
22 {0x00000007, nullptr, "SetCodecActiveTarget"}, 22 {0x00000007, nullptr, "SetCodecActiveTarget"},
23 {0x00000008, nullptr, "Unknown"}, 23 {0x00000008, nullptr, "Unknown"},
24 {0x00000009, nullptr, "BindCodecHeadphoneMicJackInterrupt"}, 24 {0x00000009, nullptr, "BindCodecHeadphoneMicJackInterrupt"},
25 {0x0000000A, nullptr, "IsCodecHeadphoneMicJackInserted"}, 25 {0x00000010, nullptr, "IsCodecHeadphoneMicJackInserted"},
26 {0x0000000B, nullptr, "ClearCodecHeadphoneMicJackInterrupt"}, 26 {0x00000011, nullptr, "ClearCodecHeadphoneMicJackInterrupt"},
27 {0x0000000C, nullptr, "IsCodecDeviceRequested"}, 27 {0x00000012, nullptr, "IsCodecDeviceRequested"},
28 }; 28 };
29 RegisterHandlers(functions); 29 RegisterHandlers(functions);
30} 30}
diff --git a/src/core/hle/service/filesystem/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp_srv.cpp
index 10fa3a4d6..48c45b1b4 100644
--- a/src/core/hle/service/filesystem/fsp_srv.cpp
+++ b/src/core/hle/service/filesystem/fsp_srv.cpp
@@ -23,7 +23,7 @@ public:
23 : ServiceFramework("IStorage"), backend(std::move(backend)) { 23 : ServiceFramework("IStorage"), backend(std::move(backend)) {
24 static const FunctionInfo functions[] = { 24 static const FunctionInfo functions[] = {
25 {0, &IStorage::Read, "Read"}, {1, nullptr, "Write"}, {2, nullptr, "Flush"}, 25 {0, &IStorage::Read, "Read"}, {1, nullptr, "Write"}, {2, nullptr, "Flush"},
26 {3, nullptr, "SetSize"}, {4, nullptr, "GetSize"}, 26 {3, nullptr, "SetSize"}, {4, nullptr, "GetSize"}, {5, nullptr, "OperateRange"},
27 }; 27 };
28 RegisterHandlers(functions); 28 RegisterHandlers(functions);
29 } 29 }
@@ -72,8 +72,9 @@ public:
72 explicit IFile(std::unique_ptr<FileSys::StorageBackend>&& backend) 72 explicit IFile(std::unique_ptr<FileSys::StorageBackend>&& backend)
73 : ServiceFramework("IFile"), backend(std::move(backend)) { 73 : ServiceFramework("IFile"), backend(std::move(backend)) {
74 static const FunctionInfo functions[] = { 74 static const FunctionInfo functions[] = {
75 {0, &IFile::Read, "Read"}, {1, &IFile::Write, "Write"}, {2, nullptr, "Flush"}, 75 {0, &IFile::Read, "Read"}, {1, &IFile::Write, "Write"},
76 {3, &IFile::SetSize, "SetSize"}, {4, &IFile::GetSize, "GetSize"}, 76 {2, nullptr, "Flush"}, {3, &IFile::SetSize, "SetSize"},
77 {4, &IFile::GetSize, "GetSize"}, {5, nullptr, "OperateRange"},
77 }; 78 };
78 RegisterHandlers(functions); 79 RegisterHandlers(functions);
79 } 80 }
@@ -227,11 +228,21 @@ public:
227 : ServiceFramework("IFileSystem"), backend(std::move(backend)) { 228 : ServiceFramework("IFileSystem"), backend(std::move(backend)) {
228 static const FunctionInfo functions[] = { 229 static const FunctionInfo functions[] = {
229 {0, &IFileSystem::CreateFile, "CreateFile"}, 230 {0, &IFileSystem::CreateFile, "CreateFile"},
231 {1, nullptr, "DeleteFile"},
230 {2, &IFileSystem::CreateDirectory, "CreateDirectory"}, 232 {2, &IFileSystem::CreateDirectory, "CreateDirectory"},
233 {3, nullptr, "DeleteDirectory"},
234 {4, nullptr, "DeleteDirectoryRecursively"},
235 {5, nullptr, "RenameFile"},
236 {6, nullptr, "RenameDirectory"},
231 {7, &IFileSystem::GetEntryType, "GetEntryType"}, 237 {7, &IFileSystem::GetEntryType, "GetEntryType"},
232 {8, &IFileSystem::OpenFile, "OpenFile"}, 238 {8, &IFileSystem::OpenFile, "OpenFile"},
233 {9, &IFileSystem::OpenDirectory, "OpenDirectory"}, 239 {9, &IFileSystem::OpenDirectory, "OpenDirectory"},
234 {10, &IFileSystem::Commit, "Commit"}, 240 {10, &IFileSystem::Commit, "Commit"},
241 {11, nullptr, "GetFreeSpaceSize"},
242 {12, nullptr, "GetTotalSpaceSize"},
243 {13, nullptr, "CleanDirectoryRecursively"},
244 {14, nullptr, "GetFileTimeStampRaw"},
245 {15, nullptr, "QueryEntry"},
235 }; 246 };
236 RegisterHandlers(functions); 247 RegisterHandlers(functions);
237 } 248 }
@@ -356,14 +367,94 @@ private:
356 367
357FSP_SRV::FSP_SRV() : ServiceFramework("fsp-srv") { 368FSP_SRV::FSP_SRV() : ServiceFramework("fsp-srv") {
358 static const FunctionInfo functions[] = { 369 static const FunctionInfo functions[] = {
370 {0, nullptr, "MountContent"},
359 {1, &FSP_SRV::Initialize, "Initialize"}, 371 {1, &FSP_SRV::Initialize, "Initialize"},
372 {2, nullptr, "OpenDataFileSystemByCurrentProcess"},
373 {7, nullptr, "OpenFileSystemWithPatch"},
374 {8, nullptr, "OpenFileSystemWithId"},
375 {9, nullptr, "OpenDataFileSystemByApplicationId"},
376 {11, nullptr, "OpenBisFileSystem"},
377 {12, nullptr, "OpenBisStorage"},
378 {13, nullptr, "InvalidateBisCache"},
379 {17, nullptr, "OpenHostFileSystem"},
360 {18, &FSP_SRV::MountSdCard, "MountSdCard"}, 380 {18, &FSP_SRV::MountSdCard, "MountSdCard"},
381 {19, nullptr, "FormatSdCardFileSystem"},
382 {21, nullptr, "DeleteSaveDataFileSystem"},
361 {22, &FSP_SRV::CreateSaveData, "CreateSaveData"}, 383 {22, &FSP_SRV::CreateSaveData, "CreateSaveData"},
384 {23, nullptr, "CreateSaveDataFileSystemBySystemSaveDataId"},
385 {24, nullptr, "RegisterSaveDataFileSystemAtomicDeletion"},
386 {25, nullptr, "DeleteSaveDataFileSystemBySaveDataSpaceId"},
387 {26, nullptr, "FormatSdCardDryRun"},
388 {27, nullptr, "IsExFatSupported"},
389 {28, nullptr, "DeleteSaveDataFileSystemBySaveDataAttribute"},
390 {30, nullptr, "OpenGameCardStorage"},
391 {31, nullptr, "OpenGameCardFileSystem"},
392 {32, nullptr, "ExtendSaveDataFileSystem"},
393 {33, nullptr, "DeleteCacheStorage"},
394 {34, nullptr, "GetCacheStorageSize"},
362 {51, &FSP_SRV::MountSaveData, "MountSaveData"}, 395 {51, &FSP_SRV::MountSaveData, "MountSaveData"},
396 {52, nullptr, "OpenSaveDataFileSystemBySystemSaveDataId"},
397 {53, nullptr, "OpenReadOnlySaveDataFileSystem"},
398 {57, nullptr, "ReadSaveDataFileSystemExtraDataBySaveDataSpaceId"},
399 {58, nullptr, "ReadSaveDataFileSystemExtraData"},
400 {59, nullptr, "WriteSaveDataFileSystemExtraData"},
401 {60, nullptr, "OpenSaveDataInfoReader"},
402 {61, nullptr, "OpenSaveDataInfoReaderBySaveDataSpaceId"},
403 {62, nullptr, "OpenCacheStorageList"},
404 {64, nullptr, "OpenSaveDataInternalStorageFileSystem"},
405 {65, nullptr, "UpdateSaveDataMacForDebug"},
406 {66, nullptr, "WriteSaveDataFileSystemExtraData2"},
407 {80, nullptr, "OpenSaveDataMetaFile"},
408 {81, nullptr, "OpenSaveDataTransferManager"},
409 {82, nullptr, "OpenSaveDataTransferManagerVersion2"},
410 {100, nullptr, "OpenImageDirectoryFileSystem"},
411 {110, nullptr, "OpenContentStorageFileSystem"},
363 {200, &FSP_SRV::OpenDataStorageByCurrentProcess, "OpenDataStorageByCurrentProcess"}, 412 {200, &FSP_SRV::OpenDataStorageByCurrentProcess, "OpenDataStorageByCurrentProcess"},
413 {201, nullptr, "OpenDataStorageByProgramId"},
364 {202, nullptr, "OpenDataStorageByDataId"}, 414 {202, nullptr, "OpenDataStorageByDataId"},
365 {203, &FSP_SRV::OpenRomStorage, "OpenRomStorage"}, 415 {203, &FSP_SRV::OpenRomStorage, "OpenRomStorage"},
416 {400, nullptr, "OpenDeviceOperator"},
417 {500, nullptr, "OpenSdCardDetectionEventNotifier"},
418 {501, nullptr, "OpenGameCardDetectionEventNotifier"},
419 {510, nullptr, "OpenSystemDataUpdateEventNotifier"},
420 {511, nullptr, "NotifySystemDataUpdateEvent"},
421 {600, nullptr, "SetCurrentPosixTime"},
422 {601, nullptr, "QuerySaveDataTotalSize"},
423 {602, nullptr, "VerifySaveDataFileSystem"},
424 {603, nullptr, "CorruptSaveDataFileSystem"},
425 {604, nullptr, "CreatePaddingFile"},
426 {605, nullptr, "DeleteAllPaddingFiles"},
427 {606, nullptr, "GetRightsId"},
428 {607, nullptr, "RegisterExternalKey"},
429 {608, nullptr, "UnregisterAllExternalKey"},
430 {609, nullptr, "GetRightsIdByPath"},
431 {610, nullptr, "GetRightsIdAndKeyGenerationByPath"},
432 {611, nullptr, "SetCurrentPosixTimeWithTimeDifference"},
433 {612, nullptr, "GetFreeSpaceSizeForSaveData"},
434 {613, nullptr, "VerifySaveDataFileSystemBySaveDataSpaceId"},
435 {614, nullptr, "CorruptSaveDataFileSystemBySaveDataSpaceId"},
436 {615, nullptr, "QuerySaveDataInternalStorageTotalSize"},
437 {620, nullptr, "SetSdCardEncryptionSeed"},
438 {630, nullptr, "SetSdCardAccessibility"},
439 {631, nullptr, "IsSdCardAccessible"},
440 {640, nullptr, "IsSignedSystemPartitionOnSdCardValid"},
441 {700, nullptr, "OpenAccessFailureResolver"},
442 {701, nullptr, "GetAccessFailureDetectionEvent"},
443 {702, nullptr, "IsAccessFailureDetected"},
444 {710, nullptr, "ResolveAccessFailure"},
445 {720, nullptr, "AbandonAccessFailure"},
446 {800, nullptr, "GetAndClearFileSystemProxyErrorInfo"},
447 {1000, nullptr, "SetBisRootForHost"},
448 {1001, nullptr, "SetSaveDataSize"},
449 {1002, nullptr, "SetSaveDataRootPath"},
450 {1003, nullptr, "DisableAutoSaveDataCreation"},
451 {1004, nullptr, "SetGlobalAccessLogMode"},
366 {1005, &FSP_SRV::GetGlobalAccessLogMode, "GetGlobalAccessLogMode"}, 452 {1005, &FSP_SRV::GetGlobalAccessLogMode, "GetGlobalAccessLogMode"},
453 {1006, nullptr, "OutputAccessLogToSdCard"},
454 {1007, nullptr, "RegisterUpdatePartition"},
455 {1008, nullptr, "OpenRegisteredUpdatePartition"},
456 {1009, nullptr, "GetAndClearMemoryReportInfo"},
457 {1100, nullptr, "OverrideSaveDataTransferTokenSignVerificationKey"},
367 }; 458 };
368 RegisterHandlers(functions); 459 RegisterHandlers(functions);
369} 460}
diff --git a/src/core/hle/service/friend/friend.cpp b/src/core/hle/service/friend/friend.cpp
index fc5adc56d..051448b2a 100644
--- a/src/core/hle/service/friend/friend.cpp
+++ b/src/core/hle/service/friend/friend.cpp
@@ -11,7 +11,7 @@
11namespace Service { 11namespace Service {
12namespace Friend { 12namespace Friend {
13 13
14void Module::Interface::Unknown(Kernel::HLERequestContext& ctx) { 14void Module::Interface::CreateFriendService(Kernel::HLERequestContext& ctx) {
15 IPC::ResponseBuilder rb{ctx, 2}; 15 IPC::ResponseBuilder rb{ctx, 2};
16 rb.Push(RESULT_SUCCESS); 16 rb.Push(RESULT_SUCCESS);
17 LOG_WARNING(Service_Friend, "(STUBBED) called"); 17 LOG_WARNING(Service_Friend, "(STUBBED) called");
diff --git a/src/core/hle/service/friend/friend.h b/src/core/hle/service/friend/friend.h
index ffa498397..2b21b4e15 100644
--- a/src/core/hle/service/friend/friend.h
+++ b/src/core/hle/service/friend/friend.h
@@ -15,7 +15,7 @@ public:
15 public: 15 public:
16 Interface(std::shared_ptr<Module> module, const char* name); 16 Interface(std::shared_ptr<Module> module, const char* name);
17 17
18 void Unknown(Kernel::HLERequestContext& ctx); 18 void CreateFriendService(Kernel::HLERequestContext& ctx);
19 19
20 protected: 20 protected:
21 std::shared_ptr<Module> module; 21 std::shared_ptr<Module> module;
diff --git a/src/core/hle/service/friend/friend_a.cpp b/src/core/hle/service/friend/friend_a.cpp
index e1f2397c2..d64fe846a 100644
--- a/src/core/hle/service/friend/friend_a.cpp
+++ b/src/core/hle/service/friend/friend_a.cpp
@@ -10,7 +10,8 @@ namespace Friend {
10Friend_A::Friend_A(std::shared_ptr<Module> module) 10Friend_A::Friend_A(std::shared_ptr<Module> module)
11 : Module::Interface(std::move(module), "friend:a") { 11 : Module::Interface(std::move(module), "friend:a") {
12 static const FunctionInfo functions[] = { 12 static const FunctionInfo functions[] = {
13 {0, &Friend_A::Unknown, "Unknown"}, 13 {0, &Friend_A::CreateFriendService, "CreateFriendService"},
14 {1, nullptr, "CreateNotificationService"},
14 }; 15 };
15 RegisterHandlers(functions); 16 RegisterHandlers(functions);
16} 17}
diff --git a/src/core/hle/service/friend/friend_u.cpp b/src/core/hle/service/friend/friend_u.cpp
index 084388e5f..9a4b05b38 100644
--- a/src/core/hle/service/friend/friend_u.cpp
+++ b/src/core/hle/service/friend/friend_u.cpp
@@ -10,7 +10,8 @@ namespace Friend {
10Friend_U::Friend_U(std::shared_ptr<Module> module) 10Friend_U::Friend_U(std::shared_ptr<Module> module)
11 : Module::Interface(std::move(module), "friend:u") { 11 : Module::Interface(std::move(module), "friend:u") {
12 static const FunctionInfo functions[] = { 12 static const FunctionInfo functions[] = {
13 {0, &Friend_U::Unknown, "Unknown"}, 13 {0, &Friend_U::CreateFriendService, "CreateFriendService"},
14 {1, nullptr, "CreateNotificationService"},
14 }; 15 };
15 RegisterHandlers(functions); 16 RegisterHandlers(functions);
16} 17}
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index 019a09444..868ac6f46 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -198,25 +198,75 @@ public:
198 {11, &Hid::ActivateTouchScreen, "ActivateTouchScreen"}, 198 {11, &Hid::ActivateTouchScreen, "ActivateTouchScreen"},
199 {21, &Hid::ActivateMouse, "ActivateMouse"}, 199 {21, &Hid::ActivateMouse, "ActivateMouse"},
200 {31, &Hid::ActivateKeyboard, "ActivateKeyboard"}, 200 {31, &Hid::ActivateKeyboard, "ActivateKeyboard"},
201 {40, nullptr, "AcquireXpadIdEventHandle"},
202 {41, nullptr, "ReleaseXpadIdEventHandle"},
203 {51, nullptr, "ActivateXpad"},
204 {55, nullptr, "GetXpadIds"},
205 {56, nullptr, "ActivateJoyXpad"},
206 {58, nullptr, "GetJoyXpadLifoHandle"},
207 {59, nullptr, "GetJoyXpadIds"},
208 {60, nullptr, "ActivateSixAxisSensor"},
209 {61, nullptr, "DeactivateSixAxisSensor"},
210 {62, nullptr, "GetSixAxisSensorLifoHandle"},
211 {63, nullptr, "ActivateJoySixAxisSensor"},
212 {64, nullptr, "DeactivateJoySixAxisSensor"},
213 {65, nullptr, "GetJoySixAxisSensorLifoHandle"},
201 {66, &Hid::StartSixAxisSensor, "StartSixAxisSensor"}, 214 {66, &Hid::StartSixAxisSensor, "StartSixAxisSensor"},
215 {67, nullptr, "StopSixAxisSensor"},
216 {68, nullptr, "IsSixAxisSensorFusionEnabled"},
217 {69, nullptr, "EnableSixAxisSensorFusion"},
218 {70, nullptr, "SetSixAxisSensorFusionParameters"},
219 {71, nullptr, "GetSixAxisSensorFusionParameters"},
220 {72, nullptr, "ResetSixAxisSensorFusionParameters"},
221 {73, nullptr, "SetAccelerometerParameters"},
222 {74, nullptr, "GetAccelerometerParameters"},
223 {75, nullptr, "ResetAccelerometerParameters"},
224 {76, nullptr, "SetAccelerometerPlayMode"},
225 {77, nullptr, "GetAccelerometerPlayMode"},
226 {78, nullptr, "ResetAccelerometerPlayMode"},
202 {79, &Hid::SetGyroscopeZeroDriftMode, "SetGyroscopeZeroDriftMode"}, 227 {79, &Hid::SetGyroscopeZeroDriftMode, "SetGyroscopeZeroDriftMode"},
228 {80, nullptr, "GetGyroscopeZeroDriftMode"},
229 {81, nullptr, "ResetGyroscopeZeroDriftMode"},
230 {82, nullptr, "IsSixAxisSensorAtRest"},
231 {91, nullptr, "ActivateGesture"},
203 {100, &Hid::SetSupportedNpadStyleSet, "SetSupportedNpadStyleSet"}, 232 {100, &Hid::SetSupportedNpadStyleSet, "SetSupportedNpadStyleSet"},
204 {101, &Hid::GetSupportedNpadStyleSet, "GetSupportedNpadStyleSet"}, 233 {101, &Hid::GetSupportedNpadStyleSet, "GetSupportedNpadStyleSet"},
205 {102, &Hid::SetSupportedNpadIdType, "SetSupportedNpadIdType"}, 234 {102, &Hid::SetSupportedNpadIdType, "SetSupportedNpadIdType"},
206 {103, &Hid::ActivateNpad, "ActivateNpad"}, 235 {103, &Hid::ActivateNpad, "ActivateNpad"},
236 {104, nullptr, "DeactivateNpad"},
207 {106, &Hid::AcquireNpadStyleSetUpdateEventHandle, 237 {106, &Hid::AcquireNpadStyleSetUpdateEventHandle,
208 "AcquireNpadStyleSetUpdateEventHandle"}, 238 "AcquireNpadStyleSetUpdateEventHandle"},
239 {107, nullptr, "DisconnectNpad"},
240 {108, nullptr, "GetPlayerLedPattern"},
209 {120, &Hid::SetNpadJoyHoldType, "SetNpadJoyHoldType"}, 241 {120, &Hid::SetNpadJoyHoldType, "SetNpadJoyHoldType"},
210 {121, &Hid::GetNpadJoyHoldType, "GetNpadJoyHoldType"}, 242 {121, &Hid::GetNpadJoyHoldType, "GetNpadJoyHoldType"},
211 {122, &Hid::SetNpadJoyAssignmentModeSingleByDefault, 243 {122, &Hid::SetNpadJoyAssignmentModeSingleByDefault,
212 "SetNpadJoyAssignmentModeSingleByDefault"}, 244 "SetNpadJoyAssignmentModeSingleByDefault"},
245 {123, nullptr, "SetNpadJoyAssignmentModeSingleByDefault"},
213 {124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"}, 246 {124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"},
247 {125, nullptr, "MergeSingleJoyAsDualJoy"},
248 {126, nullptr, "StartLrAssignmentMode"},
249 {127, nullptr, "StopLrAssignmentMode"},
214 {128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"}, 250 {128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"},
251 {129, nullptr, "GetNpadHandheldActivationMode"},
252 {130, nullptr, "SwapNpadAssignment"},
253 {131, nullptr, "IsUnintendedHomeButtonInputProtectionEnabled"},
254 {132, nullptr, "EnableUnintendedHomeButtonInputProtection"},
215 {200, &Hid::GetVibrationDeviceInfo, "GetVibrationDeviceInfo"}, 255 {200, &Hid::GetVibrationDeviceInfo, "GetVibrationDeviceInfo"},
216 {201, &Hid::SendVibrationValue, "SendVibrationValue"}, 256 {201, &Hid::SendVibrationValue, "SendVibrationValue"},
217 {202, &Hid::GetActualVibrationValue, "GetActualVibrationValue"}, 257 {202, &Hid::GetActualVibrationValue, "GetActualVibrationValue"},
218 {203, &Hid::CreateActiveVibrationDeviceList, "CreateActiveVibrationDeviceList"}, 258 {203, &Hid::CreateActiveVibrationDeviceList, "CreateActiveVibrationDeviceList"},
259 {204, nullptr, "PermitVibration"},
260 {205, nullptr, "IsVibrationPermitted"},
219 {206, &Hid::SendVibrationValues, "SendVibrationValues"}, 261 {206, &Hid::SendVibrationValues, "SendVibrationValues"},
262 {300, nullptr, "ActivateConsoleSixAxisSensor"},
263 {301, nullptr, "StartConsoleSixAxisSensor"},
264 {302, nullptr, "StopConsoleSixAxisSensor"},
265 {400, nullptr, "IsUsbFullKeyControllerEnabled"},
266 {401, nullptr, "EnableUsbFullKeyController"},
267 {402, nullptr, "IsUsbFullKeyControllerConnected"},
268 {1000, nullptr, "SetNpadCommunicationMode"},
269 {1001, nullptr, "GetNpadCommunicationMode"},
220 }; 270 };
221 RegisterHandlers(functions); 271 RegisterHandlers(functions);
222 272
diff --git a/src/core/hle/service/ns/pl_u.cpp b/src/core/hle/service/ns/pl_u.cpp
index ef3c7799a..d5e0b5f14 100644
--- a/src/core/hle/service/ns/pl_u.cpp
+++ b/src/core/hle/service/ns/pl_u.cpp
@@ -37,7 +37,9 @@ PL_U::PL_U() : ServiceFramework("pl:u") {
37 {1, &PL_U::GetLoadState, "GetLoadState"}, 37 {1, &PL_U::GetLoadState, "GetLoadState"},
38 {2, &PL_U::GetSize, "GetSize"}, 38 {2, &PL_U::GetSize, "GetSize"},
39 {3, &PL_U::GetSharedMemoryAddressOffset, "GetSharedMemoryAddressOffset"}, 39 {3, &PL_U::GetSharedMemoryAddressOffset, "GetSharedMemoryAddressOffset"},
40 {4, &PL_U::GetSharedMemoryNativeHandle, "GetSharedMemoryNativeHandle"}}; 40 {4, &PL_U::GetSharedMemoryNativeHandle, "GetSharedMemoryNativeHandle"},
41 {5, nullptr, "GetSharedFontInOrderOfPriority"},
42 };
41 RegisterHandlers(functions); 43 RegisterHandlers(functions);
42 44
43 // Attempt to load shared font data from disk 45 // Attempt to load shared font data from disk
diff --git a/src/core/hle/service/nvdrv/interface.cpp b/src/core/hle/service/nvdrv/interface.cpp
index c70370f1f..567c2cd7c 100644
--- a/src/core/hle/service/nvdrv/interface.cpp
+++ b/src/core/hle/service/nvdrv/interface.cpp
@@ -96,7 +96,14 @@ NVDRV::NVDRV(std::shared_ptr<Module> nvdrv, const char* name)
96 {2, &NVDRV::Close, "Close"}, 96 {2, &NVDRV::Close, "Close"},
97 {3, &NVDRV::Initialize, "Initialize"}, 97 {3, &NVDRV::Initialize, "Initialize"},
98 {4, &NVDRV::QueryEvent, "QueryEvent"}, 98 {4, &NVDRV::QueryEvent, "QueryEvent"},
99 {5, nullptr, "MapSharedMem"},
100 {6, nullptr, "GetStatus"},
101 {7, nullptr, "ForceSetClientPID"},
99 {8, &NVDRV::SetClientPID, "SetClientPID"}, 102 {8, &NVDRV::SetClientPID, "SetClientPID"},
103 {9, nullptr, "DumpGraphicsMemoryInfo"},
104 {10, nullptr, "InitializeDevtools"},
105 {11, nullptr, "Ioctl2"},
106 {12, nullptr, "Ioctl3"},
100 {13, &NVDRV::FinishInitialize, "FinishInitialize"}, 107 {13, &NVDRV::FinishInitialize, "FinishInitialize"},
101 }; 108 };
102 RegisterHandlers(functions); 109 RegisterHandlers(functions);
diff --git a/src/core/hle/service/nvdrv/nvmemp.cpp b/src/core/hle/service/nvdrv/nvmemp.cpp
index 5a13732c7..35d6c0c13 100644
--- a/src/core/hle/service/nvdrv/nvmemp.cpp
+++ b/src/core/hle/service/nvdrv/nvmemp.cpp
@@ -13,17 +13,17 @@ namespace Nvidia {
13 13
14NVMEMP::NVMEMP() : ServiceFramework("nvmemp") { 14NVMEMP::NVMEMP() : ServiceFramework("nvmemp") {
15 static const FunctionInfo functions[] = { 15 static const FunctionInfo functions[] = {
16 {0, &NVMEMP::Unknown0, "Unknown0"}, 16 {0, &NVMEMP::Cmd0, "Cmd0"},
17 {1, &NVMEMP::Unknown1, "Unknown1"}, 17 {1, &NVMEMP::Cmd1, "Cmd1"},
18 }; 18 };
19 RegisterHandlers(functions); 19 RegisterHandlers(functions);
20} 20}
21 21
22void NVMEMP::Unknown0(Kernel::HLERequestContext& ctx) { 22void NVMEMP::Cmd0(Kernel::HLERequestContext& ctx) {
23 UNIMPLEMENTED(); 23 UNIMPLEMENTED();
24} 24}
25 25
26void NVMEMP::Unknown1(Kernel::HLERequestContext& ctx) { 26void NVMEMP::Cmd1(Kernel::HLERequestContext& ctx) {
27 UNIMPLEMENTED(); 27 UNIMPLEMENTED();
28} 28}
29 29
diff --git a/src/core/hle/service/nvdrv/nvmemp.h b/src/core/hle/service/nvdrv/nvmemp.h
index a6b5fbb82..fb16026b0 100644
--- a/src/core/hle/service/nvdrv/nvmemp.h
+++ b/src/core/hle/service/nvdrv/nvmemp.h
@@ -15,8 +15,8 @@ public:
15 ~NVMEMP() = default; 15 ~NVMEMP() = default;
16 16
17private: 17private:
18 void Unknown0(Kernel::HLERequestContext& ctx); 18 void Cmd0(Kernel::HLERequestContext& ctx);
19 void Unknown1(Kernel::HLERequestContext& ctx); 19 void Cmd1(Kernel::HLERequestContext& ctx);
20}; 20};
21 21
22} // namespace Nvidia 22} // namespace Nvidia
diff --git a/src/core/hle/service/pctl/pctl_a.cpp b/src/core/hle/service/pctl/pctl_a.cpp
index c65fffa07..4e644be64 100644
--- a/src/core/hle/service/pctl/pctl_a.cpp
+++ b/src/core/hle/service/pctl/pctl_a.cpp
@@ -11,10 +11,106 @@ namespace PCTL {
11 11
12class IParentalControlService final : public ServiceFramework<IParentalControlService> { 12class IParentalControlService final : public ServiceFramework<IParentalControlService> {
13public: 13public:
14 IParentalControlService() : ServiceFramework("IParentalControlService") {} 14 IParentalControlService() : ServiceFramework("IParentalControlService") {
15 static const FunctionInfo functions[] = {
16 {1, nullptr, "Initialize"},
17 {1001, nullptr, "CheckFreeCommunicationPermission"},
18 {1002, nullptr, "ConfirmLaunchApplicationPermission"},
19 {1003, nullptr, "ConfirmResumeApplicationPermission"},
20 {1004, nullptr, "ConfirmSnsPostPermission"},
21 {1005, nullptr, "ConfirmSystemSettingsPermission"},
22 {1006, nullptr, "IsRestrictionTemporaryUnlocked"},
23 {1007, nullptr, "RevertRestrictionTemporaryUnlocked"},
24 {1008, nullptr, "EnterRestrictedSystemSettings"},
25 {1009, nullptr, "LeaveRestrictedSystemSettings"},
26 {1010, nullptr, "IsRestrictedSystemSettingsEntered"},
27 {1011, nullptr, "RevertRestrictedSystemSettingsEntered"},
28 {1012, nullptr, "GetRestrictedFeatures"},
29 {1013, nullptr, "ConfirmStereoVisionPermission"},
30 {1014, nullptr, "ConfirmPlayableApplicationVideoOld"},
31 {1015, nullptr, "ConfirmPlayableApplicationVideo"},
32 {1031, nullptr, "IsRestrictionEnabled"},
33 {1032, nullptr, "GetSafetyLevel"},
34 {1033, nullptr, "SetSafetyLevel"},
35 {1034, nullptr, "GetSafetyLevelSettings"},
36 {1035, nullptr, "GetCurrentSettings"},
37 {1036, nullptr, "SetCustomSafetyLevelSettings"},
38 {1037, nullptr, "GetDefaultRatingOrganization"},
39 {1038, nullptr, "SetDefaultRatingOrganization"},
40 {1039, nullptr, "GetFreeCommunicationApplicationListCount"},
41 {1042, nullptr, "AddToFreeCommunicationApplicationList"},
42 {1043, nullptr, "DeleteSettings"},
43 {1044, nullptr, "GetFreeCommunicationApplicationList"},
44 {1045, nullptr, "UpdateFreeCommunicationApplicationList"},
45 {1046, nullptr, "DisableFeaturesForReset"},
46 {1047, nullptr, "NotifyApplicationDownloadStarted"},
47 {1061, nullptr, "ConfirmStereoVisionRestrictionConfigurable"},
48 {1062, nullptr, "GetStereoVisionRestriction"},
49 {1063, nullptr, "SetStereoVisionRestriction"},
50 {1064, nullptr, "ResetConfirmedStereoVisionPermission"},
51 {1065, nullptr, "IsStereoVisionPermitted"},
52 {1201, nullptr, "UnlockRestrictionTemporarily"},
53 {1202, nullptr, "UnlockSystemSettingsRestriction"},
54 {1203, nullptr, "SetPinCode"},
55 {1204, nullptr, "GenerateInquiryCode"},
56 {1205, nullptr, "CheckMasterKey"},
57 {1206, nullptr, "GetPinCodeLength"},
58 {1207, nullptr, "GetPinCodeChangedEvent"},
59 {1208, nullptr, "GetPinCode"},
60 {1403, nullptr, "IsPairingActive"},
61 {1406, nullptr, "GetSettingsLastUpdated"},
62 {1411, nullptr, "GetPairingAccountInfo"},
63 {1421, nullptr, "GetAccountNickname"},
64 {1424, nullptr, "GetAccountState"},
65 {1432, nullptr, "GetSynchronizationEvent"},
66 {1451, nullptr, "StartPlayTimer"},
67 {1452, nullptr, "StopPlayTimer"},
68 {1453, nullptr, "IsPlayTimerEnabled"},
69 {1454, nullptr, "GetPlayTimerRemainingTime"},
70 {1455, nullptr, "IsRestrictedByPlayTimer"},
71 {1456, nullptr, "GetPlayTimerSettings"},
72 {1457, nullptr, "GetPlayTimerEventToRequestSuspension"},
73 {1458, nullptr, "IsPlayTimerAlarmDisabled"},
74 {1471, nullptr, "NotifyWrongPinCodeInputManyTimes"},
75 {1472, nullptr, "CancelNetworkRequest"},
76 {1473, nullptr, "GetUnlinkedEvent"},
77 {1474, nullptr, "ClearUnlinkedEvent"},
78 {1601, nullptr, "DisableAllFeatures"},
79 {1602, nullptr, "PostEnableAllFeatures"},
80 {1603, nullptr, "IsAllFeaturesDisabled"},
81 {1901, nullptr, "DeleteFromFreeCommunicationApplicationListForDebug"},
82 {1902, nullptr, "ClearFreeCommunicationApplicationListForDebug"},
83 {1903, nullptr, "GetExemptApplicationListCountForDebug"},
84 {1904, nullptr, "GetExemptApplicationListForDebug"},
85 {1905, nullptr, "UpdateExemptApplicationListForDebug"},
86 {1906, nullptr, "AddToExemptApplicationListForDebug"},
87 {1907, nullptr, "DeleteFromExemptApplicationListForDebug"},
88 {1908, nullptr, "ClearExemptApplicationListForDebug"},
89 {1941, nullptr, "DeletePairing"},
90 {1951, nullptr, "SetPlayTimerSettingsForDebug"},
91 {1952, nullptr, "GetPlayTimerSpentTimeForTest"},
92 {1953, nullptr, "SetPlayTimerAlarmDisabledForDebug"},
93 {2001, nullptr, "RequestPairingAsync"},
94 {2002, nullptr, "FinishRequestPairing"},
95 {2003, nullptr, "AuthorizePairingAsync"},
96 {2004, nullptr, "FinishAuthorizePairing"},
97 {2005, nullptr, "RetrievePairingInfoAsync"},
98 {2006, nullptr, "FinishRetrievePairingInfo"},
99 {2007, nullptr, "UnlinkPairingAsync"},
100 {2008, nullptr, "FinishUnlinkPairing"},
101 {2009, nullptr, "GetAccountMiiImageAsync"},
102 {2010, nullptr, "FinishGetAccountMiiImage"},
103 {2011, nullptr, "GetAccountMiiImageContentTypeAsync"},
104 {2012, nullptr, "FinishGetAccountMiiImageContentType"},
105 {2013, nullptr, "SynchronizeParentalControlSettingsAsync"},
106 {2014, nullptr, "FinishSynchronizeParentalControlSettings"},
107 {2015, nullptr, "FinishSynchronizeParentalControlSettingsWithLastUpdated"},
108 {2016, nullptr, "RequestUpdateExemptionListAsync"},
109 };
110 RegisterHandlers(functions);
111 }
15}; 112};
16 113void PCTL_A::CreateService(Kernel::HLERequestContext& ctx) {
17void PCTL_A::GetService(Kernel::HLERequestContext& ctx) {
18 IPC::ResponseBuilder rb{ctx, 2, 0, 1}; 114 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
19 rb.Push(RESULT_SUCCESS); 115 rb.Push(RESULT_SUCCESS);
20 rb.PushIpcInterface<IParentalControlService>(); 116 rb.PushIpcInterface<IParentalControlService>();
@@ -23,7 +119,8 @@ void PCTL_A::GetService(Kernel::HLERequestContext& ctx) {
23 119
24PCTL_A::PCTL_A() : ServiceFramework("pctl:a") { 120PCTL_A::PCTL_A() : ServiceFramework("pctl:a") {
25 static const FunctionInfo functions[] = { 121 static const FunctionInfo functions[] = {
26 {0, &PCTL_A::GetService, "GetService"}, 122 {0, &PCTL_A::CreateService, "CreateService"},
123 {1, nullptr, "CreateServiceWithoutInitialize"},
27 }; 124 };
28 RegisterHandlers(functions); 125 RegisterHandlers(functions);
29} 126}
diff --git a/src/core/hle/service/pctl/pctl_a.h b/src/core/hle/service/pctl/pctl_a.h
index a89c8d07d..3aa8873a9 100644
--- a/src/core/hle/service/pctl/pctl_a.h
+++ b/src/core/hle/service/pctl/pctl_a.h
@@ -15,7 +15,7 @@ public:
15 ~PCTL_A() = default; 15 ~PCTL_A() = default;
16 16
17private: 17private:
18 void GetService(Kernel::HLERequestContext& ctx); 18 void CreateService(Kernel::HLERequestContext& ctx);
19}; 19};
20 20
21} // namespace PCTL 21} // namespace PCTL
diff --git a/src/core/hle/service/ssl/ssl.cpp b/src/core/hle/service/ssl/ssl.cpp
index afa8d5d79..01a03ec83 100644
--- a/src/core/hle/service/ssl/ssl.cpp
+++ b/src/core/hle/service/ssl/ssl.cpp
@@ -2,12 +2,106 @@
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/ipc_helpers.h"
5#include "core/hle/service/ssl/ssl.h" 6#include "core/hle/service/ssl/ssl.h"
6 7
7namespace Service { 8namespace Service {
8namespace SSL { 9namespace SSL {
9 10
10SSL::SSL() : ServiceFramework("ssl") {} 11class ISslConnection final : public ServiceFramework<ISslConnection> {
12public:
13 ISslConnection() : ServiceFramework("ISslConnection") {
14 static const FunctionInfo functions[] = {
15 {0, nullptr, "SetSocketDescriptor"},
16 {1, nullptr, "SetHostName"},
17 {2, nullptr, "SetVerifyOption"},
18 {3, nullptr, "SetIoMode"},
19 {4, nullptr, "GetSocketDescriptor"},
20 {5, nullptr, "GetHostName"},
21 {6, nullptr, "GetVerifyOption"},
22 {7, nullptr, "GetIoMode"},
23 {8, nullptr, "DoHandshake"},
24 {9, nullptr, "DoHandshakeGetServerCert"},
25 {10, nullptr, "Read"},
26 {11, nullptr, "Write"},
27 {12, nullptr, "Pending"},
28 {13, nullptr, "Peek"},
29 {14, nullptr, "Poll"},
30 {15, nullptr, "GetVerifyCertError"},
31 {16, nullptr, "GetNeededServerCertBufferSize"},
32 {17, nullptr, "SetSessionCacheMode"},
33 {18, nullptr, "GetSessionCacheMode"},
34 {19, nullptr, "FlushSessionCache"},
35 {20, nullptr, "SetRenegotiationMode"},
36 {21, nullptr, "GetRenegotiationMode"},
37 {22, nullptr, "SetOption"},
38 {23, nullptr, "GetOption"},
39 {24, nullptr, "GetVerifyCertErrors"},
40 {25, nullptr, "GetCipherInfo"},
41 };
42 RegisterHandlers(functions);
43 }
44};
45
46class ISslContext final : public ServiceFramework<ISslContext> {
47public:
48 ISslContext() : ServiceFramework("ISslContext") {
49 static const FunctionInfo functions[] = {
50 {0, &ISslContext::SetOption, "SetOption"},
51 {1, nullptr, "GetOption"},
52 {2, &ISslContext::CreateConnection, "CreateConnection"},
53 {3, nullptr, "GetConnectionCount"},
54 {4, nullptr, "ImportServerPki"},
55 {5, nullptr, "ImportClientPki"},
56 {6, nullptr, "RemoveServerPki"},
57 {7, nullptr, "RemoveClientPki"},
58 {8, nullptr, "RegisterInternalPki"},
59 {9, nullptr, "AddPolicyOid"},
60 {10, nullptr, "ImportCrl"},
61 {11, nullptr, "RemoveCrl"},
62 };
63 RegisterHandlers(functions);
64 }
65 ~ISslContext() = default;
66
67private:
68 void SetOption(Kernel::HLERequestContext& ctx) {
69 LOG_WARNING(Service_SSL, "(STUBBED) called");
70 IPC::RequestParser rp{ctx};
71
72 IPC::ResponseBuilder rb = rp.MakeBuilder(2, 0, 0);
73 rb.Push(RESULT_SUCCESS);
74 }
75
76 void CreateConnection(Kernel::HLERequestContext& ctx) {
77 LOG_WARNING(Service_SSL, "(STUBBED) called");
78
79 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
80 rb.Push(RESULT_SUCCESS);
81 rb.PushIpcInterface<ISslConnection>();
82 }
83};
84
85void SSL::CreateContext(Kernel::HLERequestContext& ctx) {
86 LOG_WARNING(Service_SSL, "(STUBBED) called");
87
88 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
89 rb.Push(RESULT_SUCCESS);
90 rb.PushIpcInterface<ISslContext>();
91}
92
93SSL::SSL() : ServiceFramework("ssl") {
94 static const FunctionInfo functions[] = {
95 {0, &SSL::CreateContext, "CreateContext"},
96 {1, nullptr, "GetContextCount"},
97 {2, nullptr, "GetCertificates"},
98 {3, nullptr, "GetCertificateBufSize"},
99 {4, nullptr, "DebugIoctl"},
100 {5, nullptr, "SetInterfaceVersion"},
101 {6, nullptr, "FlushSessionCache"},
102 };
103 RegisterHandlers(functions);
104}
11 105
12void InstallInterfaces(SM::ServiceManager& service_manager) { 106void InstallInterfaces(SM::ServiceManager& service_manager) {
13 std::make_shared<SSL>()->InstallAsService(service_manager); 107 std::make_shared<SSL>()->InstallAsService(service_manager);
diff --git a/src/core/hle/service/ssl/ssl.h b/src/core/hle/service/ssl/ssl.h
index 645dad003..7fcff5ccd 100644
--- a/src/core/hle/service/ssl/ssl.h
+++ b/src/core/hle/service/ssl/ssl.h
@@ -13,6 +13,9 @@ class SSL final : public ServiceFramework<SSL> {
13public: 13public:
14 explicit SSL(); 14 explicit SSL();
15 ~SSL() = default; 15 ~SSL() = default;
16
17private:
18 void CreateContext(Kernel::HLERequestContext& ctx);
16}; 19};
17 20
18/// Registers all SSL services with the specified service manager. 21/// Registers all SSL services with the specified service manager.