summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/KernelKit/Timer.h
diff options
context:
space:
mode:
Diffstat (limited to 'dev/kernel/KernelKit/Timer.h')
-rw-r--r--dev/kernel/KernelKit/Timer.h138
1 files changed, 65 insertions, 73 deletions
diff --git a/dev/kernel/KernelKit/Timer.h b/dev/kernel/KernelKit/Timer.h
index b6d23e6b..d6cfee39 100644
--- a/dev/kernel/KernelKit/Timer.h
+++ b/dev/kernel/KernelKit/Timer.h
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
+ Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
------------------------------------------- */
@@ -9,75 +9,67 @@
#include <ArchKit/ArchKit.h>
#include <KernelKit/KPC.h>
-namespace Kernel
-{
- class SoftwareTimer;
- class TimerInterface;
-
- inline constexpr Int16 kTimeUnit = 1000;
-
- class TimerInterface
- {
- public:
- /// @brief Default constructor
- explicit TimerInterface() = default;
- virtual ~TimerInterface() = default;
-
- public:
- NE_COPY_DEFAULT(TimerInterface)
-
- public:
- virtual BOOL Wait() noexcept;
- };
-
- class SoftwareTimer final : public TimerInterface
- {
- public:
- explicit SoftwareTimer(Int64 seconds);
- ~SoftwareTimer() override;
-
- public:
- NE_COPY_DEFAULT(SoftwareTimer)
-
- public:
- BOOL Wait() noexcept override;
-
- private:
- UIntPtr* fDigitalTimer{nullptr};
- Int64 fWaitFor{0};
- };
-
- class HardwareTimer final : public TimerInterface
- {
- public:
- explicit HardwareTimer(UInt64 seconds);
- ~HardwareTimer() override;
-
- public:
- NE_COPY_DEFAULT(HardwareTimer)
-
- public:
- BOOL Wait() noexcept override;
-
- private:
- UIntPtr* fDigitalTimer{nullptr};
- Int64 fWaitFor{0};
- };
-
- inline Int64 rtl_ms(Int64 time)
- {
- if (time < 0)
- return 0;
-
- // TODO: nanoseconds maybe?
- return kTimeUnit * kTimeUnit * time;
- }
-
- inline Int64 rtl_seconds(Int64 time)
- {
- if (time < 0)
- return 0;
-
- return kTimeUnit * rtl_ms(time);
- }
-} // namespace Kernel
+namespace Kernel {
+class SoftwareTimer;
+class TimerInterface;
+
+inline constexpr Int16 kTimeUnit = 1000;
+
+class TimerInterface {
+ public:
+ /// @brief Default constructor
+ explicit TimerInterface() = default;
+ virtual ~TimerInterface() = default;
+
+ public:
+ NE_COPY_DEFAULT(TimerInterface)
+
+ public:
+ virtual BOOL Wait() noexcept;
+};
+
+class SoftwareTimer final : public TimerInterface {
+ public:
+ explicit SoftwareTimer(Int64 seconds);
+ ~SoftwareTimer() override;
+
+ public:
+ NE_COPY_DEFAULT(SoftwareTimer)
+
+ public:
+ BOOL Wait() noexcept override;
+
+ private:
+ UIntPtr* fDigitalTimer{nullptr};
+ Int64 fWaitFor{0};
+};
+
+class HardwareTimer final : public TimerInterface {
+ public:
+ explicit HardwareTimer(UInt64 seconds);
+ ~HardwareTimer() override;
+
+ public:
+ NE_COPY_DEFAULT(HardwareTimer)
+
+ public:
+ BOOL Wait() noexcept override;
+
+ private:
+ volatile UInt8* fDigitalTimer{nullptr};
+ Int64 fWaitFor{0};
+};
+
+inline Int64 rtl_microseconds(Int64 time) {
+ if (time < 0) return 0;
+
+ // TODO: nanoseconds maybe?
+ return kTimeUnit * time;
+}
+
+inline Int64 rtl_milliseconds(Int64 time) {
+ if (time < 0) return 0;
+
+ return kTimeUnit * kTimeUnit * time;
+}
+} // namespace Kernel