diff --git a/Kernel/Arch/aarch64/RPi/Timer.cpp b/Kernel/Arch/aarch64/RPi/Timer.cpp index 4fd36f82f13..8e9ff7da393 100644 --- a/Kernel/Arch/aarch64/RPi/Timer.cpp +++ b/Kernel/Arch/aarch64/RPi/Timer.cpp @@ -82,9 +82,9 @@ u64 Timer::update_time(u64& seconds_since_boot, u32& ticks_this_second, bool que } u64 ticks_since_last_second = (u64)ticks_this_second + delta_ticks; - auto ticks_per_second = frequency(); - seconds_since_boot += ticks_since_last_second / ticks_per_second; - ticks_this_second = ticks_since_last_second % ticks_per_second; + auto frequency = ticks_per_second(); + seconds_since_boot += ticks_since_last_second / frequency; + ticks_this_second = ticks_since_last_second % frequency; if (!query_only) { m_main_counter_drift = 0; @@ -92,7 +92,7 @@ u64 Timer::update_time(u64& seconds_since_boot, u32& ticks_this_second, bool que } // Return the time passed (in ns) since last time update_time was called - return (delta_ticks * 1000000000ull) / ticks_per_second; + return (delta_ticks * 1000000000ull) / frequency; } void Timer::enable_interrupt_mode() diff --git a/Kernel/Arch/aarch64/RPi/Timer.h b/Kernel/Arch/aarch64/RPi/Timer.h index 1ec0816075e..99b30cb6f7e 100644 --- a/Kernel/Arch/aarch64/RPi/Timer.h +++ b/Kernel/Arch/aarch64/RPi/Timer.h @@ -24,7 +24,6 @@ public: virtual HardwareTimerType timer_type() const override { return HardwareTimerType::RPiTimer; } virtual StringView model() const override { return "RPi Timer"sv; } - virtual size_t ticks_per_second() const override { return m_frequency; } virtual bool is_periodic() const override { TODO_AARCH64(); } virtual bool is_periodic_capable() const override { TODO_AARCH64(); } diff --git a/Kernel/Arch/riscv64/Timer.cpp b/Kernel/Arch/riscv64/Timer.cpp index cd2d679de3c..9ee1a5329a5 100644 --- a/Kernel/Arch/riscv64/Timer.cpp +++ b/Kernel/Arch/riscv64/Timer.cpp @@ -57,9 +57,9 @@ u64 Timer::update_time(u64& seconds_since_boot, u32& ticks_this_second, bool que } u64 ticks_since_last_second = (u64)ticks_this_second + delta_ticks; - auto ticks_per_second = frequency(); - seconds_since_boot += ticks_since_last_second / ticks_per_second; - ticks_this_second = ticks_since_last_second % ticks_per_second; + auto frequency = ticks_per_second(); + seconds_since_boot += ticks_since_last_second / frequency; + ticks_this_second = ticks_since_last_second % frequency; if (!query_only) { m_main_counter_drift = 0; @@ -67,7 +67,7 @@ u64 Timer::update_time(u64& seconds_since_boot, u32& ticks_this_second, bool que } // Return the time passed (in ns) since last time update_time was called - return (delta_ticks * 1000000000ull) / ticks_per_second; + return (delta_ticks * 1000000000ull) / frequency; } void Timer::set_compare(u64 compare) diff --git a/Kernel/Arch/riscv64/Timer.h b/Kernel/Arch/riscv64/Timer.h index 45f90c5691a..baabe22be63 100644 --- a/Kernel/Arch/riscv64/Timer.h +++ b/Kernel/Arch/riscv64/Timer.h @@ -19,7 +19,6 @@ public: virtual HardwareTimerType timer_type() const override { return HardwareTimerType::RISCVTimer; } virtual StringView model() const override { return "RISC-V Timer"sv; } - virtual size_t ticks_per_second() const override { return m_frequency; } virtual bool is_periodic() const override { TODO_RISCV64(); } virtual bool is_periodic_capable() const override { TODO_RISCV64(); } diff --git a/Kernel/Arch/x86_64/Time/APICTimer.cpp b/Kernel/Arch/x86_64/Time/APICTimer.cpp index 30b72d9bb7d..e9b261f87ee 100644 --- a/Kernel/Arch/x86_64/Time/APICTimer.cpp +++ b/Kernel/Arch/x86_64/Time/APICTimer.cpp @@ -141,11 +141,6 @@ void APICTimer::disable_local_timer() APIC::the().setup_local_timer(0, APIC::TimerMode::OneShot, false); } -size_t APICTimer::ticks_per_second() const -{ - return m_frequency; -} - void APICTimer::set_periodic() { // FIXME: Implement it... diff --git a/Kernel/Arch/x86_64/Time/APICTimer.h b/Kernel/Arch/x86_64/Time/APICTimer.h index ed02013b461..842c910ad77 100644 --- a/Kernel/Arch/x86_64/Time/APICTimer.h +++ b/Kernel/Arch/x86_64/Time/APICTimer.h @@ -18,7 +18,6 @@ public: static APICTimer* initialize(u8, HardwareTimerBase&); virtual HardwareTimerType timer_type() const override { return HardwareTimerType::LocalAPICTimer; } virtual StringView model() const override { return "LocalAPIC"sv; } - virtual size_t ticks_per_second() const override; virtual bool is_periodic() const override { return m_timer_mode == APIC::TimerMode::Periodic; } virtual bool is_periodic_capable() const override { return true; } diff --git a/Kernel/Arch/x86_64/Time/HPETComparator.cpp b/Kernel/Arch/x86_64/Time/HPETComparator.cpp index 213ad1071f6..0c898ce322e 100644 --- a/Kernel/Arch/x86_64/Time/HPETComparator.cpp +++ b/Kernel/Arch/x86_64/Time/HPETComparator.cpp @@ -68,11 +68,6 @@ void HPETComparator::set_new_countdown() HPET::the().update_non_periodic_comparator_value(*this); } -size_t HPETComparator::ticks_per_second() const -{ - return m_frequency; -} - void HPETComparator::reset_to_default_ticks_per_second() { dbgln("reset_to_default_ticks_per_second"); diff --git a/Kernel/Arch/x86_64/Time/HPETComparator.h b/Kernel/Arch/x86_64/Time/HPETComparator.h index 53bfd9c09c9..9e3fc48cb76 100644 --- a/Kernel/Arch/x86_64/Time/HPETComparator.h +++ b/Kernel/Arch/x86_64/Time/HPETComparator.h @@ -25,8 +25,6 @@ public: bool is_enabled() const { return m_enabled; } bool is_64bit_capable() const { return m_is_64bit_capable; } - virtual size_t ticks_per_second() const override; - virtual bool is_periodic() const override { return m_periodic; } virtual bool is_periodic_capable() const override { return m_periodic_capable; } virtual void set_periodic() override; diff --git a/Kernel/Arch/x86_64/Time/PIT.cpp b/Kernel/Arch/x86_64/Time/PIT.cpp index 5a2f2536c5b..340af103bdb 100644 --- a/Kernel/Arch/x86_64/Time/PIT.cpp +++ b/Kernel/Arch/x86_64/Time/PIT.cpp @@ -39,11 +39,6 @@ PIT::PIT(Function callback) enable_irq(); } -size_t PIT::ticks_per_second() const -{ - return m_frequency; -} - void PIT::set_periodic() { IO::out8(PIT_CTL, TIMER0_CTL | WRITE_WORD | MODE_SQUARE_WAVE); diff --git a/Kernel/Arch/x86_64/Time/PIT.h b/Kernel/Arch/x86_64/Time/PIT.h index 552a638acd9..5b1feade0d7 100644 --- a/Kernel/Arch/x86_64/Time/PIT.h +++ b/Kernel/Arch/x86_64/Time/PIT.h @@ -37,7 +37,6 @@ public: static NonnullLockRefPtr initialize(Function); virtual HardwareTimerType timer_type() const override { return HardwareTimerType::i8253; } virtual StringView model() const override { return "i8254"sv; } - virtual size_t ticks_per_second() const override; virtual bool is_periodic() const override { return m_periodic; } virtual bool is_periodic_capable() const override { return true; } diff --git a/Kernel/Arch/x86_64/Time/RTC.cpp b/Kernel/Arch/x86_64/Time/RTC.cpp index 85ba8a5ad78..97e47e26fe4 100644 --- a/Kernel/Arch/x86_64/Time/RTC.cpp +++ b/Kernel/Arch/x86_64/Time/RTC.cpp @@ -35,11 +35,6 @@ bool RealTimeClock::handle_irq(RegisterState const& regs) return result; } -size_t RealTimeClock::ticks_per_second() const -{ - return m_frequency; -} - void RealTimeClock::reset_to_default_ticks_per_second() { InterruptDisabler disabler; diff --git a/Kernel/Arch/x86_64/Time/RTC.h b/Kernel/Arch/x86_64/Time/RTC.h index 4cfb520c8dd..bdf3174e5e8 100644 --- a/Kernel/Arch/x86_64/Time/RTC.h +++ b/Kernel/Arch/x86_64/Time/RTC.h @@ -16,7 +16,6 @@ public: static NonnullLockRefPtr create(Function callback); virtual HardwareTimerType timer_type() const override { return HardwareTimerType::RTC; } virtual StringView model() const override { return "Real Time Clock"sv; } - virtual size_t ticks_per_second() const override; virtual bool is_periodic() const override { return true; } virtual bool is_periodic_capable() const override { return true; } diff --git a/Kernel/Time/HardwareTimer.h b/Kernel/Time/HardwareTimer.h index fe08df0a5ac..a1463d2589e 100644 --- a/Kernel/Time/HardwareTimer.h +++ b/Kernel/Time/HardwareTimer.h @@ -50,7 +50,6 @@ public: virtual void set_periodic() = 0; virtual void set_non_periodic() = 0; virtual void disable() = 0; - virtual u32 frequency() const = 0; virtual bool can_query_raw() const { return false; } virtual u64 current_raw() const { return 0; } virtual u64 raw_to_ns(u64) const { return 0; } @@ -89,7 +88,7 @@ public: return previous_callback; } - virtual u32 frequency() const override { return (u32)m_frequency; } + virtual size_t ticks_per_second() const override { return m_frequency; } protected: HardwareTimer(u8 irq_number, Function callback = nullptr) @@ -141,8 +140,7 @@ public: virtual HandlerType type() const override { return HandlerType::IRQHandler; } virtual StringView controller() const override { return {}; } virtual bool eoi() override; - - virtual u32 frequency() const override { return (u32)m_frequency; } + virtual size_t ticks_per_second() const override { return m_frequency; } protected: HardwareTimer(u8 irq_number, Function callback = nullptr) diff --git a/Kernel/Time/TimeManagement.cpp b/Kernel/Time/TimeManagement.cpp index 72838d2e2f9..f9fdbe9131d 100644 --- a/Kernel/Time/TimeManagement.cpp +++ b/Kernel/Time/TimeManagement.cpp @@ -461,7 +461,7 @@ UNMAP_AFTER_INIT bool TimeManagement::probe_and_set_aarch64_hardware_timers() { m_hardware_timers.append(RPi::Timer::initialize()); m_system_timer = m_hardware_timers[0]; - m_time_ticks_per_second = m_system_timer->frequency(); + m_time_ticks_per_second = m_system_timer->ticks_per_second(); m_system_timer->set_callback([this](RegisterState const& regs) { auto seconds_since_boot = m_seconds_since_boot; @@ -490,7 +490,7 @@ UNMAP_AFTER_INIT bool TimeManagement::probe_and_set_riscv64_hardware_timers() { m_hardware_timers.append(RISCV64::Timer::initialize()); m_system_timer = m_hardware_timers[0]; - m_time_ticks_per_second = m_system_timer->frequency(); + m_time_ticks_per_second = m_system_timer->ticks_per_second(); m_system_timer->set_callback([this](RegisterState const& regs) { auto seconds_since_boot = m_seconds_since_boot; @@ -525,7 +525,7 @@ void TimeManagement::increment_time_since_boot() // Compute time adjustment for adjtime. Let the clock run up to 1% fast or slow. // That way, adjtime can adjust up to 36 seconds per hour, without time getting very jumpy. // Once we have a smarter NTP service that also adjusts the frequency instead of just slewing time, maybe we can lower this. - long nanos_per_tick = 1'000'000'000 / m_time_keeper_timer->frequency(); + long nanos_per_tick = 1'000'000'000 / m_time_keeper_timer->ticks_per_second(); time_t max_slew_nanos = nanos_per_tick / 100; u32 update_iteration = m_update2.fetch_add(1, AK::MemoryOrder::memory_order_acquire);