#ifndef ACPI_H_ #define ACPI_H_ #include #define BIOS_START 0x000E0000 #define BIOS_END 0x000FFFFF #define RSDP_SIG "RSD PTR " #define RSDP_SIG_LEN 8 #define RSDP_SIZE 20 #define ACPI_VER_1 0 #define ACPI_VER_OTHER 2 struct rsdp { char Signature[RSDP_SIG_LEN]; uint8_t Checksum; char OEMID[6]; uint8_t Revision; uint32_t RsdtAddress; } __attribute__ ((packed)); struct ACPISDTHeader { char Signature[4]; uint32_t Length; uint8_t Revision; uint8_t Checksum; char OEMID[6]; char OEMTableID[8]; uint32_t OEMRevision; uint32_t CreatorID; uint32_t CreatorRevision; }; struct rsdt { struct ACPISDTHeader h; uint32_t other_sdt[]; }; struct mcfg_entry { uint64_t base_addr; uint16_t pci_seg_num; uint8_t pci_bus_start; uint8_t pci_bus_end; uint32_t reserved; }; struct mcfg { struct ACPISDTHeader h; uint64_t reserved; struct mcfg_entry entries[]; }; struct rsdp *acpi_search_for_rsdp(); int acpi_validate_rsdp_checksum(struct rsdp *s); int acpi_validate_sdt_checksum(struct ACPISDTHeader *s); struct ACPISDTHeader *acpi_find_table(struct rsdt *root, const char *signature); #endif