summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/logging/backend.cpp1
-rw-r--r--src/common/logging/log.h1
-rw-r--r--src/core/CMakeLists.txt6
-rw-r--r--src/core/hle/service/service.cpp2
-rw-r--r--src/core/hle/service/spl/csrng.cpp18
-rw-r--r--src/core/hle/service/spl/csrng.h18
-rw-r--r--src/core/hle/service/spl/module.cpp42
-rw-r--r--src/core/hle/service/spl/module.h29
-rw-r--r--src/core/hle/service/spl/spl.cpp41
-rw-r--r--src/core/hle/service/spl/spl.h18
10 files changed, 176 insertions, 0 deletions
diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp
index 9f3ba19db..8d5225f62 100644
--- a/src/common/logging/backend.cpp
+++ b/src/common/logging/backend.cpp
@@ -48,6 +48,7 @@ namespace Log {
48 SUB(Service, PCTL) \ 48 SUB(Service, PCTL) \
49 SUB(Service, SET) \ 49 SUB(Service, SET) \
50 SUB(Service, SM) \ 50 SUB(Service, SM) \
51 SUB(Service, SPL) \
51 SUB(Service, Time) \ 52 SUB(Service, Time) \
52 SUB(Service, VI) \ 53 SUB(Service, VI) \
53 CLS(HW) \ 54 CLS(HW) \
diff --git a/src/common/logging/log.h b/src/common/logging/log.h
index 3573e6dc4..6298a4906 100644
--- a/src/common/logging/log.h
+++ b/src/common/logging/log.h
@@ -65,6 +65,7 @@ enum class Class : ClassType {
65 Service_PCTL, ///< The PCTL (Parental control) service 65 Service_PCTL, ///< The PCTL (Parental control) service
66 Service_SET, ///< The SET (Settings) service 66 Service_SET, ///< The SET (Settings) service
67 Service_SM, ///< The SM (Service manager) service 67 Service_SM, ///< The SM (Service manager) service
68 Service_SPL, ///< The SPL service
68 Service_Time, ///< The time service 69 Service_Time, ///< The time service
69 Service_VI, ///< The VI (Video interface) service 70 Service_VI, ///< The VI (Video interface) service
70 HW, ///< Low-level hardware emulation 71 HW, ///< Low-level hardware emulation
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 456b63ac2..6c0911070 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -193,6 +193,12 @@ add_library(core STATIC
193 hle/service/sockets/sfdnsres.h 193 hle/service/sockets/sfdnsres.h
194 hle/service/sockets/sockets.cpp 194 hle/service/sockets/sockets.cpp
195 hle/service/sockets/sockets.h 195 hle/service/sockets/sockets.h
196 hle/service/spl/csrng.cpp
197 hle/service/spl/csrng.h
198 hle/service/spl/module.cpp
199 hle/service/spl/module.h
200 hle/service/spl/spl.cpp
201 hle/service/spl/spl.h
196 hle/service/time/time.cpp 202 hle/service/time/time.cpp
197 hle/service/time/time.h 203 hle/service/time/time.h
198 hle/service/time/time_s.cpp 204 hle/service/time/time_s.cpp
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index 4846fe092..005cc1e0b 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -34,6 +34,7 @@
34#include "core/hle/service/sm/controller.h" 34#include "core/hle/service/sm/controller.h"
35#include "core/hle/service/sm/sm.h" 35#include "core/hle/service/sm/sm.h"
36#include "core/hle/service/sockets/sockets.h" 36#include "core/hle/service/sockets/sockets.h"
37#include "core/hle/service/spl/module.h"
37#include "core/hle/service/time/time.h" 38#include "core/hle/service/time/time.h"
38#include "core/hle/service/vi/vi.h" 39#include "core/hle/service/vi/vi.h"
39 40
@@ -190,6 +191,7 @@ void Init() {
190 Nvidia::InstallInterfaces(*SM::g_service_manager); 191 Nvidia::InstallInterfaces(*SM::g_service_manager);
191 PCTL::InstallInterfaces(*SM::g_service_manager); 192 PCTL::InstallInterfaces(*SM::g_service_manager);
192 Sockets::InstallInterfaces(*SM::g_service_manager); 193 Sockets::InstallInterfaces(*SM::g_service_manager);
194 SPL::InstallInterfaces(*SM::g_service_manager);
193 Time::InstallInterfaces(*SM::g_service_manager); 195 Time::InstallInterfaces(*SM::g_service_manager);
194 VI::InstallInterfaces(*SM::g_service_manager, nv_flinger); 196 VI::InstallInterfaces(*SM::g_service_manager, nv_flinger);
195 Set::InstallInterfaces(*SM::g_service_manager); 197 Set::InstallInterfaces(*SM::g_service_manager);
diff --git a/src/core/hle/service/spl/csrng.cpp b/src/core/hle/service/spl/csrng.cpp
new file mode 100644
index 000000000..cde05717a
--- /dev/null
+++ b/src/core/hle/service/spl/csrng.cpp
@@ -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#include "core/hle/service/spl/csrng.h"
6
7namespace Service {
8namespace SPL {
9
10CSRNG::CSRNG(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "csrng") {
11 static const FunctionInfo functions[] = {
12 {0, &CSRNG::GetRandomBytes, "GetRandomBytes"},
13 };
14 RegisterHandlers(functions);
15}
16
17} // namespace SPL
18} // namespace Service
diff --git a/src/core/hle/service/spl/csrng.h b/src/core/hle/service/spl/csrng.h
new file mode 100644
index 000000000..59ca794dd
--- /dev/null
+++ b/src/core/hle/service/spl/csrng.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/spl/module.h"
8
9namespace Service {
10namespace SPL {
11
12class CSRNG final : public Module::Interface {
13public:
14 explicit CSRNG(std::shared_ptr<Module> module);
15};
16
17} // namespace SPL
18} // namespace Service
diff --git a/src/core/hle/service/spl/module.cpp b/src/core/hle/service/spl/module.cpp
new file mode 100644
index 000000000..fc1bcd94c
--- /dev/null
+++ b/src/core/hle/service/spl/module.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 <algorithm>
6#include <cstdlib>
7#include <vector>
8#include "common/logging/log.h"
9#include "core/hle/ipc_helpers.h"
10#include "core/hle/service/spl/csrng.h"
11#include "core/hle/service/spl/module.h"
12#include "core/hle/service/spl/spl.h"
13
14namespace Service {
15namespace SPL {
16
17Module::Interface::Interface(std::shared_ptr<Module> module, const char* name)
18 : ServiceFramework(name), module(std::move(module)) {}
19
20void Module::Interface::GetRandomBytes(Kernel::HLERequestContext& ctx) {
21 IPC::RequestParser rp{ctx};
22
23 size_t size = ctx.GetWriteBufferSize();
24
25 std::vector<u8> data(size);
26 std::generate(data.begin(), data.end(), std::rand);
27
28 ctx.WriteBuffer(data);
29
30 IPC::ResponseBuilder rb{ctx, 2};
31 rb.Push(RESULT_SUCCESS);
32 LOG_DEBUG(Service_SPL, "called");
33}
34
35void InstallInterfaces(SM::ServiceManager& service_manager) {
36 auto module = std::make_shared<Module>();
37 std::make_shared<CSRNG>(module)->InstallAsService(service_manager);
38 std::make_shared<SPL>(module)->InstallAsService(service_manager);
39}
40
41} // namespace SPL
42} // namespace Service
diff --git a/src/core/hle/service/spl/module.h b/src/core/hle/service/spl/module.h
new file mode 100644
index 000000000..12cdb2980
--- /dev/null
+++ b/src/core/hle/service/spl/module.h
@@ -0,0 +1,29 @@
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 SPL {
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 GetRandomBytes(Kernel::HLERequestContext& ctx);
19
20 protected:
21 std::shared_ptr<Module> module;
22 };
23};
24
25/// Registers all SPL services with the specified service manager.
26void InstallInterfaces(SM::ServiceManager& service_manager);
27
28} // namespace SPL
29} // namespace Service
diff --git a/src/core/hle/service/spl/spl.cpp b/src/core/hle/service/spl/spl.cpp
new file mode 100644
index 000000000..deab29b91
--- /dev/null
+++ b/src/core/hle/service/spl/spl.cpp
@@ -0,0 +1,41 @@
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/spl/spl.h"
6
7namespace Service {
8namespace SPL {
9
10SPL::SPL(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "spl:") {
11 static const FunctionInfo functions[] = {
12 {0, nullptr, "GetConfig"},
13 {1, nullptr, "UserExpMod"},
14 {2, nullptr, "GenerateAesKek"},
15 {3, nullptr, "LoadAesKey"},
16 {4, nullptr, "GenerateAesKey"},
17 {5, nullptr, "SetConfig"},
18 {7, &SPL::GetRandomBytes, "GetRandomBytes"},
19 {9, nullptr, "LoadSecureExpModKey"},
20 {10, nullptr, "SecureExpMod"},
21 {11, nullptr, "IsDevelopment"},
22 {12, nullptr, "GenerateSpecificAesKey"},
23 {13, nullptr, "DecryptPrivk"},
24 {14, nullptr, "DecryptAesKey"},
25 {15, nullptr, "DecryptAesCtr"},
26 {16, nullptr, "ComputeCmac"},
27 {17, nullptr, "LoadRsaOaepKey"},
28 {18, nullptr, "UnwrapRsaOaepWrappedTitleKey"},
29 {19, nullptr, "LoadTitleKey"},
30 {20, nullptr, "UnwrapAesWrappedTitleKey"},
31 {21, nullptr, "LockAesEngine"},
32 {22, nullptr, "UnlockAesEngine"},
33 {23, nullptr, "GetSplWaitEvent"},
34 {24, nullptr, "SetSharedData"},
35 {25, nullptr, "GetSharedData"},
36 };
37 RegisterHandlers(functions);
38}
39
40} // namespace SPL
41} // namespace Service
diff --git a/src/core/hle/service/spl/spl.h b/src/core/hle/service/spl/spl.h
new file mode 100644
index 000000000..9fd6059af
--- /dev/null
+++ b/src/core/hle/service/spl/spl.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/spl/module.h"
8
9namespace Service {
10namespace SPL {
11
12class SPL final : public Module::Interface {
13public:
14 explicit SPL(std::shared_ptr<Module> module);
15};
16
17} // namespace SPL
18} // namespace Service