summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar mailwl2018-02-02 14:31:27 +0300
committerGravatar mailwl2018-02-03 18:09:51 +0300
commitf67a8d87a0d5e2b0b95289af91ea4478b6adbb6f (patch)
treeb9448ff3ac4263fec4302432222da935f3ab3f65 /src
parentService/am: Add AppletAE service (#153) (diff)
downloadyuzu-f67a8d87a0d5e2b0b95289af91ea4478b6adbb6f.tar.gz
yuzu-f67a8d87a0d5e2b0b95289af91ea4478b6adbb6f.tar.xz
yuzu-f67a8d87a0d5e2b0b95289af91ea4478b6adbb6f.zip
Service:nifm: add nifm:a, nifm:s and nifm:u services
Diffstat (limited to 'src')
-rw-r--r--src/core/CMakeLists.txt8
-rw-r--r--src/core/hle/service/nifm/nifm.cpp161
-rw-r--r--src/core/hle/service/nifm/nifm.h27
-rw-r--r--src/core/hle/service/nifm/nifm_a.cpp36
-rw-r--r--src/core/hle/service/nifm/nifm_a.h24
-rw-r--r--src/core/hle/service/nifm/nifm_s.cpp36
-rw-r--r--src/core/hle/service/nifm/nifm_s.h24
-rw-r--r--src/core/hle/service/nifm/nifm_u.cpp36
-rw-r--r--src/core/hle/service/nifm/nifm_u.h24
-rw-r--r--src/core/hle/service/service.cpp2
10 files changed, 378 insertions, 0 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 848b17b18..951bc37b5 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -114,6 +114,14 @@ add_library(core STATIC
114 hle/service/hid/hid.h 114 hle/service/hid/hid.h
115 hle/service/lm/lm.cpp 115 hle/service/lm/lm.cpp
116 hle/service/lm/lm.h 116 hle/service/lm/lm.h
117 hle/service/nifm/nifm.cpp
118 hle/service/nifm/nifm.h
119 hle/service/nifm/nifm_a.cpp
120 hle/service/nifm/nifm_a.h
121 hle/service/nifm/nifm_s.cpp
122 hle/service/nifm/nifm_s.h
123 hle/service/nifm/nifm_u.cpp
124 hle/service/nifm/nifm_u.h
117 hle/service/nvdrv/devices/nvdevice.h 125 hle/service/nvdrv/devices/nvdevice.h
118 hle/service/nvdrv/devices/nvdisp_disp0.cpp 126 hle/service/nvdrv/devices/nvdisp_disp0.cpp
119 hle/service/nvdrv/devices/nvdisp_disp0.h 127 hle/service/nvdrv/devices/nvdisp_disp0.h
diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp
new file mode 100644
index 000000000..f91571eb4
--- /dev/null
+++ b/src/core/hle/service/nifm/nifm.cpp
@@ -0,0 +1,161 @@
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/ipc_helpers.h"
6#include "core/hle/service/nifm/nifm.h"
7#include "core/hle/service/nifm/nifm_a.h"
8#include "core/hle/service/nifm/nifm_s.h"
9#include "core/hle/service/nifm/nifm_u.h"
10
11namespace Service {
12namespace NIFM {
13
14class IScanRequest final : public ServiceFramework<IScanRequest> {
15public:
16 explicit IScanRequest() : ServiceFramework("IScanRequest") {
17 static const FunctionInfo functions[] = {
18 {0, nullptr, "Submit"},
19 {1, nullptr, "IsProcessing"},
20 {2, nullptr, "GetResult"},
21 {3, nullptr, "GetSystemEventReadableHandle"},
22 };
23 RegisterHandlers(functions);
24 }
25};
26
27class IRequest final : public ServiceFramework<IRequest> {
28public:
29 explicit IRequest() : ServiceFramework("IRequest") {
30 static const FunctionInfo functions[] = {
31 {0, nullptr, "GetRequestState"},
32 {1, nullptr, "GetResult"},
33 {2, nullptr, "GetSystemEventReadableHandles"},
34 {3, nullptr, "Cancel"},
35 {4, nullptr, "Submit"},
36 {5, nullptr, "SetRequirement"},
37 {6, nullptr, "SetRequirementPreset"},
38 {8, nullptr, "SetPriority"},
39 {9, nullptr, "SetNetworkProfileId"},
40 {10, nullptr, "SetRejectable"},
41 {11, nullptr, "SetConnectionConfirmationOption"},
42 {12, nullptr, "SetPersistent"},
43 {13, nullptr, "SetInstant"},
44 {14, nullptr, "SetSustainable"},
45 {15, nullptr, "SetRawPriority"},
46 {16, nullptr, "SetGreedy"},
47 {17, nullptr, "SetSharable"},
48 {18, nullptr, "SetRequirementByRevision"},
49 {19, nullptr, "GetRequirement"},
50 {20, nullptr, "GetRevision"},
51 {21, nullptr, "GetAppletInfo"},
52 {22, nullptr, "GetAdditionalInfo"},
53 {23, nullptr, "SetKeptInSleep"},
54 {24, nullptr, "RegisterSocketDescriptor"},
55 {25, nullptr, "UnregisterSocketDescriptor"},
56 };
57 RegisterHandlers(functions);
58 }
59};
60
61class INetworkProfile final : public ServiceFramework<INetworkProfile> {
62public:
63 explicit INetworkProfile() : ServiceFramework("INetworkProfile") {
64 static const FunctionInfo functions[] = {
65 {0, nullptr, "Update"},
66 {1, nullptr, "PersistOld"},
67 {2, nullptr, "Persist"},
68 };
69 RegisterHandlers(functions);
70 }
71};
72
73IGeneralService::IGeneralService() : ServiceFramework("IGeneralService") {
74 static const FunctionInfo functions[] = {
75 {1, &IGeneralService::GetClientId, "GetClientId"},
76 {2, &IGeneralService::CreateScanRequest, "CreateScanRequest"},
77 {4, &IGeneralService::CreateRequest, "CreateRequest"},
78 {6, nullptr, "GetCurrentNetworkProfile"},
79 {7, nullptr, "EnumerateNetworkInterfaces"},
80 {8, nullptr, "GetNetworkProfile"},
81 {9, nullptr, "SetNetworkProfile"},
82 {10, &IGeneralService::RemoveNetworkProfile, "RemoveNetworkProfile"},
83 {11, nullptr, "GetScanDataOld"},
84 {12, nullptr, "GetCurrentIpAddress"},
85 {13, nullptr, "GetCurrentAccessPointOld"},
86 {14, &IGeneralService::CreateTemporaryNetworkProfile, "CreateTemporaryNetworkProfile"},
87 {15, nullptr, "GetCurrentIpConfigInfo"},
88 {16, nullptr, "SetWirelessCommunicationEnabled"},
89 {17, nullptr, "IsWirelessCommunicationEnabled"},
90 {18, nullptr, "GetInternetConnectionStatus"},
91 {19, nullptr, "SetEthernetCommunicationEnabled"},
92 {20, nullptr, "IsEthernetCommunicationEnabled"},
93 {21, nullptr, "IsAnyInternetRequestAccepted"},
94 {22, nullptr, "IsAnyForegroundRequestAccepted"},
95 {23, nullptr, "PutToSleep"},
96 {24, nullptr, "WakeUp"},
97 {25, nullptr, "GetSsidListVersion"},
98 {26, nullptr, "SetExclusiveClient"},
99 {27, nullptr, "GetDefaultIpSetting"},
100 {28, nullptr, "SetDefaultIpSetting"},
101 {29, nullptr, "SetWirelessCommunicationEnabledForTest"},
102 {30, nullptr, "SetEthernetCommunicationEnabledForTest"},
103 {31, nullptr, "GetTelemetorySystemEventReadableHandle"},
104 {32, nullptr, "GetTelemetryInfo"},
105 {33, nullptr, "ConfirmSystemAvailability"},
106 {34, nullptr, "SetBackgroundRequestEnabled"},
107 {35, nullptr, "GetScanData"},
108 {36, nullptr, "GetCurrentAccessPoint"},
109 {37, nullptr, "Shutdown"},
110 };
111 RegisterHandlers(functions);
112}
113
114void IGeneralService::GetClientId(Kernel::HLERequestContext& ctx) {
115 LOG_WARNING(Service, "(STUBBED) called");
116 IPC::ResponseBuilder rb{ctx, 4};
117 rb.Push(RESULT_SUCCESS);
118 rb.Push<u64>(0);
119}
120
121void IGeneralService::CreateScanRequest(Kernel::HLERequestContext& ctx) {
122 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
123
124 rb.Push(RESULT_SUCCESS);
125 rb.PushIpcInterface<IScanRequest>();
126
127 LOG_DEBUG(Service, "called");
128}
129
130void IGeneralService::CreateRequest(Kernel::HLERequestContext& ctx) {
131 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
132
133 rb.Push(RESULT_SUCCESS);
134 rb.PushIpcInterface<IRequest>();
135
136 LOG_DEBUG(Service, "called");
137}
138
139void IGeneralService::RemoveNetworkProfile(Kernel::HLERequestContext& ctx) {
140 LOG_WARNING(Service, "(STUBBED) called");
141 IPC::ResponseBuilder rb{ctx, 2};
142 rb.Push(RESULT_SUCCESS);
143}
144
145void IGeneralService::CreateTemporaryNetworkProfile(Kernel::HLERequestContext& ctx) {
146 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
147
148 rb.Push(RESULT_SUCCESS);
149 rb.PushIpcInterface<INetworkProfile>();
150
151 LOG_DEBUG(Service, "called");
152}
153
154void InstallInterfaces(SM::ServiceManager& service_manager) {
155 std::make_shared<NIFM_A>()->InstallAsService(service_manager);
156 std::make_shared<NIFM_S>()->InstallAsService(service_manager);
157 std::make_shared<NIFM_U>()->InstallAsService(service_manager);
158}
159
160} // namespace NIFM
161} // namespace Service
diff --git a/src/core/hle/service/nifm/nifm.h b/src/core/hle/service/nifm/nifm.h
new file mode 100644
index 000000000..6edbfe4a4
--- /dev/null
+++ b/src/core/hle/service/nifm/nifm.h
@@ -0,0 +1,27 @@
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/service.h"
8
9namespace Service {
10namespace NIFM {
11
12class IGeneralService final : public ServiceFramework<IGeneralService> {
13public:
14 IGeneralService();
15
16private:
17 void GetClientId(Kernel::HLERequestContext& ctx);
18 void CreateScanRequest(Kernel::HLERequestContext& ctx);
19 void CreateRequest(Kernel::HLERequestContext& ctx);
20 void RemoveNetworkProfile(Kernel::HLERequestContext& ctx);
21 void CreateTemporaryNetworkProfile(Kernel::HLERequestContext& ctx);
22};
23
24void InstallInterfaces(SM::ServiceManager& service_manager);
25
26} // namespace NIFM
27} // namespace Service
diff --git a/src/core/hle/service/nifm/nifm_a.cpp b/src/core/hle/service/nifm/nifm_a.cpp
new file mode 100644
index 000000000..3835a87bf
--- /dev/null
+++ b/src/core/hle/service/nifm/nifm_a.cpp
@@ -0,0 +1,36 @@
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 "common/logging/log.h"
6#include "core/hle/ipc_helpers.h"
7#include "core/hle/service/nifm/nifm.h"
8#include "core/hle/service/nifm/nifm_a.h"
9
10namespace Service {
11namespace NIFM {
12
13void NIFM_A::CreateGeneralServiceOld(Kernel::HLERequestContext& ctx) {
14 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
15 rb.Push(RESULT_SUCCESS);
16 rb.PushIpcInterface<IGeneralService>();
17 LOG_DEBUG(Service, "called");
18}
19
20void NIFM_A::CreateGeneralService(Kernel::HLERequestContext& ctx) {
21 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
22 rb.Push(RESULT_SUCCESS);
23 rb.PushIpcInterface<IGeneralService>();
24 LOG_DEBUG(Service, "called");
25}
26
27NIFM_A::NIFM_A() : ServiceFramework("nifm:a") {
28 static const FunctionInfo functions[] = {
29 {4, &NIFM_A::CreateGeneralServiceOld, "CreateGeneralServiceOld"},
30 {5, &NIFM_A::CreateGeneralService, "CreateGeneralService"},
31 };
32 RegisterHandlers(functions);
33}
34
35} // namespace NIFM
36} // namespace Service
diff --git a/src/core/hle/service/nifm/nifm_a.h b/src/core/hle/service/nifm/nifm_a.h
new file mode 100644
index 000000000..06a92a93c
--- /dev/null
+++ b/src/core/hle/service/nifm/nifm_a.h
@@ -0,0 +1,24 @@
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/kernel/hle_ipc.h"
8#include "core/hle/service/service.h"
9
10namespace Service {
11namespace NIFM {
12
13class NIFM_A final : public ServiceFramework<NIFM_A> {
14public:
15 NIFM_A();
16 ~NIFM_A() = default;
17
18private:
19 void CreateGeneralServiceOld(Kernel::HLERequestContext& ctx);
20 void CreateGeneralService(Kernel::HLERequestContext& ctx);
21};
22
23} // namespace NIFM
24} // namespace Service
diff --git a/src/core/hle/service/nifm/nifm_s.cpp b/src/core/hle/service/nifm/nifm_s.cpp
new file mode 100644
index 000000000..cbb42891c
--- /dev/null
+++ b/src/core/hle/service/nifm/nifm_s.cpp
@@ -0,0 +1,36 @@
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 "common/logging/log.h"
6#include "core/hle/ipc_helpers.h"
7#include "core/hle/service/nifm/nifm.h"
8#include "core/hle/service/nifm/nifm_s.h"
9
10namespace Service {
11namespace NIFM {
12
13void NIFM_S::CreateGeneralServiceOld(Kernel::HLERequestContext& ctx) {
14 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
15 rb.Push(RESULT_SUCCESS);
16 rb.PushIpcInterface<IGeneralService>();
17 LOG_DEBUG(Service, "called");
18}
19
20void NIFM_S::CreateGeneralService(Kernel::HLERequestContext& ctx) {
21 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
22 rb.Push(RESULT_SUCCESS);
23 rb.PushIpcInterface<IGeneralService>();
24 LOG_DEBUG(Service, "called");
25}
26
27NIFM_S::NIFM_S() : ServiceFramework("nifm:s") {
28 static const FunctionInfo functions[] = {
29 {4, &NIFM_S::CreateGeneralServiceOld, "CreateGeneralServiceOld"},
30 {5, &NIFM_S::CreateGeneralService, "CreateGeneralService"},
31 };
32 RegisterHandlers(functions);
33}
34
35} // namespace NIFM
36} // namespace Service
diff --git a/src/core/hle/service/nifm/nifm_s.h b/src/core/hle/service/nifm/nifm_s.h
new file mode 100644
index 000000000..d11a1ec29
--- /dev/null
+++ b/src/core/hle/service/nifm/nifm_s.h
@@ -0,0 +1,24 @@
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/kernel/hle_ipc.h"
8#include "core/hle/service/service.h"
9
10namespace Service {
11namespace NIFM {
12
13class NIFM_S final : public ServiceFramework<NIFM_S> {
14public:
15 NIFM_S();
16 ~NIFM_S() = default;
17
18private:
19 void CreateGeneralServiceOld(Kernel::HLERequestContext& ctx);
20 void CreateGeneralService(Kernel::HLERequestContext& ctx);
21};
22
23} // namespace NIFM
24} // namespace Service
diff --git a/src/core/hle/service/nifm/nifm_u.cpp b/src/core/hle/service/nifm/nifm_u.cpp
new file mode 100644
index 000000000..c6de14744
--- /dev/null
+++ b/src/core/hle/service/nifm/nifm_u.cpp
@@ -0,0 +1,36 @@
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 "common/logging/log.h"
6#include "core/hle/ipc_helpers.h"
7#include "core/hle/service/nifm/nifm.h"
8#include "core/hle/service/nifm/nifm_u.h"
9
10namespace Service {
11namespace NIFM {
12
13void NIFM_U::CreateGeneralServiceOld(Kernel::HLERequestContext& ctx) {
14 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
15 rb.Push(RESULT_SUCCESS);
16 rb.PushIpcInterface<IGeneralService>();
17 LOG_DEBUG(Service, "called");
18}
19
20void NIFM_U::CreateGeneralService(Kernel::HLERequestContext& ctx) {
21 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
22 rb.Push(RESULT_SUCCESS);
23 rb.PushIpcInterface<IGeneralService>();
24 LOG_DEBUG(Service, "called");
25}
26
27NIFM_U::NIFM_U() : ServiceFramework("nifm:u") {
28 static const FunctionInfo functions[] = {
29 {4, &NIFM_U::CreateGeneralServiceOld, "CreateGeneralServiceOld"},
30 {5, &NIFM_U::CreateGeneralService, "CreateGeneralService"},
31 };
32 RegisterHandlers(functions);
33}
34
35} // namespace NIFM
36} // namespace Service
diff --git a/src/core/hle/service/nifm/nifm_u.h b/src/core/hle/service/nifm/nifm_u.h
new file mode 100644
index 000000000..da40b604f
--- /dev/null
+++ b/src/core/hle/service/nifm/nifm_u.h
@@ -0,0 +1,24 @@
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/kernel/hle_ipc.h"
8#include "core/hle/service/service.h"
9
10namespace Service {
11namespace NIFM {
12
13class NIFM_U final : public ServiceFramework<NIFM_U> {
14public:
15 NIFM_U();
16 ~NIFM_U() = default;
17
18private:
19 void CreateGeneralServiceOld(Kernel::HLERequestContext& ctx);
20 void CreateGeneralService(Kernel::HLERequestContext& ctx);
21};
22
23} // namespace NIFM
24} // namespace Service
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index 294351b76..1dd04a12f 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -22,6 +22,7 @@
22#include "core/hle/service/filesystem/filesystem.h" 22#include "core/hle/service/filesystem/filesystem.h"
23#include "core/hle/service/hid/hid.h" 23#include "core/hle/service/hid/hid.h"
24#include "core/hle/service/lm/lm.h" 24#include "core/hle/service/lm/lm.h"
25#include "core/hle/service/nifm/nifm.h"
25#include "core/hle/service/nvdrv/nvdrv.h" 26#include "core/hle/service/nvdrv/nvdrv.h"
26#include "core/hle/service/pctl/pctl.h" 27#include "core/hle/service/pctl/pctl.h"
27#include "core/hle/service/service.h" 28#include "core/hle/service/service.h"
@@ -180,6 +181,7 @@ void Init() {
180 FileSystem::InstallInterfaces(*SM::g_service_manager); 181 FileSystem::InstallInterfaces(*SM::g_service_manager);
181 HID::InstallInterfaces(*SM::g_service_manager); 182 HID::InstallInterfaces(*SM::g_service_manager);
182 LM::InstallInterfaces(*SM::g_service_manager); 183 LM::InstallInterfaces(*SM::g_service_manager);
184 NIFM::InstallInterfaces(*SM::g_service_manager);
183 Nvidia::InstallInterfaces(*SM::g_service_manager); 185 Nvidia::InstallInterfaces(*SM::g_service_manager);
184 PCTL::InstallInterfaces(*SM::g_service_manager); 186 PCTL::InstallInterfaces(*SM::g_service_manager);
185 Sockets::InstallInterfaces(*SM::g_service_manager); 187 Sockets::InstallInterfaces(*SM::g_service_manager);