xref: /plan9-contrib/sys/src/9/pc/mpacpi.h (revision abfa367da87d91ea019c9536c4052275cb55ac26)
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