diff --git a/Kernel/Time/APICTimer.cpp b/Kernel/Arch/x86/Time/APICTimer.cpp similarity index 99% rename from Kernel/Time/APICTimer.cpp rename to Kernel/Arch/x86/Time/APICTimer.cpp index 30a4652280..25381238c0 100644 --- a/Kernel/Time/APICTimer.cpp +++ b/Kernel/Arch/x86/Time/APICTimer.cpp @@ -4,10 +4,10 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include -#include #include namespace Kernel { diff --git a/Kernel/Time/APICTimer.h b/Kernel/Arch/x86/Time/APICTimer.h similarity index 96% rename from Kernel/Time/APICTimer.h rename to Kernel/Arch/x86/Time/APICTimer.h index 88d51c6e90..4474875538 100644 --- a/Kernel/Time/APICTimer.h +++ b/Kernel/Arch/x86/Time/APICTimer.h @@ -7,6 +7,7 @@ #pragma once #include +#include #include #include diff --git a/Kernel/Time/HPET.cpp b/Kernel/Arch/x86/Time/HPET.cpp similarity index 99% rename from Kernel/Time/HPET.cpp rename to Kernel/Arch/x86/Time/HPET.cpp index 4e363c7c97..725d767bd5 100644 --- a/Kernel/Time/HPET.cpp +++ b/Kernel/Arch/x86/Time/HPET.cpp @@ -5,13 +5,13 @@ */ #include +#include +#include #include #include #include #include #include -#include -#include #include namespace Kernel { diff --git a/Kernel/Time/HPET.h b/Kernel/Arch/x86/Time/HPET.h similarity index 100% rename from Kernel/Time/HPET.h rename to Kernel/Arch/x86/Time/HPET.h diff --git a/Kernel/Time/HPETComparator.cpp b/Kernel/Arch/x86/Time/HPETComparator.cpp similarity index 98% rename from Kernel/Time/HPETComparator.cpp rename to Kernel/Arch/x86/Time/HPETComparator.cpp index 6d4a3aea73..007d99a4e8 100644 --- a/Kernel/Time/HPETComparator.cpp +++ b/Kernel/Arch/x86/Time/HPETComparator.cpp @@ -5,10 +5,10 @@ */ #include +#include #include #include #include -#include #include namespace Kernel { diff --git a/Kernel/Time/HPETComparator.h b/Kernel/Arch/x86/Time/HPETComparator.h similarity index 98% rename from Kernel/Time/HPETComparator.h rename to Kernel/Arch/x86/Time/HPETComparator.h index 2bbbfcb709..cfcb70581f 100644 --- a/Kernel/Time/HPETComparator.h +++ b/Kernel/Arch/x86/Time/HPETComparator.h @@ -8,7 +8,7 @@ #include #include -#include +#include #include namespace Kernel { diff --git a/Kernel/Time/PIT.cpp b/Kernel/Arch/x86/Time/PIT.cpp similarity index 98% rename from Kernel/Time/PIT.cpp rename to Kernel/Arch/x86/Time/PIT.cpp index d2796fb8f6..7a2708d0f1 100644 --- a/Kernel/Time/PIT.cpp +++ b/Kernel/Arch/x86/Time/PIT.cpp @@ -6,11 +6,11 @@ #include #include +#include #include #include #include #include -#include #include #define IRQ_TIMER 0 diff --git a/Kernel/Time/PIT.h b/Kernel/Arch/x86/Time/PIT.h similarity index 100% rename from Kernel/Time/PIT.h rename to Kernel/Arch/x86/Time/PIT.h diff --git a/Kernel/Time/RTC.cpp b/Kernel/Arch/x86/Time/RTC.cpp similarity index 98% rename from Kernel/Time/RTC.cpp rename to Kernel/Arch/x86/Time/RTC.cpp index f0dd9cef14..d3c524adf1 100644 --- a/Kernel/Time/RTC.cpp +++ b/Kernel/Arch/x86/Time/RTC.cpp @@ -7,8 +7,8 @@ #include #include #include +#include #include -#include #include namespace Kernel { diff --git a/Kernel/Time/RTC.h b/Kernel/Arch/x86/Time/RTC.h similarity index 100% rename from Kernel/Time/RTC.h rename to Kernel/Arch/x86/Time/RTC.h diff --git a/Kernel/Arch/x86/common/Interrupts/APIC.cpp b/Kernel/Arch/x86/common/Interrupts/APIC.cpp index fc873aa470..492137ec3c 100644 --- a/Kernel/Arch/x86/common/Interrupts/APIC.cpp +++ b/Kernel/Arch/x86/common/Interrupts/APIC.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -23,7 +24,6 @@ #include #include #include -#include #define IRQ_APIC_TIMER (0xfc - IRQ_VECTOR_BASE) #define IRQ_APIC_IPI (0xfd - IRQ_VECTOR_BASE) diff --git a/Kernel/Arch/x86/common/PCSpeaker.cpp b/Kernel/Arch/x86/common/PCSpeaker.cpp index ac2fdfd364..7c4bac5ebb 100644 --- a/Kernel/Arch/x86/common/PCSpeaker.cpp +++ b/Kernel/Arch/x86/common/PCSpeaker.cpp @@ -5,8 +5,8 @@ */ #include +#include #include -#include void PCSpeaker::tone_on(int frequency) { diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 6960f979b2..73661b8f9d 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -298,11 +298,6 @@ set(KERNEL_SOURCES Thread.cpp ThreadBlockers.cpp ThreadTracer.cpp - Time/APICTimer.cpp - Time/HPET.cpp - Time/HPETComparator.cpp - Time/PIT.cpp - Time/RTC.cpp Time/TimeManagement.cpp TimerQueue.cpp UBSanitizer.cpp @@ -345,6 +340,12 @@ if ("${SERENITY_ARCH}" STREQUAL "i686" OR "${SERENITY_ARCH}" STREQUAL "x86_64") Arch/x86/PCI/IDELegacyModeController.cpp Arch/x86/PCI/Initializer.cpp + Arch/x86/Time/APICTimer.cpp + Arch/x86/Time/HPET.cpp + Arch/x86/Time/HPETComparator.cpp + Arch/x86/Time/PIT.cpp + Arch/x86/Time/RTC.cpp + Arch/x86/VGA/IOArbiter.cpp ) diff --git a/Kernel/Random.cpp b/Kernel/Random.cpp index 6d87ddfa8f..dd6dc742ea 100644 --- a/Kernel/Random.cpp +++ b/Kernel/Random.cpp @@ -7,11 +7,13 @@ #include #include +#if ARCH(I386) || ARCH(X86_64) +# include +# include +#endif #include #include #include -#include -#include #include namespace Kernel { @@ -48,7 +50,9 @@ UNMAP_AFTER_INIT KernelRng::KernelRng() add_random_event(value, i % 32); } - } else if (TimeManagement::the().can_query_precise_time()) { + } +#if ARCH(I386) || ARCH(X86_64) + else if (TimeManagement::the().can_query_precise_time()) { // Add HPET as entropy source if we don't have anything better. dmesgln("KernelRng: Using HPET as entropy source"); @@ -66,6 +70,7 @@ UNMAP_AFTER_INIT KernelRng::KernelRng() current_time += 0x40b2u; } } +#endif } void KernelRng::wait_for_entropy() diff --git a/Kernel/Time/TimeManagement.cpp b/Kernel/Time/TimeManagement.cpp index 66a336f546..4bf25c7e20 100644 --- a/Kernel/Time/TimeManagement.cpp +++ b/Kernel/Time/TimeManagement.cpp @@ -7,20 +7,22 @@ #include #include #include -#include -#include -#include +#if ARCH(I386) || ARCH(X86_64) +# include +# include +# include +# include +# include +# include +# include +# include +#endif #include #include #include #include #include -#include -#include -#include #include -#include -#include #include #include @@ -137,8 +139,9 @@ u64 TimeManagement::uptime_ms() const return ms; } -UNMAP_AFTER_INIT void TimeManagement::initialize(u32 cpu) +UNMAP_AFTER_INIT void TimeManagement::initialize([[maybe_unused]] u32 cpu) { +#if ARCH(I386) || ARCH(X86_64) if (cpu == 0) { VERIFY(!s_the.is_initialized()); s_the.ensure_instance(); @@ -160,6 +163,7 @@ UNMAP_AFTER_INIT void TimeManagement::initialize(u32 cpu) apic_timer->enable_local_timer(); } } +#endif } void TimeManagement::set_system_timer(HardwareTimerBase& timer) @@ -184,6 +188,7 @@ time_t TimeManagement::boot_time() UNMAP_AFTER_INIT TimeManagement::TimeManagement() : m_time_page_region(MM.allocate_kernel_region(PAGE_SIZE, "Time page"sv, Memory::Region::Access::ReadWrite, AllocationStrategy::AllocateNow).release_value_but_fixme_should_propagate_errors()) { +#if ARCH(I386) || ARCH(X86_64) bool probe_non_legacy_hardware_timers = !(kernel_command_line().is_legacy_time_enabled()); if (ACPI::is_enabled()) { if (!ACPI::Parser::the()->x86_specific_flags().cmos_rtc_not_present) { @@ -198,12 +203,13 @@ UNMAP_AFTER_INIT TimeManagement::TimeManagement() m_epoch_time.tv_sec += boot_time(); } if (probe_non_legacy_hardware_timers) { - if (!probe_and_set_non_legacy_hardware_timers()) - if (!probe_and_set_legacy_hardware_timers()) + if (!probe_and_set_x86_non_legacy_hardware_timers()) + if (!probe_and_set_x86_legacy_hardware_timers()) VERIFY_NOT_REACHED(); - } else if (!probe_and_set_legacy_hardware_timers()) { + } else if (!probe_and_set_x86_legacy_hardware_timers()) { VERIFY_NOT_REACHED(); } +#endif } Time TimeManagement::now() @@ -249,7 +255,8 @@ bool TimeManagement::is_hpet_periodic_mode_allowed() } } -UNMAP_AFTER_INIT bool TimeManagement::probe_and_set_non_legacy_hardware_timers() +#if ARCH(I386) || ARCH(X86_64) +UNMAP_AFTER_INIT bool TimeManagement::probe_and_set_x86_non_legacy_hardware_timers() { if (!ACPI::is_enabled()) return false; @@ -323,7 +330,7 @@ UNMAP_AFTER_INIT bool TimeManagement::probe_and_set_non_legacy_hardware_timers() return true; } -UNMAP_AFTER_INIT bool TimeManagement::probe_and_set_legacy_hardware_timers() +UNMAP_AFTER_INIT bool TimeManagement::probe_and_set_x86_legacy_hardware_timers() { if (ACPI::is_enabled()) { if (ACPI::Parser::the()->x86_specific_flags().cmos_rtc_not_present) { @@ -343,6 +350,7 @@ UNMAP_AFTER_INIT bool TimeManagement::probe_and_set_legacy_hardware_timers() m_time_ticks_per_second = m_time_keeper_timer->ticks_per_second(); return true; } +#endif void TimeManagement::update_time(RegisterState const&) { diff --git a/Kernel/Time/TimeManagement.h b/Kernel/Time/TimeManagement.h index 967c4eec88..d2973f6f86 100644 --- a/Kernel/Time/TimeManagement.h +++ b/Kernel/Time/TimeManagement.h @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -79,8 +80,10 @@ private: TimePage& time_page(); void update_time_page(); - bool probe_and_set_legacy_hardware_timers(); - bool probe_and_set_non_legacy_hardware_timers(); +#if ARCH(I386) || ARCH(X86_64) + bool probe_and_set_x86_legacy_hardware_timers(); + bool probe_and_set_x86_non_legacy_hardware_timers(); +#endif Vector scan_and_initialize_periodic_timers(); Vector scan_for_non_periodic_timers(); NonnullLockRefPtrVector m_hardware_timers;