From 4eb813ba7247d9e2bebf255ecc50f68c0a71bb72 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 20 Aug 2024 02:53:51 +0200 Subject: + IMP: Using Hybrid MP services on ZKA_EFI firmware. + Implement HPET on HardwareTimer and added a SoftwareTimer. + Implemented Hybrid MP Services on EFI.hxx. Signed-off-by: Amlal El Mahrouss --- dev/ZKA/KernelKit/Semaphore.hxx | 2 +- dev/ZKA/KernelKit/Timer.hxx | 37 +++++++++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 11 deletions(-) (limited to 'dev/ZKA/KernelKit') diff --git a/dev/ZKA/KernelKit/Semaphore.hxx b/dev/ZKA/KernelKit/Semaphore.hxx index 33dfe651..efef472a 100644 --- a/dev/ZKA/KernelKit/Semaphore.hxx +++ b/dev/ZKA/KernelKit/Semaphore.hxx @@ -32,7 +32,7 @@ namespace Kernel public: bool Lock(PROCESS_HEADER_BLOCK* process); - bool LockOrWait(PROCESS_HEADER_BLOCK* process, HardwareTimerInterface* timer); + bool LockOrWait(PROCESS_HEADER_BLOCK* process, TimerInterface* timer); public: NEWOS_COPY_DEFAULT(Semaphore); diff --git a/dev/ZKA/KernelKit/Timer.hxx b/dev/ZKA/KernelKit/Timer.hxx index e6ef5d03..603cacff 100644 --- a/dev/ZKA/KernelKit/Timer.hxx +++ b/dev/ZKA/KernelKit/Timer.hxx @@ -12,24 +12,41 @@ namespace Kernel { - class HardwareTimer; - class HardwareTimerInterface; + class SoftwareTimer; + class TimerInterface; - class HardwareTimerInterface + class TimerInterface { public: /// @brief Default constructor - explicit HardwareTimerInterface() = default; - virtual ~HardwareTimerInterface() = default; + explicit TimerInterface() = default; + virtual ~TimerInterface() = default; public: - NEWOS_COPY_DEFAULT(HardwareTimerInterface); + NEWOS_COPY_DEFAULT(TimerInterface); public: virtual Int32 Wait() noexcept; }; - class HardwareTimer final : public HardwareTimerInterface + class SoftwareTimer final : public TimerInterface + { + public: + explicit SoftwareTimer(Int64 seconds); + ~SoftwareTimer() override; + + public: + NEWOS_COPY_DEFAULT(SoftwareTimer); + + public: + Int32 Wait() noexcept override; + + private: + IntPtr* fDigitalTimer{nullptr}; + Int64 fWaitFor{0}; + }; + + class HardwareTimer final : public TimerInterface { public: explicit HardwareTimer(Int64 seconds); @@ -41,7 +58,7 @@ namespace Kernel public: Int32 Wait() noexcept override; - public: + private: IntPtr* fDigitalTimer{nullptr}; Int64 fWaitFor{0}; }; @@ -51,7 +68,7 @@ namespace Kernel if (time < 0) return 0; - return 1000 / time; + return 1000 * time; } inline Int64 Milliseconds(Int64 time) @@ -59,6 +76,6 @@ namespace Kernel if (time < 0) return 0; - return 1000 / Seconds(time); + return 1000 * Seconds(time); } } // namespace Kernel -- cgit v1.2.3