/* * ACPI definitions * * A System Descriptor Table starts with a header of 4 bytes of signature * followed by 4 bytes of total table length then 28 bytes of ID information * (including the table checksum). */ typedef struct Dsdt Dsdt; typedef struct Facp Facp; typedef struct Hpet Hpet; typedef struct Madt Madt; typedef struct Mcfg Mcfg; typedef struct Mcfgd Mcfgd; typedef struct Rsd Rsd; struct Dsdt { /* Differentiated System DT */ uchar sdthdr[36]; /* "DSDT" + length[4] + [28] */ uchar db[]; /* Definition Block */ }; struct Facp { /* Fixed ACPI DT */ uchar sdthdr[36]; /* "FACP" + length[4] + [28] */ uchar faddr[4]; /* Firmware Control Address */ uchar dsdt[4]; /* DSDT Address */ uchar pad[200]; /* total table is 244 */ }; struct Hpet { /* High-Precision Event Timer DT */ uchar sdthdr[36]; /* "HPET" + length[4] + [28] */ uchar id[4]; /* Event Timer Block ID */ uchar addr[12]; /* ACPI Format Address */ uchar seqno; /* Sequence Number */ uchar minticks[2]; /* Minimum Clock Tick */ uchar attr; /* Page Protection */ }; struct Madt { /* Multiple APIC DT */ uchar sdthdr[36]; /* "MADT" + length[4] + [28] */ uchar addr[4]; /* Local APIC Address */ uchar flags[4]; uchar structures[]; }; typedef struct Mcfg { /* PCI Memory Mapped Config */ uchar sdthdr[36]; /* "MCFG" + length[4] + [28] */ uchar pad[8]; /* reserved */ Mcfgd mcfgd[]; /* descriptors */ } Mcfg; struct Mcfgd { /* MCFG Descriptor */ uchar addr[8]; /* base address */ uchar segno[2]; /* segment group number */ uchar sbno; /* start bus number */ uchar ebno; /* end bus number */ uchar pad[4]; /* reserved */ }; struct Rsd { /* Root System Description * */ uchar signature[8]; /* "RSD PTR " */ uchar rchecksum; uchar oemid[6]; uchar revision; uchar raddr[4]; /* RSDT */ uchar length[4]; uchar xaddr[8]; /* XSDT */ uchar xchecksum; /* XSDT */ uchar pad[3]; /* reserved */ };