From e86a7e36912b6f3fc64a594338d3c1ac768e3bb8 Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 29 Jan 2021 22:48:06 -0800 Subject: hle: kernel: Rename ReadableEvent to KReadableEvent. --- src/core/hle/kernel/k_readable_event.cpp | 52 ++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/core/hle/kernel/k_readable_event.cpp (limited to 'src/core/hle/kernel/k_readable_event.cpp') diff --git a/src/core/hle/kernel/k_readable_event.cpp b/src/core/hle/kernel/k_readable_event.cpp new file mode 100644 index 000000000..e9e191bc6 --- /dev/null +++ b/src/core/hle/kernel/k_readable_event.cpp @@ -0,0 +1,52 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include +#include "common/assert.h" +#include "common/logging/log.h" +#include "core/hle/kernel/errors.h" +#include "core/hle/kernel/k_readable_event.h" +#include "core/hle/kernel/k_scheduler.h" +#include "core/hle/kernel/k_thread.h" +#include "core/hle/kernel/kernel.h" +#include "core/hle/kernel/object.h" + +namespace Kernel { + +KReadableEvent::KReadableEvent(KernelCore& kernel) : KSynchronizationObject{kernel} {} +KReadableEvent::~KReadableEvent() = default; + +void KReadableEvent::Signal() { + if (is_signaled) { + return; + } + + is_signaled = true; + NotifyAvailable(); +} + +bool KReadableEvent::IsSignaled() const { + ASSERT(kernel.GlobalSchedulerContext().IsLocked()); + + return is_signaled; +} + +void KReadableEvent::Clear() { + is_signaled = false; +} + +ResultCode KReadableEvent::Reset() { + KScopedSchedulerLock lock(kernel); + if (!is_signaled) { + LOG_TRACE(Kernel, "Handle is not signaled! object_id={}, object_type={}, object_name={}", + GetObjectId(), GetTypeName(), GetName()); + return ERR_INVALID_STATE; + } + + Clear(); + + return RESULT_SUCCESS; +} + +} // namespace Kernel -- cgit v1.2.3 From ff3c7c068b926399513bf7328c22e224ab0b53d6 Mon Sep 17 00:00:00 2001 From: bunnei Date: Sun, 31 Jan 2021 01:38:57 -0800 Subject: hle: kernel: Reimplement KReadableEvent and KWritableEvent. --- src/core/hle/kernel/k_readable_event.cpp | 44 +++++++++++++++++--------------- 1 file changed, 24 insertions(+), 20 deletions(-) (limited to 'src/core/hle/kernel/k_readable_event.cpp') diff --git a/src/core/hle/kernel/k_readable_event.cpp b/src/core/hle/kernel/k_readable_event.cpp index e9e191bc6..0fa895c56 100644 --- a/src/core/hle/kernel/k_readable_event.cpp +++ b/src/core/hle/kernel/k_readable_event.cpp @@ -1,9 +1,10 @@ -// Copyright 2014 Citra Emulator Project +// Copyright 2021 yuzu emulator team // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #include #include "common/assert.h" +#include "common/common_funcs.h" #include "common/logging/log.h" #include "core/hle/kernel/errors.h" #include "core/hle/kernel/k_readable_event.h" @@ -11,40 +12,43 @@ #include "core/hle/kernel/k_thread.h" #include "core/hle/kernel/kernel.h" #include "core/hle/kernel/object.h" +#include "core/hle/kernel/svc_results.h" namespace Kernel { -KReadableEvent::KReadableEvent(KernelCore& kernel) : KSynchronizationObject{kernel} {} +KReadableEvent::KReadableEvent(KernelCore& kernel, std::string&& name) + : KSynchronizationObject{kernel, std::move(name)} {} KReadableEvent::~KReadableEvent() = default; -void KReadableEvent::Signal() { - if (is_signaled) { - return; - } - - is_signaled = true; - NotifyAvailable(); -} - bool KReadableEvent::IsSignaled() const { ASSERT(kernel.GlobalSchedulerContext().IsLocked()); return is_signaled; } -void KReadableEvent::Clear() { - is_signaled = false; -} +ResultCode KReadableEvent::Signal() { + KScopedSchedulerLock lk{kernel}; -ResultCode KReadableEvent::Reset() { - KScopedSchedulerLock lock(kernel); if (!is_signaled) { - LOG_TRACE(Kernel, "Handle is not signaled! object_id={}, object_type={}, object_name={}", - GetObjectId(), GetTypeName(), GetName()); - return ERR_INVALID_STATE; + is_signaled = true; + NotifyAvailable(); } - Clear(); + return RESULT_SUCCESS; +} + +ResultCode KReadableEvent::Clear() { + Reset(); + + return RESULT_SUCCESS; +} + +ResultCode KReadableEvent::Reset() { + KScopedSchedulerLock lk{kernel}; + + R_UNLESS_NOLOG(is_signaled, Svc::ResultInvalidState); + + is_signaled = false; return RESULT_SUCCESS; } -- cgit v1.2.3 From eba3c59a611962a1b019a5edfbc16c8d6db58be9 Mon Sep 17 00:00:00 2001 From: bunnei Date: Sun, 31 Jan 2021 16:55:11 -0800 Subject: hle: kernel: svc: Cleanup KEvent/KReadableEvent/KWritableEvent SVCs. --- src/core/hle/kernel/k_readable_event.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/core/hle/kernel/k_readable_event.cpp') diff --git a/src/core/hle/kernel/k_readable_event.cpp b/src/core/hle/kernel/k_readable_event.cpp index 0fa895c56..cd15aa529 100644 --- a/src/core/hle/kernel/k_readable_event.cpp +++ b/src/core/hle/kernel/k_readable_event.cpp @@ -49,7 +49,6 @@ ResultCode KReadableEvent::Reset() { R_UNLESS_NOLOG(is_signaled, Svc::ResultInvalidState); is_signaled = false; - return RESULT_SUCCESS; } -- cgit v1.2.3 From ea4f62615e71cd2b680517b7609928ed0abf216d Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 4 Feb 2021 16:56:57 -0800 Subject: hle: kernel: Drop R_UNLESS_NOLOG in favor of expanded if-statement. --- src/core/hle/kernel/k_readable_event.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/core/hle/kernel/k_readable_event.cpp') diff --git a/src/core/hle/kernel/k_readable_event.cpp b/src/core/hle/kernel/k_readable_event.cpp index cd15aa529..d8a42dbaf 100644 --- a/src/core/hle/kernel/k_readable_event.cpp +++ b/src/core/hle/kernel/k_readable_event.cpp @@ -46,7 +46,9 @@ ResultCode KReadableEvent::Clear() { ResultCode KReadableEvent::Reset() { KScopedSchedulerLock lk{kernel}; - R_UNLESS_NOLOG(is_signaled, Svc::ResultInvalidState); + if (!is_signaled) { + return Svc::ResultInvalidState; + } is_signaled = false; return RESULT_SUCCESS; -- cgit v1.2.3