Initialize.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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. #include <Kernel/CommandLine.h>
  8. #include <Kernel/Firmware/ACPI/Parser.h>
  9. #include <Kernel/Memory/TypedMapping.h>
  10. #include <Kernel/Sections.h>
  11. namespace Kernel::ACPI {
  12. UNMAP_AFTER_INIT void initialize()
  13. {
  14. auto feature_level = kernel_command_line().acpi_feature_level();
  15. if (feature_level == AcpiFeatureLevel::Disabled)
  16. return;
  17. auto rsdp = StaticParsing::find_rsdp();
  18. if (!rsdp.has_value())
  19. return;
  20. auto facp = StaticParsing::find_table(rsdp.value(), "FACP");
  21. if (!facp.has_value())
  22. return;
  23. auto facp_table_or_error = Memory::map_typed<Structures::FADT>(facp.value());
  24. if (facp_table_or_error.is_error())
  25. return;
  26. u8 irq_line = facp_table_or_error.value()->sci_int;
  27. Parser::must_initialize(rsdp.value(), facp.value(), irq_line);
  28. if (kernel_command_line().acpi_feature_level() == AcpiFeatureLevel::Enabled)
  29. Parser::the()->enable_aml_parsing();
  30. }
  31. bool is_enabled()
  32. {
  33. return Parser::the();
  34. }
  35. }