1*abfa367dSDavid du Colombier /* 2*abfa367dSDavid du Colombier * ACPI definitions 3*abfa367dSDavid du Colombier * 4*abfa367dSDavid du Colombier * A System Descriptor Table starts with a header of 4 bytes of signature 5*abfa367dSDavid du Colombier * followed by 4 bytes of total table length then 28 bytes of ID information 6*abfa367dSDavid du Colombier * (including the table checksum). 7*abfa367dSDavid du Colombier */ 8*abfa367dSDavid du Colombier typedef struct Dsdt Dsdt; 9*abfa367dSDavid du Colombier typedef struct Facp Facp; 10*abfa367dSDavid du Colombier typedef struct Hpet Hpet; 11*abfa367dSDavid du Colombier typedef struct Madt Madt; 12*abfa367dSDavid du Colombier typedef struct Mcfg Mcfg; 13*abfa367dSDavid du Colombier typedef struct Mcfgd Mcfgd; 14*abfa367dSDavid du Colombier typedef struct Rsd Rsd; 15*abfa367dSDavid du Colombier 16*abfa367dSDavid du Colombier struct Dsdt { /* Differentiated System DT */ 17*abfa367dSDavid du Colombier uchar sdthdr[36]; /* "DSDT" + length[4] + [28] */ 18*abfa367dSDavid du Colombier uchar db[]; /* Definition Block */ 19*abfa367dSDavid du Colombier }; 20*abfa367dSDavid du Colombier struct Facp { /* Fixed ACPI DT */ 21*abfa367dSDavid du Colombier uchar sdthdr[36]; /* "FACP" + length[4] + [28] */ 22*abfa367dSDavid du Colombier uchar faddr[4]; /* Firmware Control Address */ 23*abfa367dSDavid du Colombier uchar dsdt[4]; /* DSDT Address */ 24*abfa367dSDavid du Colombier uchar pad[200]; /* total table is 244 */ 25*abfa367dSDavid du Colombier }; 26*abfa367dSDavid du Colombier struct Hpet { /* High-Precision Event Timer DT */ 27*abfa367dSDavid du Colombier uchar sdthdr[36]; /* "HPET" + length[4] + [28] */ 28*abfa367dSDavid du Colombier uchar id[4]; /* Event Timer Block ID */ 29*abfa367dSDavid du Colombier uchar addr[12]; /* ACPI Format Address */ 30*abfa367dSDavid du Colombier uchar seqno; /* Sequence Number */ 31*abfa367dSDavid du Colombier uchar minticks[2]; /* Minimum Clock Tick */ 32*abfa367dSDavid du Colombier uchar attr; /* Page Protection */ 33*abfa367dSDavid du Colombier }; 34*abfa367dSDavid du Colombier struct Madt { /* Multiple APIC DT */ 35*abfa367dSDavid du Colombier uchar sdthdr[36]; /* "MADT" + length[4] + [28] */ 36*abfa367dSDavid du Colombier uchar addr[4]; /* Local APIC Address */ 37*abfa367dSDavid du Colombier uchar flags[4]; 38*abfa367dSDavid du Colombier uchar structures[]; 39*abfa367dSDavid du Colombier }; 40*abfa367dSDavid du Colombier typedef struct Mcfg { /* PCI Memory Mapped Config */ 41*abfa367dSDavid du Colombier uchar sdthdr[36]; /* "MCFG" + length[4] + [28] */ 42*abfa367dSDavid du Colombier uchar pad[8]; /* reserved */ 43*abfa367dSDavid du Colombier Mcfgd mcfgd[]; /* descriptors */ 44*abfa367dSDavid du Colombier } Mcfg; 45*abfa367dSDavid du Colombier struct Mcfgd { /* MCFG Descriptor */ 46*abfa367dSDavid du Colombier uchar addr[8]; /* base address */ 47*abfa367dSDavid du Colombier uchar segno[2]; /* segment group number */ 48*abfa367dSDavid du Colombier uchar sbno; /* start bus number */ 49*abfa367dSDavid du Colombier uchar ebno; /* end bus number */ 50*abfa367dSDavid du Colombier uchar pad[4]; /* reserved */ 51*abfa367dSDavid du Colombier }; 52*abfa367dSDavid du Colombier struct Rsd { /* Root System Description * */ 53*abfa367dSDavid du Colombier uchar signature[8]; /* "RSD PTR " */ 54*abfa367dSDavid du Colombier uchar rchecksum; 55*abfa367dSDavid du Colombier uchar oemid[6]; 56*abfa367dSDavid du Colombier uchar revision; 57*abfa367dSDavid du Colombier uchar raddr[4]; /* RSDT */ 58*abfa367dSDavid du Colombier uchar length[4]; 59*abfa367dSDavid du Colombier uchar xaddr[8]; /* XSDT */ 60*abfa367dSDavid du Colombier uchar xchecksum; /* XSDT */ 61*abfa367dSDavid du Colombier uchar pad[3]; /* reserved */ 62*abfa367dSDavid du Colombier }; 63