From e99326db0ec9e26f45213b2e15fde5c889e4df97 Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Sat, 6 Aug 2016 12:22:39 +0200 Subject: [PATCH] Decouple HPET init from ACPI --- kernel/include/drivers/hpet.hpp | 2 ++ kernel/src/acpi.cpp | 7 ------- kernel/src/drivers/hpet.cpp | 6 ++++++ kernel/src/kernel.cpp | 2 ++ 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/kernel/include/drivers/hpet.hpp b/kernel/include/drivers/hpet.hpp index 42a24075..daa10d45 100644 --- a/kernel/include/drivers/hpet.hpp +++ b/kernel/include/drivers/hpet.hpp @@ -13,6 +13,8 @@ namespace hpet { bool install(); void late_install(); +void init(); + } //end of namespace hpet #endif diff --git a/kernel/src/acpi.cpp b/kernel/src/acpi.cpp index 10a4d129..77d56b35 100644 --- a/kernel/src/acpi.cpp +++ b/kernel/src/acpi.cpp @@ -16,8 +16,6 @@ #include "arch.hpp" #include "assert.hpp" -#include "drivers/hpet.hpp" - namespace { // This is copied from acexcep.h @@ -106,11 +104,6 @@ void initialize_acpica(){ acpi_initialized = true; logging::logf(logging::log_level::DEBUG, "acpi:: Finished initialization of ACPICA\n"); - - // Here we initialize the drivers that need ACPI - // TODO This is not good coupling: Find a better solution - - hpet::late_install(); } uint64_t acpi_read(const ACPI_GENERIC_ADDRESS& address){ diff --git a/kernel/src/drivers/hpet.cpp b/kernel/src/drivers/hpet.cpp index 1dee1308..65d2dcbe 100644 --- a/kernel/src/drivers/hpet.cpp +++ b/kernel/src/drivers/hpet.cpp @@ -11,6 +11,7 @@ #include "logging.hpp" #include "mmap.hpp" #include "arch.hpp" +#include "scheduler.hpp" // For async init namespace { @@ -43,6 +44,11 @@ void clear_register_bits(size_t reg, uint64_t bits){ } //End of anonymous namespace +void hpet::init(){ + // HPET needs ACPI + scheduler::queue_async_init_task(hpet::late_install); +} + bool hpet::install(){ // Find the HPET table auto status = AcpiGetTable(ACPI_SIG_HPET, 0, reinterpret_cast(&hpet_table)); diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index bc0bfd38..f31814d9 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -28,6 +28,7 @@ #include "network.hpp" #include "vfs/vfs.hpp" #include "fs/sysfs.hpp" +#include "drivers/hpet.hpp" extern "C" { @@ -100,6 +101,7 @@ void kernel_main(){ // Asynchronously initialized drivers acpi::init(); + hpet::init(); //Install drivers timer::install();