Serenity Operating System
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}