aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/k_timer_task.h
diff options
context:
space:
mode:
authorMatías Locatti <42481638+goldenx86@users.noreply.github.com>2022-12-19 18:37:34 -0300
committerGitHub <noreply@github.com>2022-12-19 18:37:34 -0300
commitf2c7d65dd963765cbe6d6587f5cb933c3ed57cae (patch)
treeabfcbf2c097e1bb0b1297f0af90b94c055bc242c /src/core/hle/kernel/k_timer_task.h
parent76eb7c725fe4a7bdc7119e640ffd827e63567cef (diff)
parent8df44232e891c7409dc5b6912f85b0f26566a6ca (diff)
Merge pull request #9474 from liamwhite/timer
kernel: add KHardwareTimer
Diffstat (limited to 'src/core/hle/kernel/k_timer_task.h')
-rw-r--r--src/core/hle/kernel/k_timer_task.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/core/hle/kernel/k_timer_task.h b/src/core/hle/kernel/k_timer_task.h
new file mode 100644
index 0000000000..66f0a5a908
--- /dev/null
+++ b/src/core/hle/kernel/k_timer_task.h
@@ -0,0 +1,40 @@
+// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "common/intrusive_red_black_tree.h"
+
+namespace Kernel {
+
+class KTimerTask : public Common::IntrusiveRedBlackTreeBaseNode<KTimerTask> {
+public:
+ static constexpr int Compare(const KTimerTask& lhs, const KTimerTask& rhs) {
+ if (lhs.GetTime() < rhs.GetTime()) {
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+
+ constexpr explicit KTimerTask() = default;
+
+ constexpr void SetTime(s64 t) {
+ m_time = t;
+ }
+
+ constexpr s64 GetTime() const {
+ return m_time;
+ }
+
+ // NOTE: This is virtual in Nintendo's kernel. Prior to 13.0.0, KWaitObject was also a
+ // TimerTask; this is no longer the case. Since this is now KThread exclusive, we have
+ // devirtualized (see inline declaration for this inside k_thread.h).
+ void OnTimer();
+
+private:
+ // Absolute time in nanoseconds
+ s64 m_time{};
+};
+
+} // namespace Kernel