Browse Source

Kernel/riscv64: Clean up Timer class

I just copy-pasted microseconds_since_boot and
set_interrupt_interval_usec from aarch64.
However, on RISC-V, they are not in microseconds.
The TimerRegisters struct is also unused.

current_time and set_compare can also be private and static.
Sönke Holz 1 year ago
parent
commit
d061da4cf5
2 changed files with 8 additions and 17 deletions
  1. 6 10
      Kernel/Arch/riscv64/Timer.cpp
  2. 2 7
      Kernel/Arch/riscv64/Timer.h

+ 6 - 10
Kernel/Arch/riscv64/Timer.cpp

@@ -15,12 +15,13 @@ Timer::Timer()
     : HardwareTimer(to_underlying(CSR::SCAUSE::SupervisorTimerInterrupt) & ~CSR::SCAUSE_INTERRUPT_MASK)
 {
     // FIXME: Actually query the frequency of the timer from the device tree.
+
     // Based on the "/cpus/timebase-frequency" device tree node for the QEMU virt machine
     m_frequency = 10'000'000; // in Hz
 
-    set_interrupt_interval_usec(m_frequency / OPTIMAL_TICKS_PER_SECOND_RATE);
+    m_interrupt_interval = m_frequency / OPTIMAL_TICKS_PER_SECOND_RATE;
 
-    set_compare(microseconds_since_boot() + m_interrupt_interval);
+    set_compare(current_ticks() + m_interrupt_interval);
     RISCV64::CSR::set_bits(RISCV64::CSR::Address::SIE, 1 << interrupt_number());
 }
 
@@ -31,7 +32,7 @@ NonnullLockRefPtr<Timer> Timer::initialize()
     return timer;
 }
 
-u64 Timer::microseconds_since_boot()
+u64 Timer::current_ticks()
 {
     return RISCV64::CSR::read(RISCV64::CSR::Address::TIME);
 }
@@ -40,7 +41,7 @@ bool Timer::handle_interrupt(RegisterState const& regs)
 {
     auto result = HardwareTimer::handle_interrupt(regs);
 
-    set_compare(microseconds_since_boot() + m_interrupt_interval);
+    set_compare(current_ticks() + m_interrupt_interval);
 
     return result;
 }
@@ -48,7 +49,7 @@ bool Timer::handle_interrupt(RegisterState const& regs)
 u64 Timer::update_time(u64& seconds_since_boot, u32& ticks_this_second, bool query_only)
 {
     // Should only be called by the time keeper interrupt handler!
-    u64 current_value = microseconds_since_boot();
+    u64 current_value = current_ticks();
     u64 delta_ticks = m_main_counter_drift;
     if (current_value >= m_main_counter_last_read) {
         delta_ticks += current_value - m_main_counter_last_read;
@@ -71,11 +72,6 @@ u64 Timer::update_time(u64& seconds_since_boot, u32& ticks_this_second, bool que
     return (delta_ticks * 1000000000ull) / ticks_per_second;
 }
 
-void Timer::set_interrupt_interval_usec(u32 interrupt_interval)
-{
-    m_interrupt_interval = interrupt_interval;
-}
-
 void Timer::set_compare(u64 compare)
 {
     if (SBI::Timer::set_timer(compare).is_error())

+ 2 - 7
Kernel/Arch/riscv64/Timer.h

@@ -13,8 +13,6 @@
 
 namespace Kernel::RISCV64 {
 
-struct TimerRegisters;
-
 class Timer final : public HardwareTimer<GenericInterruptHandler> {
 public:
     static NonnullLockRefPtr<Timer> initialize();
@@ -37,14 +35,11 @@ public:
     // FIXME: Share code with HPET::update_time
     u64 update_time(u64& seconds_since_boot, u32& ticks_this_second, bool query_only);
 
-    u64 microseconds_since_boot();
-
-    void set_interrupt_interval_usec(u32);
-
 private:
     Timer();
 
-    void set_compare(u64 compare);
+    static u64 current_ticks();
+    static void set_compare(u64 compare);
 
     //^ GenericInterruptHandler
     virtual bool handle_interrupt(RegisterState const&) override;