From e1c27c16d8d513578892ce78697a03dd912091bb Mon Sep 17 00:00:00 2001 From: Tom Date: Sat, 7 Nov 2020 12:06:41 -0700 Subject: [PATCH] Kernel: Assume 8042 controller is present if ACPI FADT revision <= 1 This field wasn't specified until revision 2 and should be assumed to be set on older versions. --- Kernel/ACPI/Parser.cpp | 2 +- Kernel/ACPI/Parser.h | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Kernel/ACPI/Parser.cpp b/Kernel/ACPI/Parser.cpp index 9784976a91..a56f5287c6 100644 --- a/Kernel/ACPI/Parser.cpp +++ b/Kernel/ACPI/Parser.cpp @@ -104,7 +104,7 @@ void Parser::init_fadt() klog() << "ACPI: Fixed ACPI data, Revision " << sdt->h.revision << ", Length " << sdt->h.length << " bytes"; klog() << "ACPI: DSDT " << PhysicalAddress(sdt->dsdt_ptr); m_x86_specific_flags.cmos_rtc_not_present = (sdt->ia_pc_boot_arch_flags & (u8)FADTFlags::IA_PC_Flags::CMOS_RTC_Not_Present); - m_x86_specific_flags.keyboard_8042 = (sdt->ia_pc_boot_arch_flags & (u8)FADTFlags::IA_PC_Flags::PS2_8042); + m_x86_specific_flags.keyboard_8042 = (sdt->h.revision <= 1) || (sdt->ia_pc_boot_arch_flags & (u8)FADTFlags::IA_PC_Flags::PS2_8042); m_x86_specific_flags.legacy_devices = (sdt->ia_pc_boot_arch_flags & (u8)FADTFlags::IA_PC_Flags::Legacy_Devices); m_x86_specific_flags.msi_not_supported = (sdt->ia_pc_boot_arch_flags & (u8)FADTFlags::IA_PC_Flags::MSI_Not_Supported); m_x86_specific_flags.vga_not_present = (sdt->ia_pc_boot_arch_flags & (u8)FADTFlags::IA_PC_Flags::VGA_Not_Present); diff --git a/Kernel/ACPI/Parser.h b/Kernel/ACPI/Parser.h index 6d1717a254..e9fecebcf1 100644 --- a/Kernel/ACPI/Parser.h +++ b/Kernel/ACPI/Parser.h @@ -54,6 +54,11 @@ public: virtual void try_acpi_shutdown(); virtual bool can_shutdown() { return false; } + virtual bool have_8042() const + { + return m_x86_specific_flags.keyboard_8042; + } + const FADTFlags::HardwareFeatures& hardware_features() const { return m_hardware_flags; } const FADTFlags::x86_Specific_Flags& x86_specific_flags() const { return m_x86_specific_flags; }