ACPIStaticParser.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #pragma once
  2. #include <ACPI/ACPIParser.h>
  3. #include <AK/OwnPtr.h>
  4. class ACPIStaticParser : ACPIParser {
  5. public:
  6. static void initialize(ACPI_RAW::RSDPDescriptor20& rsdp);
  7. static void initialize_without_rsdp();
  8. static bool is_initialized();
  9. virtual ACPI_RAW::SDTHeader* find_table(const char* sig) override;
  10. virtual void do_acpi_reboot() override;
  11. virtual void do_acpi_shutdown() override;
  12. virtual bool is_operable() override { return m_operable; }
  13. protected:
  14. ACPIStaticParser();
  15. explicit ACPIStaticParser(ACPI_RAW::RSDPDescriptor20&);
  16. virtual void mmap(VirtualAddress preferred_vaddr, PhysicalAddress paddr, u32) override;
  17. virtual void mmap_region(Region& region, PhysicalAddress paddr) override;
  18. private:
  19. void locate_static_data();
  20. void locate_all_aml_tables();
  21. void locate_main_system_description_table();
  22. void initialize_main_system_description_table();
  23. ACPI_RAW::SDTHeader& find_fadt();
  24. void init_fadt();
  25. ACPI_RAW::RSDPDescriptor20* search_rsdp();
  26. // Early pointers that are needed really for initializtion only...
  27. ACPI_RAW::RSDPDescriptor20* m_rsdp;
  28. ACPI_RAW::SDTHeader* m_main_system_description_table;
  29. OwnPtr<ACPI::MainSystemDescriptionTable> m_main_sdt;
  30. OwnPtr<ACPI::FixedACPIData> m_fadt;
  31. Vector<ACPI_RAW::SDTHeader*> m_aml_tables_ptrs;
  32. bool m_xsdt_supported;
  33. };