summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/audio_core/audio_renderer.cpp4
-rw-r--r--src/audio_core/audio_renderer.h7
-rw-r--r--src/core/hle/kernel/svc.cpp11
-rw-r--r--src/core/hle/service/am/am.cpp38
-rw-r--r--src/core/hle/service/am/am.h16
-rw-r--r--src/core/hle/service/am/applets/applets.cpp31
-rw-r--r--src/core/hle/service/am/applets/applets.h17
-rw-r--r--src/core/hle/service/aoc/aoc_u.cpp13
-rw-r--r--src/core/hle/service/aoc/aoc_u.h6
-rw-r--r--src/core/hle/service/audio/audout_u.cpp14
-rw-r--r--src/core/hle/service/audio/audren_u.cpp24
-rw-r--r--src/core/hle/service/btdrv/btdrv.cpp16
-rw-r--r--src/core/hle/service/btm/btm.cpp55
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp14
-rw-r--r--src/core/hle/service/hid/controllers/npad.h11
-rw-r--r--src/core/hle/service/hid/hid.cpp3
-rw-r--r--src/core/hle/service/nfp/nfp.cpp35
-rw-r--r--src/core/hle/service/nfp/nfp.h10
-rw-r--r--src/core/hle/service/nifm/nifm.cpp18
-rw-r--r--src/core/hle/service/nim/nim.cpp16
-rw-r--r--src/core/hle/service/nvdrv/interface.cpp11
-rw-r--r--src/core/hle/service/nvdrv/interface.h7
-rw-r--r--src/core/hle/service/nvflinger/buffer_queue.cpp17
-rw-r--r--src/core/hle/service/nvflinger/buffer_queue.h15
-rw-r--r--src/core/hle/service/nvflinger/nvflinger.cpp13
-rw-r--r--src/core/hle/service/nvflinger/nvflinger.h11
-rw-r--r--src/core/hle/service/vi/vi.cpp5
-rw-r--r--src/yuzu/debugger/wait_tree.cpp9
-rw-r--r--src/yuzu/debugger/wait_tree.h4
29 files changed, 287 insertions, 164 deletions
diff --git a/src/audio_core/audio_renderer.cpp b/src/audio_core/audio_renderer.cpp
index 23e5d3f10..2e59894ab 100644
--- a/src/audio_core/audio_renderer.cpp
+++ b/src/audio_core/audio_renderer.cpp
@@ -8,7 +8,7 @@
8#include "audio_core/codec.h" 8#include "audio_core/codec.h"
9#include "common/assert.h" 9#include "common/assert.h"
10#include "common/logging/log.h" 10#include "common/logging/log.h"
11#include "core/hle/kernel/event.h" 11#include "core/hle/kernel/writable_event.h"
12#include "core/memory.h" 12#include "core/memory.h"
13 13
14namespace AudioCore { 14namespace AudioCore {
@@ -72,7 +72,7 @@ private:
72 EffectInStatus info{}; 72 EffectInStatus info{};
73}; 73};
74AudioRenderer::AudioRenderer(AudioRendererParameter params, 74AudioRenderer::AudioRenderer(AudioRendererParameter params,
75 Kernel::SharedPtr<Kernel::Event> buffer_event) 75 Kernel::SharedPtr<Kernel::WritableEvent> buffer_event)
76 : worker_params{params}, buffer_event{buffer_event}, voices(params.voice_count), 76 : worker_params{params}, buffer_event{buffer_event}, voices(params.voice_count),
77 effects(params.effect_count) { 77 effects(params.effect_count) {
78 78
diff --git a/src/audio_core/audio_renderer.h b/src/audio_core/audio_renderer.h
index 71ba4be40..7826881bf 100644
--- a/src/audio_core/audio_renderer.h
+++ b/src/audio_core/audio_renderer.h
@@ -15,7 +15,7 @@
15#include "core/hle/kernel/object.h" 15#include "core/hle/kernel/object.h"
16 16
17namespace Kernel { 17namespace Kernel {
18class Event; 18class WritableEvent;
19} 19}
20 20
21namespace AudioCore { 21namespace AudioCore {
@@ -208,7 +208,8 @@ static_assert(sizeof(UpdateDataHeader) == 0x40, "UpdateDataHeader has wrong size
208 208
209class AudioRenderer { 209class AudioRenderer {
210public: 210public:
211 AudioRenderer(AudioRendererParameter params, Kernel::SharedPtr<Kernel::Event> buffer_event); 211 AudioRenderer(AudioRendererParameter params,
212 Kernel::SharedPtr<Kernel::WritableEvent> buffer_event);
212 ~AudioRenderer(); 213 ~AudioRenderer();
213 214
214 std::vector<u8> UpdateAudioRenderer(const std::vector<u8>& input_params); 215 std::vector<u8> UpdateAudioRenderer(const std::vector<u8>& input_params);
@@ -224,7 +225,7 @@ private:
224 class VoiceState; 225 class VoiceState;
225 226
226 AudioRendererParameter worker_params; 227 AudioRendererParameter worker_params;
227 Kernel::SharedPtr<Kernel::Event> buffer_event; 228 Kernel::SharedPtr<Kernel::WritableEvent> buffer_event;
228 std::vector<VoiceState> voices; 229 std::vector<VoiceState> voices;
229 std::vector<EffectState> effects; 230 std::vector<EffectState> effects;
230 std::unique_ptr<AudioOut> audio_out; 231 std::unique_ptr<AudioOut> audio_out;
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 5e9660a48..85a9c50fb 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -20,17 +20,18 @@
20#include "core/hle/kernel/address_arbiter.h" 20#include "core/hle/kernel/address_arbiter.h"
21#include "core/hle/kernel/client_port.h" 21#include "core/hle/kernel/client_port.h"
22#include "core/hle/kernel/client_session.h" 22#include "core/hle/kernel/client_session.h"
23#include "core/hle/kernel/event.h"
24#include "core/hle/kernel/handle_table.h" 23#include "core/hle/kernel/handle_table.h"
25#include "core/hle/kernel/kernel.h" 24#include "core/hle/kernel/kernel.h"
26#include "core/hle/kernel/mutex.h" 25#include "core/hle/kernel/mutex.h"
27#include "core/hle/kernel/process.h" 26#include "core/hle/kernel/process.h"
27#include "core/hle/kernel/readable_event.h"
28#include "core/hle/kernel/resource_limit.h" 28#include "core/hle/kernel/resource_limit.h"
29#include "core/hle/kernel/scheduler.h" 29#include "core/hle/kernel/scheduler.h"
30#include "core/hle/kernel/shared_memory.h" 30#include "core/hle/kernel/shared_memory.h"
31#include "core/hle/kernel/svc.h" 31#include "core/hle/kernel/svc.h"
32#include "core/hle/kernel/svc_wrap.h" 32#include "core/hle/kernel/svc_wrap.h"
33#include "core/hle/kernel/thread.h" 33#include "core/hle/kernel/thread.h"
34#include "core/hle/kernel/writable_event.h"
34#include "core/hle/lock.h" 35#include "core/hle/lock.h"
35#include "core/hle/result.h" 36#include "core/hle/result.h"
36#include "core/hle/service/service.h" 37#include "core/hle/service/service.h"
@@ -1361,11 +1362,11 @@ static ResultCode ResetSignal(Handle handle) {
1361 LOG_DEBUG(Kernel_SVC, "called handle 0x{:08X}", handle); 1362 LOG_DEBUG(Kernel_SVC, "called handle 0x{:08X}", handle);
1362 1363
1363 const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); 1364 const auto& handle_table = Core::CurrentProcess()->GetHandleTable();
1364 auto event = handle_table.Get<Event>(handle); 1365 auto event = handle_table.Get<ReadableEvent>(handle);
1365 1366
1366 ASSERT(event != nullptr); 1367 ASSERT(event != nullptr);
1367 1368
1368 event->Clear(); 1369 event->PromoteToWritable()->Clear();
1369 return RESULT_SUCCESS; 1370 return RESULT_SUCCESS;
1370} 1371}
1371 1372
@@ -1524,13 +1525,13 @@ static ResultCode ClearEvent(Handle handle) {
1524 LOG_TRACE(Kernel_SVC, "called, event=0x{:08X}", handle); 1525 LOG_TRACE(Kernel_SVC, "called, event=0x{:08X}", handle);
1525 1526
1526 const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); 1527 const auto& handle_table = Core::CurrentProcess()->GetHandleTable();
1527 SharedPtr<Event> evt = handle_table.Get<Event>(handle); 1528 SharedPtr<ReadableEvent> evt = handle_table.Get<ReadableEvent>(handle);
1528 if (evt == nullptr) { 1529 if (evt == nullptr) {
1529 LOG_ERROR(Kernel_SVC, "Event handle does not exist, handle=0x{:08X}", handle); 1530 LOG_ERROR(Kernel_SVC, "Event handle does not exist, handle=0x{:08X}", handle);
1530 return ERR_INVALID_HANDLE; 1531 return ERR_INVALID_HANDLE;
1531 } 1532 }
1532 1533
1533 evt->Clear(); 1534 evt->PromoteToWritable()->Clear();
1534 return RESULT_SUCCESS; 1535 return RESULT_SUCCESS;
1535} 1536}
1536 1537
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp
index d595c37b0..43c91e521 100644
--- a/src/core/hle/service/am/am.cpp
+++ b/src/core/hle/service/am/am.cpp
@@ -9,9 +9,11 @@
9#include "audio_core/audio_renderer.h" 9#include "audio_core/audio_renderer.h"
10#include "core/core.h" 10#include "core/core.h"
11#include "core/hle/ipc_helpers.h" 11#include "core/hle/ipc_helpers.h"
12#include "core/hle/kernel/event.h" 12#include "core/hle/kernel/kernel.h"
13#include "core/hle/kernel/process.h" 13#include "core/hle/kernel/process.h"
14#include "core/hle/kernel/readable_event.h"
14#include "core/hle/kernel/shared_memory.h" 15#include "core/hle/kernel/shared_memory.h"
16#include "core/hle/kernel/writable_event.h"
15#include "core/hle/service/acc/profile_manager.h" 17#include "core/hle/service/acc/profile_manager.h"
16#include "core/hle/service/am/am.h" 18#include "core/hle/service/am/am.h"
17#include "core/hle/service/am/applet_ae.h" 19#include "core/hle/service/am/applet_ae.h"
@@ -208,8 +210,8 @@ ISelfController::ISelfController(std::shared_ptr<NVFlinger::NVFlinger> nvflinger
208 RegisterHandlers(functions); 210 RegisterHandlers(functions);
209 211
210 auto& kernel = Core::System::GetInstance().Kernel(); 212 auto& kernel = Core::System::GetInstance().Kernel();
211 launchable_event = 213 launchable_event = Kernel::WritableEvent::CreateRegisteredEventPair(
212 Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, "ISelfController:LaunchableEvent"); 214 kernel, Kernel::ResetType::Sticky, "ISelfController:LaunchableEvent");
213} 215}
214 216
215ISelfController::~ISelfController() = default; 217ISelfController::~ISelfController() = default;
@@ -299,8 +301,7 @@ void ISelfController::GetLibraryAppletLaunchableEvent(Kernel::HLERequestContext&
299 301
300 IPC::ResponseBuilder rb{ctx, 2, 1}; 302 IPC::ResponseBuilder rb{ctx, 2, 1};
301 rb.Push(RESULT_SUCCESS); 303 rb.Push(RESULT_SUCCESS);
302 rb.PushCopyObjects(launchable_event); 304 rb.PushCopyObjects(event->second);
303}
304 305
305void ISelfController::SetScreenShotImageOrientation(Kernel::HLERequestContext& ctx) { 306void ISelfController::SetScreenShotImageOrientation(Kernel::HLERequestContext& ctx) {
306 LOG_WARNING(Service_AM, "(STUBBED) called"); 307 LOG_WARNING(Service_AM, "(STUBBED) called");
@@ -348,20 +349,26 @@ void ISelfController::GetIdleTimeDetectionExtension(Kernel::HLERequestContext& c
348 349
349AppletMessageQueue::AppletMessageQueue() { 350AppletMessageQueue::AppletMessageQueue() {
350 auto& kernel = Core::System::GetInstance().Kernel(); 351 auto& kernel = Core::System::GetInstance().Kernel();
351 on_new_message = Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, 352 on_new_message = Kernel::WritableEvent::CreateRegisteredEventPair(
352 "AMMessageQueue:OnMessageRecieved"); 353 kernel, Kernel::ResetType::Sticky, "AMMessageQueue:OnMessageRecieved");
353 on_operation_mode_changed = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, 354 on_operation_mode_changed = Kernel::WritableEvent::CreateRegisteredEventPair(
354 "AMMessageQueue:OperationModeChanged"); 355 kernel, Kernel::ResetType::OneShot, "AMMessageQueue:OperationModeChanged");
355} 356}
356 357
357AppletMessageQueue::~AppletMessageQueue() = default; 358AppletMessageQueue::~AppletMessageQueue() = default;
358 359
359const Kernel::SharedPtr<Kernel::Event>& AppletMessageQueue::GetMesssageRecieveEvent() const { 360const Kernel::SharedPtr<Kernel::ReadableEvent>& AppletMessageQueue::GetMesssageRecieveEvent()
360 return on_new_message; 361 const {
362 const auto& event{
363 Core::System::GetInstance().Kernel().FindNamedEvent("AMMessageQueue:OnMessageRecieved")};
364 return event->second;
361} 365}
362 366
363const Kernel::SharedPtr<Kernel::Event>& AppletMessageQueue::GetOperationModeChangedEvent() const { 367const Kernel::SharedPtr<Kernel::ReadableEvent>& AppletMessageQueue::GetOperationModeChangedEvent()
364 return on_operation_mode_changed; 368 const {
369 const auto& event{
370 Core::System::GetInstance().Kernel().FindNamedEvent("AMMessageQueue:OperationModeChanged")};
371 return event->second;
365} 372}
366 373
367void AppletMessageQueue::PushMessage(AppletMessage msg) { 374void AppletMessageQueue::PushMessage(AppletMessage msg) {
@@ -426,9 +433,6 @@ ICommonStateGetter::ICommonStateGetter(std::shared_ptr<AppletMessageQueue> msg_q
426 // clang-format on 433 // clang-format on
427 434
428 RegisterHandlers(functions); 435 RegisterHandlers(functions);
429
430 auto& kernel = Core::System::GetInstance().Kernel();
431 event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "ICommonStateGetter:Event");
432} 436}
433 437
434ICommonStateGetter::~ICommonStateGetter() = default; 438ICommonStateGetter::~ICommonStateGetter() = default;
@@ -564,8 +568,8 @@ private:
564 void GetAppletStateChangedEvent(Kernel::HLERequestContext& ctx) { 568 void GetAppletStateChangedEvent(Kernel::HLERequestContext& ctx) {
565 LOG_DEBUG(Service_AM, "called"); 569 LOG_DEBUG(Service_AM, "called");
566 570
571 applet->GetBroker().SignalStateChanged();
567 const auto event = applet->GetBroker().GetStateChangedEvent(); 572 const auto event = applet->GetBroker().GetStateChangedEvent();
568 event->Signal();
569 573
570 IPC::ResponseBuilder rb{ctx, 2, 1}; 574 IPC::ResponseBuilder rb{ctx, 2, 1};
571 rb.Push(RESULT_SUCCESS); 575 rb.Push(RESULT_SUCCESS);
diff --git a/src/core/hle/service/am/am.h b/src/core/hle/service/am/am.h
index 44c1bcde5..ef90b0702 100644
--- a/src/core/hle/service/am/am.h
+++ b/src/core/hle/service/am/am.h
@@ -9,8 +9,9 @@
9#include "core/hle/service/service.h" 9#include "core/hle/service/service.h"
10 10
11namespace Kernel { 11namespace Kernel {
12class Event; 12class ReadableEvent;
13} 13class WritableEvent;
14} // namespace Kernel
14 15
15namespace Service { 16namespace Service {
16namespace NVFlinger { 17namespace NVFlinger {
@@ -52,8 +53,8 @@ public:
52 AppletMessageQueue(); 53 AppletMessageQueue();
53 ~AppletMessageQueue(); 54 ~AppletMessageQueue();
54 55
55 const Kernel::SharedPtr<Kernel::Event>& GetMesssageRecieveEvent() const; 56 const Kernel::SharedPtr<Kernel::ReadableEvent>& GetMesssageRecieveEvent() const;
56 const Kernel::SharedPtr<Kernel::Event>& GetOperationModeChangedEvent() const; 57 const Kernel::SharedPtr<Kernel::ReadableEvent>& GetOperationModeChangedEvent() const;
57 void PushMessage(AppletMessage msg); 58 void PushMessage(AppletMessage msg);
58 AppletMessage PopMessage(); 59 AppletMessage PopMessage();
59 std::size_t GetMessageCount() const; 60 std::size_t GetMessageCount() const;
@@ -61,8 +62,8 @@ public:
61 62
62private: 63private:
63 std::queue<AppletMessage> messages; 64 std::queue<AppletMessage> messages;
64 Kernel::SharedPtr<Kernel::Event> on_new_message; 65 Kernel::SharedPtr<Kernel::WritableEvent> on_new_message;
65 Kernel::SharedPtr<Kernel::Event> on_operation_mode_changed; 66 Kernel::SharedPtr<Kernel::WritableEvent> on_operation_mode_changed;
66}; 67};
67 68
68class IWindowController final : public ServiceFramework<IWindowController> { 69class IWindowController final : public ServiceFramework<IWindowController> {
@@ -122,7 +123,7 @@ private:
122 void GetIdleTimeDetectionExtension(Kernel::HLERequestContext& ctx); 123 void GetIdleTimeDetectionExtension(Kernel::HLERequestContext& ctx);
123 124
124 std::shared_ptr<NVFlinger::NVFlinger> nvflinger; 125 std::shared_ptr<NVFlinger::NVFlinger> nvflinger;
125 Kernel::SharedPtr<Kernel::Event> launchable_event; 126 Kernel::SharedPtr<Kernel::WritableEvent> launchable_event;
126 u32 idle_time_detection_extension = 0; 127 u32 idle_time_detection_extension = 0;
127}; 128};
128 129
@@ -151,7 +152,6 @@ private:
151 void GetBootMode(Kernel::HLERequestContext& ctx); 152 void GetBootMode(Kernel::HLERequestContext& ctx);
152 void GetDefaultDisplayResolution(Kernel::HLERequestContext& ctx); 153 void GetDefaultDisplayResolution(Kernel::HLERequestContext& ctx);
153 154
154 Kernel::SharedPtr<Kernel::Event> event;
155 std::shared_ptr<AppletMessageQueue> msg_queue; 155 std::shared_ptr<AppletMessageQueue> msg_queue;
156}; 156};
157 157
diff --git a/src/core/hle/service/am/applets/applets.cpp b/src/core/hle/service/am/applets/applets.cpp
index becbadd06..494205322 100644
--- a/src/core/hle/service/am/applets/applets.cpp
+++ b/src/core/hle/service/am/applets/applets.cpp
@@ -5,8 +5,9 @@
5#include <cstring> 5#include <cstring>
6#include "common/assert.h" 6#include "common/assert.h"
7#include "core/core.h" 7#include "core/core.h"
8#include "core/hle/kernel/event.h" 8#include "core/hle/kernel/readable_event.h"
9#include "core/hle/kernel/server_port.h" 9#include "core/hle/kernel/server_port.h"
10#include "core/hle/kernel/writable_event.h"
10#include "core/hle/service/am/am.h" 11#include "core/hle/service/am/am.h"
11#include "core/hle/service/am/applets/applets.h" 12#include "core/hle/service/am/applets/applets.h"
12 13
@@ -14,11 +15,11 @@ namespace Service::AM::Applets {
14 15
15AppletDataBroker::AppletDataBroker() { 16AppletDataBroker::AppletDataBroker() {
16 auto& kernel = Core::System::GetInstance().Kernel(); 17 auto& kernel = Core::System::GetInstance().Kernel();
17 state_changed_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, 18 state_changed_event = Kernel::WritableEvent::CreateRegisteredEventPair(
18 "ILibraryAppletAccessor:StateChangedEvent"); 19 kernel, Kernel::ResetType::OneShot, "ILibraryAppletAccessor:StateChangedEvent");
19 pop_out_data_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, 20 pop_out_data_event = Kernel::WritableEvent::CreateRegisteredEventPair(
20 "ILibraryAppletAccessor:PopDataOutEvent"); 21 kernel, Kernel::ResetType::OneShot, "ILibraryAppletAccessor:PopDataOutEvent");
21 pop_interactive_out_data_event = Kernel::Event::Create( 22 pop_interactive_out_data_event = Kernel::WritableEvent::CreateRegisteredEventPair(
22 kernel, Kernel::ResetType::OneShot, "ILibraryAppletAccessor:PopInteractiveDataOutEvent"); 23 kernel, Kernel::ResetType::OneShot, "ILibraryAppletAccessor:PopInteractiveDataOutEvent");
23} 24}
24 25
@@ -82,16 +83,22 @@ void AppletDataBroker::SignalStateChanged() const {
82 state_changed_event->Signal(); 83 state_changed_event->Signal();
83} 84}
84 85
85Kernel::SharedPtr<Kernel::Event> AppletDataBroker::GetNormalDataEvent() const { 86Kernel::SharedPtr<Kernel::ReadableEvent> AppletDataBroker::GetNormalDataEvent() const {
86 return pop_out_data_event; 87 const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent(
88 "ILibraryAppletAccessor:PopDataOutEvent")};
89 return event->second;
87} 90}
88 91
89Kernel::SharedPtr<Kernel::Event> AppletDataBroker::GetInteractiveDataEvent() const { 92Kernel::SharedPtr<Kernel::ReadableEvent> AppletDataBroker::GetInteractiveDataEvent() const {
90 return pop_interactive_out_data_event; 93 const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent(
94 "ILibraryAppletAccessor:PopInteractiveDataOutEvent")};
95 return event->second;
91} 96}
92 97
93Kernel::SharedPtr<Kernel::Event> AppletDataBroker::GetStateChangedEvent() const { 98Kernel::SharedPtr<Kernel::ReadableEvent> AppletDataBroker::GetStateChangedEvent() const {
94 return state_changed_event; 99 const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent(
100 "ILibraryAppletAccessor:StateChangedEvent")};
101 return event->second;
95} 102}
96 103
97Applet::Applet() = default; 104Applet::Applet() = default;
diff --git a/src/core/hle/service/am/applets/applets.h b/src/core/hle/service/am/applets/applets.h
index f65ea119c..5cd6232cc 100644
--- a/src/core/hle/service/am/applets/applets.h
+++ b/src/core/hle/service/am/applets/applets.h
@@ -12,8 +12,9 @@
12union ResultCode; 12union ResultCode;
13 13
14namespace Kernel { 14namespace Kernel {
15class Event; 15class ReadableEvent;
16} 16class WritableEvent;
17} // namespace Kernel
17 18
18namespace Service::AM { 19namespace Service::AM {
19 20
@@ -40,9 +41,9 @@ public:
40 41
41 void SignalStateChanged() const; 42 void SignalStateChanged() const;
42 43
43 Kernel::SharedPtr<Kernel::Event> GetNormalDataEvent() const; 44 Kernel::SharedPtr<Kernel::ReadableEvent> GetNormalDataEvent() const;
44 Kernel::SharedPtr<Kernel::Event> GetInteractiveDataEvent() const; 45 Kernel::SharedPtr<Kernel::ReadableEvent> GetInteractiveDataEvent() const;
45 Kernel::SharedPtr<Kernel::Event> GetStateChangedEvent() const; 46 Kernel::SharedPtr<Kernel::ReadableEvent> GetStateChangedEvent() const;
46 47
47private: 48private:
48 // Queues are named from applet's perspective 49 // Queues are named from applet's perspective
@@ -59,13 +60,13 @@ private:
59 // PopInteractiveDataToGame and PushInteractiveDataFromApplet 60 // PopInteractiveDataToGame and PushInteractiveDataFromApplet
60 std::queue<std::unique_ptr<IStorage>> out_interactive_channel; 61 std::queue<std::unique_ptr<IStorage>> out_interactive_channel;
61 62
62 Kernel::SharedPtr<Kernel::Event> state_changed_event; 63 Kernel::SharedPtr<Kernel::WritableEvent> state_changed_event;
63 64
64 // Signaled on PushNormalDataFromApplet 65 // Signaled on PushNormalDataFromApplet
65 Kernel::SharedPtr<Kernel::Event> pop_out_data_event; 66 Kernel::SharedPtr<Kernel::WritableEvent> pop_out_data_event;
66 67
67 // Signaled on PushInteractiveDataFromApplet 68 // Signaled on PushInteractiveDataFromApplet
68 Kernel::SharedPtr<Kernel::Event> pop_interactive_out_data_event; 69 Kernel::SharedPtr<Kernel::WritableEvent> pop_interactive_out_data_event;
69}; 70};
70 71
71class Applet { 72class Applet {
diff --git a/src/core/hle/service/aoc/aoc_u.cpp b/src/core/hle/service/aoc/aoc_u.cpp
index bacf19de2..a89f99dc7 100644
--- a/src/core/hle/service/aoc/aoc_u.cpp
+++ b/src/core/hle/service/aoc/aoc_u.cpp
@@ -13,8 +13,10 @@
13#include "core/file_sys/patch_manager.h" 13#include "core/file_sys/patch_manager.h"
14#include "core/file_sys/registered_cache.h" 14#include "core/file_sys/registered_cache.h"
15#include "core/hle/ipc_helpers.h" 15#include "core/hle/ipc_helpers.h"
16#include "core/hle/kernel/event.h" 16#include "core/hle/kernel/kernel.h"
17#include "core/hle/kernel/process.h" 17#include "core/hle/kernel/process.h"
18#include "core/hle/kernel/readable_event.h"
19#include "core/hle/kernel/writable_event.h"
18#include "core/hle/service/aoc/aoc_u.h" 20#include "core/hle/service/aoc/aoc_u.h"
19#include "core/hle/service/filesystem/filesystem.h" 21#include "core/hle/service/filesystem/filesystem.h"
20#include "core/loader/loader.h" 22#include "core/loader/loader.h"
@@ -61,8 +63,8 @@ AOC_U::AOC_U() : ServiceFramework("aoc:u"), add_on_content(AccumulateAOCTitleIDs
61 RegisterHandlers(functions); 63 RegisterHandlers(functions);
62 64
63 auto& kernel = Core::System::GetInstance().Kernel(); 65 auto& kernel = Core::System::GetInstance().Kernel();
64 aoc_change_event = Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, 66 aoc_change_event = Kernel::WritableEvent::CreateRegisteredEventPair(
65 "GetAddOnContentListChanged:Event"); 67 kernel, Kernel::ResetType::Sticky, "GetAddOnContentListChanged:Event");
66} 68}
67 69
68AOC_U::~AOC_U() = default; 70AOC_U::~AOC_U() = default;
@@ -142,9 +144,12 @@ void AOC_U::PrepareAddOnContent(Kernel::HLERequestContext& ctx) {
142void AOC_U::GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx) { 144void AOC_U::GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx) {
143 LOG_WARNING(Service_AOC, "(STUBBED) called"); 145 LOG_WARNING(Service_AOC, "(STUBBED) called");
144 146
147 const auto& event{
148 Core::System::GetInstance().Kernel().FindNamedEvent("GetAddOnContentListChanged:Event")};
149
145 IPC::ResponseBuilder rb{ctx, 2, 1}; 150 IPC::ResponseBuilder rb{ctx, 2, 1};
146 rb.Push(RESULT_SUCCESS); 151 rb.Push(RESULT_SUCCESS);
147 rb.PushCopyObjects(aoc_change_event); 152 rb.PushCopyObjects(event->second);
148} 153}
149 154
150void InstallInterfaces(SM::ServiceManager& service_manager) { 155void InstallInterfaces(SM::ServiceManager& service_manager) {
diff --git a/src/core/hle/service/aoc/aoc_u.h b/src/core/hle/service/aoc/aoc_u.h
index 68d94fdaa..f32a757aa 100644
--- a/src/core/hle/service/aoc/aoc_u.h
+++ b/src/core/hle/service/aoc/aoc_u.h
@@ -6,6 +6,10 @@
6 6
7#include "core/hle/service/service.h" 7#include "core/hle/service/service.h"
8 8
9namespace Kernel {
10class WritableEvent;
11}
12
9namespace Service::AOC { 13namespace Service::AOC {
10 14
11class AOC_U final : public ServiceFramework<AOC_U> { 15class AOC_U final : public ServiceFramework<AOC_U> {
@@ -21,7 +25,7 @@ private:
21 void GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx); 25 void GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx);
22 26
23 std::vector<u64> add_on_content; 27 std::vector<u64> add_on_content;
24 Kernel::SharedPtr<Kernel::Event> aoc_change_event; 28 Kernel::SharedPtr<Kernel::WritableEvent> aoc_change_event;
25}; 29};
26 30
27/// Registers all AOC services with the specified service manager. 31/// Registers all AOC services with the specified service manager.
diff --git a/src/core/hle/service/audio/audout_u.cpp b/src/core/hle/service/audio/audout_u.cpp
index 2ee9bc273..b5012e579 100644
--- a/src/core/hle/service/audio/audout_u.cpp
+++ b/src/core/hle/service/audio/audout_u.cpp
@@ -13,8 +13,10 @@
13#include "common/swap.h" 13#include "common/swap.h"
14#include "core/core.h" 14#include "core/core.h"
15#include "core/hle/ipc_helpers.h" 15#include "core/hle/ipc_helpers.h"
16#include "core/hle/kernel/event.h"
17#include "core/hle/kernel/hle_ipc.h" 16#include "core/hle/kernel/hle_ipc.h"
17#include "core/hle/kernel/kernel.h"
18#include "core/hle/kernel/readable_event.h"
19#include "core/hle/kernel/writable_event.h"
18#include "core/hle/service/audio/audout_u.h" 20#include "core/hle/service/audio/audout_u.h"
19#include "core/memory.h" 21#include "core/memory.h"
20 22
@@ -67,8 +69,8 @@ public:
67 69
68 // This is the event handle used to check if the audio buffer was released 70 // This is the event handle used to check if the audio buffer was released
69 auto& kernel = Core::System::GetInstance().Kernel(); 71 auto& kernel = Core::System::GetInstance().Kernel();
70 buffer_event = 72 buffer_event = Kernel::WritableEvent::CreateRegisteredEventPair(
71 Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, "IAudioOutBufferReleased"); 73 kernel, Kernel::ResetType::Sticky, "IAudioOutBufferReleased");
72 74
73 stream = audio_core.OpenStream(audio_params.sample_rate, audio_params.channel_count, 75 stream = audio_core.OpenStream(audio_params.sample_rate, audio_params.channel_count,
74 std::move(unique_name), [=]() { buffer_event->Signal(); }); 76 std::move(unique_name), [=]() { buffer_event->Signal(); });
@@ -121,7 +123,9 @@ private:
121 123
122 IPC::ResponseBuilder rb{ctx, 2, 1}; 124 IPC::ResponseBuilder rb{ctx, 2, 1};
123 rb.Push(RESULT_SUCCESS); 125 rb.Push(RESULT_SUCCESS);
124 rb.PushCopyObjects(buffer_event); 126 const auto& event{
127 Core::System::GetInstance().Kernel().FindNamedEvent("IAudioOutBufferReleased")};
128 rb.PushCopyObjects(event->second);
125 } 129 }
126 130
127 void AppendAudioOutBufferImpl(Kernel::HLERequestContext& ctx) { 131 void AppendAudioOutBufferImpl(Kernel::HLERequestContext& ctx) {
@@ -188,7 +192,7 @@ private:
188 AudoutParams audio_params{}; 192 AudoutParams audio_params{};
189 193
190 /// This is the evend handle used to check if the audio buffer was released 194 /// This is the evend handle used to check if the audio buffer was released
191 Kernel::SharedPtr<Kernel::Event> buffer_event; 195 Kernel::SharedPtr<Kernel::WritableEvent> buffer_event;
192}; 196};
193 197
194void AudOutU::ListAudioOutsImpl(Kernel::HLERequestContext& ctx) { 198void AudOutU::ListAudioOutsImpl(Kernel::HLERequestContext& ctx) {
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp
index 1c418a9bb..9b7f7b201 100644
--- a/src/core/hle/service/audio/audren_u.cpp
+++ b/src/core/hle/service/audio/audren_u.cpp
@@ -12,8 +12,10 @@
12#include "common/logging/log.h" 12#include "common/logging/log.h"
13#include "core/core.h" 13#include "core/core.h"
14#include "core/hle/ipc_helpers.h" 14#include "core/hle/ipc_helpers.h"
15#include "core/hle/kernel/event.h"
16#include "core/hle/kernel/hle_ipc.h" 15#include "core/hle/kernel/hle_ipc.h"
16#include "core/hle/kernel/kernel.h"
17#include "core/hle/kernel/readable_event.h"
18#include "core/hle/kernel/writable_event.h"
17#include "core/hle/service/audio/audren_u.h" 19#include "core/hle/service/audio/audren_u.h"
18 20
19namespace Service::Audio { 21namespace Service::Audio {
@@ -41,8 +43,8 @@ public:
41 RegisterHandlers(functions); 43 RegisterHandlers(functions);
42 44
43 auto& kernel = Core::System::GetInstance().Kernel(); 45 auto& kernel = Core::System::GetInstance().Kernel();
44 system_event = 46 system_event = Kernel::WritableEvent::CreateRegisteredEventPair(
45 Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, "IAudioRenderer:SystemEvent"); 47 kernel, Kernel::ResetType::Sticky, "IAudioRenderer:SystemEvent");
46 renderer = std::make_unique<AudioCore::AudioRenderer>(audren_params, system_event); 48 renderer = std::make_unique<AudioCore::AudioRenderer>(audren_params, system_event);
47 } 49 }
48 50
@@ -112,7 +114,9 @@ private:
112 114
113 IPC::ResponseBuilder rb{ctx, 2, 1}; 115 IPC::ResponseBuilder rb{ctx, 2, 1};
114 rb.Push(RESULT_SUCCESS); 116 rb.Push(RESULT_SUCCESS);
115 rb.PushCopyObjects(system_event); 117 const auto& event{
118 Core::System::GetInstance().Kernel().FindNamedEvent("IAudioRenderer:SystemEvent")};
119 rb.PushCopyObjects(event->second);
116 } 120 }
117 121
118 void SetRenderingTimeLimit(Kernel::HLERequestContext& ctx) { 122 void SetRenderingTimeLimit(Kernel::HLERequestContext& ctx) {
@@ -135,7 +139,7 @@ private:
135 rb.Push(rendering_time_limit_percent); 139 rb.Push(rendering_time_limit_percent);
136 } 140 }
137 141
138 Kernel::SharedPtr<Kernel::Event> system_event; 142 Kernel::SharedPtr<Kernel::WritableEvent> system_event;
139 std::unique_ptr<AudioCore::AudioRenderer> renderer; 143 std::unique_ptr<AudioCore::AudioRenderer> renderer;
140 u32 rendering_time_limit_percent = 100; 144 u32 rendering_time_limit_percent = 100;
141}; 145};
@@ -162,8 +166,8 @@ public:
162 RegisterHandlers(functions); 166 RegisterHandlers(functions);
163 167
164 auto& kernel = Core::System::GetInstance().Kernel(); 168 auto& kernel = Core::System::GetInstance().Kernel();
165 buffer_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, 169 buffer_event = Kernel::WritableEvent::CreateRegisteredEventPair(
166 "IAudioOutBufferReleasedEvent"); 170 kernel, Kernel::ResetType::OneShot, "IAudioOutBufferReleasedEvent");
167 } 171 }
168 172
169private: 173private:
@@ -211,7 +215,9 @@ private:
211 215
212 IPC::ResponseBuilder rb{ctx, 2, 1}; 216 IPC::ResponseBuilder rb{ctx, 2, 1};
213 rb.Push(RESULT_SUCCESS); 217 rb.Push(RESULT_SUCCESS);
214 rb.PushCopyObjects(buffer_event); 218 const auto& event{
219 Core::System::GetInstance().Kernel().FindNamedEvent("IAudioOutBufferReleasedEvent")};
220 rb.PushCopyObjects(event->second);
215 } 221 }
216 222
217 void GetActiveChannelCount(Kernel::HLERequestContext& ctx) { 223 void GetActiveChannelCount(Kernel::HLERequestContext& ctx) {
@@ -222,7 +228,7 @@ private:
222 rb.Push<u32>(1); 228 rb.Push<u32>(1);
223 } 229 }
224 230
225 Kernel::SharedPtr<Kernel::Event> buffer_event; 231 Kernel::SharedPtr<Kernel::WritableEvent> buffer_event;
226 232
227}; // namespace Audio 233}; // namespace Audio
228 234
diff --git a/src/core/hle/service/btdrv/btdrv.cpp b/src/core/hle/service/btdrv/btdrv.cpp
index 2eadcdd05..04c78e81a 100644
--- a/src/core/hle/service/btdrv/btdrv.cpp
+++ b/src/core/hle/service/btdrv/btdrv.cpp
@@ -4,8 +4,10 @@
4 4
5#include "common/logging/log.h" 5#include "common/logging/log.h"
6#include "core/hle/ipc_helpers.h" 6#include "core/hle/ipc_helpers.h"
7#include "core/hle/kernel/event.h"
8#include "core/hle/kernel/hle_ipc.h" 7#include "core/hle/kernel/hle_ipc.h"
8#include "core/hle/kernel/kernel.h"
9#include "core/hle/kernel/readable_event.h"
10#include "core/hle/kernel/writable_event.h"
9#include "core/hle/service/btdrv/btdrv.h" 11#include "core/hle/service/btdrv/btdrv.h"
10#include "core/hle/service/service.h" 12#include "core/hle/service/service.h"
11#include "core/hle/service/sm/sm.h" 13#include "core/hle/service/sm/sm.h"
@@ -30,20 +32,22 @@ public:
30 }; 32 };
31 // clang-format on 33 // clang-format on
32 RegisterHandlers(functions); 34 RegisterHandlers(functions);
35
36 auto& kernel = Core::System::GetInstance().Kernel();
37 register_event = Kernel::WritableEvent::CreateRegisteredEventPair(
38 kernel, Kernel::ResetType::OneShot, "BT:RegisterEvent");
33 } 39 }
34 40
35private: 41private:
36 void RegisterEvent(Kernel::HLERequestContext& ctx) { 42 void RegisterEvent(Kernel::HLERequestContext& ctx) {
37 LOG_WARNING(Service_BTM, "(STUBBED) called"); 43 LOG_WARNING(Service_BTM, "(STUBBED) called");
38 44
39 auto& kernel = Core::System::GetInstance().Kernel();
40 register_event =
41 Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "BT:RegisterEvent");
42 IPC::ResponseBuilder rb{ctx, 2, 1}; 45 IPC::ResponseBuilder rb{ctx, 2, 1};
43 rb.Push(RESULT_SUCCESS); 46 rb.Push(RESULT_SUCCESS);
44 rb.PushCopyObjects(register_event); 47 const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent("BT:RegisterEvent")};
48 rb.PushCopyObjects(event->second);
45 } 49 }
46 Kernel::SharedPtr<Kernel::Event> register_event; 50 Kernel::SharedPtr<Kernel::WritableEvent> register_event;
47}; 51};
48 52
49class BtDrv final : public ServiceFramework<BtDrv> { 53class BtDrv final : public ServiceFramework<BtDrv> {
diff --git a/src/core/hle/service/btm/btm.cpp b/src/core/hle/service/btm/btm.cpp
index 463a79351..3ee298161 100644
--- a/src/core/hle/service/btm/btm.cpp
+++ b/src/core/hle/service/btm/btm.cpp
@@ -6,8 +6,10 @@
6 6
7#include "common/logging/log.h" 7#include "common/logging/log.h"
8#include "core/hle/ipc_helpers.h" 8#include "core/hle/ipc_helpers.h"
9#include "core/hle/kernel/event.h"
10#include "core/hle/kernel/hle_ipc.h" 9#include "core/hle/kernel/hle_ipc.h"
10#include "core/hle/kernel/kernel.h"
11#include "core/hle/kernel/readable_event.h"
12#include "core/hle/kernel/writable_event.h"
11#include "core/hle/service/btm/btm.h" 13#include "core/hle/service/btm/btm.h"
12#include "core/hle/service/service.h" 14#include "core/hle/service/service.h"
13 15
@@ -53,53 +55,64 @@ public:
53 }; 55 };
54 // clang-format on 56 // clang-format on
55 RegisterHandlers(functions); 57 RegisterHandlers(functions);
58
59 auto& kernel = Core::System::GetInstance().Kernel();
60 scan_event = Kernel::WritableEvent::CreateRegisteredEventPair(
61 kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ScanEvent");
62 connection_event = Kernel::WritableEvent::CreateRegisteredEventPair(
63 kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ConnectionEvent");
64 service_discovery = Kernel::WritableEvent::CreateRegisteredEventPair(
65 kernel, Kernel::ResetType::OneShot, "IBtmUserCore:Discovery");
66 config_event = Kernel::WritableEvent::CreateRegisteredEventPair(
67 kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ConfigEvent");
56 } 68 }
57 69
58private: 70private:
59 void GetScanEvent(Kernel::HLERequestContext& ctx) { 71 void GetScanEvent(Kernel::HLERequestContext& ctx) {
60 LOG_WARNING(Service_BTM, "(STUBBED) called"); 72 LOG_WARNING(Service_BTM, "(STUBBED) called");
61 73
62 auto& kernel = Core::System::GetInstance().Kernel();
63 scan_event =
64 Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ScanEvent");
65 IPC::ResponseBuilder rb{ctx, 2, 1}; 74 IPC::ResponseBuilder rb{ctx, 2, 1};
66 rb.Push(RESULT_SUCCESS); 75 rb.Push(RESULT_SUCCESS);
67 rb.PushCopyObjects(scan_event); 76
77 const auto& event{
78 Core::System::GetInstance().Kernel().FindNamedEvent("IBtmUserCore:ScanEvent")};
79 rb.PushCopyObjects(event->second);
68 } 80 }
69 void GetConnectionEvent(Kernel::HLERequestContext& ctx) { 81 void GetConnectionEvent(Kernel::HLERequestContext& ctx) {
70 LOG_WARNING(Service_BTM, "(STUBBED) called"); 82 LOG_WARNING(Service_BTM, "(STUBBED) called");
71 83
72 auto& kernel = Core::System::GetInstance().Kernel();
73 connection_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot,
74 "IBtmUserCore:ConnectionEvent");
75 IPC::ResponseBuilder rb{ctx, 2, 1}; 84 IPC::ResponseBuilder rb{ctx, 2, 1};
76 rb.Push(RESULT_SUCCESS); 85 rb.Push(RESULT_SUCCESS);
77 rb.PushCopyObjects(connection_event); 86
87 const auto& event{
88 Core::System::GetInstance().Kernel().FindNamedEvent("IBtmUserCore:ConnectionEvent")};
89 rb.PushCopyObjects(event->second);
78 } 90 }
79 void GetDiscoveryEvent(Kernel::HLERequestContext& ctx) { 91 void GetDiscoveryEvent(Kernel::HLERequestContext& ctx) {
80 LOG_WARNING(Service_BTM, "(STUBBED) called"); 92 LOG_WARNING(Service_BTM, "(STUBBED) called");
81 93
82 auto& kernel = Core::System::GetInstance().Kernel();
83 service_discovery =
84 Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:Discovery");
85 IPC::ResponseBuilder rb{ctx, 2, 1}; 94 IPC::ResponseBuilder rb{ctx, 2, 1};
86 rb.Push(RESULT_SUCCESS); 95 rb.Push(RESULT_SUCCESS);
87 rb.PushCopyObjects(service_discovery); 96
97 const auto& event{
98 Core::System::GetInstance().Kernel().FindNamedEvent("IBtmUserCore:Discovery")};
99 rb.PushCopyObjects(event->second);
88 } 100 }
89 void GetConfigEvent(Kernel::HLERequestContext& ctx) { 101 void GetConfigEvent(Kernel::HLERequestContext& ctx) {
90 LOG_WARNING(Service_BTM, "(STUBBED) called"); 102 LOG_WARNING(Service_BTM, "(STUBBED) called");
91 103
92 auto& kernel = Core::System::GetInstance().Kernel();
93 config_event =
94 Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ConfigEvent");
95 IPC::ResponseBuilder rb{ctx, 2, 1}; 104 IPC::ResponseBuilder rb{ctx, 2, 1};
96 rb.Push(RESULT_SUCCESS); 105 rb.Push(RESULT_SUCCESS);
97 rb.PushCopyObjects(config_event); 106
107 const auto& event{
108 Core::System::GetInstance().Kernel().FindNamedEvent("IBtmUserCore:ConfigEvent")};
109 rb.PushCopyObjects(event->second);
98 } 110 }
99 Kernel::SharedPtr<Kernel::Event> scan_event; 111
100 Kernel::SharedPtr<Kernel::Event> connection_event; 112 Kernel::SharedPtr<Kernel::WritableEvent> scan_event;
101 Kernel::SharedPtr<Kernel::Event> service_discovery; 113 Kernel::SharedPtr<Kernel::WritableEvent> connection_event;
102 Kernel::SharedPtr<Kernel::Event> config_event; 114 Kernel::SharedPtr<Kernel::WritableEvent> service_discovery;
115 Kernel::SharedPtr<Kernel::WritableEvent> config_event;
103}; 116};
104 117
105class BTM_USR final : public ServiceFramework<BTM_USR> { 118class BTM_USR final : public ServiceFramework<BTM_USR> {
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index 22e87a50a..df39a6dc4 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -12,7 +12,9 @@
12#include "core/core.h" 12#include "core/core.h"
13#include "core/core_timing.h" 13#include "core/core_timing.h"
14#include "core/frontend/input.h" 14#include "core/frontend/input.h"
15#include "core/hle/kernel/event.h" 15#include "core/hle/kernel/kernel.h"
16#include "core/hle/kernel/readable_event.h"
17#include "core/hle/kernel/writable_event.h"
16#include "core/hle/service/hid/controllers/npad.h" 18#include "core/hle/service/hid/controllers/npad.h"
17#include "core/settings.h" 19#include "core/settings.h"
18 20
@@ -167,8 +169,8 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) {
167 169
168void Controller_NPad::OnInit() { 170void Controller_NPad::OnInit() {
169 auto& kernel = Core::System::GetInstance().Kernel(); 171 auto& kernel = Core::System::GetInstance().Kernel();
170 styleset_changed_event = 172 styleset_changed_event = Kernel::WritableEvent::CreateRegisteredEventPair(
171 Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "npad:NpadStyleSetChanged"); 173 kernel, Kernel::ResetType::OneShot, "npad:NpadStyleSetChanged");
172 174
173 if (!IsControllerActivated()) { 175 if (!IsControllerActivated()) {
174 return; 176 return;
@@ -538,11 +540,13 @@ void Controller_NPad::VibrateController(const std::vector<u32>& controller_ids,
538 last_processed_vibration = vibrations.back(); 540 last_processed_vibration = vibrations.back();
539} 541}
540 542
541Kernel::SharedPtr<Kernel::Event> Controller_NPad::GetStyleSetChangedEvent() const { 543Kernel::SharedPtr<Kernel::ReadableEvent> Controller_NPad::GetStyleSetChangedEvent() const {
542 // TODO(ogniK): Figure out the best time to signal this event. This event seems that it should 544 // TODO(ogniK): Figure out the best time to signal this event. This event seems that it should
543 // be signalled at least once, and signaled after a new controller is connected? 545 // be signalled at least once, and signaled after a new controller is connected?
544 styleset_changed_event->Signal(); 546 styleset_changed_event->Signal();
545 return styleset_changed_event; 547 const auto& event{
548 Core::System::GetInstance().Kernel().FindNamedEvent("npad:NpadStyleSetChanged")};
549 return event->second;
546} 550}
547 551
548Controller_NPad::Vibration Controller_NPad::GetLastVibration() const { 552Controller_NPad::Vibration Controller_NPad::GetLastVibration() const {
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h
index abff6544d..c960d0f57 100644
--- a/src/core/hle/service/hid/controllers/npad.h
+++ b/src/core/hle/service/hid/controllers/npad.h
@@ -8,10 +8,15 @@
8#include "common/bit_field.h" 8#include "common/bit_field.h"
9#include "common/common_types.h" 9#include "common/common_types.h"
10#include "core/frontend/input.h" 10#include "core/frontend/input.h"
11#include "core/hle/kernel/event.h" 11#include "core/hle/kernel/object.h"
12#include "core/hle/service/hid/controllers/controller_base.h" 12#include "core/hle/service/hid/controllers/controller_base.h"
13#include "core/settings.h" 13#include "core/settings.h"
14 14
15namespace Kernel {
16class ReadableEvent;
17class WritableEvent;
18} // namespace Kernel
19
15namespace Service::HID { 20namespace Service::HID {
16 21
17constexpr u32 NPAD_HANDHELD = 32; 22constexpr u32 NPAD_HANDHELD = 32;
@@ -108,7 +113,7 @@ public:
108 void VibrateController(const std::vector<u32>& controller_ids, 113 void VibrateController(const std::vector<u32>& controller_ids,
109 const std::vector<Vibration>& vibrations); 114 const std::vector<Vibration>& vibrations);
110 115
111 Kernel::SharedPtr<Kernel::Event> GetStyleSetChangedEvent() const; 116 Kernel::SharedPtr<Kernel::ReadableEvent> GetStyleSetChangedEvent() const;
112 Vibration GetLastVibration() const; 117 Vibration GetLastVibration() const;
113 118
114 void AddNewController(NPadControllerType controller); 119 void AddNewController(NPadControllerType controller);
@@ -303,7 +308,7 @@ private:
303 sticks; 308 sticks;
304 std::vector<u32> supported_npad_id_types{}; 309 std::vector<u32> supported_npad_id_types{};
305 NpadHoldType hold_type{NpadHoldType::Vertical}; 310 NpadHoldType hold_type{NpadHoldType::Vertical};
306 Kernel::SharedPtr<Kernel::Event> styleset_changed_event; 311 Kernel::SharedPtr<Kernel::WritableEvent> styleset_changed_event;
307 Vibration last_processed_vibration{}; 312 Vibration last_processed_vibration{};
308 std::array<ControllerHolder, 10> connected_controllers{}; 313 std::array<ControllerHolder, 10> connected_controllers{};
309 bool can_controllers_vibrate{true}; 314 bool can_controllers_vibrate{true};
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index 46496e9bb..2ec38c726 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -13,8 +13,9 @@
13#include "core/hle/ipc_helpers.h" 13#include "core/hle/ipc_helpers.h"
14#include "core/hle/kernel/client_port.h" 14#include "core/hle/kernel/client_port.h"
15#include "core/hle/kernel/client_session.h" 15#include "core/hle/kernel/client_session.h"
16#include "core/hle/kernel/event.h" 16#include "core/hle/kernel/readable_event.h"
17#include "core/hle/kernel/shared_memory.h" 17#include "core/hle/kernel/shared_memory.h"
18#include "core/hle/kernel/writable_event.h"
18#include "core/hle/service/hid/hid.h" 19#include "core/hle/service/hid/hid.h"
19#include "core/hle/service/hid/irs.h" 20#include "core/hle/service/hid/irs.h"
20#include "core/hle/service/hid/xcd.h" 21#include "core/hle/service/hid/xcd.h"
diff --git a/src/core/hle/service/nfp/nfp.cpp b/src/core/hle/service/nfp/nfp.cpp
index ff9170c24..75c605364 100644
--- a/src/core/hle/service/nfp/nfp.cpp
+++ b/src/core/hle/service/nfp/nfp.cpp
@@ -7,7 +7,9 @@
7#include "common/logging/log.h" 7#include "common/logging/log.h"
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/event.h" 10#include "core/hle/kernel/kernel.h"
11#include "core/hle/kernel/readable_event.h"
12#include "core/hle/kernel/writable_event.h"
11#include "core/hle/lock.h" 13#include "core/hle/lock.h"
12#include "core/hle/service/hid/hid.h" 14#include "core/hle/service/hid/hid.h"
13#include "core/hle/service/nfp/nfp.h" 15#include "core/hle/service/nfp/nfp.h"
@@ -23,8 +25,8 @@ constexpr ResultCode ERR_TAG_FAILED(ErrorModule::NFP,
23Module::Interface::Interface(std::shared_ptr<Module> module, const char* name) 25Module::Interface::Interface(std::shared_ptr<Module> module, const char* name)
24 : ServiceFramework(name), module(std::move(module)) { 26 : ServiceFramework(name), module(std::move(module)) {
25 auto& kernel = Core::System::GetInstance().Kernel(); 27 auto& kernel = Core::System::GetInstance().Kernel();
26 nfc_tag_load = 28 nfc_tag_load = Kernel::WritableEvent::CreateRegisteredEventPair(
27 Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IUser:NFCTagDetected"); 29 kernel, Kernel::ResetType::OneShot, "IUser:NFCTagDetected");
28} 30}
29 31
30Module::Interface::~Interface() = default; 32Module::Interface::~Interface() = default;
@@ -63,10 +65,10 @@ public:
63 RegisterHandlers(functions); 65 RegisterHandlers(functions);
64 66
65 auto& kernel = Core::System::GetInstance().Kernel(); 67 auto& kernel = Core::System::GetInstance().Kernel();
66 deactivate_event = 68 deactivate_event = Kernel::WritableEvent::CreateRegisteredEventPair(
67 Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IUser:DeactivateEvent"); 69 kernel, Kernel::ResetType::OneShot, "IUser:DeactivateEvent");
68 availability_change_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, 70 availability_change_event = Kernel::WritableEvent::CreateRegisteredEventPair(
69 "IUser:AvailabilityChangeEvent"); 71 kernel, Kernel::ResetType::OneShot, "IUser:AvailabilityChangeEvent");
70 } 72 }
71 73
72private: 74private:
@@ -164,7 +166,10 @@ private:
164 166
165 IPC::ResponseBuilder rb{ctx, 2, 1}; 167 IPC::ResponseBuilder rb{ctx, 2, 1};
166 rb.Push(RESULT_SUCCESS); 168 rb.Push(RESULT_SUCCESS);
167 rb.PushCopyObjects(deactivate_event); 169
170 const auto& event{
171 Core::System::GetInstance().Kernel().FindNamedEvent("IUser:DeactivateEvent")};
172 rb.PushCopyObjects(event->second);
168 } 173 }
169 174
170 void StopDetection(Kernel::HLERequestContext& ctx) { 175 void StopDetection(Kernel::HLERequestContext& ctx) {
@@ -264,7 +269,9 @@ private:
264 269
265 IPC::ResponseBuilder rb{ctx, 2, 1}; 270 IPC::ResponseBuilder rb{ctx, 2, 1};
266 rb.Push(RESULT_SUCCESS); 271 rb.Push(RESULT_SUCCESS);
267 rb.PushCopyObjects(availability_change_event); 272 const auto& event{
273 Core::System::GetInstance().Kernel().FindNamedEvent("IUser:AvailabilityChangeEvent")};
274 rb.PushCopyObjects(event->second);
268 } 275 }
269 276
270 void GetRegisterInfo(Kernel::HLERequestContext& ctx) { 277 void GetRegisterInfo(Kernel::HLERequestContext& ctx) {
@@ -319,8 +326,8 @@ private:
319 const u32 npad_id{0}; // Player 1 controller 326 const u32 npad_id{0}; // Player 1 controller
320 State state{State::NonInitialized}; 327 State state{State::NonInitialized};
321 DeviceState device_state{DeviceState::Initialized}; 328 DeviceState device_state{DeviceState::Initialized};
322 Kernel::SharedPtr<Kernel::Event> deactivate_event; 329 Kernel::SharedPtr<Kernel::WritableEvent> deactivate_event;
323 Kernel::SharedPtr<Kernel::Event> availability_change_event; 330 Kernel::SharedPtr<Kernel::WritableEvent> availability_change_event;
324 const Module::Interface& nfp_interface; 331 const Module::Interface& nfp_interface;
325}; 332};
326 333
@@ -342,8 +349,10 @@ bool Module::Interface::LoadAmiibo(const std::vector<u8>& buffer) {
342 nfc_tag_load->Signal(); 349 nfc_tag_load->Signal();
343 return true; 350 return true;
344} 351}
345const Kernel::SharedPtr<Kernel::Event>& Module::Interface::GetNFCEvent() const { 352
346 return nfc_tag_load; 353const Kernel::SharedPtr<Kernel::ReadableEvent>& Module::Interface::GetNFCEvent() const {
354 const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent("IUser:NFCTagDetected")};
355 return event->second;
347} 356}
348const Module::Interface::AmiiboFile& Module::Interface::GetAmiiboBuffer() const { 357const Module::Interface::AmiiboFile& Module::Interface::GetAmiiboBuffer() const {
349 return amiibo; 358 return amiibo;
diff --git a/src/core/hle/service/nfp/nfp.h b/src/core/hle/service/nfp/nfp.h
index 5c0ae8a54..0ab1ca997 100644
--- a/src/core/hle/service/nfp/nfp.h
+++ b/src/core/hle/service/nfp/nfp.h
@@ -6,9 +6,13 @@
6 6
7#include <array> 7#include <array>
8#include <vector> 8#include <vector>
9#include "core/hle/kernel/event.h"
10#include "core/hle/service/service.h" 9#include "core/hle/service/service.h"
11 10
11namespace Kernel {
12class ReadableEvent;
13class WritableEvent;
14} // namespace Kernel
15
12namespace Service::NFP { 16namespace Service::NFP {
13 17
14class Module final { 18class Module final {
@@ -33,11 +37,11 @@ public:
33 37
34 void CreateUserInterface(Kernel::HLERequestContext& ctx); 38 void CreateUserInterface(Kernel::HLERequestContext& ctx);
35 bool LoadAmiibo(const std::vector<u8>& buffer); 39 bool LoadAmiibo(const std::vector<u8>& buffer);
36 const Kernel::SharedPtr<Kernel::Event>& GetNFCEvent() const; 40 const Kernel::SharedPtr<Kernel::ReadableEvent>& GetNFCEvent() const;
37 const AmiiboFile& GetAmiiboBuffer() const; 41 const AmiiboFile& GetAmiiboBuffer() const;
38 42
39 private: 43 private:
40 Kernel::SharedPtr<Kernel::Event> nfc_tag_load{}; 44 Kernel::SharedPtr<Kernel::WritableEvent> nfc_tag_load{};
41 AmiiboFile amiibo{}; 45 AmiiboFile amiibo{};
42 46
43 protected: 47 protected:
diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp
index dee391201..80a66bce3 100644
--- a/src/core/hle/service/nifm/nifm.cpp
+++ b/src/core/hle/service/nifm/nifm.cpp
@@ -4,7 +4,9 @@
4 4
5#include "core/core.h" 5#include "core/core.h"
6#include "core/hle/ipc_helpers.h" 6#include "core/hle/ipc_helpers.h"
7#include "core/hle/kernel/event.h" 7#include "core/hle/kernel/kernel.h"
8#include "core/hle/kernel/readable_event.h"
9#include "core/hle/kernel/writable_event.h"
8#include "core/hle/service/nifm/nifm.h" 10#include "core/hle/service/nifm/nifm.h"
9#include "core/hle/service/service.h" 11#include "core/hle/service/service.h"
10 12
@@ -56,8 +58,10 @@ public:
56 RegisterHandlers(functions); 58 RegisterHandlers(functions);
57 59
58 auto& kernel = Core::System::GetInstance().Kernel(); 60 auto& kernel = Core::System::GetInstance().Kernel();
59 event1 = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IRequest:Event1"); 61 event1 = Kernel::WritableEvent::CreateRegisteredEventPair(
60 event2 = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IRequest:Event2"); 62 kernel, Kernel::ResetType::OneShot, "IRequest:Event1");
63 event2 = Kernel::WritableEvent::CreateRegisteredEventPair(
64 kernel, Kernel::ResetType::OneShot, "IRequest:Event2");
61 } 65 }
62 66
63private: 67private:
@@ -88,7 +92,11 @@ private:
88 92
89 IPC::ResponseBuilder rb{ctx, 2, 2}; 93 IPC::ResponseBuilder rb{ctx, 2, 2};
90 rb.Push(RESULT_SUCCESS); 94 rb.Push(RESULT_SUCCESS);
91 rb.PushCopyObjects(event1, event2); 95
96 const auto& event1{Core::System::GetInstance().Kernel().FindNamedEvent("IRequest:Event1")};
97 const auto& event2{Core::System::GetInstance().Kernel().FindNamedEvent("IRequest:Event2")};
98
99 rb.PushCopyObjects(event1->second, event2->second);
92 } 100 }
93 101
94 void Cancel(Kernel::HLERequestContext& ctx) { 102 void Cancel(Kernel::HLERequestContext& ctx) {
@@ -105,7 +113,7 @@ private:
105 rb.Push(RESULT_SUCCESS); 113 rb.Push(RESULT_SUCCESS);
106 } 114 }
107 115
108 Kernel::SharedPtr<Kernel::Event> event1, event2; 116 Kernel::SharedPtr<Kernel::WritableEvent> event1, event2;
109}; 117};
110 118
111class INetworkProfile final : public ServiceFramework<INetworkProfile> { 119class INetworkProfile final : public ServiceFramework<INetworkProfile> {
diff --git a/src/core/hle/service/nim/nim.cpp b/src/core/hle/service/nim/nim.cpp
index 1bbccd444..d181a781c 100644
--- a/src/core/hle/service/nim/nim.cpp
+++ b/src/core/hle/service/nim/nim.cpp
@@ -6,7 +6,9 @@
6#include <ctime> 6#include <ctime>
7#include "core/core.h" 7#include "core/core.h"
8#include "core/hle/ipc_helpers.h" 8#include "core/hle/ipc_helpers.h"
9#include "core/hle/kernel/event.h" 9#include "core/hle/kernel/kernel.h"
10#include "core/hle/kernel/readable_event.h"
11#include "core/hle/kernel/writable_event.h"
10#include "core/hle/service/nim/nim.h" 12#include "core/hle/service/nim/nim.h"
11#include "core/hle/service/service.h" 13#include "core/hle/service/service.h"
12#include "core/hle/service/sm/sm.h" 14#include "core/hle/service/sm/sm.h"
@@ -138,13 +140,13 @@ public:
138 RegisterHandlers(functions); 140 RegisterHandlers(functions);
139 141
140 auto& kernel = Core::System::GetInstance().Kernel(); 142 auto& kernel = Core::System::GetInstance().Kernel();
141 finished_event = 143 finished_event = Kernel::WritableEvent::CreateRegisteredEventPair(
142 Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, 144 kernel, Kernel::ResetType::OneShot,
143 "IEnsureNetworkClockAvailabilityService:FinishEvent"); 145 "IEnsureNetworkClockAvailabilityService:FinishEvent");
144 } 146 }
145 147
146private: 148private:
147 Kernel::SharedPtr<Kernel::Event> finished_event; 149 Kernel::SharedPtr<Kernel::WritableEvent> finished_event;
148 150
149 void StartTask(Kernel::HLERequestContext& ctx) { 151 void StartTask(Kernel::HLERequestContext& ctx) {
150 // No need to connect to the internet, just finish the task straight away. 152 // No need to connect to the internet, just finish the task straight away.
@@ -160,7 +162,9 @@ private:
160 162
161 IPC::ResponseBuilder rb{ctx, 2, 1}; 163 IPC::ResponseBuilder rb{ctx, 2, 1};
162 rb.Push(RESULT_SUCCESS); 164 rb.Push(RESULT_SUCCESS);
163 rb.PushCopyObjects(finished_event); 165 const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent(
166 "IEnsureNetworkClockAvailabilityService:FinishEvent")};
167 rb.PushCopyObjects(event->second);
164 } 168 }
165 169
166 void GetResult(Kernel::HLERequestContext& ctx) { 170 void GetResult(Kernel::HLERequestContext& ctx) {
diff --git a/src/core/hle/service/nvdrv/interface.cpp b/src/core/hle/service/nvdrv/interface.cpp
index ff76e0524..3d89b4020 100644
--- a/src/core/hle/service/nvdrv/interface.cpp
+++ b/src/core/hle/service/nvdrv/interface.cpp
@@ -6,7 +6,9 @@
6#include "common/logging/log.h" 6#include "common/logging/log.h"
7#include "core/core.h" 7#include "core/core.h"
8#include "core/hle/ipc_helpers.h" 8#include "core/hle/ipc_helpers.h"
9#include "core/hle/kernel/event.h" 9#include "core/hle/kernel/kernel.h"
10#include "core/hle/kernel/readable_event.h"
11#include "core/hle/kernel/writable_event.h"
10#include "core/hle/service/nvdrv/interface.h" 12#include "core/hle/service/nvdrv/interface.h"
11#include "core/hle/service/nvdrv/nvdrv.h" 13#include "core/hle/service/nvdrv/nvdrv.h"
12 14
@@ -69,7 +71,9 @@ void NVDRV::QueryEvent(Kernel::HLERequestContext& ctx) {
69 71
70 IPC::ResponseBuilder rb{ctx, 3, 1}; 72 IPC::ResponseBuilder rb{ctx, 3, 1};
71 rb.Push(RESULT_SUCCESS); 73 rb.Push(RESULT_SUCCESS);
72 rb.PushCopyObjects(query_event); 74
75 const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent("NVDRV::query_event")};
76 rb.PushCopyObjects(event->second);
73 rb.Push<u32>(0); 77 rb.Push<u32>(0);
74} 78}
75 79
@@ -127,7 +131,8 @@ NVDRV::NVDRV(std::shared_ptr<Module> nvdrv, const char* name)
127 RegisterHandlers(functions); 131 RegisterHandlers(functions);
128 132
129 auto& kernel = Core::System::GetInstance().Kernel(); 133 auto& kernel = Core::System::GetInstance().Kernel();
130 query_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "NVDRV::query_event"); 134 query_event = Kernel::WritableEvent::CreateRegisteredEventPair(
135 kernel, Kernel::ResetType::OneShot, "NVDRV::query_event");
131} 136}
132 137
133NVDRV::~NVDRV() = default; 138NVDRV::~NVDRV() = default;
diff --git a/src/core/hle/service/nvdrv/interface.h b/src/core/hle/service/nvdrv/interface.h
index 5a1e4baa7..a27252038 100644
--- a/src/core/hle/service/nvdrv/interface.h
+++ b/src/core/hle/service/nvdrv/interface.h
@@ -5,10 +5,13 @@
5#pragma once 5#pragma once
6 6
7#include <memory> 7#include <memory>
8#include "core/hle/kernel/event.h"
9#include "core/hle/service/nvdrv/nvdrv.h" 8#include "core/hle/service/nvdrv/nvdrv.h"
10#include "core/hle/service/service.h" 9#include "core/hle/service/service.h"
11 10
11namespace Kernel {
12class WritableEvent;
13}
14
12namespace Service::Nvidia { 15namespace Service::Nvidia {
13 16
14class NVDRV final : public ServiceFramework<NVDRV> { 17class NVDRV final : public ServiceFramework<NVDRV> {
@@ -31,7 +34,7 @@ private:
31 34
32 u64 pid{}; 35 u64 pid{};
33 36
34 Kernel::SharedPtr<Kernel::Event> query_event; 37 Kernel::SharedPtr<Kernel::WritableEvent> query_event;
35}; 38};
36 39
37} // namespace Service::Nvidia 40} // namespace Service::Nvidia
diff --git a/src/core/hle/service/nvflinger/buffer_queue.cpp b/src/core/hle/service/nvflinger/buffer_queue.cpp
index 172a1a441..7b07750b5 100644
--- a/src/core/hle/service/nvflinger/buffer_queue.cpp
+++ b/src/core/hle/service/nvflinger/buffer_queue.cpp
@@ -7,14 +7,17 @@
7#include "common/assert.h" 7#include "common/assert.h"
8#include "common/logging/log.h" 8#include "common/logging/log.h"
9#include "core/core.h" 9#include "core/core.h"
10#include "core/hle/kernel/kernel.h"
11#include "core/hle/kernel/readable_event.h"
12#include "core/hle/kernel/writable_event.h"
10#include "core/hle/service/nvflinger/buffer_queue.h" 13#include "core/hle/service/nvflinger/buffer_queue.h"
11 14
12namespace Service::NVFlinger { 15namespace Service::NVFlinger {
13 16
14BufferQueue::BufferQueue(u32 id, u64 layer_id) : id(id), layer_id(layer_id) { 17BufferQueue::BufferQueue(u32 id, u64 layer_id) : id(id), layer_id(layer_id) {
15 auto& kernel = Core::System::GetInstance().Kernel(); 18 auto& kernel = Core::System::GetInstance().Kernel();
16 buffer_wait_event = 19 buffer_wait_event = Kernel::WritableEvent::CreateRegisteredEventPair(
17 Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, "BufferQueue NativeHandle"); 20 kernel, Kernel::ResetType::Sticky, "BufferQueue NativeHandle");
18} 21}
19 22
20BufferQueue::~BufferQueue() = default; 23BufferQueue::~BufferQueue() = default;
@@ -104,4 +107,14 @@ u32 BufferQueue::Query(QueryType type) {
104 return 0; 107 return 0;
105} 108}
106 109
110Kernel::SharedPtr<Kernel::WritableEvent> BufferQueue::GetWritableBufferWaitEvent() const {
111 return buffer_wait_event;
112}
113
114Kernel::SharedPtr<Kernel::ReadableEvent> BufferQueue::GetBufferWaitEvent() const {
115 const auto& event{
116 Core::System::GetInstance().Kernel().FindNamedEvent("BufferQueue NativeHandle")};
117 return event->second;
118}
119
107} // namespace Service::NVFlinger 120} // namespace Service::NVFlinger
diff --git a/src/core/hle/service/nvflinger/buffer_queue.h b/src/core/hle/service/nvflinger/buffer_queue.h
index 8cff5eb71..8b2a2b7de 100644
--- a/src/core/hle/service/nvflinger/buffer_queue.h
+++ b/src/core/hle/service/nvflinger/buffer_queue.h
@@ -10,12 +10,17 @@
10#include "common/common_funcs.h" 10#include "common/common_funcs.h"
11#include "common/math_util.h" 11#include "common/math_util.h"
12#include "common/swap.h" 12#include "common/swap.h"
13#include "core/hle/kernel/event.h" 13#include "core/hle/kernel/object.h"
14 14
15namespace CoreTiming { 15namespace CoreTiming {
16struct EventType; 16struct EventType;
17} 17}
18 18
19namespace Kernel {
20class ReadableEvent;
21class WritableEvent;
22} // namespace Kernel
23
19namespace Service::NVFlinger { 24namespace Service::NVFlinger {
20 25
21struct IGBPBuffer { 26struct IGBPBuffer {
@@ -86,16 +91,16 @@ public:
86 return id; 91 return id;
87 } 92 }
88 93
89 Kernel::SharedPtr<Kernel::Event> GetBufferWaitEvent() const { 94 Kernel::SharedPtr<Kernel::WritableEvent> GetWritableBufferWaitEvent() const;
90 return buffer_wait_event; 95
91 } 96 Kernel::SharedPtr<Kernel::ReadableEvent> GetBufferWaitEvent() const;
92 97
93private: 98private:
94 u32 id; 99 u32 id;
95 u64 layer_id; 100 u64 layer_id;
96 101
97 std::vector<Buffer> queue; 102 std::vector<Buffer> queue;
98 Kernel::SharedPtr<Kernel::Event> buffer_wait_event; 103 Kernel::SharedPtr<Kernel::WritableEvent> buffer_wait_event;
99}; 104};
100 105
101} // namespace Service::NVFlinger 106} // namespace Service::NVFlinger
diff --git a/src/core/hle/service/nvflinger/nvflinger.cpp b/src/core/hle/service/nvflinger/nvflinger.cpp
index 214e6d1b3..2a329cb8e 100644
--- a/src/core/hle/service/nvflinger/nvflinger.cpp
+++ b/src/core/hle/service/nvflinger/nvflinger.cpp
@@ -13,6 +13,9 @@
13#include "core/core.h" 13#include "core/core.h"
14#include "core/core_timing.h" 14#include "core/core_timing.h"
15#include "core/core_timing_util.h" 15#include "core/core_timing_util.h"
16#include "core/hle/kernel/kernel.h"
17#include "core/hle/kernel/readable_event.h"
18#include "core/hle/kernel/writable_event.h"
16#include "core/hle/service/nvdrv/devices/nvdisp_disp0.h" 19#include "core/hle/service/nvdrv/devices/nvdisp_disp0.h"
17#include "core/hle/service/nvdrv/nvdrv.h" 20#include "core/hle/service/nvdrv/nvdrv.h"
18#include "core/hle/service/nvflinger/buffer_queue.h" 21#include "core/hle/service/nvflinger/buffer_queue.h"
@@ -83,9 +86,10 @@ u32 NVFlinger::GetBufferQueueId(u64 display_id, u64 layer_id) {
83 return layer.buffer_queue->GetId(); 86 return layer.buffer_queue->GetId();
84} 87}
85 88
86Kernel::SharedPtr<Kernel::Event> NVFlinger::GetVsyncEvent(u64 display_id) { 89Kernel::SharedPtr<Kernel::ReadableEvent> NVFlinger::GetVsyncEvent(u64 display_id) {
87 const auto& display = GetDisplay(display_id); 90 const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent(
88 return display.vsync_event; 91 fmt::format("Display VSync Event {}", display_id))};
92 return event->second;
89} 93}
90 94
91std::shared_ptr<BufferQueue> NVFlinger::GetBufferQueue(u32 id) const { 95std::shared_ptr<BufferQueue> NVFlinger::GetBufferQueue(u32 id) const {
@@ -164,7 +168,8 @@ Layer::~Layer() = default;
164 168
165Display::Display(u64 id, std::string name) : id(id), name(std::move(name)) { 169Display::Display(u64 id, std::string name) : id(id), name(std::move(name)) {
166 auto& kernel = Core::System::GetInstance().Kernel(); 170 auto& kernel = Core::System::GetInstance().Kernel();
167 vsync_event = Kernel::Event::Create(kernel, Kernel::ResetType::Pulse, "Display VSync Event"); 171 vsync_event = Kernel::WritableEvent::CreateRegisteredEventPair(
172 kernel, Kernel::ResetType::Pulse, fmt::format("Display VSync Event {}", id));
168} 173}
169 174
170Display::~Display() = default; 175Display::~Display() = default;
diff --git a/src/core/hle/service/nvflinger/nvflinger.h b/src/core/hle/service/nvflinger/nvflinger.h
index 3dc69e69b..1a9e74f35 100644
--- a/src/core/hle/service/nvflinger/nvflinger.h
+++ b/src/core/hle/service/nvflinger/nvflinger.h
@@ -10,12 +10,17 @@
10#include <vector> 10#include <vector>
11 11
12#include "common/common_types.h" 12#include "common/common_types.h"
13#include "core/hle/kernel/event.h" 13#include "core/hle/kernel/object.h"
14 14
15namespace CoreTiming { 15namespace CoreTiming {
16struct EventType; 16struct EventType;
17} 17}
18 18
19namespace Kernel {
20class ReadableEvent;
21class WritableEvent;
22} // namespace Kernel
23
19namespace Service::Nvidia { 24namespace Service::Nvidia {
20class Module; 25class Module;
21} 26}
@@ -40,7 +45,7 @@ struct Display {
40 std::string name; 45 std::string name;
41 46
42 std::vector<Layer> layers; 47 std::vector<Layer> layers;
43 Kernel::SharedPtr<Kernel::Event> vsync_event; 48 Kernel::SharedPtr<Kernel::WritableEvent> vsync_event;
44}; 49};
45 50
46class NVFlinger final { 51class NVFlinger final {
@@ -61,7 +66,7 @@ public:
61 u32 GetBufferQueueId(u64 display_id, u64 layer_id); 66 u32 GetBufferQueueId(u64 display_id, u64 layer_id);
62 67
63 /// Gets the vsync event for the specified display. 68 /// Gets the vsync event for the specified display.
64 Kernel::SharedPtr<Kernel::Event> GetVsyncEvent(u64 display_id); 69 Kernel::SharedPtr<Kernel::ReadableEvent> GetVsyncEvent(u64 display_id);
65 70
66 /// Obtains a buffer queue identified by the id. 71 /// Obtains a buffer queue identified by the id.
67 std::shared_ptr<BufferQueue> GetBufferQueue(u32 id) const; 72 std::shared_ptr<BufferQueue> GetBufferQueue(u32 id) const;
diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp
index 5120abfff..47beaf8f6 100644
--- a/src/core/hle/service/vi/vi.cpp
+++ b/src/core/hle/service/vi/vi.cpp
@@ -18,7 +18,8 @@
18#include "common/swap.h" 18#include "common/swap.h"
19#include "core/core_timing.h" 19#include "core/core_timing.h"
20#include "core/hle/ipc_helpers.h" 20#include "core/hle/ipc_helpers.h"
21#include "core/hle/kernel/event.h" 21#include "core/hle/kernel/readable_event.h"
22#include "core/hle/kernel/writable_event.h"
22#include "core/hle/service/nvdrv/nvdrv.h" 23#include "core/hle/service/nvdrv/nvdrv.h"
23#include "core/hle/service/nvflinger/buffer_queue.h" 24#include "core/hle/service/nvflinger/buffer_queue.h"
24#include "core/hle/service/nvflinger/nvflinger.h" 25#include "core/hle/service/nvflinger/nvflinger.h"
@@ -547,7 +548,7 @@ private:
547 IPC::ResponseBuilder rb{ctx, 2}; 548 IPC::ResponseBuilder rb{ctx, 2};
548 rb.Push(RESULT_SUCCESS); 549 rb.Push(RESULT_SUCCESS);
549 }, 550 },
550 buffer_queue->GetBufferWaitEvent()); 551 buffer_queue->GetWritableBufferWaitEvent(), buffer_queue->GetBufferWaitEvent());
551 } 552 }
552 } else if (transaction == TransactionId::RequestBuffer) { 553 } else if (transaction == TransactionId::RequestBuffer) {
553 IGBPRequestBufferRequestParcel request{ctx.ReadBuffer()}; 554 IGBPRequestBufferRequestParcel request{ctx.ReadBuffer()};
diff --git a/src/yuzu/debugger/wait_tree.cpp b/src/yuzu/debugger/wait_tree.cpp
index 0c831c9f4..797be6c4a 100644
--- a/src/yuzu/debugger/wait_tree.cpp
+++ b/src/yuzu/debugger/wait_tree.cpp
@@ -7,7 +7,6 @@
7 7
8#include "common/assert.h" 8#include "common/assert.h"
9#include "core/core.h" 9#include "core/core.h"
10#include "core/hle/kernel/event.h"
11#include "core/hle/kernel/handle_table.h" 10#include "core/hle/kernel/handle_table.h"
12#include "core/hle/kernel/mutex.h" 11#include "core/hle/kernel/mutex.h"
13#include "core/hle/kernel/process.h" 12#include "core/hle/kernel/process.h"
@@ -15,6 +14,7 @@
15#include "core/hle/kernel/thread.h" 14#include "core/hle/kernel/thread.h"
16#include "core/hle/kernel/timer.h" 15#include "core/hle/kernel/timer.h"
17#include "core/hle/kernel/wait_object.h" 16#include "core/hle/kernel/wait_object.h"
17#include "core/hle/kernel/writable_event.h"
18#include "core/memory.h" 18#include "core/memory.h"
19 19
20WaitTreeItem::WaitTreeItem() = default; 20WaitTreeItem::WaitTreeItem() = default;
@@ -154,7 +154,7 @@ QString WaitTreeWaitObject::GetText() const {
154std::unique_ptr<WaitTreeWaitObject> WaitTreeWaitObject::make(const Kernel::WaitObject& object) { 154std::unique_ptr<WaitTreeWaitObject> WaitTreeWaitObject::make(const Kernel::WaitObject& object) {
155 switch (object.GetHandleType()) { 155 switch (object.GetHandleType()) {
156 case Kernel::HandleType::Event: 156 case Kernel::HandleType::Event:
157 return std::make_unique<WaitTreeEvent>(static_cast<const Kernel::Event&>(object)); 157 return std::make_unique<WaitTreeEvent>(static_cast<const Kernel::WritableEvent&>(object));
158 case Kernel::HandleType::Timer: 158 case Kernel::HandleType::Timer:
159 return std::make_unique<WaitTreeTimer>(static_cast<const Kernel::Timer&>(object)); 159 return std::make_unique<WaitTreeTimer>(static_cast<const Kernel::Timer&>(object));
160 case Kernel::HandleType::Thread: 160 case Kernel::HandleType::Thread:
@@ -332,7 +332,7 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeThread::GetChildren() const {
332 return list; 332 return list;
333} 333}
334 334
335WaitTreeEvent::WaitTreeEvent(const Kernel::Event& object) : WaitTreeWaitObject(object) {} 335WaitTreeEvent::WaitTreeEvent(const Kernel::WritableEvent& object) : WaitTreeWaitObject(object) {}
336WaitTreeEvent::~WaitTreeEvent() = default; 336WaitTreeEvent::~WaitTreeEvent() = default;
337 337
338std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeEvent::GetChildren() const { 338std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeEvent::GetChildren() const {
@@ -340,7 +340,8 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeEvent::GetChildren() const {
340 340
341 list.push_back(std::make_unique<WaitTreeText>( 341 list.push_back(std::make_unique<WaitTreeText>(
342 tr("reset type = %1") 342 tr("reset type = %1")
343 .arg(GetResetTypeQString(static_cast<const Kernel::Event&>(object).GetResetType())))); 343 .arg(GetResetTypeQString(
344 static_cast<const Kernel::WritableEvent&>(object).GetResetType()))));
344 return list; 345 return list;
345} 346}
346 347
diff --git a/src/yuzu/debugger/wait_tree.h b/src/yuzu/debugger/wait_tree.h
index 331f89885..c0b6e0e7f 100644
--- a/src/yuzu/debugger/wait_tree.h
+++ b/src/yuzu/debugger/wait_tree.h
@@ -18,7 +18,7 @@ class EmuThread;
18 18
19namespace Kernel { 19namespace Kernel {
20class WaitObject; 20class WaitObject;
21class Event; 21class WritableEvent;
22class Thread; 22class Thread;
23class Timer; 23class Timer;
24} // namespace Kernel 24} // namespace Kernel
@@ -144,7 +144,7 @@ public:
144class WaitTreeEvent : public WaitTreeWaitObject { 144class WaitTreeEvent : public WaitTreeWaitObject {
145 Q_OBJECT 145 Q_OBJECT
146public: 146public:
147 explicit WaitTreeEvent(const Kernel::Event& object); 147 explicit WaitTreeEvent(const Kernel::WritableEvent& object);
148 ~WaitTreeEvent() override; 148 ~WaitTreeEvent() override;
149 149
150 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override; 150 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;