summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_hardware_timer.h
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2022-12-18 22:37:19 +0100
committerLiam <byteslice@airmail.cc>2022-12-18 22:37:19 +0100
commit67c0d714c5b6e93ddb00d0807147b5673c011ac6 (patch)
treebd35994725d098c7371506d533390800d3253f3e /src/core/hle/kernel/k_hardware_timer.h
parentMerge pull request #9470 from german77/silenceIkillYou (diff)
downloadyuzu-67c0d714c5b6e93ddb00d0807147b5673c011ac6.tar
yuzu-67c0d714c5b6e93ddb00d0807147b5673c011ac6.tar.gz
yuzu-67c0d714c5b6e93ddb00d0807147b5673c011ac6.tar.bz2
yuzu-67c0d714c5b6e93ddb00d0807147b5673c011ac6.tar.lz
yuzu-67c0d714c5b6e93ddb00d0807147b5673c011ac6.tar.xz
yuzu-67c0d714c5b6e93ddb00d0807147b5673c011ac6.tar.zst
yuzu-67c0d714c5b6e93ddb00d0807147b5673c011ac6.zip
Diffstat (limited to 'src/core/hle/kernel/k_hardware_timer.h')
-rw-r--r--src/core/hle/kernel/k_hardware_timer.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/core/hle/kernel/k_hardware_timer.h b/src/core/hle/kernel/k_hardware_timer.h
new file mode 100644
index 000000000..2c88876b3
--- /dev/null
+++ b/src/core/hle/kernel/k_hardware_timer.h
@@ -0,0 +1,50 @@
+// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "core/hle/kernel/k_hardware_timer_base.h"
+
+namespace Core::Timing {
+struct EventType;
+} // namespace Core::Timing
+
+namespace Kernel {
+
+class KHardwareTimer : /* public KInterruptTask, */ public KHardwareTimerBase {
+public:
+ explicit KHardwareTimer(KernelCore& kernel) : KHardwareTimerBase{kernel} {}
+
+ // Public API.
+ void Initialize();
+ void Finalize();
+
+ s64 GetCount() {
+ return GetTick();
+ }
+
+ void RegisterAbsoluteTask(KTimerTask* task, s64 task_time) {
+ KScopedDisableDispatch dd{m_kernel};
+ KScopedSpinLock lk{this->GetLock()};
+
+ if (this->RegisterAbsoluteTaskImpl(task, task_time)) {
+ if (task_time <= m_wakeup_time) {
+ this->EnableInterrupt(task_time);
+ }
+ }
+ }
+
+private:
+ void EnableInterrupt(s64 wakeup_time);
+ void DisableInterrupt();
+ bool GetInterruptEnabled();
+ s64 GetTick();
+ void DoTask();
+
+private:
+ // Absolute time in nanoseconds
+ s64 m_wakeup_time{std::numeric_limits<s64>::max()};
+ std::shared_ptr<Core::Timing::EventType> m_event_type{};
+};
+
+} // namespace Kernel