Serenity Operating System
at master 43 lines 1.2 kB view raw
1/* 2 * Copyright (c) 2020-2021, Liav A. <liavalb@hotmail.co.il> 3 * Copyright (c) 2020, Andreas Kling <kling@serenityos.org> 4 * 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8#include <Kernel/CommandLine.h> 9#include <Kernel/Firmware/ACPI/Parser.h> 10#include <Kernel/Memory/TypedMapping.h> 11#include <Kernel/Sections.h> 12 13namespace Kernel::ACPI { 14 15UNMAP_AFTER_INIT void initialize() 16{ 17 auto feature_level = kernel_command_line().acpi_feature_level(); 18 if (feature_level == AcpiFeatureLevel::Disabled) 19 return; 20 21 auto rsdp = StaticParsing::find_rsdp(); 22 if (!rsdp.has_value()) 23 return; 24 25 auto facp = StaticParsing::find_table(rsdp.value(), "FACP"sv); 26 if (!facp.has_value()) 27 return; 28 auto facp_table_or_error = Memory::map_typed<Structures::FADT>(facp.value()); 29 if (facp_table_or_error.is_error()) 30 return; 31 u8 irq_line = facp_table_or_error.value()->sci_int; 32 33 Parser::must_initialize(rsdp.value(), facp.value(), irq_line); 34 if (kernel_command_line().acpi_feature_level() == AcpiFeatureLevel::Enabled) 35 Parser::the()->enable_aml_parsing(); 36} 37 38bool is_enabled() 39{ 40 return Parser::the(); 41} 42 43}