From 3e372faf5ecd4f16f94c0a9eb69aea7928160b64 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Mon, 18 Jan 2021 13:46:39 -0800 Subject: [PATCH] [kernel] Add fake clock source if there's no HPET If there's no HPET (or if HPET is left uninitialized for debugging) default to a fake incrementing counter clock. --- src/kernel/device_manager.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/kernel/device_manager.cpp b/src/kernel/device_manager.cpp index 597a4be..7a3887a 100644 --- a/src/kernel/device_manager.cpp +++ b/src/kernel/device_manager.cpp @@ -313,6 +313,13 @@ device_manager::probe_pci() } } +static uint64_t +fake_clock_source(void*) +{ + static uint64_t value = 0; + return value++; +} + void device_manager::init_drivers() { @@ -331,18 +338,20 @@ device_manager::init_drivers() ahcid.register_device(&device); } */ + clock *master_clock = nullptr; if (m_hpets.count() > 0) { hpet &h = m_hpets[0]; h.enable(); // becomes the singleton - clock *master_clock = new clock(h.rate(), hpet_clock_source, &h); - kassert(master_clock, "Failed to allocate master clock"); + master_clock = new clock(h.rate(), hpet_clock_source, &h); log::info(logs::clock, "Created master clock using HPET 0: Rate %d", h.rate()); } else { - //TODO: APIC clock? - kassert(0, "No HPET master clock"); + //TODO: Other clocks, APIC clock? + master_clock = new clock(5000, fake_clock_source, nullptr); } + + kassert(master_clock, "Failed to allocate master clock"); } bool