diff options
| author | 2022-10-14 17:30:38 -0400 | |
|---|---|---|
| committer | 2022-10-14 17:30:38 -0400 | |
| commit | ae6dd1143c0549fe5bcbd7326c69cbcb6b5a4433 (patch) | |
| tree | 4b04503746cd43789b1a812756974e38868be4cc | |
| parent | Merge pull request #9055 from liamwhite/hbl (diff) | |
| parent | kernel: remove KWritableEvent (diff) | |
| download | yuzu-ae6dd1143c0549fe5bcbd7326c69cbcb6b5a4433.tar.gz yuzu-ae6dd1143c0549fe5bcbd7326c69cbcb6b5a4433.tar.xz yuzu-ae6dd1143c0549fe5bcbd7326c69cbcb6b5a4433.zip | |
Merge pull request #9061 from liamwhite/writable-event
kernel: remove KWritableEvent
Diffstat (limited to '')
37 files changed, 151 insertions, 232 deletions
diff --git a/src/audio_core/in/audio_in_system.cpp b/src/audio_core/in/audio_in_system.cpp index e7f918a47..6b7e6715c 100644 --- a/src/audio_core/in/audio_in_system.cpp +++ b/src/audio_core/in/audio_in_system.cpp | |||
| @@ -23,7 +23,7 @@ System::~System() { | |||
| 23 | void System::Finalize() { | 23 | void System::Finalize() { |
| 24 | Stop(); | 24 | Stop(); |
| 25 | session->Finalize(); | 25 | session->Finalize(); |
| 26 | buffer_event->GetWritableEvent().Signal(); | 26 | buffer_event->Signal(); |
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | void System::StartSession() { | 29 | void System::StartSession() { |
| @@ -142,7 +142,7 @@ void System::ReleaseBuffers() { | |||
| 142 | 142 | ||
| 143 | if (signal) { | 143 | if (signal) { |
| 144 | // Signal if any buffer was released, or if none are registered, we need more. | 144 | // Signal if any buffer was released, or if none are registered, we need more. |
| 145 | buffer_event->GetWritableEvent().Signal(); | 145 | buffer_event->Signal(); |
| 146 | } | 146 | } |
| 147 | } | 147 | } |
| 148 | 148 | ||
| @@ -159,7 +159,7 @@ bool System::FlushAudioInBuffers() { | |||
| 159 | buffers.FlushBuffers(buffers_released); | 159 | buffers.FlushBuffers(buffers_released); |
| 160 | 160 | ||
| 161 | if (buffers_released > 0) { | 161 | if (buffers_released > 0) { |
| 162 | buffer_event->GetWritableEvent().Signal(); | 162 | buffer_event->Signal(); |
| 163 | } | 163 | } |
| 164 | return true; | 164 | return true; |
| 165 | } | 165 | } |
diff --git a/src/audio_core/out/audio_out_system.cpp b/src/audio_core/out/audio_out_system.cpp index 8b907590a..48a801923 100644 --- a/src/audio_core/out/audio_out_system.cpp +++ b/src/audio_core/out/audio_out_system.cpp | |||
| @@ -24,7 +24,7 @@ System::~System() { | |||
| 24 | void System::Finalize() { | 24 | void System::Finalize() { |
| 25 | Stop(); | 25 | Stop(); |
| 26 | session->Finalize(); | 26 | session->Finalize(); |
| 27 | buffer_event->GetWritableEvent().Signal(); | 27 | buffer_event->Signal(); |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | std::string_view System::GetDefaultOutputDeviceName() const { | 30 | std::string_view System::GetDefaultOutputDeviceName() const { |
| @@ -141,7 +141,7 @@ void System::ReleaseBuffers() { | |||
| 141 | bool signal{buffers.ReleaseBuffers(system.CoreTiming(), *session)}; | 141 | bool signal{buffers.ReleaseBuffers(system.CoreTiming(), *session)}; |
| 142 | if (signal) { | 142 | if (signal) { |
| 143 | // Signal if any buffer was released, or if none are registered, we need more. | 143 | // Signal if any buffer was released, or if none are registered, we need more. |
| 144 | buffer_event->GetWritableEvent().Signal(); | 144 | buffer_event->Signal(); |
| 145 | } | 145 | } |
| 146 | } | 146 | } |
| 147 | 147 | ||
| @@ -158,7 +158,7 @@ bool System::FlushAudioOutBuffers() { | |||
| 158 | buffers.FlushBuffers(buffers_released); | 158 | buffers.FlushBuffers(buffers_released); |
| 159 | 159 | ||
| 160 | if (buffers_released > 0) { | 160 | if (buffers_released > 0) { |
| 161 | buffer_event->GetWritableEvent().Signal(); | 161 | buffer_event->Signal(); |
| 162 | } | 162 | } |
| 163 | return true; | 163 | return true; |
| 164 | } | 164 | } |
diff --git a/src/audio_core/renderer/system.cpp b/src/audio_core/renderer/system.cpp index 7a217969e..bde794cd1 100644 --- a/src/audio_core/renderer/system.cpp +++ b/src/audio_core/renderer/system.cpp | |||
| @@ -534,7 +534,7 @@ Result System::Update(std::span<const u8> input, std::span<u8> performance, std: | |||
| 534 | return result; | 534 | return result; |
| 535 | } | 535 | } |
| 536 | 536 | ||
| 537 | adsp_rendered_event->GetWritableEvent().Clear(); | 537 | adsp_rendered_event->Clear(); |
| 538 | num_times_updated++; | 538 | num_times_updated++; |
| 539 | 539 | ||
| 540 | const auto end_time{core.CoreTiming().GetClockTicks()}; | 540 | const auto end_time{core.CoreTiming().GetClockTicks()}; |
| @@ -625,7 +625,7 @@ void System::SendCommandToDsp() { | |||
| 625 | reset_command_buffers = false; | 625 | reset_command_buffers = false; |
| 626 | command_buffer_size = command_size; | 626 | command_buffer_size = command_size; |
| 627 | if (remaining_command_count == 0) { | 627 | if (remaining_command_count == 0) { |
| 628 | adsp_rendered_event->GetWritableEvent().Signal(); | 628 | adsp_rendered_event->Signal(); |
| 629 | } | 629 | } |
| 630 | } else { | 630 | } else { |
| 631 | adsp.ClearRemainCount(session_id); | 631 | adsp.ClearRemainCount(session_id); |
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 95302c419..abeb5859b 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt | |||
| @@ -261,8 +261,6 @@ add_library(core STATIC | |||
| 261 | hle/kernel/k_worker_task.h | 261 | hle/kernel/k_worker_task.h |
| 262 | hle/kernel/k_worker_task_manager.cpp | 262 | hle/kernel/k_worker_task_manager.cpp |
| 263 | hle/kernel/k_worker_task_manager.h | 263 | hle/kernel/k_worker_task_manager.h |
| 264 | hle/kernel/k_writable_event.cpp | ||
| 265 | hle/kernel/k_writable_event.h | ||
| 266 | hle/kernel/kernel.cpp | 264 | hle/kernel/kernel.cpp |
| 267 | hle/kernel/kernel.h | 265 | hle/kernel/kernel.h |
| 268 | hle/kernel/memory_types.h | 266 | hle/kernel/memory_types.h |
diff --git a/src/core/hle/kernel/hle_ipc.h b/src/core/hle/kernel/hle_ipc.h index 99265ce90..e258e2cdf 100644 --- a/src/core/hle/kernel/hle_ipc.h +++ b/src/core/hle/kernel/hle_ipc.h | |||
| @@ -43,13 +43,13 @@ class Domain; | |||
| 43 | class HLERequestContext; | 43 | class HLERequestContext; |
| 44 | class KAutoObject; | 44 | class KAutoObject; |
| 45 | class KernelCore; | 45 | class KernelCore; |
| 46 | class KEvent; | ||
| 46 | class KHandleTable; | 47 | class KHandleTable; |
| 47 | class KProcess; | 48 | class KProcess; |
| 48 | class KServerSession; | 49 | class KServerSession; |
| 49 | class KThread; | 50 | class KThread; |
| 50 | class KReadableEvent; | 51 | class KReadableEvent; |
| 51 | class KSession; | 52 | class KSession; |
| 52 | class KWritableEvent; | ||
| 53 | class ServiceThread; | 53 | class ServiceThread; |
| 54 | 54 | ||
| 55 | enum class ThreadWakeupReason; | 55 | enum class ThreadWakeupReason; |
diff --git a/src/core/hle/kernel/k_class_token.cpp b/src/core/hle/kernel/k_class_token.cpp index cc2a0f7ca..10265c23c 100644 --- a/src/core/hle/kernel/k_class_token.cpp +++ b/src/core/hle/kernel/k_class_token.cpp | |||
| @@ -18,7 +18,6 @@ | |||
| 18 | #include "core/hle/kernel/k_synchronization_object.h" | 18 | #include "core/hle/kernel/k_synchronization_object.h" |
| 19 | #include "core/hle/kernel/k_thread.h" | 19 | #include "core/hle/kernel/k_thread.h" |
| 20 | #include "core/hle/kernel/k_transfer_memory.h" | 20 | #include "core/hle/kernel/k_transfer_memory.h" |
| 21 | #include "core/hle/kernel/k_writable_event.h" | ||
| 22 | 21 | ||
| 23 | namespace Kernel { | 22 | namespace Kernel { |
| 24 | 23 | ||
| @@ -42,13 +41,12 @@ static_assert(ClassToken<KPort> == 0b10000101'00000000); | |||
| 42 | static_assert(ClassToken<KSession> == 0b00011001'00000000); | 41 | static_assert(ClassToken<KSession> == 0b00011001'00000000); |
| 43 | static_assert(ClassToken<KSharedMemory> == 0b00101001'00000000); | 42 | static_assert(ClassToken<KSharedMemory> == 0b00101001'00000000); |
| 44 | static_assert(ClassToken<KEvent> == 0b01001001'00000000); | 43 | static_assert(ClassToken<KEvent> == 0b01001001'00000000); |
| 45 | static_assert(ClassToken<KWritableEvent> == 0b10001001'00000000); | ||
| 46 | // static_assert(ClassToken<KLightClientSession> == 0b00110001'00000000); | 44 | // static_assert(ClassToken<KLightClientSession> == 0b00110001'00000000); |
| 47 | // static_assert(ClassToken<KLightServerSession> == 0b01010001'00000000); | 45 | // static_assert(ClassToken<KLightServerSession> == 0b01010001'00000000); |
| 48 | static_assert(ClassToken<KTransferMemory> == 0b10010001'00000000); | 46 | static_assert(ClassToken<KTransferMemory> == 0b01010001'00000000); |
| 49 | // static_assert(ClassToken<KDeviceAddressSpace> == 0b01100001'00000000); | 47 | // static_assert(ClassToken<KDeviceAddressSpace> == 0b01100001'00000000); |
| 50 | // static_assert(ClassToken<KSessionRequest> == 0b10100001'00000000); | 48 | // static_assert(ClassToken<KSessionRequest> == 0b10100001'00000000); |
| 51 | static_assert(ClassToken<KCodeMemory> == 0b11000001'00000000); | 49 | static_assert(ClassToken<KCodeMemory> == 0b10100001'00000000); |
| 52 | 50 | ||
| 53 | // Ensure that the token hierarchy is correct. | 51 | // Ensure that the token hierarchy is correct. |
| 54 | 52 | ||
| @@ -73,13 +71,12 @@ static_assert(ClassToken<KPort> == ((0b10000101 << 8) | ClassToken<KAutoObject>) | |||
| 73 | static_assert(ClassToken<KSession> == ((0b00011001 << 8) | ClassToken<KAutoObject>)); | 71 | static_assert(ClassToken<KSession> == ((0b00011001 << 8) | ClassToken<KAutoObject>)); |
| 74 | static_assert(ClassToken<KSharedMemory> == ((0b00101001 << 8) | ClassToken<KAutoObject>)); | 72 | static_assert(ClassToken<KSharedMemory> == ((0b00101001 << 8) | ClassToken<KAutoObject>)); |
| 75 | static_assert(ClassToken<KEvent> == ((0b01001001 << 8) | ClassToken<KAutoObject>)); | 73 | static_assert(ClassToken<KEvent> == ((0b01001001 << 8) | ClassToken<KAutoObject>)); |
| 76 | static_assert(ClassToken<KWritableEvent> == ((0b10001001 << 8) | ClassToken<KAutoObject>)); | ||
| 77 | // static_assert(ClassToken<KLightClientSession> == ((0b00110001 << 8) | ClassToken<KAutoObject>)); | 74 | // static_assert(ClassToken<KLightClientSession> == ((0b00110001 << 8) | ClassToken<KAutoObject>)); |
| 78 | // static_assert(ClassToken<KLightServerSession> == ((0b01010001 << 8) | ClassToken<KAutoObject>)); | 75 | // static_assert(ClassToken<KLightServerSession> == ((0b01010001 << 8) | ClassToken<KAutoObject>)); |
| 79 | static_assert(ClassToken<KTransferMemory> == ((0b10010001 << 8) | ClassToken<KAutoObject>)); | 76 | static_assert(ClassToken<KTransferMemory> == ((0b01010001 << 8) | ClassToken<KAutoObject>)); |
| 80 | // static_assert(ClassToken<KDeviceAddressSpace> == ((0b01100001 << 8) | ClassToken<KAutoObject>)); | 77 | // static_assert(ClassToken<KDeviceAddressSpace> == ((0b01100001 << 8) | ClassToken<KAutoObject>)); |
| 81 | // static_assert(ClassToken<KSessionRequest> == ((0b10100001 << 8) | ClassToken<KAutoObject>)); | 78 | // static_assert(ClassToken<KSessionRequest> == ((0b10100001 << 8) | ClassToken<KAutoObject>)); |
| 82 | static_assert(ClassToken<KCodeMemory> == ((0b11000001 << 8) | ClassToken<KAutoObject>)); | 79 | static_assert(ClassToken<KCodeMemory> == ((0b10100001 << 8) | ClassToken<KAutoObject>)); |
| 83 | 80 | ||
| 84 | // Ensure that the token hierarchy reflects the class hierarchy. | 81 | // Ensure that the token hierarchy reflects the class hierarchy. |
| 85 | 82 | ||
| @@ -110,7 +107,6 @@ static_assert(std::is_final_v<KPort> && std::is_base_of_v<KAutoObject, KPort>); | |||
| 110 | static_assert(std::is_final_v<KSession> && std::is_base_of_v<KAutoObject, KSession>); | 107 | static_assert(std::is_final_v<KSession> && std::is_base_of_v<KAutoObject, KSession>); |
| 111 | static_assert(std::is_final_v<KSharedMemory> && std::is_base_of_v<KAutoObject, KSharedMemory>); | 108 | static_assert(std::is_final_v<KSharedMemory> && std::is_base_of_v<KAutoObject, KSharedMemory>); |
| 112 | static_assert(std::is_final_v<KEvent> && std::is_base_of_v<KAutoObject, KEvent>); | 109 | static_assert(std::is_final_v<KEvent> && std::is_base_of_v<KAutoObject, KEvent>); |
| 113 | static_assert(std::is_final_v<KWritableEvent> && std::is_base_of_v<KAutoObject, KWritableEvent>); | ||
| 114 | // static_assert(std::is_final_v<KLightClientSession> && | 110 | // static_assert(std::is_final_v<KLightClientSession> && |
| 115 | // std::is_base_of_v<KAutoObject, KLightClientSession>); | 111 | // std::is_base_of_v<KAutoObject, KLightClientSession>); |
| 116 | // static_assert(std::is_final_v<KLightServerSession> && | 112 | // static_assert(std::is_final_v<KLightServerSession> && |
diff --git a/src/core/hle/kernel/k_class_token.h b/src/core/hle/kernel/k_class_token.h index c9001ae3d..ab20e00ff 100644 --- a/src/core/hle/kernel/k_class_token.h +++ b/src/core/hle/kernel/k_class_token.h | |||
| @@ -101,7 +101,6 @@ public: | |||
| 101 | KSession, | 101 | KSession, |
| 102 | KSharedMemory, | 102 | KSharedMemory, |
| 103 | KEvent, | 103 | KEvent, |
| 104 | KWritableEvent, | ||
| 105 | KLightClientSession, | 104 | KLightClientSession, |
| 106 | KLightServerSession, | 105 | KLightServerSession, |
| 107 | KTransferMemory, | 106 | KTransferMemory, |
diff --git a/src/core/hle/kernel/k_event.cpp b/src/core/hle/kernel/k_event.cpp index e52fafbc7..78ca59463 100644 --- a/src/core/hle/kernel/k_event.cpp +++ b/src/core/hle/kernel/k_event.cpp | |||
| @@ -8,39 +8,45 @@ | |||
| 8 | namespace Kernel { | 8 | namespace Kernel { |
| 9 | 9 | ||
| 10 | KEvent::KEvent(KernelCore& kernel_) | 10 | KEvent::KEvent(KernelCore& kernel_) |
| 11 | : KAutoObjectWithSlabHeapAndContainer{kernel_}, readable_event{kernel_}, writable_event{ | 11 | : KAutoObjectWithSlabHeapAndContainer{kernel_}, m_readable_event{kernel_} {} |
| 12 | kernel_} {} | ||
| 13 | 12 | ||
| 14 | KEvent::~KEvent() = default; | 13 | KEvent::~KEvent() = default; |
| 15 | 14 | ||
| 16 | void KEvent::Initialize(std::string&& name_, KProcess* owner_) { | 15 | void KEvent::Initialize(KProcess* owner) { |
| 17 | // Increment reference count. | 16 | // Create our readable event. |
| 18 | // Because reference count is one on creation, this will result | 17 | KAutoObject::Create(std::addressof(m_readable_event)); |
| 19 | // in a reference count of two. Thus, when both readable and | ||
| 20 | // writable events are closed this object will be destroyed. | ||
| 21 | Open(); | ||
| 22 | 18 | ||
| 23 | // Create our sub events. | 19 | // Initialize our readable event. |
| 24 | KAutoObject::Create(std::addressof(readable_event)); | 20 | m_readable_event.Initialize(this); |
| 25 | KAutoObject::Create(std::addressof(writable_event)); | ||
| 26 | |||
| 27 | // Initialize our sub sessions. | ||
| 28 | readable_event.Initialize(this, name_ + ":Readable"); | ||
| 29 | writable_event.Initialize(this, name_ + ":Writable"); | ||
| 30 | 21 | ||
| 31 | // Set our owner process. | 22 | // Set our owner process. |
| 32 | owner = owner_; | 23 | m_owner = owner; |
| 33 | owner->Open(); | 24 | m_owner->Open(); |
| 34 | 25 | ||
| 35 | // Mark initialized. | 26 | // Mark initialized. |
| 36 | name = std::move(name_); | 27 | m_initialized = true; |
| 37 | initialized = true; | ||
| 38 | } | 28 | } |
| 39 | 29 | ||
| 40 | void KEvent::Finalize() { | 30 | void KEvent::Finalize() { |
| 41 | KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList>::Finalize(); | 31 | KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList>::Finalize(); |
| 42 | } | 32 | } |
| 43 | 33 | ||
| 34 | Result KEvent::Signal() { | ||
| 35 | KScopedSchedulerLock sl{kernel}; | ||
| 36 | |||
| 37 | R_SUCCEED_IF(m_readable_event_destroyed); | ||
| 38 | |||
| 39 | return m_readable_event.Signal(); | ||
| 40 | } | ||
| 41 | |||
| 42 | Result KEvent::Clear() { | ||
| 43 | KScopedSchedulerLock sl{kernel}; | ||
| 44 | |||
| 45 | R_SUCCEED_IF(m_readable_event_destroyed); | ||
| 46 | |||
| 47 | return m_readable_event.Clear(); | ||
| 48 | } | ||
| 49 | |||
| 44 | void KEvent::PostDestroy(uintptr_t arg) { | 50 | void KEvent::PostDestroy(uintptr_t arg) { |
| 45 | // Release the event count resource the owner process holds. | 51 | // Release the event count resource the owner process holds. |
| 46 | KProcess* owner = reinterpret_cast<KProcess*>(arg); | 52 | KProcess* owner = reinterpret_cast<KProcess*>(arg); |
diff --git a/src/core/hle/kernel/k_event.h b/src/core/hle/kernel/k_event.h index 2ff828feb..48ce7d9a0 100644 --- a/src/core/hle/kernel/k_event.h +++ b/src/core/hle/kernel/k_event.h | |||
| @@ -4,14 +4,12 @@ | |||
| 4 | #pragma once | 4 | #pragma once |
| 5 | 5 | ||
| 6 | #include "core/hle/kernel/k_readable_event.h" | 6 | #include "core/hle/kernel/k_readable_event.h" |
| 7 | #include "core/hle/kernel/k_writable_event.h" | ||
| 8 | #include "core/hle/kernel/slab_helpers.h" | 7 | #include "core/hle/kernel/slab_helpers.h" |
| 9 | 8 | ||
| 10 | namespace Kernel { | 9 | namespace Kernel { |
| 11 | 10 | ||
| 12 | class KernelCore; | 11 | class KernelCore; |
| 13 | class KReadableEvent; | 12 | class KReadableEvent; |
| 14 | class KWritableEvent; | ||
| 15 | class KProcess; | 13 | class KProcess; |
| 16 | 14 | ||
| 17 | class KEvent final : public KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList> { | 15 | class KEvent final : public KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList> { |
| @@ -21,37 +19,40 @@ public: | |||
| 21 | explicit KEvent(KernelCore& kernel_); | 19 | explicit KEvent(KernelCore& kernel_); |
| 22 | ~KEvent() override; | 20 | ~KEvent() override; |
| 23 | 21 | ||
| 24 | void Initialize(std::string&& name, KProcess* owner_); | 22 | void Initialize(KProcess* owner); |
| 25 | 23 | ||
| 26 | void Finalize() override; | 24 | void Finalize() override; |
| 27 | 25 | ||
| 28 | bool IsInitialized() const override { | 26 | bool IsInitialized() const override { |
| 29 | return initialized; | 27 | return m_initialized; |
| 30 | } | 28 | } |
| 31 | 29 | ||
| 32 | uintptr_t GetPostDestroyArgument() const override { | 30 | uintptr_t GetPostDestroyArgument() const override { |
| 33 | return reinterpret_cast<uintptr_t>(owner); | 31 | return reinterpret_cast<uintptr_t>(m_owner); |
| 34 | } | 32 | } |
| 35 | 33 | ||
| 36 | KProcess* GetOwner() const override { | 34 | KProcess* GetOwner() const override { |
| 37 | return owner; | 35 | return m_owner; |
| 38 | } | 36 | } |
| 39 | 37 | ||
| 40 | KReadableEvent& GetReadableEvent() { | 38 | KReadableEvent& GetReadableEvent() { |
| 41 | return readable_event; | 39 | return m_readable_event; |
| 42 | } | ||
| 43 | |||
| 44 | KWritableEvent& GetWritableEvent() { | ||
| 45 | return writable_event; | ||
| 46 | } | 40 | } |
| 47 | 41 | ||
| 48 | static void PostDestroy(uintptr_t arg); | 42 | static void PostDestroy(uintptr_t arg); |
| 49 | 43 | ||
| 44 | Result Signal(); | ||
| 45 | Result Clear(); | ||
| 46 | |||
| 47 | void OnReadableEventDestroyed() { | ||
| 48 | m_readable_event_destroyed = true; | ||
| 49 | } | ||
| 50 | |||
| 50 | private: | 51 | private: |
| 51 | KReadableEvent readable_event; | 52 | KReadableEvent m_readable_event; |
| 52 | KWritableEvent writable_event; | 53 | KProcess* m_owner{}; |
| 53 | KProcess* owner{}; | 54 | bool m_initialized{}; |
| 54 | bool initialized{}; | 55 | bool m_readable_event_destroyed{}; |
| 55 | }; | 56 | }; |
| 56 | 57 | ||
| 57 | } // namespace Kernel | 58 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/k_readable_event.cpp b/src/core/hle/kernel/k_readable_event.cpp index 94c5464fe..5c942d47c 100644 --- a/src/core/hle/kernel/k_readable_event.cpp +++ b/src/core/hle/kernel/k_readable_event.cpp | |||
| @@ -15,31 +15,44 @@ KReadableEvent::KReadableEvent(KernelCore& kernel_) : KSynchronizationObject{ker | |||
| 15 | 15 | ||
| 16 | KReadableEvent::~KReadableEvent() = default; | 16 | KReadableEvent::~KReadableEvent() = default; |
| 17 | 17 | ||
| 18 | void KReadableEvent::Initialize(KEvent* parent) { | ||
| 19 | m_is_signaled = false; | ||
| 20 | m_parent = parent; | ||
| 21 | |||
| 22 | if (m_parent != nullptr) { | ||
| 23 | m_parent->Open(); | ||
| 24 | } | ||
| 25 | } | ||
| 26 | |||
| 18 | bool KReadableEvent::IsSignaled() const { | 27 | bool KReadableEvent::IsSignaled() const { |
| 19 | ASSERT(kernel.GlobalSchedulerContext().IsLocked()); | 28 | ASSERT(KScheduler::IsSchedulerLockedByCurrentThread(kernel)); |
| 20 | 29 | ||
| 21 | return is_signaled; | 30 | return m_is_signaled; |
| 22 | } | 31 | } |
| 23 | 32 | ||
| 24 | void KReadableEvent::Destroy() { | 33 | void KReadableEvent::Destroy() { |
| 25 | if (parent) { | 34 | if (m_parent) { |
| 26 | parent->Close(); | 35 | { |
| 36 | KScopedSchedulerLock sl{kernel}; | ||
| 37 | m_parent->OnReadableEventDestroyed(); | ||
| 38 | } | ||
| 39 | m_parent->Close(); | ||
| 27 | } | 40 | } |
| 28 | } | 41 | } |
| 29 | 42 | ||
| 30 | Result KReadableEvent::Signal() { | 43 | Result KReadableEvent::Signal() { |
| 31 | KScopedSchedulerLock lk{kernel}; | 44 | KScopedSchedulerLock lk{kernel}; |
| 32 | 45 | ||
| 33 | if (!is_signaled) { | 46 | if (!m_is_signaled) { |
| 34 | is_signaled = true; | 47 | m_is_signaled = true; |
| 35 | NotifyAvailable(); | 48 | this->NotifyAvailable(); |
| 36 | } | 49 | } |
| 37 | 50 | ||
| 38 | return ResultSuccess; | 51 | return ResultSuccess; |
| 39 | } | 52 | } |
| 40 | 53 | ||
| 41 | Result KReadableEvent::Clear() { | 54 | Result KReadableEvent::Clear() { |
| 42 | Reset(); | 55 | this->Reset(); |
| 43 | 56 | ||
| 44 | return ResultSuccess; | 57 | return ResultSuccess; |
| 45 | } | 58 | } |
| @@ -47,11 +60,11 @@ Result KReadableEvent::Clear() { | |||
| 47 | Result KReadableEvent::Reset() { | 60 | Result KReadableEvent::Reset() { |
| 48 | KScopedSchedulerLock lk{kernel}; | 61 | KScopedSchedulerLock lk{kernel}; |
| 49 | 62 | ||
| 50 | if (!is_signaled) { | 63 | if (!m_is_signaled) { |
| 51 | return ResultInvalidState; | 64 | return ResultInvalidState; |
| 52 | } | 65 | } |
| 53 | 66 | ||
| 54 | is_signaled = false; | 67 | m_is_signaled = false; |
| 55 | return ResultSuccess; | 68 | return ResultSuccess; |
| 56 | } | 69 | } |
| 57 | 70 | ||
diff --git a/src/core/hle/kernel/k_readable_event.h b/src/core/hle/kernel/k_readable_event.h index 18dcad289..743f96bf5 100644 --- a/src/core/hle/kernel/k_readable_event.h +++ b/src/core/hle/kernel/k_readable_event.h | |||
| @@ -20,26 +20,23 @@ public: | |||
| 20 | explicit KReadableEvent(KernelCore& kernel_); | 20 | explicit KReadableEvent(KernelCore& kernel_); |
| 21 | ~KReadableEvent() override; | 21 | ~KReadableEvent() override; |
| 22 | 22 | ||
| 23 | void Initialize(KEvent* parent_event_, std::string&& name_) { | 23 | void Initialize(KEvent* parent); |
| 24 | is_signaled = false; | ||
| 25 | parent = parent_event_; | ||
| 26 | name = std::move(name_); | ||
| 27 | } | ||
| 28 | 24 | ||
| 29 | KEvent* GetParent() const { | 25 | KEvent* GetParent() const { |
| 30 | return parent; | 26 | return m_parent; |
| 31 | } | 27 | } |
| 32 | 28 | ||
| 29 | Result Signal(); | ||
| 30 | Result Clear(); | ||
| 31 | |||
| 33 | bool IsSignaled() const override; | 32 | bool IsSignaled() const override; |
| 34 | void Destroy() override; | 33 | void Destroy() override; |
| 35 | 34 | ||
| 36 | Result Signal(); | ||
| 37 | Result Clear(); | ||
| 38 | Result Reset(); | 35 | Result Reset(); |
| 39 | 36 | ||
| 40 | private: | 37 | private: |
| 41 | bool is_signaled{}; | 38 | bool m_is_signaled{}; |
| 42 | KEvent* parent{}; | 39 | KEvent* m_parent{}; |
| 43 | }; | 40 | }; |
| 44 | 41 | ||
| 45 | } // namespace Kernel | 42 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/k_writable_event.cpp b/src/core/hle/kernel/k_writable_event.cpp deleted file mode 100644 index ff88c5acd..000000000 --- a/src/core/hle/kernel/k_writable_event.cpp +++ /dev/null | |||
| @@ -1,35 +0,0 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "core/hle/kernel/k_event.h" | ||
| 5 | #include "core/hle/kernel/k_readable_event.h" | ||
| 6 | #include "core/hle/kernel/k_writable_event.h" | ||
| 7 | |||
| 8 | namespace Kernel { | ||
| 9 | |||
| 10 | KWritableEvent::KWritableEvent(KernelCore& kernel_) | ||
| 11 | : KAutoObjectWithSlabHeapAndContainer{kernel_} {} | ||
| 12 | |||
| 13 | KWritableEvent::~KWritableEvent() = default; | ||
| 14 | |||
| 15 | void KWritableEvent::Initialize(KEvent* parent_event_, std::string&& name_) { | ||
| 16 | parent = parent_event_; | ||
| 17 | name = std::move(name_); | ||
| 18 | parent->GetReadableEvent().Open(); | ||
| 19 | } | ||
| 20 | |||
| 21 | Result KWritableEvent::Signal() { | ||
| 22 | return parent->GetReadableEvent().Signal(); | ||
| 23 | } | ||
| 24 | |||
| 25 | Result KWritableEvent::Clear() { | ||
| 26 | return parent->GetReadableEvent().Clear(); | ||
| 27 | } | ||
| 28 | |||
| 29 | void KWritableEvent::Destroy() { | ||
| 30 | // Close our references. | ||
| 31 | parent->GetReadableEvent().Close(); | ||
| 32 | parent->Close(); | ||
| 33 | } | ||
| 34 | |||
| 35 | } // namespace Kernel | ||
diff --git a/src/core/hle/kernel/k_writable_event.h b/src/core/hle/kernel/k_writable_event.h deleted file mode 100644 index 3fd0c7d0a..000000000 --- a/src/core/hle/kernel/k_writable_event.h +++ /dev/null | |||
| @@ -1,39 +0,0 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "core/hle/kernel/k_auto_object.h" | ||
| 7 | #include "core/hle/kernel/slab_helpers.h" | ||
| 8 | #include "core/hle/result.h" | ||
| 9 | |||
| 10 | namespace Kernel { | ||
| 11 | |||
| 12 | class KernelCore; | ||
| 13 | class KEvent; | ||
| 14 | |||
| 15 | class KWritableEvent final | ||
| 16 | : public KAutoObjectWithSlabHeapAndContainer<KWritableEvent, KAutoObjectWithList> { | ||
| 17 | KERNEL_AUTOOBJECT_TRAITS(KWritableEvent, KAutoObject); | ||
| 18 | |||
| 19 | public: | ||
| 20 | explicit KWritableEvent(KernelCore& kernel_); | ||
| 21 | ~KWritableEvent() override; | ||
| 22 | |||
| 23 | void Destroy() override; | ||
| 24 | |||
| 25 | static void PostDestroy([[maybe_unused]] uintptr_t arg) {} | ||
| 26 | |||
| 27 | void Initialize(KEvent* parent_, std::string&& name_); | ||
| 28 | Result Signal(); | ||
| 29 | Result Clear(); | ||
| 30 | |||
| 31 | KEvent* GetParent() const { | ||
| 32 | return parent; | ||
| 33 | } | ||
| 34 | |||
| 35 | private: | ||
| 36 | KEvent* parent{}; | ||
| 37 | }; | ||
| 38 | |||
| 39 | } // namespace Kernel | ||
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index bcf016a97..0847cbcbf 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h | |||
| @@ -52,7 +52,6 @@ class KThread; | |||
| 52 | class KThreadLocalPage; | 52 | class KThreadLocalPage; |
| 53 | class KTransferMemory; | 53 | class KTransferMemory; |
| 54 | class KWorkerTaskManager; | 54 | class KWorkerTaskManager; |
| 55 | class KWritableEvent; | ||
| 56 | class KCodeMemory; | 55 | class KCodeMemory; |
| 57 | class PhysicalCore; | 56 | class PhysicalCore; |
| 58 | class ServiceThread; | 57 | class ServiceThread; |
| @@ -345,8 +344,6 @@ public: | |||
| 345 | return slab_heap_container->thread; | 344 | return slab_heap_container->thread; |
| 346 | } else if constexpr (std::is_same_v<T, KTransferMemory>) { | 345 | } else if constexpr (std::is_same_v<T, KTransferMemory>) { |
| 347 | return slab_heap_container->transfer_memory; | 346 | return slab_heap_container->transfer_memory; |
| 348 | } else if constexpr (std::is_same_v<T, KWritableEvent>) { | ||
| 349 | return slab_heap_container->writeable_event; | ||
| 350 | } else if constexpr (std::is_same_v<T, KCodeMemory>) { | 347 | } else if constexpr (std::is_same_v<T, KCodeMemory>) { |
| 351 | return slab_heap_container->code_memory; | 348 | return slab_heap_container->code_memory; |
| 352 | } else if constexpr (std::is_same_v<T, KPageBuffer>) { | 349 | } else if constexpr (std::is_same_v<T, KPageBuffer>) { |
| @@ -412,7 +409,6 @@ private: | |||
| 412 | KSlabHeap<KSharedMemoryInfo> shared_memory_info; | 409 | KSlabHeap<KSharedMemoryInfo> shared_memory_info; |
| 413 | KSlabHeap<KThread> thread; | 410 | KSlabHeap<KThread> thread; |
| 414 | KSlabHeap<KTransferMemory> transfer_memory; | 411 | KSlabHeap<KTransferMemory> transfer_memory; |
| 415 | KSlabHeap<KWritableEvent> writeable_event; | ||
| 416 | KSlabHeap<KCodeMemory> code_memory; | 412 | KSlabHeap<KCodeMemory> code_memory; |
| 417 | KSlabHeap<KPageBuffer> page_buffer; | 413 | KSlabHeap<KPageBuffer> page_buffer; |
| 418 | KSlabHeap<KThreadLocalPage> thread_local_page; | 414 | KSlabHeap<KThreadLocalPage> thread_local_page; |
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 510a9b3e3..1d145ea91 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -35,7 +35,6 @@ | |||
| 35 | #include "core/hle/kernel/k_thread.h" | 35 | #include "core/hle/kernel/k_thread.h" |
| 36 | #include "core/hle/kernel/k_thread_queue.h" | 36 | #include "core/hle/kernel/k_thread_queue.h" |
| 37 | #include "core/hle/kernel/k_transfer_memory.h" | 37 | #include "core/hle/kernel/k_transfer_memory.h" |
| 38 | #include "core/hle/kernel/k_writable_event.h" | ||
| 39 | #include "core/hle/kernel/kernel.h" | 38 | #include "core/hle/kernel/kernel.h" |
| 40 | #include "core/hle/kernel/physical_core.h" | 39 | #include "core/hle/kernel/physical_core.h" |
| 41 | #include "core/hle/kernel/svc.h" | 40 | #include "core/hle/kernel/svc.h" |
| @@ -2445,11 +2444,11 @@ static Result SignalEvent(Core::System& system, Handle event_handle) { | |||
| 2445 | // Get the current handle table. | 2444 | // Get the current handle table. |
| 2446 | const KHandleTable& handle_table = system.Kernel().CurrentProcess()->GetHandleTable(); | 2445 | const KHandleTable& handle_table = system.Kernel().CurrentProcess()->GetHandleTable(); |
| 2447 | 2446 | ||
| 2448 | // Get the writable event. | 2447 | // Get the event. |
| 2449 | KScopedAutoObject writable_event = handle_table.GetObject<KWritableEvent>(event_handle); | 2448 | KScopedAutoObject event = handle_table.GetObject<KEvent>(event_handle); |
| 2450 | R_UNLESS(writable_event.IsNotNull(), ResultInvalidHandle); | 2449 | R_UNLESS(event.IsNotNull(), ResultInvalidHandle); |
| 2451 | 2450 | ||
| 2452 | return writable_event->Signal(); | 2451 | return event->Signal(); |
| 2453 | } | 2452 | } |
| 2454 | 2453 | ||
| 2455 | static Result SignalEvent32(Core::System& system, Handle event_handle) { | 2454 | static Result SignalEvent32(Core::System& system, Handle event_handle) { |
| @@ -2464,9 +2463,9 @@ static Result ClearEvent(Core::System& system, Handle event_handle) { | |||
| 2464 | 2463 | ||
| 2465 | // Try to clear the writable event. | 2464 | // Try to clear the writable event. |
| 2466 | { | 2465 | { |
| 2467 | KScopedAutoObject writable_event = handle_table.GetObject<KWritableEvent>(event_handle); | 2466 | KScopedAutoObject event = handle_table.GetObject<KEvent>(event_handle); |
| 2468 | if (writable_event.IsNotNull()) { | 2467 | if (event.IsNotNull()) { |
| 2469 | return writable_event->Clear(); | 2468 | return event->Clear(); |
| 2470 | } | 2469 | } |
| 2471 | } | 2470 | } |
| 2472 | 2471 | ||
| @@ -2504,24 +2503,24 @@ static Result CreateEvent(Core::System& system, Handle* out_write, Handle* out_r | |||
| 2504 | R_UNLESS(event != nullptr, ResultOutOfResource); | 2503 | R_UNLESS(event != nullptr, ResultOutOfResource); |
| 2505 | 2504 | ||
| 2506 | // Initialize the event. | 2505 | // Initialize the event. |
| 2507 | event->Initialize("CreateEvent", kernel.CurrentProcess()); | 2506 | event->Initialize(kernel.CurrentProcess()); |
| 2508 | 2507 | ||
| 2509 | // Commit the thread reservation. | 2508 | // Commit the thread reservation. |
| 2510 | event_reservation.Commit(); | 2509 | event_reservation.Commit(); |
| 2511 | 2510 | ||
| 2512 | // Ensure that we clean up the event (and its only references are handle table) on function end. | 2511 | // Ensure that we clean up the event (and its only references are handle table) on function end. |
| 2513 | SCOPE_EXIT({ | 2512 | SCOPE_EXIT({ |
| 2514 | event->GetWritableEvent().Close(); | ||
| 2515 | event->GetReadableEvent().Close(); | 2513 | event->GetReadableEvent().Close(); |
| 2514 | event->Close(); | ||
| 2516 | }); | 2515 | }); |
| 2517 | 2516 | ||
| 2518 | // Register the event. | 2517 | // Register the event. |
| 2519 | KEvent::Register(kernel, event); | 2518 | KEvent::Register(kernel, event); |
| 2520 | 2519 | ||
| 2521 | // Add the writable event to the handle table. | 2520 | // Add the event to the handle table. |
| 2522 | R_TRY(handle_table.Add(out_write, std::addressof(event->GetWritableEvent()))); | 2521 | R_TRY(handle_table.Add(out_write, event)); |
| 2523 | 2522 | ||
| 2524 | // Add the writable event to the handle table. | 2523 | // Ensure that we maintaing a clean handle state on exit. |
| 2525 | auto handle_guard = SCOPE_GUARD({ handle_table.Remove(*out_write); }); | 2524 | auto handle_guard = SCOPE_GUARD({ handle_table.Remove(*out_write); }); |
| 2526 | 2525 | ||
| 2527 | // Add the readable event to the handle table. | 2526 | // Add the readable event to the handle table. |
diff --git a/src/core/hle/service/acc/async_context.cpp b/src/core/hle/service/acc/async_context.cpp index c85b2e43a..713689d8f 100644 --- a/src/core/hle/service/acc/async_context.cpp +++ b/src/core/hle/service/acc/async_context.cpp | |||
| @@ -64,7 +64,7 @@ void IAsyncContext::GetResult(Kernel::HLERequestContext& ctx) { | |||
| 64 | 64 | ||
| 65 | void IAsyncContext::MarkComplete() { | 65 | void IAsyncContext::MarkComplete() { |
| 66 | is_complete.store(true); | 66 | is_complete.store(true); |
| 67 | completion_event->GetWritableEvent().Signal(); | 67 | completion_event->Signal(); |
| 68 | } | 68 | } |
| 69 | 69 | ||
| 70 | } // namespace Service::Account | 70 | } // namespace Service::Account |
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index 6fb7e198e..e55233054 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp | |||
| @@ -316,7 +316,7 @@ ISelfController::ISelfController(Core::System& system_, NVFlinger::NVFlinger& nv | |||
| 316 | 316 | ||
| 317 | accumulated_suspended_tick_changed_event = | 317 | accumulated_suspended_tick_changed_event = |
| 318 | service_context.CreateEvent("ISelfController:AccumulatedSuspendedTickChangedEvent"); | 318 | service_context.CreateEvent("ISelfController:AccumulatedSuspendedTickChangedEvent"); |
| 319 | accumulated_suspended_tick_changed_event->GetWritableEvent().Signal(); | 319 | accumulated_suspended_tick_changed_event->Signal(); |
| 320 | } | 320 | } |
| 321 | 321 | ||
| 322 | ISelfController::~ISelfController() { | 322 | ISelfController::~ISelfController() { |
| @@ -378,7 +378,7 @@ void ISelfController::LeaveFatalSection(Kernel::HLERequestContext& ctx) { | |||
| 378 | void ISelfController::GetLibraryAppletLaunchableEvent(Kernel::HLERequestContext& ctx) { | 378 | void ISelfController::GetLibraryAppletLaunchableEvent(Kernel::HLERequestContext& ctx) { |
| 379 | LOG_WARNING(Service_AM, "(STUBBED) called"); | 379 | LOG_WARNING(Service_AM, "(STUBBED) called"); |
| 380 | 380 | ||
| 381 | launchable_event->GetWritableEvent().Signal(); | 381 | launchable_event->Signal(); |
| 382 | 382 | ||
| 383 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 383 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 384 | rb.Push(ResultSuccess); | 384 | rb.Push(ResultSuccess); |
| @@ -618,18 +618,18 @@ Kernel::KReadableEvent& AppletMessageQueue::GetOperationModeChangedEvent() { | |||
| 618 | 618 | ||
| 619 | void AppletMessageQueue::PushMessage(AppletMessage msg) { | 619 | void AppletMessageQueue::PushMessage(AppletMessage msg) { |
| 620 | messages.push(msg); | 620 | messages.push(msg); |
| 621 | on_new_message->GetWritableEvent().Signal(); | 621 | on_new_message->Signal(); |
| 622 | } | 622 | } |
| 623 | 623 | ||
| 624 | AppletMessageQueue::AppletMessage AppletMessageQueue::PopMessage() { | 624 | AppletMessageQueue::AppletMessage AppletMessageQueue::PopMessage() { |
| 625 | if (messages.empty()) { | 625 | if (messages.empty()) { |
| 626 | on_new_message->GetWritableEvent().Clear(); | 626 | on_new_message->Clear(); |
| 627 | return AppletMessage::None; | 627 | return AppletMessage::None; |
| 628 | } | 628 | } |
| 629 | auto msg = messages.front(); | 629 | auto msg = messages.front(); |
| 630 | messages.pop(); | 630 | messages.pop(); |
| 631 | if (messages.empty()) { | 631 | if (messages.empty()) { |
| 632 | on_new_message->GetWritableEvent().Clear(); | 632 | on_new_message->Clear(); |
| 633 | } | 633 | } |
| 634 | return msg; | 634 | return msg; |
| 635 | } | 635 | } |
| @@ -653,7 +653,7 @@ void AppletMessageQueue::FocusStateChanged() { | |||
| 653 | void AppletMessageQueue::OperationModeChanged() { | 653 | void AppletMessageQueue::OperationModeChanged() { |
| 654 | PushMessage(AppletMessage::OperationModeChanged); | 654 | PushMessage(AppletMessage::OperationModeChanged); |
| 655 | PushMessage(AppletMessage::PerformanceModeChanged); | 655 | PushMessage(AppletMessage::PerformanceModeChanged); |
| 656 | on_operation_mode_changed->GetWritableEvent().Signal(); | 656 | on_operation_mode_changed->Signal(); |
| 657 | } | 657 | } |
| 658 | 658 | ||
| 659 | ICommonStateGetter::ICommonStateGetter(Core::System& system_, | 659 | ICommonStateGetter::ICommonStateGetter(Core::System& system_, |
diff --git a/src/core/hle/service/am/applets/applets.cpp b/src/core/hle/service/am/applets/applets.cpp index b5b8e4cad..7062df21c 100644 --- a/src/core/hle/service/am/applets/applets.cpp +++ b/src/core/hle/service/am/applets/applets.cpp | |||
| @@ -65,7 +65,7 @@ std::shared_ptr<IStorage> AppletDataBroker::PopNormalDataToGame() { | |||
| 65 | 65 | ||
| 66 | auto out = std::move(out_channel.front()); | 66 | auto out = std::move(out_channel.front()); |
| 67 | out_channel.pop_front(); | 67 | out_channel.pop_front(); |
| 68 | pop_out_data_event->GetWritableEvent().Clear(); | 68 | pop_out_data_event->Clear(); |
| 69 | return out; | 69 | return out; |
| 70 | } | 70 | } |
| 71 | 71 | ||
| @@ -84,7 +84,7 @@ std::shared_ptr<IStorage> AppletDataBroker::PopInteractiveDataToGame() { | |||
| 84 | 84 | ||
| 85 | auto out = std::move(out_interactive_channel.front()); | 85 | auto out = std::move(out_interactive_channel.front()); |
| 86 | out_interactive_channel.pop_front(); | 86 | out_interactive_channel.pop_front(); |
| 87 | pop_interactive_out_data_event->GetWritableEvent().Clear(); | 87 | pop_interactive_out_data_event->Clear(); |
| 88 | return out; | 88 | return out; |
| 89 | } | 89 | } |
| 90 | 90 | ||
| @@ -103,7 +103,7 @@ void AppletDataBroker::PushNormalDataFromGame(std::shared_ptr<IStorage>&& storag | |||
| 103 | 103 | ||
| 104 | void AppletDataBroker::PushNormalDataFromApplet(std::shared_ptr<IStorage>&& storage) { | 104 | void AppletDataBroker::PushNormalDataFromApplet(std::shared_ptr<IStorage>&& storage) { |
| 105 | out_channel.emplace_back(std::move(storage)); | 105 | out_channel.emplace_back(std::move(storage)); |
| 106 | pop_out_data_event->GetWritableEvent().Signal(); | 106 | pop_out_data_event->Signal(); |
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | void AppletDataBroker::PushInteractiveDataFromGame(std::shared_ptr<IStorage>&& storage) { | 109 | void AppletDataBroker::PushInteractiveDataFromGame(std::shared_ptr<IStorage>&& storage) { |
| @@ -112,11 +112,11 @@ void AppletDataBroker::PushInteractiveDataFromGame(std::shared_ptr<IStorage>&& s | |||
| 112 | 112 | ||
| 113 | void AppletDataBroker::PushInteractiveDataFromApplet(std::shared_ptr<IStorage>&& storage) { | 113 | void AppletDataBroker::PushInteractiveDataFromApplet(std::shared_ptr<IStorage>&& storage) { |
| 114 | out_interactive_channel.emplace_back(std::move(storage)); | 114 | out_interactive_channel.emplace_back(std::move(storage)); |
| 115 | pop_interactive_out_data_event->GetWritableEvent().Signal(); | 115 | pop_interactive_out_data_event->Signal(); |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | void AppletDataBroker::SignalStateChanged() { | 118 | void AppletDataBroker::SignalStateChanged() { |
| 119 | state_changed_event->GetWritableEvent().Signal(); | 119 | state_changed_event->Signal(); |
| 120 | 120 | ||
| 121 | switch (applet_mode) { | 121 | switch (applet_mode) { |
| 122 | case LibraryAppletMode::AllForeground: | 122 | case LibraryAppletMode::AllForeground: |
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp index 6fb07c37d..60c30cd5b 100644 --- a/src/core/hle/service/audio/audren_u.cpp +++ b/src/core/hle/service/audio/audren_u.cpp | |||
| @@ -239,7 +239,7 @@ public: | |||
| 239 | }; | 239 | }; |
| 240 | RegisterHandlers(functions); | 240 | RegisterHandlers(functions); |
| 241 | 241 | ||
| 242 | event->GetWritableEvent().Signal(); | 242 | event->Signal(); |
| 243 | } | 243 | } |
| 244 | 244 | ||
| 245 | ~IAudioDevice() override { | 245 | ~IAudioDevice() override { |
| @@ -325,7 +325,7 @@ private: | |||
| 325 | void QueryAudioDeviceSystemEvent(Kernel::HLERequestContext& ctx) { | 325 | void QueryAudioDeviceSystemEvent(Kernel::HLERequestContext& ctx) { |
| 326 | LOG_DEBUG(Service_Audio, "(STUBBED) called"); | 326 | LOG_DEBUG(Service_Audio, "(STUBBED) called"); |
| 327 | 327 | ||
| 328 | event->GetWritableEvent().Signal(); | 328 | event->Signal(); |
| 329 | 329 | ||
| 330 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 330 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 331 | rb.Push(ResultSuccess); | 331 | rb.Push(ResultSuccess); |
diff --git a/src/core/hle/service/bcat/backend/backend.cpp b/src/core/hle/service/bcat/backend/backend.cpp index cd0b405ff..847f76987 100644 --- a/src/core/hle/service/bcat/backend/backend.cpp +++ b/src/core/hle/service/bcat/backend/backend.cpp | |||
| @@ -82,7 +82,7 @@ void ProgressServiceBackend::FinishDownload(Result result) { | |||
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | void ProgressServiceBackend::SignalUpdate() { | 84 | void ProgressServiceBackend::SignalUpdate() { |
| 85 | update_event->GetWritableEvent().Signal(); | 85 | update_event->Signal(); |
| 86 | } | 86 | } |
| 87 | 87 | ||
| 88 | Backend::Backend(DirectoryGetter getter) : dir_getter(std::move(getter)) {} | 88 | Backend::Backend(DirectoryGetter getter) : dir_getter(std::move(getter)) {} |
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index f8972ec7a..98e4f2af7 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp | |||
| @@ -16,7 +16,6 @@ | |||
| 16 | #include "core/hid/hid_core.h" | 16 | #include "core/hid/hid_core.h" |
| 17 | #include "core/hle/kernel/k_event.h" | 17 | #include "core/hle/kernel/k_event.h" |
| 18 | #include "core/hle/kernel/k_readable_event.h" | 18 | #include "core/hle/kernel/k_readable_event.h" |
| 19 | #include "core/hle/kernel/k_writable_event.h" | ||
| 20 | #include "core/hle/service/hid/controllers/npad.h" | 19 | #include "core/hle/service/hid/controllers/npad.h" |
| 21 | #include "core/hle/service/hid/errors.h" | 20 | #include "core/hle/service/hid/errors.h" |
| 22 | #include "core/hle/service/kernel_helpers.h" | 21 | #include "core/hle/service/kernel_helpers.h" |
| @@ -167,7 +166,7 @@ void Controller_NPad::InitNewlyAddedController(Core::HID::NpadIdType npad_id) { | |||
| 167 | const auto& battery_level = controller.device->GetBattery(); | 166 | const auto& battery_level = controller.device->GetBattery(); |
| 168 | auto* shared_memory = controller.shared_memory; | 167 | auto* shared_memory = controller.shared_memory; |
| 169 | if (controller_type == Core::HID::NpadStyleIndex::None) { | 168 | if (controller_type == Core::HID::NpadStyleIndex::None) { |
| 170 | controller.styleset_changed_event->GetWritableEvent().Signal(); | 169 | controller.styleset_changed_event->Signal(); |
| 171 | return; | 170 | return; |
| 172 | } | 171 | } |
| 173 | 172 | ||
| @@ -1033,7 +1032,7 @@ Kernel::KReadableEvent& Controller_NPad::GetStyleSetChangedEvent(Core::HID::Npad | |||
| 1033 | 1032 | ||
| 1034 | void Controller_NPad::SignalStyleSetChangedEvent(Core::HID::NpadIdType npad_id) const { | 1033 | void Controller_NPad::SignalStyleSetChangedEvent(Core::HID::NpadIdType npad_id) const { |
| 1035 | const auto& controller = GetControllerFromNpadIdType(npad_id); | 1034 | const auto& controller = GetControllerFromNpadIdType(npad_id); |
| 1036 | controller.styleset_changed_event->GetWritableEvent().Signal(); | 1035 | controller.styleset_changed_event->Signal(); |
| 1037 | } | 1036 | } |
| 1038 | 1037 | ||
| 1039 | void Controller_NPad::AddNewControllerAt(Core::HID::NpadStyleIndex controller, | 1038 | void Controller_NPad::AddNewControllerAt(Core::HID::NpadStyleIndex controller, |
diff --git a/src/core/hle/service/hid/controllers/palma.cpp b/src/core/hle/service/hid/controllers/palma.cpp index 575d4e626..4564ea1e2 100644 --- a/src/core/hle/service/hid/controllers/palma.cpp +++ b/src/core/hle/service/hid/controllers/palma.cpp | |||
| @@ -73,7 +73,7 @@ Result Controller_Palma::PlayPalmaActivity(const PalmaConnectionHandle& handle, | |||
| 73 | operation.operation = PalmaOperationType::PlayActivity; | 73 | operation.operation = PalmaOperationType::PlayActivity; |
| 74 | operation.result = PalmaResultSuccess; | 74 | operation.result = PalmaResultSuccess; |
| 75 | operation.data = {}; | 75 | operation.data = {}; |
| 76 | operation_complete_event->GetWritableEvent().Signal(); | 76 | operation_complete_event->Signal(); |
| 77 | return ResultSuccess; | 77 | return ResultSuccess; |
| 78 | } | 78 | } |
| 79 | 79 | ||
| @@ -93,7 +93,7 @@ Result Controller_Palma::ReadPalmaStep(const PalmaConnectionHandle& handle) { | |||
| 93 | operation.operation = PalmaOperationType::ReadStep; | 93 | operation.operation = PalmaOperationType::ReadStep; |
| 94 | operation.result = PalmaResultSuccess; | 94 | operation.result = PalmaResultSuccess; |
| 95 | operation.data = {}; | 95 | operation.data = {}; |
| 96 | operation_complete_event->GetWritableEvent().Signal(); | 96 | operation_complete_event->Signal(); |
| 97 | return ResultSuccess; | 97 | return ResultSuccess; |
| 98 | } | 98 | } |
| 99 | 99 | ||
| @@ -122,7 +122,7 @@ Result Controller_Palma::ReadPalmaUniqueCode(const PalmaConnectionHandle& handle | |||
| 122 | operation.operation = PalmaOperationType::ReadUniqueCode; | 122 | operation.operation = PalmaOperationType::ReadUniqueCode; |
| 123 | operation.result = PalmaResultSuccess; | 123 | operation.result = PalmaResultSuccess; |
| 124 | operation.data = {}; | 124 | operation.data = {}; |
| 125 | operation_complete_event->GetWritableEvent().Signal(); | 125 | operation_complete_event->Signal(); |
| 126 | return ResultSuccess; | 126 | return ResultSuccess; |
| 127 | } | 127 | } |
| 128 | 128 | ||
| @@ -133,7 +133,7 @@ Result Controller_Palma::SetPalmaUniqueCodeInvalid(const PalmaConnectionHandle& | |||
| 133 | operation.operation = PalmaOperationType::SetUniqueCodeInvalid; | 133 | operation.operation = PalmaOperationType::SetUniqueCodeInvalid; |
| 134 | operation.result = PalmaResultSuccess; | 134 | operation.result = PalmaResultSuccess; |
| 135 | operation.data = {}; | 135 | operation.data = {}; |
| 136 | operation_complete_event->GetWritableEvent().Signal(); | 136 | operation_complete_event->Signal(); |
| 137 | return ResultSuccess; | 137 | return ResultSuccess; |
| 138 | } | 138 | } |
| 139 | 139 | ||
| @@ -147,7 +147,7 @@ Result Controller_Palma::WritePalmaRgbLedPatternEntry(const PalmaConnectionHandl | |||
| 147 | operation.operation = PalmaOperationType::WriteRgbLedPatternEntry; | 147 | operation.operation = PalmaOperationType::WriteRgbLedPatternEntry; |
| 148 | operation.result = PalmaResultSuccess; | 148 | operation.result = PalmaResultSuccess; |
| 149 | operation.data = {}; | 149 | operation.data = {}; |
| 150 | operation_complete_event->GetWritableEvent().Signal(); | 150 | operation_complete_event->Signal(); |
| 151 | return ResultSuccess; | 151 | return ResultSuccess; |
| 152 | } | 152 | } |
| 153 | 153 | ||
| @@ -159,7 +159,7 @@ Result Controller_Palma::WritePalmaWaveEntry(const PalmaConnectionHandle& handle | |||
| 159 | operation.operation = PalmaOperationType::WriteWaveEntry; | 159 | operation.operation = PalmaOperationType::WriteWaveEntry; |
| 160 | operation.result = PalmaResultSuccess; | 160 | operation.result = PalmaResultSuccess; |
| 161 | operation.data = {}; | 161 | operation.data = {}; |
| 162 | operation_complete_event->GetWritableEvent().Signal(); | 162 | operation_complete_event->Signal(); |
| 163 | return ResultSuccess; | 163 | return ResultSuccess; |
| 164 | } | 164 | } |
| 165 | 165 | ||
| @@ -172,7 +172,7 @@ Result Controller_Palma::SetPalmaDataBaseIdentificationVersion(const PalmaConnec | |||
| 172 | operation.operation = PalmaOperationType::ReadDataBaseIdentificationVersion; | 172 | operation.operation = PalmaOperationType::ReadDataBaseIdentificationVersion; |
| 173 | operation.result = PalmaResultSuccess; | 173 | operation.result = PalmaResultSuccess; |
| 174 | operation.data[0] = {}; | 174 | operation.data[0] = {}; |
| 175 | operation_complete_event->GetWritableEvent().Signal(); | 175 | operation_complete_event->Signal(); |
| 176 | return ResultSuccess; | 176 | return ResultSuccess; |
| 177 | } | 177 | } |
| 178 | 178 | ||
| @@ -185,7 +185,7 @@ Result Controller_Palma::GetPalmaDataBaseIdentificationVersion( | |||
| 185 | operation.result = PalmaResultSuccess; | 185 | operation.result = PalmaResultSuccess; |
| 186 | operation.data = {}; | 186 | operation.data = {}; |
| 187 | operation.data[0] = static_cast<u8>(database_id_version); | 187 | operation.data[0] = static_cast<u8>(database_id_version); |
| 188 | operation_complete_event->GetWritableEvent().Signal(); | 188 | operation_complete_event->Signal(); |
| 189 | return ResultSuccess; | 189 | return ResultSuccess; |
| 190 | } | 190 | } |
| 191 | 191 | ||
diff --git a/src/core/hle/service/hid/hidbus/ringcon.cpp b/src/core/hle/service/hid/hidbus/ringcon.cpp index ad223d649..57f1a2a26 100644 --- a/src/core/hle/service/hid/hidbus/ringcon.cpp +++ b/src/core/hle/service/hid/hidbus/ringcon.cpp | |||
| @@ -131,12 +131,12 @@ bool RingController::SetCommand(const std::vector<u8>& data) { | |||
| 131 | case RingConCommands::ReadRepCount: | 131 | case RingConCommands::ReadRepCount: |
| 132 | case RingConCommands::ReadTotalPushCount: | 132 | case RingConCommands::ReadTotalPushCount: |
| 133 | ASSERT_MSG(data.size() == 0x4, "data.size is not 0x4 bytes"); | 133 | ASSERT_MSG(data.size() == 0x4, "data.size is not 0x4 bytes"); |
| 134 | send_command_async_event->GetWritableEvent().Signal(); | 134 | send_command_async_event->Signal(); |
| 135 | return true; | 135 | return true; |
| 136 | case RingConCommands::ResetRepCount: | 136 | case RingConCommands::ResetRepCount: |
| 137 | ASSERT_MSG(data.size() == 0x4, "data.size is not 0x4 bytes"); | 137 | ASSERT_MSG(data.size() == 0x4, "data.size is not 0x4 bytes"); |
| 138 | total_rep_count = 0; | 138 | total_rep_count = 0; |
| 139 | send_command_async_event->GetWritableEvent().Signal(); | 139 | send_command_async_event->Signal(); |
| 140 | return true; | 140 | return true; |
| 141 | case RingConCommands::SaveCalData: { | 141 | case RingConCommands::SaveCalData: { |
| 142 | ASSERT_MSG(data.size() == 0x14, "data.size is not 0x14 bytes"); | 142 | ASSERT_MSG(data.size() == 0x14, "data.size is not 0x14 bytes"); |
| @@ -144,14 +144,14 @@ bool RingController::SetCommand(const std::vector<u8>& data) { | |||
| 144 | SaveCalData save_info{}; | 144 | SaveCalData save_info{}; |
| 145 | std::memcpy(&save_info, data.data(), sizeof(SaveCalData)); | 145 | std::memcpy(&save_info, data.data(), sizeof(SaveCalData)); |
| 146 | user_calibration = save_info.calibration; | 146 | user_calibration = save_info.calibration; |
| 147 | send_command_async_event->GetWritableEvent().Signal(); | 147 | send_command_async_event->Signal(); |
| 148 | return true; | 148 | return true; |
| 149 | } | 149 | } |
| 150 | default: | 150 | default: |
| 151 | LOG_ERROR(Service_HID, "Command not implemented {}", command); | 151 | LOG_ERROR(Service_HID, "Command not implemented {}", command); |
| 152 | command = RingConCommands::Error; | 152 | command = RingConCommands::Error; |
| 153 | // Signal a reply to avoid softlocking the game | 153 | // Signal a reply to avoid softlocking the game |
| 154 | send_command_async_event->GetWritableEvent().Signal(); | 154 | send_command_async_event->Signal(); |
| 155 | return false; | 155 | return false; |
| 156 | } | 156 | } |
| 157 | } | 157 | } |
diff --git a/src/core/hle/service/kernel_helpers.cpp b/src/core/hle/service/kernel_helpers.cpp index 3e317367b..af133af93 100644 --- a/src/core/hle/service/kernel_helpers.cpp +++ b/src/core/hle/service/kernel_helpers.cpp | |||
| @@ -9,7 +9,6 @@ | |||
| 9 | #include "core/hle/kernel/k_readable_event.h" | 9 | #include "core/hle/kernel/k_readable_event.h" |
| 10 | #include "core/hle/kernel/k_resource_limit.h" | 10 | #include "core/hle/kernel/k_resource_limit.h" |
| 11 | #include "core/hle/kernel/k_scoped_resource_reservation.h" | 11 | #include "core/hle/kernel/k_scoped_resource_reservation.h" |
| 12 | #include "core/hle/kernel/k_writable_event.h" | ||
| 13 | #include "core/hle/service/kernel_helpers.h" | 12 | #include "core/hle/service/kernel_helpers.h" |
| 14 | 13 | ||
| 15 | namespace Service::KernelHelpers { | 14 | namespace Service::KernelHelpers { |
| @@ -46,7 +45,7 @@ Kernel::KEvent* ServiceContext::CreateEvent(std::string&& name) { | |||
| 46 | } | 45 | } |
| 47 | 46 | ||
| 48 | // Initialize the event. | 47 | // Initialize the event. |
| 49 | event->Initialize(std::move(name), process); | 48 | event->Initialize(process); |
| 50 | 49 | ||
| 51 | // Commit the thread reservation. | 50 | // Commit the thread reservation. |
| 52 | event_reservation.Commit(); | 51 | event_reservation.Commit(); |
| @@ -59,7 +58,7 @@ Kernel::KEvent* ServiceContext::CreateEvent(std::string&& name) { | |||
| 59 | 58 | ||
| 60 | void ServiceContext::CloseEvent(Kernel::KEvent* event) { | 59 | void ServiceContext::CloseEvent(Kernel::KEvent* event) { |
| 61 | event->GetReadableEvent().Close(); | 60 | event->GetReadableEvent().Close(); |
| 62 | event->GetWritableEvent().Close(); | 61 | event->Close(); |
| 63 | } | 62 | } |
| 64 | 63 | ||
| 65 | } // namespace Service::KernelHelpers | 64 | } // namespace Service::KernelHelpers |
diff --git a/src/core/hle/service/ldn/ldn.cpp b/src/core/hle/service/ldn/ldn.cpp index ea3e7e55a..6df563136 100644 --- a/src/core/hle/service/ldn/ldn.cpp +++ b/src/core/hle/service/ldn/ldn.cpp | |||
| @@ -165,7 +165,7 @@ public: | |||
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | void OnEventFired() { | 167 | void OnEventFired() { |
| 168 | state_change_event->GetWritableEvent().Signal(); | 168 | state_change_event->Signal(); |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | void GetState(Kernel::HLERequestContext& ctx) { | 171 | void GetState(Kernel::HLERequestContext& ctx) { |
diff --git a/src/core/hle/service/nfp/nfp_device.cpp b/src/core/hle/service/nfp/nfp_device.cpp index ec895ac01..76f8a267a 100644 --- a/src/core/hle/service/nfp/nfp_device.cpp +++ b/src/core/hle/service/nfp/nfp_device.cpp | |||
| @@ -58,7 +58,7 @@ NfpDevice::~NfpDevice() { | |||
| 58 | void NfpDevice::NpadUpdate(Core::HID::ControllerTriggerType type) { | 58 | void NfpDevice::NpadUpdate(Core::HID::ControllerTriggerType type) { |
| 59 | if (type == Core::HID::ControllerTriggerType::Connected || | 59 | if (type == Core::HID::ControllerTriggerType::Connected || |
| 60 | type == Core::HID::ControllerTriggerType::Disconnected) { | 60 | type == Core::HID::ControllerTriggerType::Disconnected) { |
| 61 | availability_change_event->GetWritableEvent().Signal(); | 61 | availability_change_event->Signal(); |
| 62 | return; | 62 | return; |
| 63 | } | 63 | } |
| 64 | 64 | ||
| @@ -100,7 +100,7 @@ bool NfpDevice::LoadAmiibo(std::span<const u8> data) { | |||
| 100 | 100 | ||
| 101 | device_state = DeviceState::TagFound; | 101 | device_state = DeviceState::TagFound; |
| 102 | deactivate_event->GetReadableEvent().Clear(); | 102 | deactivate_event->GetReadableEvent().Clear(); |
| 103 | activate_event->GetWritableEvent().Signal(); | 103 | activate_event->Signal(); |
| 104 | return true; | 104 | return true; |
| 105 | } | 105 | } |
| 106 | 106 | ||
| @@ -115,7 +115,7 @@ void NfpDevice::CloseAmiibo() { | |||
| 115 | encrypted_tag_data = {}; | 115 | encrypted_tag_data = {}; |
| 116 | tag_data = {}; | 116 | tag_data = {}; |
| 117 | activate_event->GetReadableEvent().Clear(); | 117 | activate_event->GetReadableEvent().Clear(); |
| 118 | deactivate_event->GetWritableEvent().Signal(); | 118 | deactivate_event->Signal(); |
| 119 | } | 119 | } |
| 120 | 120 | ||
| 121 | Kernel::KReadableEvent& NfpDevice::GetActivateEvent() const { | 121 | Kernel::KReadableEvent& NfpDevice::GetActivateEvent() const { |
diff --git a/src/core/hle/service/nim/nim.cpp b/src/core/hle/service/nim/nim.cpp index b2bb7426d..5a8a91e0b 100644 --- a/src/core/hle/service/nim/nim.cpp +++ b/src/core/hle/service/nim/nim.cpp | |||
| @@ -328,7 +328,7 @@ private: | |||
| 328 | void StartTask(Kernel::HLERequestContext& ctx) { | 328 | void StartTask(Kernel::HLERequestContext& ctx) { |
| 329 | // No need to connect to the internet, just finish the task straight away. | 329 | // No need to connect to the internet, just finish the task straight away. |
| 330 | LOG_DEBUG(Service_NIM, "called"); | 330 | LOG_DEBUG(Service_NIM, "called"); |
| 331 | finished_event->GetWritableEvent().Signal(); | 331 | finished_event->Signal(); |
| 332 | IPC::ResponseBuilder rb{ctx, 2}; | 332 | IPC::ResponseBuilder rb{ctx, 2}; |
| 333 | rb.Push(ResultSuccess); | 333 | rb.Push(ResultSuccess); |
| 334 | } | 334 | } |
| @@ -350,7 +350,7 @@ private: | |||
| 350 | 350 | ||
| 351 | void Cancel(Kernel::HLERequestContext& ctx) { | 351 | void Cancel(Kernel::HLERequestContext& ctx) { |
| 352 | LOG_DEBUG(Service_NIM, "called"); | 352 | LOG_DEBUG(Service_NIM, "called"); |
| 353 | finished_event->GetWritableEvent().Clear(); | 353 | finished_event->Clear(); |
| 354 | IPC::ResponseBuilder rb{ctx, 2}; | 354 | IPC::ResponseBuilder rb{ctx, 2}; |
| 355 | rb.Push(ResultSuccess); | 355 | rb.Push(ResultSuccess); |
| 356 | } | 356 | } |
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp b/src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp index 5bee4a3d3..eee11fab8 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp | |||
| @@ -12,7 +12,6 @@ | |||
| 12 | #include "common/scope_exit.h" | 12 | #include "common/scope_exit.h" |
| 13 | #include "core/core.h" | 13 | #include "core/core.h" |
| 14 | #include "core/hle/kernel/k_event.h" | 14 | #include "core/hle/kernel/k_event.h" |
| 15 | #include "core/hle/kernel/k_writable_event.h" | ||
| 16 | #include "core/hle/service/nvdrv/core/container.h" | 15 | #include "core/hle/service/nvdrv/core/container.h" |
| 17 | #include "core/hle/service/nvdrv/core/syncpoint_manager.h" | 16 | #include "core/hle/service/nvdrv/core/syncpoint_manager.h" |
| 18 | #include "core/hle/service/nvdrv/devices/nvhost_ctrl.h" | 17 | #include "core/hle/service/nvdrv/devices/nvhost_ctrl.h" |
| @@ -206,7 +205,7 @@ NvResult nvhost_ctrl::IocCtrlEventWait(const std::vector<u8>& input, std::vector | |||
| 206 | auto& event_ = events[slot]; | 205 | auto& event_ = events[slot]; |
| 207 | if (event_.status.exchange(EventState::Signalling, std::memory_order_acq_rel) == | 206 | if (event_.status.exchange(EventState::Signalling, std::memory_order_acq_rel) == |
| 208 | EventState::Waiting) { | 207 | EventState::Waiting) { |
| 209 | event_.kevent->GetWritableEvent().Signal(); | 208 | event_.kevent->Signal(); |
| 210 | } | 209 | } |
| 211 | event_.status.store(EventState::Signalled, std::memory_order_release); | 210 | event_.status.store(EventState::Signalled, std::memory_order_release); |
| 212 | }); | 211 | }); |
| @@ -306,7 +305,7 @@ NvResult nvhost_ctrl::IocCtrlClearEventWait(const std::vector<u8>& input, std::v | |||
| 306 | } | 305 | } |
| 307 | event.fails++; | 306 | event.fails++; |
| 308 | event.status.store(EventState::Cancelled, std::memory_order_release); | 307 | event.status.store(EventState::Cancelled, std::memory_order_release); |
| 309 | event.kevent->GetWritableEvent().Clear(); | 308 | event.kevent->Clear(); |
| 310 | 309 | ||
| 311 | return NvResult::Success; | 310 | return NvResult::Success; |
| 312 | } | 311 | } |
diff --git a/src/core/hle/service/nvdrv/nvdrv.cpp b/src/core/hle/service/nvdrv/nvdrv.cpp index 5e7b7468f..9d9924395 100644 --- a/src/core/hle/service/nvdrv/nvdrv.cpp +++ b/src/core/hle/service/nvdrv/nvdrv.cpp | |||
| @@ -8,7 +8,6 @@ | |||
| 8 | #include "core/core.h" | 8 | #include "core/core.h" |
| 9 | #include "core/hle/ipc_helpers.h" | 9 | #include "core/hle/ipc_helpers.h" |
| 10 | #include "core/hle/kernel/k_event.h" | 10 | #include "core/hle/kernel/k_event.h" |
| 11 | #include "core/hle/kernel/k_writable_event.h" | ||
| 12 | #include "core/hle/service/nvdrv/core/container.h" | 11 | #include "core/hle/service/nvdrv/core/container.h" |
| 13 | #include "core/hle/service/nvdrv/devices/nvdevice.h" | 12 | #include "core/hle/service/nvdrv/devices/nvdevice.h" |
| 14 | #include "core/hle/service/nvdrv/devices/nvdisp_disp0.h" | 13 | #include "core/hle/service/nvdrv/devices/nvdisp_disp0.h" |
diff --git a/src/core/hle/service/nvdrv/nvdrv_interface.h b/src/core/hle/service/nvdrv/nvdrv_interface.h index cd58a4f35..5ac06ee30 100644 --- a/src/core/hle/service/nvdrv/nvdrv_interface.h +++ b/src/core/hle/service/nvdrv/nvdrv_interface.h | |||
| @@ -7,10 +7,6 @@ | |||
| 7 | #include "core/hle/service/nvdrv/nvdrv.h" | 7 | #include "core/hle/service/nvdrv/nvdrv.h" |
| 8 | #include "core/hle/service/service.h" | 8 | #include "core/hle/service/service.h" |
| 9 | 9 | ||
| 10 | namespace Kernel { | ||
| 11 | class KWritableEvent; | ||
| 12 | } | ||
| 13 | |||
| 14 | namespace Service::Nvidia { | 10 | namespace Service::Nvidia { |
| 15 | 11 | ||
| 16 | class NVDRV final : public ServiceFramework<NVDRV> { | 12 | class NVDRV final : public ServiceFramework<NVDRV> { |
diff --git a/src/core/hle/service/nvflinger/buffer_queue_producer.cpp b/src/core/hle/service/nvflinger/buffer_queue_producer.cpp index d4ab23a10..77ddbb6ef 100644 --- a/src/core/hle/service/nvflinger/buffer_queue_producer.cpp +++ b/src/core/hle/service/nvflinger/buffer_queue_producer.cpp | |||
| @@ -11,7 +11,6 @@ | |||
| 11 | #include "core/hle/kernel/hle_ipc.h" | 11 | #include "core/hle/kernel/hle_ipc.h" |
| 12 | #include "core/hle/kernel/k_event.h" | 12 | #include "core/hle/kernel/k_event.h" |
| 13 | #include "core/hle/kernel/k_readable_event.h" | 13 | #include "core/hle/kernel/k_readable_event.h" |
| 14 | #include "core/hle/kernel/k_writable_event.h" | ||
| 15 | #include "core/hle/kernel/kernel.h" | 14 | #include "core/hle/kernel/kernel.h" |
| 16 | #include "core/hle/service/kernel_helpers.h" | 15 | #include "core/hle/service/kernel_helpers.h" |
| 17 | #include "core/hle/service/nvdrv/core/nvmap.h" | 16 | #include "core/hle/service/nvdrv/core/nvmap.h" |
| @@ -110,7 +109,7 @@ Status BufferQueueProducer::SetBufferCount(s32 buffer_count) { | |||
| 110 | 109 | ||
| 111 | core->override_max_buffer_count = buffer_count; | 110 | core->override_max_buffer_count = buffer_count; |
| 112 | core->SignalDequeueCondition(); | 111 | core->SignalDequeueCondition(); |
| 113 | buffer_wait_event->GetWritableEvent().Signal(); | 112 | buffer_wait_event->Signal(); |
| 114 | listener = core->consumer_listener; | 113 | listener = core->consumer_listener; |
| 115 | } | 114 | } |
| 116 | 115 | ||
| @@ -623,7 +622,7 @@ void BufferQueueProducer::CancelBuffer(s32 slot, const Fence& fence) { | |||
| 623 | slots[slot].fence = fence; | 622 | slots[slot].fence = fence; |
| 624 | 623 | ||
| 625 | core->SignalDequeueCondition(); | 624 | core->SignalDequeueCondition(); |
| 626 | buffer_wait_event->GetWritableEvent().Signal(); | 625 | buffer_wait_event->Signal(); |
| 627 | } | 626 | } |
| 628 | 627 | ||
| 629 | Status BufferQueueProducer::Query(NativeWindow what, s32* out_value) { | 628 | Status BufferQueueProducer::Query(NativeWindow what, s32* out_value) { |
| @@ -753,7 +752,7 @@ Status BufferQueueProducer::Disconnect(NativeWindowApi api) { | |||
| 753 | core->connected_producer_listener = nullptr; | 752 | core->connected_producer_listener = nullptr; |
| 754 | core->connected_api = NativeWindowApi::NoConnectedApi; | 753 | core->connected_api = NativeWindowApi::NoConnectedApi; |
| 755 | core->SignalDequeueCondition(); | 754 | core->SignalDequeueCondition(); |
| 756 | buffer_wait_event->GetWritableEvent().Signal(); | 755 | buffer_wait_event->Signal(); |
| 757 | listener = core->consumer_listener; | 756 | listener = core->consumer_listener; |
| 758 | } else { | 757 | } else { |
| 759 | LOG_ERROR(Service_NVFlinger, "still connected to another api (cur = {} req = {})", | 758 | LOG_ERROR(Service_NVFlinger, "still connected to another api (cur = {} req = {})", |
| @@ -802,7 +801,7 @@ Status BufferQueueProducer::SetPreallocatedBuffer(s32 slot, | |||
| 802 | } | 801 | } |
| 803 | 802 | ||
| 804 | core->SignalDequeueCondition(); | 803 | core->SignalDequeueCondition(); |
| 805 | buffer_wait_event->GetWritableEvent().Signal(); | 804 | buffer_wait_event->Signal(); |
| 806 | 805 | ||
| 807 | return Status::NoError; | 806 | return Status::NoError; |
| 808 | } | 807 | } |
diff --git a/src/core/hle/service/nvflinger/buffer_queue_producer.h b/src/core/hle/service/nvflinger/buffer_queue_producer.h index 0ba03a568..7526bf8ec 100644 --- a/src/core/hle/service/nvflinger/buffer_queue_producer.h +++ b/src/core/hle/service/nvflinger/buffer_queue_producer.h | |||
| @@ -24,7 +24,6 @@ namespace Kernel { | |||
| 24 | class KernelCore; | 24 | class KernelCore; |
| 25 | class KEvent; | 25 | class KEvent; |
| 26 | class KReadableEvent; | 26 | class KReadableEvent; |
| 27 | class KWritableEvent; | ||
| 28 | } // namespace Kernel | 27 | } // namespace Kernel |
| 29 | 28 | ||
| 30 | namespace Service::KernelHelpers { | 29 | namespace Service::KernelHelpers { |
diff --git a/src/core/hle/service/nvflinger/nvflinger.h b/src/core/hle/service/nvflinger/nvflinger.h index b62615de2..99509bc5b 100644 --- a/src/core/hle/service/nvflinger/nvflinger.h +++ b/src/core/hle/service/nvflinger/nvflinger.h | |||
| @@ -25,7 +25,6 @@ struct EventType; | |||
| 25 | 25 | ||
| 26 | namespace Kernel { | 26 | namespace Kernel { |
| 27 | class KReadableEvent; | 27 | class KReadableEvent; |
| 28 | class KWritableEvent; | ||
| 29 | } // namespace Kernel | 28 | } // namespace Kernel |
| 30 | 29 | ||
| 31 | namespace Service::Nvidia { | 30 | namespace Service::Nvidia { |
diff --git a/src/core/hle/service/ptm/psm.cpp b/src/core/hle/service/ptm/psm.cpp index 2c31e9485..1ac97fe31 100644 --- a/src/core/hle/service/ptm/psm.cpp +++ b/src/core/hle/service/ptm/psm.cpp | |||
| @@ -37,19 +37,19 @@ public: | |||
| 37 | 37 | ||
| 38 | void SignalChargerTypeChanged() { | 38 | void SignalChargerTypeChanged() { |
| 39 | if (should_signal && should_signal_charger_type) { | 39 | if (should_signal && should_signal_charger_type) { |
| 40 | state_change_event->GetWritableEvent().Signal(); | 40 | state_change_event->Signal(); |
| 41 | } | 41 | } |
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | void SignalPowerSupplyChanged() { | 44 | void SignalPowerSupplyChanged() { |
| 45 | if (should_signal && should_signal_power_supply) { | 45 | if (should_signal && should_signal_power_supply) { |
| 46 | state_change_event->GetWritableEvent().Signal(); | 46 | state_change_event->Signal(); |
| 47 | } | 47 | } |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | void SignalBatteryVoltageStateChanged() { | 50 | void SignalBatteryVoltageStateChanged() { |
| 51 | if (should_signal && should_signal_battery_voltage) { | 51 | if (should_signal && should_signal_battery_voltage) { |
| 52 | state_change_event->GetWritableEvent().Signal(); | 52 | state_change_event->Signal(); |
| 53 | } | 53 | } |
| 54 | } | 54 | } |
| 55 | 55 | ||
diff --git a/src/core/hle/service/time/system_clock_context_update_callback.cpp b/src/core/hle/service/time/system_clock_context_update_callback.cpp index a649bed3a..cafc04ee7 100644 --- a/src/core/hle/service/time/system_clock_context_update_callback.cpp +++ b/src/core/hle/service/time/system_clock_context_update_callback.cpp | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project | 1 | // SPDX-FileCopyrightText: Copyright 2019 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 "core/hle/kernel/k_writable_event.h" | 4 | #include "core/hle/kernel/k_event.h" |
| 5 | #include "core/hle/service/time/errors.h" | 5 | #include "core/hle/service/time/errors.h" |
| 6 | #include "core/hle/service/time/system_clock_context_update_callback.h" | 6 | #include "core/hle/service/time/system_clock_context_update_callback.h" |
| 7 | 7 | ||
| @@ -20,13 +20,13 @@ bool SystemClockContextUpdateCallback::NeedUpdate(const SystemClockContext& valu | |||
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | void SystemClockContextUpdateCallback::RegisterOperationEvent( | 22 | void SystemClockContextUpdateCallback::RegisterOperationEvent( |
| 23 | std::shared_ptr<Kernel::KWritableEvent>&& writable_event) { | 23 | std::shared_ptr<Kernel::KEvent>&& event) { |
| 24 | operation_event_list.emplace_back(std::move(writable_event)); | 24 | operation_event_list.emplace_back(std::move(event)); |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | void SystemClockContextUpdateCallback::BroadcastOperationEvent() { | 27 | void SystemClockContextUpdateCallback::BroadcastOperationEvent() { |
| 28 | for (const auto& writable_event : operation_event_list) { | 28 | for (const auto& event : operation_event_list) { |
| 29 | writable_event->Signal(); | 29 | event->Signal(); |
| 30 | } | 30 | } |
| 31 | } | 31 | } |
| 32 | 32 | ||
diff --git a/src/core/hle/service/time/system_clock_context_update_callback.h b/src/core/hle/service/time/system_clock_context_update_callback.h index 9c6caf196..bf657acd9 100644 --- a/src/core/hle/service/time/system_clock_context_update_callback.h +++ b/src/core/hle/service/time/system_clock_context_update_callback.h | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | #include "core/hle/service/time/clock_types.h" | 9 | #include "core/hle/service/time/clock_types.h" |
| 10 | 10 | ||
| 11 | namespace Kernel { | 11 | namespace Kernel { |
| 12 | class KWritableEvent; | 12 | class KEvent; |
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | namespace Service::Time::Clock { | 15 | namespace Service::Time::Clock { |
| @@ -24,7 +24,7 @@ public: | |||
| 24 | 24 | ||
| 25 | bool NeedUpdate(const SystemClockContext& value) const; | 25 | bool NeedUpdate(const SystemClockContext& value) const; |
| 26 | 26 | ||
| 27 | void RegisterOperationEvent(std::shared_ptr<Kernel::KWritableEvent>&& writable_event); | 27 | void RegisterOperationEvent(std::shared_ptr<Kernel::KEvent>&& event); |
| 28 | 28 | ||
| 29 | void BroadcastOperationEvent(); | 29 | void BroadcastOperationEvent(); |
| 30 | 30 | ||
| @@ -37,7 +37,7 @@ protected: | |||
| 37 | 37 | ||
| 38 | private: | 38 | private: |
| 39 | bool has_context{}; | 39 | bool has_context{}; |
| 40 | std::vector<std::shared_ptr<Kernel::KWritableEvent>> operation_event_list; | 40 | std::vector<std::shared_ptr<Kernel::KEvent>> operation_event_list; |
| 41 | }; | 41 | }; |
| 42 | 42 | ||
| 43 | } // namespace Service::Time::Clock | 43 | } // namespace Service::Time::Clock |
diff --git a/src/core/hle/service/vi/display/vi_display.cpp b/src/core/hle/service/vi/display/vi_display.cpp index 288aafaaf..8ef74f1f0 100644 --- a/src/core/hle/service/vi/display/vi_display.cpp +++ b/src/core/hle/service/vi/display/vi_display.cpp | |||
| @@ -10,7 +10,6 @@ | |||
| 10 | #include "core/core.h" | 10 | #include "core/core.h" |
| 11 | #include "core/hle/kernel/k_event.h" | 11 | #include "core/hle/kernel/k_event.h" |
| 12 | #include "core/hle/kernel/k_readable_event.h" | 12 | #include "core/hle/kernel/k_readable_event.h" |
| 13 | #include "core/hle/kernel/k_writable_event.h" | ||
| 14 | #include "core/hle/service/kernel_helpers.h" | 13 | #include "core/hle/service/kernel_helpers.h" |
| 15 | #include "core/hle/service/nvdrv/core/container.h" | 14 | #include "core/hle/service/nvdrv/core/container.h" |
| 16 | #include "core/hle/service/nvflinger/buffer_item_consumer.h" | 15 | #include "core/hle/service/nvflinger/buffer_item_consumer.h" |
| @@ -74,7 +73,7 @@ Kernel::KReadableEvent* Display::GetVSyncEventUnchecked() { | |||
| 74 | } | 73 | } |
| 75 | 74 | ||
| 76 | void Display::SignalVSyncEvent() { | 75 | void Display::SignalVSyncEvent() { |
| 77 | vsync_event->GetWritableEvent().Signal(); | 76 | vsync_event->Signal(); |
| 78 | } | 77 | } |
| 79 | 78 | ||
| 80 | void Display::CreateLayer(u64 layer_id, u32 binder_id, | 79 | void Display::CreateLayer(u64 layer_id, u32 binder_id, |