diff --git a/Kernel/Time/HPET.cpp b/Kernel/Time/HPET.cpp index 73c1152d67..29acdb7e82 100644 --- a/Kernel/Time/HPET.cpp +++ b/Kernel/Time/HPET.cpp @@ -161,11 +161,6 @@ bool HPET::check_for_exisiting_periodic_timers() return false; } -const FixedArray>& HPET::comparators() const -{ - return m_comparators; -} - void HPET::global_disable() { auto* registers_block = (volatile HPETRegistersBlock*)m_hpet_mmio_region->vaddr().offset(m_physical_acpi_hpet_registers.offset_in_page()).as_ptr(); @@ -331,7 +326,6 @@ HPET::HPET(PhysicalAddress acpi_hpet) size_t timers_count = ((registers_block->raw_capabilites.reg >> 8) & 0x1f) + 1; klog() << "HPET: Timers count - " << timers_count; ASSERT(timers_count >= 2); - m_comparators.resize(timers_count); auto* capabilities_register = (const volatile HPETCapabilityRegister*)®isters_block->raw_capabilites.reg; global_disable(); @@ -345,15 +339,8 @@ HPET::HPET(PhysicalAddress acpi_hpet) if (registers_block->raw_capabilites.reg & (u32)HPETFlags::Attributes::LegacyReplacementRouteCapable) registers_block->configuration.reg |= (u32)HPETFlags::Configuration::LegacyReplacementRoute; - for (size_t index = 0; index < m_comparators.size(); index++) { - bool periodic = is_periodic_capable(index); - if (index == 0) { - m_comparators[index] = HPETComparator::create(index, 0, periodic); - } - if (index == 1) { - m_comparators[index] = HPETComparator::create(index, 8, periodic); - } - } + m_comparators.append(HPETComparator::create(0, 0, is_periodic_capable(0))); + m_comparators.append(HPETComparator::create(1, 8, is_periodic_capable(1))); global_enable(); } diff --git a/Kernel/Time/HPET.h b/Kernel/Time/HPET.h index 87b98ce6c5..2198e755c3 100644 --- a/Kernel/Time/HPET.h +++ b/Kernel/Time/HPET.h @@ -27,10 +27,10 @@ #pragma once #include +#include #include #include #include -#include #include #include @@ -47,7 +47,7 @@ public: u64 main_counter_value() const; u64 frequency() const; - const FixedArray>& comparators() const; + const NonnullRefPtrVector& comparators() const { return m_comparators; } void disable(const HPETComparator&); void enable(const HPETComparator&); @@ -85,6 +85,6 @@ private: bool counter_is_64_bit_capable : 1; bool legacy_replacement_route_capable : 1; - FixedArray> m_comparators; + NonnullRefPtrVector m_comparators; }; } diff --git a/Kernel/Time/TimeManagement.cpp b/Kernel/Time/TimeManagement.cpp index d0baf30093..afafd24fd1 100644 --- a/Kernel/Time/TimeManagement.cpp +++ b/Kernel/Time/TimeManagement.cpp @@ -121,10 +121,10 @@ Vector TimeManagement::scan_and_initialize_periodic_timers() dbg() << "Time: Scanning for periodic timers"; Vector timers; for (auto& hardware_timer : m_hardware_timers) { - if (hardware_timer && hardware_timer->is_periodic_capable()) { - timers.append(hardware_timer); + if (hardware_timer.is_periodic_capable()) { + timers.append(&hardware_timer); if (should_enable) - hardware_timer->set_periodic(); + hardware_timer.set_periodic(); } } return timers; @@ -135,8 +135,8 @@ Vector TimeManagement::scan_for_non_periodic_timers() dbg() << "Time: Scanning for non-periodic timers"; Vector timers; for (auto& hardware_timer : m_hardware_timers) { - if (hardware_timer && !hardware_timer->is_periodic_capable()) - timers.append(hardware_timer); + if (!hardware_timer.is_periodic_capable()) + timers.append(&hardware_timer); } return timers; } diff --git a/Kernel/Time/TimeManagement.h b/Kernel/Time/TimeManagement.h index 306ac85c12..7571295424 100644 --- a/Kernel/Time/TimeManagement.h +++ b/Kernel/Time/TimeManagement.h @@ -27,6 +27,7 @@ #pragma once #include +#include #include #include #include @@ -65,7 +66,7 @@ private: bool probe_and_set_non_legacy_hardware_timers(); Vector scan_and_initialize_periodic_timers(); Vector scan_for_non_periodic_timers(); - Vector> m_hardware_timers; + NonnullRefPtrVector m_hardware_timers; u32 m_ticks_this_second { 0 }; u32 m_seconds_since_boot { 0 };