DynamicParser.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /*
  2. * Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/RefPtr.h>
  8. #include <Kernel/ACPI/Parser.h>
  9. #include <Kernel/Interrupts/IRQHandler.h>
  10. #include <Kernel/Lock.h>
  11. #include <Kernel/PhysicalAddress.h>
  12. #include <Kernel/VM/PhysicalPage.h>
  13. namespace Kernel::ACPI {
  14. class DynamicParser final
  15. : public IRQHandler
  16. , public Parser {
  17. friend class Parser;
  18. public:
  19. virtual void enable_aml_interpretation() override;
  20. virtual void enable_aml_interpretation(File& dsdt_file) override;
  21. virtual void enable_aml_interpretation(u8* physical_dsdt, u32 dsdt_payload_legnth) override;
  22. virtual void disable_aml_interpretation() override;
  23. virtual void try_acpi_shutdown() override;
  24. virtual bool can_shutdown() override { return true; }
  25. virtual const char* purpose() const override { return "ACPI Parser"; }
  26. protected:
  27. explicit DynamicParser(PhysicalAddress rsdp);
  28. private:
  29. void build_namespace();
  30. // ^IRQHandler
  31. virtual bool handle_irq(const RegisterState&) override;
  32. OwnPtr<Region> m_acpi_namespace;
  33. };
  34. }