diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/CMakeLists.txt | 15 | ||||
| -rw-r--r-- | src/core/hle/service/psc/ovln/ovln_types.h | 21 | ||||
| -rw-r--r-- | src/core/hle/service/psc/ovln/receiver.cpp | 24 | ||||
| -rw-r--r-- | src/core/hle/service/psc/ovln/receiver.h | 16 | ||||
| -rw-r--r-- | src/core/hle/service/psc/ovln/receiver_service.cpp | 28 | ||||
| -rw-r--r-- | src/core/hle/service/psc/ovln/receiver_service.h | 22 | ||||
| -rw-r--r-- | src/core/hle/service/psc/ovln/sender.cpp | 32 | ||||
| -rw-r--r-- | src/core/hle/service/psc/ovln/sender.h | 21 | ||||
| -rw-r--r-- | src/core/hle/service/psc/ovln/sender_service.cpp | 30 | ||||
| -rw-r--r-- | src/core/hle/service/psc/ovln/sender_service.h | 23 | ||||
| -rw-r--r-- | src/core/hle/service/psc/pm_control.cpp | 28 | ||||
| -rw-r--r-- | src/core/hle/service/psc/pm_control.h | 16 | ||||
| -rw-r--r-- | src/core/hle/service/psc/pm_module.cpp | 24 | ||||
| -rw-r--r-- | src/core/hle/service/psc/pm_module.h | 16 | ||||
| -rw-r--r-- | src/core/hle/service/psc/pm_service.cpp | 28 | ||||
| -rw-r--r-- | src/core/hle/service/psc/pm_service.h | 22 | ||||
| -rw-r--r-- | src/core/hle/service/psc/psc.cpp | 71 | ||||
| -rw-r--r-- | src/core/hle/service/psc/psc.h | 4 |
18 files changed, 372 insertions, 69 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index cfce352c9..a7b760fa2 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt | |||
| @@ -895,6 +895,21 @@ add_library(core STATIC | |||
| 895 | hle/service/pm/pm.h | 895 | hle/service/pm/pm.h |
| 896 | hle/service/prepo/prepo.cpp | 896 | hle/service/prepo/prepo.cpp |
| 897 | hle/service/prepo/prepo.h | 897 | hle/service/prepo/prepo.h |
| 898 | hle/service/psc/ovln/ovln_types.h | ||
| 899 | hle/service/psc/ovln/receiver_service.cpp | ||
| 900 | hle/service/psc/ovln/receiver_service.h | ||
| 901 | hle/service/psc/ovln/receiver.cpp | ||
| 902 | hle/service/psc/ovln/receiver.h | ||
| 903 | hle/service/psc/ovln/sender_service.cpp | ||
| 904 | hle/service/psc/ovln/sender_service.h | ||
| 905 | hle/service/psc/ovln/sender.cpp | ||
| 906 | hle/service/psc/ovln/sender.h | ||
| 907 | hle/service/psc/pm_control.cpp | ||
| 908 | hle/service/psc/pm_control.h | ||
| 909 | hle/service/psc/pm_module.cpp | ||
| 910 | hle/service/psc/pm_module.h | ||
| 911 | hle/service/psc/pm_service.cpp | ||
| 912 | hle/service/psc/pm_service.h | ||
| 898 | hle/service/psc/psc.cpp | 913 | hle/service/psc/psc.cpp |
| 899 | hle/service/psc/psc.h | 914 | hle/service/psc/psc.h |
| 900 | hle/service/psc/time/alarms.cpp | 915 | hle/service/psc/time/alarms.cpp |
diff --git a/src/core/hle/service/psc/ovln/ovln_types.h b/src/core/hle/service/psc/ovln/ovln_types.h new file mode 100644 index 000000000..343b05dcc --- /dev/null +++ b/src/core/hle/service/psc/ovln/ovln_types.h | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "common/bit_field.h" | ||
| 7 | #include "common/common_types.h" | ||
| 8 | |||
| 9 | namespace Service::PSC { | ||
| 10 | |||
| 11 | using OverlayNotification = std::array<u64, 0x10>; | ||
| 12 | static_assert(sizeof(OverlayNotification) == 0x80, "OverlayNotification has incorrect size"); | ||
| 13 | |||
| 14 | union MessageFlags { | ||
| 15 | u64 raw; | ||
| 16 | BitField<0, 8, u64> message_type; | ||
| 17 | BitField<8, 8, u64> queue_type; | ||
| 18 | }; | ||
| 19 | static_assert(sizeof(MessageFlags) == 0x8, "MessageFlags has incorrect size"); | ||
| 20 | |||
| 21 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/ovln/receiver.cpp b/src/core/hle/service/psc/ovln/receiver.cpp new file mode 100644 index 000000000..85f62816d --- /dev/null +++ b/src/core/hle/service/psc/ovln/receiver.cpp | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "core/hle/service/psc/ovln/receiver.h" | ||
| 5 | |||
| 6 | namespace Service::PSC { | ||
| 7 | |||
| 8 | IReceiver::IReceiver(Core::System& system_) : ServiceFramework{system_, "IReceiver"} { | ||
| 9 | // clang-format off | ||
| 10 | static const FunctionInfo functions[] = { | ||
| 11 | {0, nullptr, "AddSource"}, | ||
| 12 | {1, nullptr, "RemoveSource"}, | ||
| 13 | {2, nullptr, "GetReceiveEventHandle"}, | ||
| 14 | {3, nullptr, "Receive"}, | ||
| 15 | {4, nullptr, "ReceiveWithTick"}, | ||
| 16 | }; | ||
| 17 | // clang-format on | ||
| 18 | |||
| 19 | RegisterHandlers(functions); | ||
| 20 | } | ||
| 21 | |||
| 22 | IReceiver::~IReceiver() = default; | ||
| 23 | |||
| 24 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/ovln/receiver.h b/src/core/hle/service/psc/ovln/receiver.h new file mode 100644 index 000000000..c47a4ff7e --- /dev/null +++ b/src/core/hle/service/psc/ovln/receiver.h | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "core/hle/service/service.h" | ||
| 7 | |||
| 8 | namespace Service::PSC { | ||
| 9 | |||
| 10 | class IReceiver final : public ServiceFramework<IReceiver> { | ||
| 11 | public: | ||
| 12 | explicit IReceiver(Core::System& system_); | ||
| 13 | ~IReceiver() override; | ||
| 14 | }; | ||
| 15 | |||
| 16 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/ovln/receiver_service.cpp b/src/core/hle/service/psc/ovln/receiver_service.cpp new file mode 100644 index 000000000..bb988e905 --- /dev/null +++ b/src/core/hle/service/psc/ovln/receiver_service.cpp | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "core/hle/service/cmif_serialization.h" | ||
| 5 | #include "core/hle/service/psc/ovln/receiver.h" | ||
| 6 | #include "core/hle/service/psc/ovln/receiver_service.h" | ||
| 7 | |||
| 8 | namespace Service::PSC { | ||
| 9 | |||
| 10 | IReceiverService::IReceiverService(Core::System& system_) : ServiceFramework{system_, "ovln:rcv"} { | ||
| 11 | // clang-format off | ||
| 12 | static const FunctionInfo functions[] = { | ||
| 13 | {0, D<&IReceiverService::OpenReceiver>, "OpenReceiver"}, | ||
| 14 | }; | ||
| 15 | // clang-format on | ||
| 16 | |||
| 17 | RegisterHandlers(functions); | ||
| 18 | } | ||
| 19 | |||
| 20 | IReceiverService::~IReceiverService() = default; | ||
| 21 | |||
| 22 | Result IReceiverService::OpenReceiver(Out<SharedPointer<IReceiver>> out_receiver) { | ||
| 23 | LOG_DEBUG(Service_PSC, "called"); | ||
| 24 | *out_receiver = std::make_shared<IReceiver>(system); | ||
| 25 | R_SUCCEED(); | ||
| 26 | } | ||
| 27 | |||
| 28 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/ovln/receiver_service.h b/src/core/hle/service/psc/ovln/receiver_service.h new file mode 100644 index 000000000..b3b31ba4a --- /dev/null +++ b/src/core/hle/service/psc/ovln/receiver_service.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "core/hle/service/cmif_types.h" | ||
| 7 | #include "core/hle/service/service.h" | ||
| 8 | |||
| 9 | namespace Service::PSC { | ||
| 10 | |||
| 11 | class IReceiver; | ||
| 12 | |||
| 13 | class IReceiverService final : public ServiceFramework<IReceiverService> { | ||
| 14 | public: | ||
| 15 | explicit IReceiverService(Core::System& system_); | ||
| 16 | ~IReceiverService() override; | ||
| 17 | |||
| 18 | private: | ||
| 19 | Result OpenReceiver(Out<SharedPointer<IReceiver>> out_receiver); | ||
| 20 | }; | ||
| 21 | |||
| 22 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/ovln/sender.cpp b/src/core/hle/service/psc/ovln/sender.cpp new file mode 100644 index 000000000..3227a56f2 --- /dev/null +++ b/src/core/hle/service/psc/ovln/sender.cpp | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "core/hle/service/cmif_serialization.h" | ||
| 5 | #include "core/hle/service/psc/ovln/sender.h" | ||
| 6 | |||
| 7 | namespace Service::PSC { | ||
| 8 | |||
| 9 | ISender::ISender(Core::System& system_) : ServiceFramework{system_, "ISender"} { | ||
| 10 | // clang-format off | ||
| 11 | static const FunctionInfo functions[] = { | ||
| 12 | {0, D<&ISender::Send>, "Send"}, | ||
| 13 | {1, nullptr, "GetUnreceivedMessageCount"}, | ||
| 14 | }; | ||
| 15 | // clang-format on | ||
| 16 | |||
| 17 | RegisterHandlers(functions); | ||
| 18 | } | ||
| 19 | |||
| 20 | ISender::~ISender() = default; | ||
| 21 | |||
| 22 | Result ISender::Send(const OverlayNotification& notification, MessageFlags flags) { | ||
| 23 | std::string data; | ||
| 24 | for (const auto m : notification) { | ||
| 25 | data += fmt::format("{:016X} ", m); | ||
| 26 | } | ||
| 27 | |||
| 28 | LOG_WARNING(Service_PSC, "(STUBBED) called, flags={} notification={}", flags.raw, data); | ||
| 29 | R_SUCCEED(); | ||
| 30 | } | ||
| 31 | |||
| 32 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/ovln/sender.h b/src/core/hle/service/psc/ovln/sender.h new file mode 100644 index 000000000..c1575428e --- /dev/null +++ b/src/core/hle/service/psc/ovln/sender.h | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "core/hle/service/cmif_types.h" | ||
| 7 | #include "core/hle/service/psc/ovln/ovln_types.h" | ||
| 8 | #include "core/hle/service/service.h" | ||
| 9 | |||
| 10 | namespace Service::PSC { | ||
| 11 | |||
| 12 | class ISender final : public ServiceFramework<ISender> { | ||
| 13 | public: | ||
| 14 | explicit ISender(Core::System& system_); | ||
| 15 | ~ISender() override; | ||
| 16 | |||
| 17 | private: | ||
| 18 | Result Send(const OverlayNotification& notification, MessageFlags flags); | ||
| 19 | }; | ||
| 20 | |||
| 21 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/ovln/sender_service.cpp b/src/core/hle/service/psc/ovln/sender_service.cpp new file mode 100644 index 000000000..18d2c83a3 --- /dev/null +++ b/src/core/hle/service/psc/ovln/sender_service.cpp | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "core/hle/service/cmif_serialization.h" | ||
| 5 | #include "core/hle/service/psc/ovln/sender.h" | ||
| 6 | #include "core/hle/service/psc/ovln/sender_service.h" | ||
| 7 | |||
| 8 | namespace Service::PSC { | ||
| 9 | |||
| 10 | ISenderService::ISenderService(Core::System& system_) : ServiceFramework{system_, "ovln:snd"} { | ||
| 11 | // clang-format off | ||
| 12 | static const FunctionInfo functions[] = { | ||
| 13 | {0, D<&ISenderService::OpenSender>, "OpenSender"}, | ||
| 14 | }; | ||
| 15 | // clang-format on | ||
| 16 | |||
| 17 | RegisterHandlers(functions); | ||
| 18 | } | ||
| 19 | |||
| 20 | ISenderService::~ISenderService() = default; | ||
| 21 | |||
| 22 | Result ISenderService::OpenSender(Out<SharedPointer<ISender>> out_sender, u32 sender_id, | ||
| 23 | std::array<u64, 2> data) { | ||
| 24 | LOG_WARNING(Service_PSC, "(STUBBED) called, sender_id={}, data={:016X} {:016X}", sender_id, | ||
| 25 | data[0], data[1]); | ||
| 26 | *out_sender = std::make_shared<ISender>(system); | ||
| 27 | R_SUCCEED(); | ||
| 28 | } | ||
| 29 | |||
| 30 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/ovln/sender_service.h b/src/core/hle/service/psc/ovln/sender_service.h new file mode 100644 index 000000000..10027701f --- /dev/null +++ b/src/core/hle/service/psc/ovln/sender_service.h | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "core/hle/service/cmif_types.h" | ||
| 7 | #include "core/hle/service/service.h" | ||
| 8 | |||
| 9 | namespace Service::PSC { | ||
| 10 | |||
| 11 | class ISender; | ||
| 12 | |||
| 13 | class ISenderService final : public ServiceFramework<ISenderService> { | ||
| 14 | public: | ||
| 15 | explicit ISenderService(Core::System& system_); | ||
| 16 | ~ISenderService() override; | ||
| 17 | |||
| 18 | private: | ||
| 19 | Result OpenSender(Out<SharedPointer<ISender>> out_sender, u32 sender_id, | ||
| 20 | std::array<u64, 2> data); | ||
| 21 | }; | ||
| 22 | |||
| 23 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/pm_control.cpp b/src/core/hle/service/psc/pm_control.cpp new file mode 100644 index 000000000..7dedb7662 --- /dev/null +++ b/src/core/hle/service/psc/pm_control.cpp | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "core/hle/service/psc/pm_control.h" | ||
| 5 | |||
| 6 | namespace Service::PSC { | ||
| 7 | |||
| 8 | IPmControl::IPmControl(Core::System& system_) : ServiceFramework{system_, "psc:c"} { | ||
| 9 | // clang-format off | ||
| 10 | static const FunctionInfo functions[] = { | ||
| 11 | {0, nullptr, "Initialize"}, | ||
| 12 | {1, nullptr, "DispatchRequest"}, | ||
| 13 | {2, nullptr, "GetResult"}, | ||
| 14 | {3, nullptr, "GetState"}, | ||
| 15 | {4, nullptr, "Cancel"}, | ||
| 16 | {5, nullptr, "PrintModuleInformation"}, | ||
| 17 | {6, nullptr, "GetModuleInformation"}, | ||
| 18 | {10, nullptr, "AcquireStateLock"}, | ||
| 19 | {11, nullptr, "HasStateLock"}, | ||
| 20 | }; | ||
| 21 | // clang-format on | ||
| 22 | |||
| 23 | RegisterHandlers(functions); | ||
| 24 | } | ||
| 25 | |||
| 26 | IPmControl::~IPmControl() = default; | ||
| 27 | |||
| 28 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/pm_control.h b/src/core/hle/service/psc/pm_control.h new file mode 100644 index 000000000..e0ae2f39c --- /dev/null +++ b/src/core/hle/service/psc/pm_control.h | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "core/hle/service/service.h" | ||
| 7 | |||
| 8 | namespace Service::PSC { | ||
| 9 | |||
| 10 | class IPmControl final : public ServiceFramework<IPmControl> { | ||
| 11 | public: | ||
| 12 | explicit IPmControl(Core::System& system_); | ||
| 13 | ~IPmControl() override; | ||
| 14 | }; | ||
| 15 | |||
| 16 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/pm_module.cpp b/src/core/hle/service/psc/pm_module.cpp new file mode 100644 index 000000000..74dc7ed4e --- /dev/null +++ b/src/core/hle/service/psc/pm_module.cpp | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "core/hle/service/psc/pm_module.h" | ||
| 5 | |||
| 6 | namespace Service::PSC { | ||
| 7 | |||
| 8 | IPmModule::IPmModule(Core::System& system_) : ServiceFramework{system_, "IPmModule"} { | ||
| 9 | // clang-format off | ||
| 10 | static const FunctionInfo functions[] = { | ||
| 11 | {0, nullptr, "Initialize"}, | ||
| 12 | {1, nullptr, "GetRequest"}, | ||
| 13 | {2, nullptr, "Acknowledge"}, | ||
| 14 | {3, nullptr, "Finalize"}, | ||
| 15 | {4, nullptr, "AcknowledgeEx"}, | ||
| 16 | }; | ||
| 17 | // clang-format on | ||
| 18 | |||
| 19 | RegisterHandlers(functions); | ||
| 20 | } | ||
| 21 | |||
| 22 | IPmModule::~IPmModule() = default; | ||
| 23 | |||
| 24 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/pm_module.h b/src/core/hle/service/psc/pm_module.h new file mode 100644 index 000000000..b3a2d2584 --- /dev/null +++ b/src/core/hle/service/psc/pm_module.h | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "core/hle/service/service.h" | ||
| 7 | |||
| 8 | namespace Service::PSC { | ||
| 9 | |||
| 10 | class IPmModule final : public ServiceFramework<IPmModule> { | ||
| 11 | public: | ||
| 12 | explicit IPmModule(Core::System& system_); | ||
| 13 | ~IPmModule() override; | ||
| 14 | }; | ||
| 15 | |||
| 16 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/pm_service.cpp b/src/core/hle/service/psc/pm_service.cpp new file mode 100644 index 000000000..c4e0ad228 --- /dev/null +++ b/src/core/hle/service/psc/pm_service.cpp | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "core/hle/service/cmif_serialization.h" | ||
| 5 | #include "core/hle/service/psc/pm_module.h" | ||
| 6 | #include "core/hle/service/psc/pm_service.h" | ||
| 7 | |||
| 8 | namespace Service::PSC { | ||
| 9 | |||
| 10 | IPmService::IPmService(Core::System& system_) : ServiceFramework{system_, "psc:m"} { | ||
| 11 | // clang-format off | ||
| 12 | static const FunctionInfo functions[] = { | ||
| 13 | {0, D<&IPmService::GetPmModule>, "GetPmModule"}, | ||
| 14 | }; | ||
| 15 | // clang-format on | ||
| 16 | |||
| 17 | RegisterHandlers(functions); | ||
| 18 | } | ||
| 19 | |||
| 20 | IPmService::~IPmService() = default; | ||
| 21 | |||
| 22 | Result IPmService::GetPmModule(Out<SharedPointer<IPmModule>> out_module) { | ||
| 23 | LOG_DEBUG(Service_PSC, "called"); | ||
| 24 | *out_module = std::make_shared<IPmModule>(system); | ||
| 25 | R_SUCCEED(); | ||
| 26 | } | ||
| 27 | |||
| 28 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/pm_service.h b/src/core/hle/service/psc/pm_service.h new file mode 100644 index 000000000..08e14c6f8 --- /dev/null +++ b/src/core/hle/service/psc/pm_service.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "core/hle/service/cmif_types.h" | ||
| 7 | #include "core/hle/service/service.h" | ||
| 8 | |||
| 9 | namespace Service::PSC { | ||
| 10 | |||
| 11 | class IPmModule; | ||
| 12 | |||
| 13 | class IPmService final : public ServiceFramework<IPmService> { | ||
| 14 | public: | ||
| 15 | explicit IPmService(Core::System& system_); | ||
| 16 | ~IPmService() override; | ||
| 17 | |||
| 18 | private: | ||
| 19 | Result GetPmModule(Out<SharedPointer<IPmModule>> out_module); | ||
| 20 | }; | ||
| 21 | |||
| 22 | } // namespace Service::PSC | ||
diff --git a/src/core/hle/service/psc/psc.cpp b/src/core/hle/service/psc/psc.cpp index 44310756b..e1762d694 100644 --- a/src/core/hle/service/psc/psc.cpp +++ b/src/core/hle/service/psc/psc.cpp | |||
| @@ -1,11 +1,10 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project | 1 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | 2 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | 3 | ||
| 4 | #include <memory> | 4 | #include "core/hle/service/psc/ovln/receiver_service.h" |
| 5 | 5 | #include "core/hle/service/psc/ovln/sender_service.h" | |
| 6 | #include "common/logging/log.h" | 6 | #include "core/hle/service/psc/pm_control.h" |
| 7 | #include "core/core.h" | 7 | #include "core/hle/service/psc/pm_service.h" |
| 8 | #include "core/hle/service/ipc_helpers.h" | ||
| 9 | #include "core/hle/service/psc/psc.h" | 8 | #include "core/hle/service/psc/psc.h" |
| 10 | #include "core/hle/service/psc/time/manager.h" | 9 | #include "core/hle/service/psc/time/manager.h" |
| 11 | #include "core/hle/service/psc/time/power_state_service.h" | 10 | #include "core/hle/service/psc/time/power_state_service.h" |
| @@ -15,71 +14,13 @@ | |||
| 15 | 14 | ||
| 16 | namespace Service::PSC { | 15 | namespace Service::PSC { |
| 17 | 16 | ||
| 18 | class IPmControl final : public ServiceFramework<IPmControl> { | ||
| 19 | public: | ||
| 20 | explicit IPmControl(Core::System& system_) : ServiceFramework{system_, "psc:c"} { | ||
| 21 | // clang-format off | ||
| 22 | static const FunctionInfo functions[] = { | ||
| 23 | {0, nullptr, "Initialize"}, | ||
| 24 | {1, nullptr, "DispatchRequest"}, | ||
| 25 | {2, nullptr, "GetResult"}, | ||
| 26 | {3, nullptr, "GetState"}, | ||
| 27 | {4, nullptr, "Cancel"}, | ||
| 28 | {5, nullptr, "PrintModuleInformation"}, | ||
| 29 | {6, nullptr, "GetModuleInformation"}, | ||
| 30 | {10, nullptr, "AcquireStateLock"}, | ||
| 31 | {11, nullptr, "HasStateLock"}, | ||
| 32 | }; | ||
| 33 | // clang-format on | ||
| 34 | |||
| 35 | RegisterHandlers(functions); | ||
| 36 | } | ||
| 37 | }; | ||
| 38 | |||
| 39 | class IPmModule final : public ServiceFramework<IPmModule> { | ||
| 40 | public: | ||
| 41 | explicit IPmModule(Core::System& system_) : ServiceFramework{system_, "IPmModule"} { | ||
| 42 | // clang-format off | ||
| 43 | static const FunctionInfo functions[] = { | ||
| 44 | {0, nullptr, "Initialize"}, | ||
| 45 | {1, nullptr, "GetRequest"}, | ||
| 46 | {2, nullptr, "Acknowledge"}, | ||
| 47 | {3, nullptr, "Finalize"}, | ||
| 48 | {4, nullptr, "AcknowledgeEx"}, | ||
| 49 | }; | ||
| 50 | // clang-format on | ||
| 51 | |||
| 52 | RegisterHandlers(functions); | ||
| 53 | } | ||
| 54 | }; | ||
| 55 | |||
| 56 | class IPmService final : public ServiceFramework<IPmService> { | ||
| 57 | public: | ||
| 58 | explicit IPmService(Core::System& system_) : ServiceFramework{system_, "psc:m"} { | ||
| 59 | // clang-format off | ||
| 60 | static const FunctionInfo functions[] = { | ||
| 61 | {0, &IPmService::GetPmModule, "GetPmModule"}, | ||
| 62 | }; | ||
| 63 | // clang-format on | ||
| 64 | |||
| 65 | RegisterHandlers(functions); | ||
| 66 | } | ||
| 67 | |||
| 68 | private: | ||
| 69 | void GetPmModule(HLERequestContext& ctx) { | ||
| 70 | LOG_DEBUG(Service_PSC, "called"); | ||
| 71 | |||
| 72 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||
| 73 | rb.Push(ResultSuccess); | ||
| 74 | rb.PushIpcInterface<IPmModule>(system); | ||
| 75 | } | ||
| 76 | }; | ||
| 77 | |||
| 78 | void LoopProcess(Core::System& system) { | 17 | void LoopProcess(Core::System& system) { |
| 79 | auto server_manager = std::make_unique<ServerManager>(system); | 18 | auto server_manager = std::make_unique<ServerManager>(system); |
| 80 | 19 | ||
| 81 | server_manager->RegisterNamedService("psc:c", std::make_shared<IPmControl>(system)); | 20 | server_manager->RegisterNamedService("psc:c", std::make_shared<IPmControl>(system)); |
| 82 | server_manager->RegisterNamedService("psc:m", std::make_shared<IPmService>(system)); | 21 | server_manager->RegisterNamedService("psc:m", std::make_shared<IPmService>(system)); |
| 22 | server_manager->RegisterNamedService("ovln:rcv", std::make_shared<IReceiverService>(system)); | ||
| 23 | server_manager->RegisterNamedService("ovln:snd", std::make_shared<ISenderService>(system)); | ||
| 83 | 24 | ||
| 84 | auto time = std::make_shared<Time::TimeManager>(system); | 25 | auto time = std::make_shared<Time::TimeManager>(system); |
| 85 | 26 | ||
diff --git a/src/core/hle/service/psc/psc.h b/src/core/hle/service/psc/psc.h index 459137f42..c83d07ca8 100644 --- a/src/core/hle/service/psc/psc.h +++ b/src/core/hle/service/psc/psc.h | |||
| @@ -7,10 +7,6 @@ namespace Core { | |||
| 7 | class System; | 7 | class System; |
| 8 | } | 8 | } |
| 9 | 9 | ||
| 10 | namespace Service::SM { | ||
| 11 | class ServiceManager; | ||
| 12 | } | ||
| 13 | |||
| 14 | namespace Service::PSC { | 10 | namespace Service::PSC { |
| 15 | 11 | ||
| 16 | void LoopProcess(Core::System& system); | 12 | void LoopProcess(Core::System& system); |