diff options
| author | 2021-01-31 01:37:41 -0800 | |
|---|---|---|
| committer | 2021-02-05 14:00:36 -0800 | |
| commit | 6bf80dfee0a9ed995fca48c0f5c9a786d14cdd6b (patch) | |
| tree | 6a79931d0ddd6655b58c14eeb4411d81e7b37df7 /src/core | |
| parent | hle: kernel: KAddressArbiter: Use R_UNLESS_NOLOG where applicable. (diff) | |
| download | yuzu-6bf80dfee0a9ed995fca48c0f5c9a786d14cdd6b.tar.gz yuzu-6bf80dfee0a9ed995fca48c0f5c9a786d14cdd6b.tar.xz yuzu-6bf80dfee0a9ed995fca48c0f5c9a786d14cdd6b.zip | |
hle: kernel: Implement KEvent.
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_event.cpp | 32 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_event.h | 57 |
3 files changed, 91 insertions, 0 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 73ee48f4f..386d7bddf 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt | |||
| @@ -160,6 +160,8 @@ add_library(core STATIC | |||
| 160 | hle/kernel/k_affinity_mask.h | 160 | hle/kernel/k_affinity_mask.h |
| 161 | hle/kernel/k_condition_variable.cpp | 161 | hle/kernel/k_condition_variable.cpp |
| 162 | hle/kernel/k_condition_variable.h | 162 | hle/kernel/k_condition_variable.h |
| 163 | hle/kernel/k_event.cpp | ||
| 164 | hle/kernel/k_event.h | ||
| 163 | hle/kernel/k_light_condition_variable.h | 165 | hle/kernel/k_light_condition_variable.h |
| 164 | hle/kernel/k_light_lock.cpp | 166 | hle/kernel/k_light_lock.cpp |
| 165 | hle/kernel/k_light_lock.h | 167 | hle/kernel/k_light_lock.h |
diff --git a/src/core/hle/kernel/k_event.cpp b/src/core/hle/kernel/k_event.cpp new file mode 100644 index 000000000..bb2fa4ad5 --- /dev/null +++ b/src/core/hle/kernel/k_event.cpp | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | // Copyright 2021 yuzu emulator team | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include "core/hle/kernel/k_event.h" | ||
| 6 | #include "core/hle/kernel/k_readable_event.h" | ||
| 7 | #include "core/hle/kernel/k_writable_event.h" | ||
| 8 | |||
| 9 | namespace Kernel { | ||
| 10 | |||
| 11 | KEvent::KEvent(KernelCore& kernel, std::string&& name) : Object{kernel, std::move(name)} {} | ||
| 12 | |||
| 13 | KEvent::~KEvent() = default; | ||
| 14 | |||
| 15 | std::shared_ptr<KEvent> KEvent::Create(KernelCore& kernel, std::string&& name) { | ||
| 16 | return std::make_shared<KEvent>(kernel, std::move(name)); | ||
| 17 | } | ||
| 18 | |||
| 19 | void KEvent::Initialize() { | ||
| 20 | // Create our sub events. | ||
| 21 | readable_event = std::make_shared<KReadableEvent>(kernel, GetName() + ":Readable"); | ||
| 22 | writable_event = std::make_shared<KWritableEvent>(kernel, GetName() + ":Writable"); | ||
| 23 | |||
| 24 | // Initialize our sub sessions. | ||
| 25 | readable_event->Initialize(this); | ||
| 26 | writable_event->Initialize(this); | ||
| 27 | |||
| 28 | // Mark initialized. | ||
| 29 | initialized = true; | ||
| 30 | } | ||
| 31 | |||
| 32 | } // namespace Kernel | ||
diff --git a/src/core/hle/kernel/k_event.h b/src/core/hle/kernel/k_event.h new file mode 100644 index 000000000..2fb887129 --- /dev/null +++ b/src/core/hle/kernel/k_event.h | |||
| @@ -0,0 +1,57 @@ | |||
| 1 | // Copyright 2021 yuzu emulator team | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include "core/hle/kernel/object.h" | ||
| 8 | |||
| 9 | namespace Kernel { | ||
| 10 | |||
| 11 | class KernelCore; | ||
| 12 | class KReadableEvent; | ||
| 13 | class KWritableEvent; | ||
| 14 | |||
| 15 | class KEvent final : public Object { | ||
| 16 | public: | ||
| 17 | explicit KEvent(KernelCore& kernel, std::string&& name); | ||
| 18 | ~KEvent() override; | ||
| 19 | |||
| 20 | static std::shared_ptr<KEvent> Create(KernelCore& kernel, std::string&& name); | ||
| 21 | |||
| 22 | void Initialize(); | ||
| 23 | |||
| 24 | void Finalize() override {} | ||
| 25 | |||
| 26 | std::string GetTypeName() const override { | ||
| 27 | return "KEvent"; | ||
| 28 | } | ||
| 29 | |||
| 30 | static constexpr HandleType HANDLE_TYPE = HandleType::Event; | ||
| 31 | HandleType GetHandleType() const override { | ||
| 32 | return HANDLE_TYPE; | ||
| 33 | } | ||
| 34 | |||
| 35 | std::shared_ptr<KReadableEvent>& GetReadableEvent() { | ||
| 36 | return readable_event; | ||
| 37 | } | ||
| 38 | |||
| 39 | std::shared_ptr<KWritableEvent>& GetWritableEvent() { | ||
| 40 | return writable_event; | ||
| 41 | } | ||
| 42 | |||
| 43 | const std::shared_ptr<KReadableEvent>& GetReadableEvent() const { | ||
| 44 | return readable_event; | ||
| 45 | } | ||
| 46 | |||
| 47 | const std::shared_ptr<KWritableEvent>& GetWritableEvent() const { | ||
| 48 | return writable_event; | ||
| 49 | } | ||
| 50 | |||
| 51 | private: | ||
| 52 | std::shared_ptr<KReadableEvent> readable_event; | ||
| 53 | std::shared_ptr<KWritableEvent> writable_event; | ||
| 54 | bool initialized{}; | ||
| 55 | }; | ||
| 56 | |||
| 57 | } // namespace Kernel | ||