/* * Copyright (c) 2020-2021, Liav A. <liavalb@hotmail.co.il> * Copyright (c) 2020, Andreas Kling <kling@serenityos.org> * * SPDX-License-Identifier: BSD-2-Clause */ #include <Kernel/Boot/CommandLine.h> #include <Kernel/Firmware/ACPI/Parser.h> #include <Kernel/Firmware/ACPI/StaticParsing.h> #include <Kernel/Memory/TypedMapping.h> #include <Kernel/Sections.h> namespace Kernel::ACPI { UNMAP_AFTER_INIT void initialize() { auto feature_level = kernel_command_line().acpi_feature_level(); if (feature_level == AcpiFeatureLevel::Disabled) return; auto rsdp = MUST(StaticParsing::find_rsdp_in_platform_specific_memory_locations()); if (!rsdp.has_value()) return; auto facp = MUST(StaticParsing::find_table(rsdp.value(), "FACP"sv)); if (!facp.has_value()) return; auto facp_table_or_error = Memory::map_typed<Structures::FADT>(facp.value()); if (facp_table_or_error.is_error()) return; u8 irq_line = facp_table_or_error.value()->sci_int; Parser::must_initialize(rsdp.value(), facp.value(), irq_line); if (kernel_command_line().acpi_feature_level() == AcpiFeatureLevel::Enabled) Parser::the()->enable_aml_parsing(); } bool is_enabled() { return Parser::the(); } }