From 571b1062f0fd2921d2ea8d559d5dbcdb087e9cd0 Mon Sep 17 00:00:00 2001 From: Hamish Milne Date: Wed, 1 Jan 2020 00:58:36 +0000 Subject: [PATCH] Serialize NIM, PS, PXI, SOC, SSL services --- TODO | 15 +++++++-------- src/core/hle/service/nim/nim_aoc.cpp | 3 +++ src/core/hle/service/nim/nim_aoc.h | 2 ++ src/core/hle/service/nim/nim_s.cpp | 3 +++ src/core/hle/service/nim/nim_s.h | 2 ++ src/core/hle/service/nim/nim_u.cpp | 4 ++++ src/core/hle/service/nim/nim_u.h | 10 ++++++++++ src/core/hle/service/ps/ps_ps.cpp | 3 +++ src/core/hle/service/ps/ps_ps.h | 2 ++ src/core/hle/service/pxi/dev.cpp | 3 +++ src/core/hle/service/pxi/dev.h | 2 ++ src/core/hle/service/soc_u.cpp | 3 +++ src/core/hle/service/soc_u.h | 18 ++++++++++++++++++ src/core/hle/service/ssl_c.cpp | 2 ++ src/core/hle/service/ssl_c.h | 2 ++ 15 files changed, 66 insertions(+), 8 deletions(-) diff --git a/TODO b/TODO index f9fffa60d..46ba9b260 100644 --- a/TODO +++ b/TODO @@ -17,7 +17,7 @@ ☐ Telemetry session ☐ Replace SERIALIZE_AS_POD with BOOST_IS_BITWISE_SERIALIZABLE ☐ Review constructor/initialization code -☐ Fix CI +✔ Fix CI @done(19-12-31 21:32) ✔ HW @done(19-08-13 15:41) ✔ GPU regs @done(19-08-13 15:41) ✔ LCD regs @done(19-08-13 15:41) @@ -92,15 +92,14 @@ ✔ NDM @done(19-12-31 18:26) ✔ NEWS @done(19-12-31 18:29) ✔ NFC @done(19-12-31 20:35) - ☐ NIM - ☐ NS + ✔ NIM @done(19-12-31 21:08) + ✔ NS @done(20-01-01 00:46) ☐ NWM ☐ PM - ☐ PS + ✔ PS @done(20-01-01 00:54) ☐ PTM - ☐ PXI + ✔ PXI @done(20-01-01 00:53) ☐ QTM - ☐ SM - ☐ SOC - ☐ SSL + ✔ SOC @done(20-01-01 00:51) + ✔ SSL @done(20-01-01 00:48) ☐ Y2R \ No newline at end of file diff --git a/src/core/hle/service/nim/nim_aoc.cpp b/src/core/hle/service/nim/nim_aoc.cpp index ddd8d5e03..f20c96f69 100644 --- a/src/core/hle/service/nim/nim_aoc.cpp +++ b/src/core/hle/service/nim/nim_aoc.cpp @@ -2,8 +2,11 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include "common/archives.h" #include "core/hle/service/nim/nim_aoc.h" +SERIALIZE_EXPORT_IMPL(Service::NIM::NIM_AOC) + namespace Service::NIM { NIM_AOC::NIM_AOC() : ServiceFramework("nim:aoc", 2) { diff --git a/src/core/hle/service/nim/nim_aoc.h b/src/core/hle/service/nim/nim_aoc.h index 5a1f518ec..2d06a9d1c 100644 --- a/src/core/hle/service/nim/nim_aoc.h +++ b/src/core/hle/service/nim/nim_aoc.h @@ -15,3 +15,5 @@ public: }; } // namespace Service::NIM + +BOOST_CLASS_EXPORT_KEY(Service::NIM::NIM_AOC) diff --git a/src/core/hle/service/nim/nim_s.cpp b/src/core/hle/service/nim/nim_s.cpp index d7236249f..27118e406 100644 --- a/src/core/hle/service/nim/nim_s.cpp +++ b/src/core/hle/service/nim/nim_s.cpp @@ -2,8 +2,11 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include "common/archives.h" #include "core/hle/service/nim/nim_s.h" +SERIALIZE_EXPORT_IMPL(Service::NIM::NIM_S) + namespace Service::NIM { NIM_S::NIM_S() : ServiceFramework("nim:s", 1) { diff --git a/src/core/hle/service/nim/nim_s.h b/src/core/hle/service/nim/nim_s.h index 6485cde18..6281270f5 100644 --- a/src/core/hle/service/nim/nim_s.h +++ b/src/core/hle/service/nim/nim_s.h @@ -15,3 +15,5 @@ public: }; } // namespace Service::NIM + +BOOST_CLASS_EXPORT_KEY(Service::NIM::NIM_S) diff --git a/src/core/hle/service/nim/nim_u.cpp b/src/core/hle/service/nim/nim_u.cpp index dd0e4d31c..b44ef3539 100644 --- a/src/core/hle/service/nim/nim_u.cpp +++ b/src/core/hle/service/nim/nim_u.cpp @@ -2,11 +2,15 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include "common/archives.h" #include "core/core.h" #include "core/hle/ipc_helpers.h" #include "core/hle/kernel/event.h" #include "core/hle/service/nim/nim_u.h" +SERVICE_CONSTRUCT_IMPL(Service::NIM::NIM_U) +SERIALIZE_EXPORT_IMPL(Service::NIM::NIM_U) + namespace Service::NIM { NIM_U::NIM_U(Core::System& system) : ServiceFramework("nim:u", 2) { diff --git a/src/core/hle/service/nim/nim_u.h b/src/core/hle/service/nim/nim_u.h index 367ee6ea8..98fec69b2 100644 --- a/src/core/hle/service/nim/nim_u.h +++ b/src/core/hle/service/nim/nim_u.h @@ -41,6 +41,16 @@ private: void CheckSysUpdateAvailable(Kernel::HLERequestContext& ctx); std::shared_ptr nim_system_update_event; + + template + void serialize(Archive& ar, const unsigned int) { + ar& boost::serialization::base_object(*this); + ar& nim_system_update_event; + } + friend class boost::serialization::access; }; } // namespace Service::NIM + +SERVICE_CONSTRUCT(Service::NIM::NIM_U) +BOOST_CLASS_EXPORT_KEY(Service::NIM::NIM_U) diff --git a/src/core/hle/service/ps/ps_ps.cpp b/src/core/hle/service/ps/ps_ps.cpp index a48903348..1ba4d7f4c 100644 --- a/src/core/hle/service/ps/ps_ps.cpp +++ b/src/core/hle/service/ps/ps_ps.cpp @@ -4,6 +4,7 @@ #include #include +#include "common/archives.h" #include "common/logging/log.h" #include "core/core.h" #include "core/hle/ipc_helpers.h" @@ -11,6 +12,8 @@ #include "core/hw/aes/arithmetic128.h" #include "core/hw/aes/key.h" +SERIALIZE_EXPORT_IMPL(Service::PS::PS_PS) + namespace Service::PS { enum class AlgorithmType : u8 { diff --git a/src/core/hle/service/ps/ps_ps.h b/src/core/hle/service/ps/ps_ps.h index 6e8b3ad0a..39f6d62b2 100644 --- a/src/core/hle/service/ps/ps_ps.h +++ b/src/core/hle/service/ps/ps_ps.h @@ -231,3 +231,5 @@ private: void InstallInterfaces(Core::System& system); } // namespace Service::PS + +BOOST_CLASS_EXPORT_KEY(Service::PS::PS_PS) diff --git a/src/core/hle/service/pxi/dev.cpp b/src/core/hle/service/pxi/dev.cpp index dcea938a6..113551690 100644 --- a/src/core/hle/service/pxi/dev.cpp +++ b/src/core/hle/service/pxi/dev.cpp @@ -2,8 +2,11 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include "common/archives.h" #include "core/hle/service/pxi/dev.h" +SERIALIZE_EXPORT_IMPL(Service::PXI::DEV) + namespace Service::PXI { DEV::DEV() : ServiceFramework("pxi:dev", 1) { diff --git a/src/core/hle/service/pxi/dev.h b/src/core/hle/service/pxi/dev.h index 115dc2308..ed17435b6 100644 --- a/src/core/hle/service/pxi/dev.h +++ b/src/core/hle/service/pxi/dev.h @@ -16,3 +16,5 @@ public: }; } // namespace Service::PXI + +BOOST_CLASS_EXPORT_KEY(Service::PXI::DEV) diff --git a/src/core/hle/service/soc_u.cpp b/src/core/hle/service/soc_u.cpp index 5ebe55356..56b48cd3a 100644 --- a/src/core/hle/service/soc_u.cpp +++ b/src/core/hle/service/soc_u.cpp @@ -5,6 +5,7 @@ #include #include #include +#include "common/archives.h" #include "common/assert.h" #include "common/bit_field.h" #include "common/common_types.h" @@ -52,6 +53,8 @@ #define closesocket(x) close(x) #endif +SERIALIZE_EXPORT_IMPL(Service::SOC::SOC_U) + namespace Service::SOC { const s32 SOCKET_ERROR_VALUE = -1; diff --git a/src/core/hle/service/soc_u.h b/src/core/hle/service/soc_u.h index 273aac49c..595a984f2 100644 --- a/src/core/hle/service/soc_u.h +++ b/src/core/hle/service/soc_u.h @@ -5,6 +5,7 @@ #pragma once #include +#include #include "core/hle/service/service.h" namespace Core { @@ -17,6 +18,14 @@ namespace Service::SOC { struct SocketHolder { u32 socket_fd; ///< The socket descriptor bool blocking; ///< Whether the socket is blocking or not, it is only read on Windows. + +private: + template + void serialize(Archive& ar, const unsigned int) { + ar& socket_fd; + ar& blocking; + } + friend class boost::serialization::access; }; class SOC_U final : public ServiceFramework { @@ -55,8 +64,17 @@ private: /// Holds info about the currently open sockets std::unordered_map open_sockets; + + template + void serialize(Archive& ar, const unsigned int) { + ar& boost::serialization::base_object(*this); + ar& open_sockets; + } + friend class boost::serialization::access; }; void InstallInterfaces(Core::System& system); } // namespace Service::SOC + +BOOST_CLASS_EXPORT_KEY(Service::SOC::SOC_U) diff --git a/src/core/hle/service/ssl_c.cpp b/src/core/hle/service/ssl_c.cpp index b862c41f1..8e74c1b7c 100644 --- a/src/core/hle/service/ssl_c.cpp +++ b/src/core/hle/service/ssl_c.cpp @@ -2,12 +2,14 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include "common/archives.h" #include "common/common_types.h" #include "core/core.h" #include "core/hle/ipc.h" #include "core/hle/ipc_helpers.h" #include "core/hle/service/ssl_c.h" +SERIALIZE_EXPORT_IMPL(Service::SSL::SSL_C) namespace Service::SSL { void SSL_C::Initialize(Kernel::HLERequestContext& ctx) { diff --git a/src/core/hle/service/ssl_c.h b/src/core/hle/service/ssl_c.h index 807f7c725..3984f7ecc 100644 --- a/src/core/hle/service/ssl_c.h +++ b/src/core/hle/service/ssl_c.h @@ -28,3 +28,5 @@ private: void InstallInterfaces(Core::System& system); } // namespace Service::SSL + +BOOST_CLASS_EXPORT_KEY(Service::SSL::SSL_C)