xref: /openbsd-src/sys/dev/acpi/acpireg.h (revision 26571a80a0664b93d0fea71da44f7ed6beec92b7)
1*26571a80Skettenis /*	$OpenBSD: acpireg.h,v 1.61 2024/08/08 07:01:22 kettenis Exp $	*/
27934d707Stholo /*
37934d707Stholo  * Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com>
4c4fbd819Smarco  * Copyright (c) 2005 Marco Peereboom <marco@openbsd.org>
57934d707Stholo  *
67934d707Stholo  * Permission to use, copy, modify, and distribute this software for any
77934d707Stholo  * purpose with or without fee is hereby granted, provided that the above
87934d707Stholo  * copyright notice and this permission notice appear in all copies.
97934d707Stholo  *
107934d707Stholo  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
117934d707Stholo  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
127934d707Stholo  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
137934d707Stholo  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
147934d707Stholo  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
157934d707Stholo  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
167934d707Stholo  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
177934d707Stholo  */
187934d707Stholo 
19d2e44dfbSgrange #ifndef _DEV_ACPI_ACPIREG_H_
20d2e44dfbSgrange #define _DEV_ACPI_ACPIREG_H_
21d2e44dfbSgrange 
227934d707Stholo /*	Root System Descriptor Pointer */
237934d707Stholo struct acpi_rsdp1 {
24d2eaebe9Skettenis 	uint8_t		signature[8];
257934d707Stholo #define	RSDP_SIG	"RSD PTR "
264b1a56afSjsg #define	rsdp_signature	rsdp1.signature
27d2eaebe9Skettenis 	uint8_t		checksum;	/* make sum == 0 */
287934d707Stholo #define	rsdp_checksum	rsdp1.checksum
29d2eaebe9Skettenis 	uint8_t		oemid[6];
307934d707Stholo #define	rsdp_oemid	rsdp1.oemid
31d2eaebe9Skettenis 	uint8_t		revision;	/* 0 for 1, 2 for 2 */
327934d707Stholo #define	rsdp_revision	rsdp1.revision
33d2eaebe9Skettenis 	uint32_t	rsdt;		/* physical */
347934d707Stholo #define	rsdp_rsdt	rsdp1.rsdt
357934d707Stholo } __packed;
367934d707Stholo 
377934d707Stholo struct acpi_rsdp {
387934d707Stholo 	struct acpi_rsdp1 rsdp1;
397934d707Stholo 	/*
407934d707Stholo 	 * The following values are only valid
417934d707Stholo 	 * when rsdp_revision == 2
427934d707Stholo 	 */
43d2eaebe9Skettenis 	uint32_t	rsdp_length;		/* length of rsdp */
44d2eaebe9Skettenis 	uint64_t	rsdp_xsdt;		/* physical */
45d2eaebe9Skettenis 	uint8_t		rsdp_extchecksum;	/* entire table */
46d2eaebe9Skettenis 	uint8_t		rsdp_reserved[3];	/* must be zero */
477934d707Stholo } __packed;
487934d707Stholo 
497934d707Stholo struct acpi_table_header {
50d2eaebe9Skettenis 	uint8_t		signature[4];
517934d707Stholo #define	hdr_signature		hdr.signature
52d2eaebe9Skettenis 	uint32_t	length;
537934d707Stholo #define	hdr_length		hdr.length
54d2eaebe9Skettenis 	uint8_t		revision;
557934d707Stholo #define	hdr_revision		hdr.revision
56d2eaebe9Skettenis 	uint8_t		checksum;
577934d707Stholo #define	hdr_checksum		hdr.checksum
58d2eaebe9Skettenis 	uint8_t		oemid[6];
597934d707Stholo #define hdr_oemid		hdr.oemid
60d2eaebe9Skettenis 	uint8_t		oemtableid[8];
617934d707Stholo #define hdr_oemtableid		hdr.oemtableid
62d2eaebe9Skettenis 	uint32_t	oemrevision;
637934d707Stholo #define	hdr_oemrevision		hdr.oemrevision
64d2eaebe9Skettenis 	uint8_t		aslcompilerid[4];
657934d707Stholo #define hdr_aslcompilerid	hdr.aslcompilerid
66d2eaebe9Skettenis 	uint32_t	aslcompilerrevision;
677934d707Stholo #define	hdr_aslcompilerrevision	hdr.aslcompilerrevision
687934d707Stholo } __packed;
697934d707Stholo 
707934d707Stholo struct acpi_rsdt {
717934d707Stholo 	struct acpi_table_header	hdr;
727934d707Stholo #define RSDT_SIG	"RSDT"
73d2eaebe9Skettenis 	uint32_t			table_offsets[1];
747934d707Stholo } __packed;
757934d707Stholo 
767934d707Stholo struct acpi_xsdt {
777934d707Stholo 	struct acpi_table_header	hdr;
787934d707Stholo #define XSDT_SIG	"XSDT"
79d2eaebe9Skettenis 	uint64_t			table_offsets[1];
807934d707Stholo } __packed;
817934d707Stholo 
827934d707Stholo struct acpi_gas {
83d2eaebe9Skettenis 	uint8_t		address_space_id;
847934d707Stholo #define GAS_SYSTEM_MEMORY	0
857934d707Stholo #define GAS_SYSTEM_IOSPACE	1
867934d707Stholo #define GAS_PCI_CFG_SPACE	2
877934d707Stholo #define GAS_EMBEDDED		3
887934d707Stholo #define GAS_SMBUS		4
897934d707Stholo #define GAS_FUNCTIONAL_FIXED	127
90d2eaebe9Skettenis 	uint8_t		register_bit_width;
91d2eaebe9Skettenis 	uint8_t		register_bit_offset;
92d2eaebe9Skettenis 	uint8_t		access_size;
937934d707Stholo #define GAS_ACCESS_UNDEFINED	0
947934d707Stholo #define GAS_ACCESS_BYTE		1
957934d707Stholo #define GAS_ACCESS_WORD		2
967934d707Stholo #define GAS_ACCESS_DWORD	3
977934d707Stholo #define GAS_ACCESS_QWORD	4
98d2eaebe9Skettenis 	uint64_t	address;
997934d707Stholo } __packed;
1007934d707Stholo 
1017934d707Stholo struct acpi_fadt {
1027934d707Stholo 	struct acpi_table_header	hdr;
1037934d707Stholo #define	FADT_SIG	"FACP"
104d2eaebe9Skettenis 	uint32_t	firmware_ctl;	/* phys addr FACS */
105d2eaebe9Skettenis 	uint32_t	dsdt;		/* phys addr DSDT */
106d2eaebe9Skettenis 	uint8_t		int_model;	/* interrupt model (hdr_revision < 3) */
1077934d707Stholo #define	FADT_INT_DUAL_PIC	0
1087934d707Stholo #define	FADT_INT_MULTI_APIC	1
109d2eaebe9Skettenis 	uint8_t		pm_profile;	/* power mgmt profile */
1107934d707Stholo #define	FADT_PM_UNSPEC		0
1117934d707Stholo #define	FADT_PM_DESKTOP		1
1127934d707Stholo #define	FADT_PM_MOBILE		2
1137934d707Stholo #define	FADT_PM_WORKSTATION	3
1147934d707Stholo #define	FADT_PM_ENT_SERVER	4
1157934d707Stholo #define	FADT_PM_SOHO_SERVER	5
1167934d707Stholo #define	FADT_PM_APPLIANCE	6
1177934d707Stholo #define	FADT_PM_PERF_SERVER	7
118d2eaebe9Skettenis 	uint16_t	sci_int;	/* SCI interrupt */
119d2eaebe9Skettenis 	uint32_t	smi_cmd;	/* SMI command port */
120d2eaebe9Skettenis 	uint8_t		acpi_enable;	/* value to enable */
121d2eaebe9Skettenis 	uint8_t		acpi_disable;	/* value to disable */
122d2eaebe9Skettenis 	uint8_t		s4bios_req;	/* value for S4 */
123d2eaebe9Skettenis 	uint8_t		pstate_cnt;	/* value for performance (hdr_revision > 2) */
124d2eaebe9Skettenis 	uint32_t	pm1a_evt_blk;	/* power management 1a */
1254b1a56afSjsg 	uint32_t	pm1b_evt_blk;	/* power management 1b */
126d2eaebe9Skettenis 	uint32_t	pm1a_cnt_blk;	/* pm control 1a */
127d2eaebe9Skettenis 	uint32_t	pm1b_cnt_blk;	/* pm control 1b */
128d2eaebe9Skettenis 	uint32_t	pm2_cnt_blk;	/* pm control 2 */
129d2eaebe9Skettenis 	uint32_t	pm_tmr_blk;
130d2eaebe9Skettenis 	uint32_t	gpe0_blk;
131d2eaebe9Skettenis 	uint32_t	gpe1_blk;
132d2eaebe9Skettenis 	uint8_t		pm1_evt_len;
133d2eaebe9Skettenis 	uint8_t		pm1_cnt_len;
134d2eaebe9Skettenis 	uint8_t		pm2_cnt_len;
135d2eaebe9Skettenis 	uint8_t		pm_tmr_len;
136d2eaebe9Skettenis 	uint8_t		gpe0_blk_len;
137d2eaebe9Skettenis 	uint8_t		gpe1_blk_len;
138d2eaebe9Skettenis 	uint8_t		gpe1_base;
139d2eaebe9Skettenis 	uint8_t		cst_cnt;	/* (hdr_revision > 2) */
140d2eaebe9Skettenis 	uint16_t	p_lvl2_lat;
141d2eaebe9Skettenis 	uint16_t	p_lvl3_lat;
142d2eaebe9Skettenis 	uint16_t	flush_size;
143d2eaebe9Skettenis 	uint16_t	flush_stride;
144d2eaebe9Skettenis 	uint8_t		duty_offset;
145d2eaebe9Skettenis 	uint8_t		duty_width;
146d2eaebe9Skettenis 	uint8_t		day_alrm;
147d2eaebe9Skettenis 	uint8_t		mon_alrm;
148d2eaebe9Skettenis 	uint8_t		century;
149d2eaebe9Skettenis 	uint16_t	iapc_boot_arch;	/* (hdr_revision > 2) */
1507934d707Stholo #define	FADT_LEGACY_DEVICES		0x0001	/* Legacy devices supported */
1517934d707Stholo #define	FADT_i8042			0x0002	/* Keyboard controller present */
1527934d707Stholo #define	FADT_NO_VGA			0x0004	/* Do not probe VGA */
1539a33df95Skettenis #define	FADT_NO_MSI			0x0008	/* Do not enable MSI */
154d2eaebe9Skettenis 	uint8_t		reserved1;
155d2eaebe9Skettenis 	uint32_t	flags;
1567934d707Stholo #define	FADT_WBINVD			0x00000001
1577934d707Stholo #define	FADT_WBINVD_FLUSH		0x00000002
1587934d707Stholo #define	FADT_PROC_C1			0x00000004
1597934d707Stholo #define	FADT_P_LVL2_UP			0x00000008
1607934d707Stholo #define	FADT_PWR_BUTTON			0x00000010
1617934d707Stholo #define	FADT_SLP_BUTTON			0x00000020
1627934d707Stholo #define	FADT_FIX_RTC			0x00000040
1637934d707Stholo #define	FADT_RTC_S4			0x00000080
1647934d707Stholo #define	FADT_TMR_VAL_EXT		0x00000100
1657934d707Stholo #define	FADT_DCK_CAP			0x00000200
1667934d707Stholo #define	FADT_RESET_REG_SUP		0x00000400
1677934d707Stholo #define	FADT_SEALED_CASE		0x00000800
1687934d707Stholo #define	FADT_HEADLESS			0x00001000
1697934d707Stholo #define	FADT_CPU_SW_SLP			0x00002000
1707934d707Stholo #define	FADT_PCI_EXP_WAK		0x00004000
1717934d707Stholo #define	FADT_USE_PLATFORM_CLOCK		0x00008000
1727934d707Stholo #define	FADT_S4_RTC_STS_VALID		0x00010000
1737934d707Stholo #define	FADT_REMOTE_POWER_ON_CAPABLE	0x00020000
1747934d707Stholo #define	FADT_FORCE_APIC_CLUSTER_MODEL	0x00040000
1757934d707Stholo #define	FADT_FORCE_APIC_PHYS_DEST_MODE	0x00080000
17671508f94Skettenis #define	FADT_HW_REDUCED_ACPI		0x00100000
17771508f94Skettenis #define	FADT_POWER_S0_IDLE_CAPABLE	0x00200000
1787934d707Stholo 	/*
1797934d707Stholo 	 * Following values only exist when rev > 1
1807934d707Stholo 	 * If the extended addresses exists, they
181b040ff10Sjsg 	 * must be used in preference to the non-
1827934d707Stholo 	 * extended values above
1837934d707Stholo 	 */
1847934d707Stholo 	struct acpi_gas	reset_reg;
185d2eaebe9Skettenis 	uint8_t		reset_value;
186d2eaebe9Skettenis 	uint8_t		reserved2a;
187d2eaebe9Skettenis 	uint8_t		reserved2b;
188f8753e49Skettenis 	uint8_t		fadt_minor;
189d2eaebe9Skettenis 	uint64_t	x_firmware_ctl;
190d2eaebe9Skettenis 	uint64_t	x_dsdt;
1917934d707Stholo 	struct acpi_gas	x_pm1a_evt_blk;
1927934d707Stholo 	struct acpi_gas	x_pm1b_evt_blk;
1937934d707Stholo 	struct acpi_gas	x_pm1a_cnt_blk;
1947934d707Stholo 	struct acpi_gas	x_pm1b_cnt_blk;
1957934d707Stholo 	struct acpi_gas	x_pm2_cnt_blk;
1967934d707Stholo 	struct acpi_gas	x_pm_tmr_blk;
1977934d707Stholo 	struct acpi_gas	x_gpe0_blk;
1987934d707Stholo 	struct acpi_gas	x_gpe1_blk;
19975c2faffSkettenis 	struct acpi_gas sleep_control_reg;
20075c2faffSkettenis 	struct acpi_gas sleep_status_reg;
2017934d707Stholo } __packed;
2027934d707Stholo 
2037934d707Stholo struct acpi_dsdt {
2047934d707Stholo 	struct acpi_table_header	hdr;
2057934d707Stholo #define DSDT_SIG	"DSDT"
206d2eaebe9Skettenis 	uint8_t		aml[1];
2077934d707Stholo } __packed;
2087934d707Stholo 
2097934d707Stholo struct acpi_ssdt {
2107934d707Stholo 	struct acpi_table_header	hdr;
2117934d707Stholo #define SSDT_SIG	"SSDT"
212d2eaebe9Skettenis 	uint8_t		aml[1];
2137934d707Stholo } __packed;
2147934d707Stholo 
2157934d707Stholo /*
2167934d707Stholo  * Table deprecated by ACPI 2.0
2177934d707Stholo  */
2187934d707Stholo struct acpi_psdt {
2197934d707Stholo 	struct acpi_table_header	hdr;
2207934d707Stholo #define PSDT_SIG	"PSDT"
2217934d707Stholo } __packed;
2227934d707Stholo 
2237934d707Stholo struct acpi_madt {
2247934d707Stholo 	struct acpi_table_header	hdr;
2257934d707Stholo #define MADT_SIG	"APIC"
226d2eaebe9Skettenis 	uint32_t	local_apic_address;
227d2eaebe9Skettenis 	uint32_t	flags;
2287934d707Stholo #define ACPI_APIC_PCAT_COMPAT	0x00000001
2297934d707Stholo } __packed;
2307934d707Stholo 
2317934d707Stholo struct acpi_madt_lapic {
232d2eaebe9Skettenis 	uint8_t		apic_type;
2337934d707Stholo #define	ACPI_MADT_LAPIC		0
234d2eaebe9Skettenis 	uint8_t		length;
235d2eaebe9Skettenis 	uint8_t		acpi_proc_id;
236d2eaebe9Skettenis 	uint8_t		apic_id;
237d2eaebe9Skettenis 	uint32_t	flags;
2387934d707Stholo #define	ACPI_PROC_ENABLE	0x00000001
2397934d707Stholo } __packed;
2407934d707Stholo 
2417934d707Stholo struct acpi_madt_ioapic {
242d2eaebe9Skettenis 	uint8_t		apic_type;
2437934d707Stholo #define	ACPI_MADT_IOAPIC	1
244d2eaebe9Skettenis 	uint8_t		length;
245d2eaebe9Skettenis 	uint8_t		acpi_ioapic_id;
246d2eaebe9Skettenis 	uint8_t		reserved;
247d2eaebe9Skettenis 	uint32_t	address;
248d2eaebe9Skettenis 	uint32_t	global_int_base;
2497934d707Stholo } __packed;
2507934d707Stholo 
2517934d707Stholo struct acpi_madt_override {
252d2eaebe9Skettenis 	uint8_t		apic_type;
2537934d707Stholo #define	ACPI_MADT_OVERRIDE	2
254d2eaebe9Skettenis 	uint8_t		length;
255d2eaebe9Skettenis 	uint8_t		bus;
2567934d707Stholo #define	ACPI_OVERRIDE_BUS_ISA	0
257d2eaebe9Skettenis 	uint8_t		source;
258d2eaebe9Skettenis 	uint32_t	global_int;
259d2eaebe9Skettenis 	uint16_t	flags;
2607934d707Stholo #define	ACPI_OVERRIDE_POLARITY_BITS	0x3
2617934d707Stholo #define	ACPI_OVERRIDE_POLARITY_BUS		0x0
2627934d707Stholo #define	ACPI_OVERRIDE_POLARITY_HIGH		0x1
2637934d707Stholo #define	ACPI_OVERRIDE_POLARITY_LOW		0x3
2647934d707Stholo #define	ACPI_OVERRIDE_TRIGGER_BITS	0xc
2657934d707Stholo #define	ACPI_OVERRIDE_TRIGGER_BUS		0x0
2667934d707Stholo #define	ACPI_OVERRIDE_TRIGGER_EDGE		0x4
2677934d707Stholo #define	ACPI_OVERRIDE_TRIGGER_LEVEL		0xc
2687934d707Stholo } __packed;
2697934d707Stholo 
2707934d707Stholo struct acpi_madt_nmi {
271d2eaebe9Skettenis 	uint8_t		apic_type;
2727934d707Stholo #define	ACPI_MADT_NMI		3
273d2eaebe9Skettenis 	uint8_t		length;
274d2eaebe9Skettenis 	uint16_t	flags;		/* Same flags as acpi_madt_override */
275d2eaebe9Skettenis 	uint32_t	global_int;
2767934d707Stholo } __packed;
2777934d707Stholo 
2787934d707Stholo struct acpi_madt_lapic_nmi {
279d2eaebe9Skettenis 	uint8_t		apic_type;
2807934d707Stholo #define	ACPI_MADT_LAPIC_NMI	4
281d2eaebe9Skettenis 	uint8_t		length;
282d2eaebe9Skettenis 	uint8_t		acpi_proc_id;
283d2eaebe9Skettenis 	uint16_t	flags;		/* Same flags as acpi_madt_override */
284d2eaebe9Skettenis 	uint8_t		local_apic_lint;
2857934d707Stholo } __packed;
2867934d707Stholo 
2877934d707Stholo struct acpi_madt_lapic_override {
288d2eaebe9Skettenis 	uint8_t		apic_type;
2897934d707Stholo #define	ACPI_MADT_LAPIC_OVERRIDE	5
290d2eaebe9Skettenis 	uint8_t		length;
291d2eaebe9Skettenis 	uint16_t	reserved;
292d2eaebe9Skettenis 	uint64_t	lapic_address;
2937934d707Stholo } __packed;
2947934d707Stholo 
2957934d707Stholo struct acpi_madt_io_sapic {
296d2eaebe9Skettenis 	uint8_t		apic_type;
2977934d707Stholo #define	ACPI_MADT_IO_SAPIC	6
298d2eaebe9Skettenis 	uint8_t		length;
299d2eaebe9Skettenis 	uint8_t		iosapic_id;
300d2eaebe9Skettenis 	uint8_t		reserved;
301d2eaebe9Skettenis 	uint32_t	global_int_base;
302d2eaebe9Skettenis 	uint64_t	iosapic_address;
3037934d707Stholo } __packed;
3047934d707Stholo 
3057934d707Stholo struct acpi_madt_local_sapic {
306d2eaebe9Skettenis 	uint8_t		apic_type;
3077934d707Stholo #define	ACPI_MADT_LOCAL_SAPIC	7
308d2eaebe9Skettenis 	uint8_t		length;
309d2eaebe9Skettenis 	uint8_t		acpi_proc_id;
310d2eaebe9Skettenis 	uint8_t		local_sapic_id;
311d2eaebe9Skettenis 	uint8_t		local_sapic_eid;
312d2eaebe9Skettenis 	uint8_t		reserved[3];
313d2eaebe9Skettenis 	uint32_t	flags;		/* Same flags as acpi_madt_lapic */
314d2eaebe9Skettenis 	uint32_t	acpi_proc_uid;
315d2eaebe9Skettenis 	uint8_t		acpi_proc_uid_string[1];
3167934d707Stholo } __packed;
3177934d707Stholo 
3187934d707Stholo struct acpi_madt_platform_int {
319d2eaebe9Skettenis 	uint8_t		apic_type;
3207934d707Stholo #define	ACPI_MADT_PLATFORM_INT	8
321d2eaebe9Skettenis 	uint8_t		length;
322d2eaebe9Skettenis 	uint16_t	flags;		/* Same flags as acpi_madt_override */
323d2eaebe9Skettenis 	uint8_t		int_type;
3247934d707Stholo #define	ACPI_MADT_PLATFORM_PMI		1
3257934d707Stholo #define	ACPI_MADT_PLATFORM_INIT		2
3267934d707Stholo #define	ACPI_MADT_PLATFORM_CORR_ERROR	3
327d2eaebe9Skettenis 	uint8_t		proc_id;
328d2eaebe9Skettenis 	uint8_t		proc_eid;
329d2eaebe9Skettenis 	uint8_t		io_sapic_vec;
330d2eaebe9Skettenis 	uint32_t	global_int;
331d2eaebe9Skettenis 	uint32_t	platform_int_flags;
3327934d707Stholo #define	ACPI_MADT_PLATFORM_CPEI		0x00000001
3337934d707Stholo } __packed;
3347934d707Stholo 
3350dd0b244Skettenis struct acpi_madt_x2apic {
336d2eaebe9Skettenis 	uint8_t		apic_type;
3370dd0b244Skettenis #define	ACPI_MADT_X2APIC	9
338d2eaebe9Skettenis 	uint8_t		length;
339d2eaebe9Skettenis 	uint8_t		reserved[2];
340d2eaebe9Skettenis 	uint32_t	apic_id;
341d2eaebe9Skettenis 	uint32_t	flags;		/* Same flags as acpi_madt_lapic */
342d2eaebe9Skettenis 	uint32_t	acpi_proc_uid;
3430dd0b244Skettenis } __packed;
3440dd0b244Skettenis 
3450dd0b244Skettenis struct acpi_madt_x2apic_nmi {
346d2eaebe9Skettenis 	uint8_t		apic_type;
3470dd0b244Skettenis #define	ACPI_MADT_X2APIC_NMI	10
348d2eaebe9Skettenis 	uint8_t		length;
349d2eaebe9Skettenis 	uint16_t	flags;		/* Same flags as acpi_madt_override */
350d2eaebe9Skettenis 	uint32_t	apic_proc_uid;
351d2eaebe9Skettenis 	uint8_t		local_x2apic_lint;
352d2eaebe9Skettenis 	uint8_t		reserved[3];
3530dd0b244Skettenis } __packed;
3540dd0b244Skettenis 
355baca640cSjmatthew #define ACPI_MADT_OEM_RSVD	128
356baca640cSjmatthew 
3577934d707Stholo union acpi_madt_entry {
3587934d707Stholo 	struct acpi_madt_lapic		madt_lapic;
3597934d707Stholo 	struct acpi_madt_ioapic		madt_ioapic;
3607934d707Stholo 	struct acpi_madt_override	madt_override;
3617934d707Stholo 	struct acpi_madt_nmi		madt_nmi;
3627934d707Stholo 	struct acpi_madt_lapic_nmi	madt_lapic_nmi;
3637934d707Stholo 	struct acpi_madt_lapic_override	madt_lapic_override;
3647934d707Stholo 	struct acpi_madt_io_sapic	madt_io_sapic;
3657934d707Stholo 	struct acpi_madt_local_sapic	madt_local_sapic;
3667934d707Stholo 	struct acpi_madt_platform_int	madt_platform_int;
3670dd0b244Skettenis 	struct acpi_madt_x2apic		madt_x2apic;
3680dd0b244Skettenis 	struct acpi_madt_x2apic_nmi	madt_x2apic_nmi;
3697934d707Stholo } __packed;
3707934d707Stholo 
3717934d707Stholo struct acpi_sbst {
3727934d707Stholo 	struct acpi_table_header	hdr;
3737934d707Stholo #define SBST_SIG	"SBST"
374d2eaebe9Skettenis 	uint32_t	warning_energy_level;
375d2eaebe9Skettenis 	uint32_t	low_energy_level;
376d2eaebe9Skettenis 	uint32_t	critical_energy_level;
3777934d707Stholo } __packed;
3787934d707Stholo 
3797934d707Stholo struct acpi_ecdt {
3807934d707Stholo 	struct acpi_table_header	hdr;
3817934d707Stholo #define ECDT_SIG	"ECDT"
3827934d707Stholo 	struct acpi_gas	ec_control;
3837934d707Stholo 	struct acpi_gas ec_data;
384d2eaebe9Skettenis 	uint32_t	uid;
385d2eaebe9Skettenis 	uint8_t		gpe_bit;
386d2eaebe9Skettenis 	uint8_t		ec_id[1];
3877934d707Stholo } __packed;
3887934d707Stholo 
3897934d707Stholo struct acpi_srat {
3907934d707Stholo 	struct acpi_table_header	hdr;
3917934d707Stholo #define SRAT_SIG	"SRAT"
392d2eaebe9Skettenis 	uint32_t	reserved1;
393d2eaebe9Skettenis 	uint64_t	reserved2;
3947934d707Stholo } __packed;
3957934d707Stholo 
3967934d707Stholo struct acpi_slit {
3977934d707Stholo 	struct acpi_table_header	hdr;
3987934d707Stholo #define SLIT_SIG	"SLIT"
399d2eaebe9Skettenis 	uint64_t	number_of_localities;
4007934d707Stholo } __packed;
4017934d707Stholo 
4027934d707Stholo struct acpi_hpet {
4037934d707Stholo 	struct acpi_table_header	hdr;
4047934d707Stholo #define HPET_SIG	"HPET"
405d2eaebe9Skettenis 	uint32_t	event_timer_block_id;
4067934d707Stholo 	struct acpi_gas	base_address;
407d2eaebe9Skettenis 	uint8_t		hpet_number;
408d2eaebe9Skettenis 	uint16_t	main_counter_min_clock_tick;
409d2eaebe9Skettenis 	uint8_t		page_protection;
4107934d707Stholo } __packed;
4117934d707Stholo 
412fd1ffd5dSkettenis struct acpi_mcfg {
413fd1ffd5dSkettenis 	struct acpi_table_header	hdr;
414fd1ffd5dSkettenis #define MCFG_SIG	"MCFG"
415d2eaebe9Skettenis 	uint8_t		reserved[8];
416d6a1c66eSkettenis } __packed;
417d6a1c66eSkettenis 
418d6a1c66eSkettenis struct acpi_mcfg_entry {
419d2eaebe9Skettenis 	uint64_t	base_address;
420d2eaebe9Skettenis 	uint16_t	segment;
421d2eaebe9Skettenis 	uint8_t		min_bus_number;
422d2eaebe9Skettenis 	uint8_t		max_bus_number;
423d2eaebe9Skettenis 	uint32_t	reserved1;
424fd1ffd5dSkettenis } __packed;
425fd1ffd5dSkettenis 
426dcad7802Skettenis struct acpi_spcr {
427dcad7802Skettenis 	struct acpi_table_header	hdr;
428dcad7802Skettenis #define SPCR_SIG	"SPCR"
429dcad7802Skettenis 	uint8_t		interface_type;
430dcad7802Skettenis #define SPCR_16550	0
431dcad7802Skettenis #define SPCR_16450	1
432dcad7802Skettenis #define SPCR_ARM_PL011	3
433dcad7802Skettenis #define SPCR_ARM_SBSA	14
434dcad7802Skettenis 	uint8_t		reserved1[3];
435dcad7802Skettenis 	struct acpi_gas	base_address;
436dcad7802Skettenis 	uint8_t		interrupt_type;
437dcad7802Skettenis 	uint8_t		irq;
438dcad7802Skettenis 	uint32_t	gsiv;
439dcad7802Skettenis 	uint8_t		baud_rate;
440dcad7802Skettenis 	uint8_t		parity;
441dcad7802Skettenis 	uint8_t		stop_bits;
442dcad7802Skettenis 	uint8_t		flow_control;
443dcad7802Skettenis 	uint8_t		terminal_type;
444dcad7802Skettenis 	uint8_t		reserved2;
445dcad7802Skettenis 	uint16_t	pci_device_id;
446dcad7802Skettenis 	uint16_t	pci_vendor_id;
447dcad7802Skettenis 	uint8_t		pci_bus;
448dcad7802Skettenis 	uint8_t		pci_device;
449dcad7802Skettenis 	uint8_t		pci_function;
450dcad7802Skettenis 	uint32_t	pci_flags;
451dcad7802Skettenis 	uint8_t		pci_segment;
452dcad7802Skettenis 	uint32_t	reserved3;
453eeb8d472Spatrick } __packed;
454dcad7802Skettenis 
4557934d707Stholo struct acpi_facs {
456d2eaebe9Skettenis 	uint8_t		signature[4];
4577934d707Stholo #define	FACS_SIG	"FACS"
458d2eaebe9Skettenis 	uint32_t	length;
459d2eaebe9Skettenis 	uint32_t	hardware_signature;
460d2eaebe9Skettenis 	uint32_t	wakeup_vector;
461d2eaebe9Skettenis 	uint32_t	global_lock;
4627934d707Stholo #define	FACS_LOCK_PENDING	0x00000001
4637934d707Stholo #define	FACS_LOCK_OWNED		0x00000002
464d2eaebe9Skettenis 	uint32_t	flags;
4657934d707Stholo #define	FACS_S4BIOS_F		0x00000001	/* S4BIOS_REQ supported */
466fbb4bab4Smarco 	uint64_t	x_wakeup_vector;
467d2eaebe9Skettenis 	uint8_t		version;
468d2eaebe9Skettenis 	uint8_t		reserved[31];
4697934d707Stholo } __packed;
4707934d707Stholo 
471306068a2Sdv struct acpi_tpm2 {
472306068a2Sdv 	struct acpi_table_header	hdr;
473306068a2Sdv #define TPM2_SIG	"TPM2"
474306068a2Sdv 	uint32_t	reserved;
475306068a2Sdv 	uint64_t	control_addr;
476306068a2Sdv 	uint32_t	start_method;
477306068a2Sdv } __packed;
478306068a2Sdv 
4792d915ce1Sjordan /*
480*26571a80Skettenis  * Intel ACPI Low Power S0 Idle
481*26571a80Skettenis  */
482*26571a80Skettenis struct acpi_lpit {
483*26571a80Skettenis 	struct acpi_table_header	hdr;
484*26571a80Skettenis #define LPIT_SIG	"LPIT"
485*26571a80Skettenis 	/* struct acpi_lpit_entry[]; */
486*26571a80Skettenis } __packed;
487*26571a80Skettenis 
488*26571a80Skettenis struct acpi_lpit_entry {
489*26571a80Skettenis 	uint32_t	type;
490*26571a80Skettenis 	uint32_t	length;
491*26571a80Skettenis 	uint16_t	uid;
492*26571a80Skettenis 	uint16_t	reserved;
493*26571a80Skettenis 	uint32_t	flags;
494*26571a80Skettenis #define LPIT_DISABLED			(1L << 0)
495*26571a80Skettenis #define LPIT_COUNTER_NOT_AVAILABLE	(1L << 1)
496*26571a80Skettenis 	struct acpi_gas	entry_trigger;
497*26571a80Skettenis 	uint32_t	residency;
498*26571a80Skettenis 	uint32_t	latency;
499*26571a80Skettenis 	struct acpi_gas	residency_counter;
500*26571a80Skettenis 	uint64_t	residency_frequency;
501*26571a80Skettenis };
502*26571a80Skettenis 
503*26571a80Skettenis /*
5042d915ce1Sjordan  * Intel ACPI DMA Remapping Entries
5052d915ce1Sjordan  */
50657ab8bb1Sjordan struct acpidmar_devpath {
5072d915ce1Sjordan 	uint8_t		device;
5082d915ce1Sjordan 	uint8_t		function;
5092d915ce1Sjordan } __packed;
5102d915ce1Sjordan 
51157ab8bb1Sjordan struct acpidmar_devscope {
5122d915ce1Sjordan 	uint8_t		type;
5132d915ce1Sjordan #define DMAR_ENDPOINT			0x1
5142d915ce1Sjordan #define DMAR_BRIDGE			0x2
5152d915ce1Sjordan #define DMAR_IOAPIC			0x3
5162d915ce1Sjordan #define DMAR_HPET			0x4
5172d915ce1Sjordan 	uint8_t		length;
5182d915ce1Sjordan 	uint16_t	reserved;
5192d915ce1Sjordan 	uint8_t		enumid;
5202d915ce1Sjordan 	uint8_t		bus;
5212d915ce1Sjordan } __packed;
5222d915ce1Sjordan 
5232d915ce1Sjordan /* DMA Remapping Hardware Unit */
52457ab8bb1Sjordan struct acpidmar_drhd {
5252d915ce1Sjordan 	uint16_t	type;
5262d915ce1Sjordan 	uint16_t	length;
5272d915ce1Sjordan 
5282d915ce1Sjordan 	uint8_t		flags;
5292d915ce1Sjordan 	uint8_t		reserved;
5302d915ce1Sjordan 	uint16_t	segment;
5312d915ce1Sjordan 	uint64_t	address;
5322d915ce1Sjordan 	/* struct acpidmar_devscope[]; */
5332d915ce1Sjordan } __packed;
5342d915ce1Sjordan 
5352d915ce1Sjordan /* Reserved Memory Region Reporting */
53657ab8bb1Sjordan struct acpidmar_rmrr {
5372d915ce1Sjordan 	uint16_t	type;
5382d915ce1Sjordan 	uint16_t	length;
5392d915ce1Sjordan 
5402d915ce1Sjordan 	uint16_t	reserved;
5412d915ce1Sjordan 	uint16_t	segment;
5422d915ce1Sjordan 	uint64_t	base;
5432d915ce1Sjordan 	uint64_t	limit;
5442d915ce1Sjordan 	/* struct acpidmar_devscope[]; */
5452d915ce1Sjordan } __packed;
5462d915ce1Sjordan 
5472d915ce1Sjordan /* Root Port ATS Capability Reporting */
54857ab8bb1Sjordan struct acpidmar_atsr {
5492d915ce1Sjordan 	uint16_t	type;
5502d915ce1Sjordan 	uint16_t	length;
5512d915ce1Sjordan 
5522d915ce1Sjordan 	uint8_t		flags;
5532d915ce1Sjordan 	uint8_t		reserved;
5542d915ce1Sjordan 	uint16_t	segment;
5552d915ce1Sjordan 	/* struct acpidmar_devscope[]; */
5562d915ce1Sjordan } __packed;
5572d915ce1Sjordan 
5582d915ce1Sjordan union acpidmar_entry {
5592d915ce1Sjordan 	struct {
5602d915ce1Sjordan 		uint16_t	type;
5612d915ce1Sjordan #define DMAR_DRHD			0x0
5622d915ce1Sjordan #define DMAR_RMRR			0x1
5632d915ce1Sjordan #define DMAR_ATSR			0x2
5642d915ce1Sjordan #define DMAR_RHSA			0x3
5652d915ce1Sjordan 		uint16_t	length;
5662d915ce1Sjordan 	} __packed;
5672d915ce1Sjordan 	struct acpidmar_drhd	drhd;
5682d915ce1Sjordan 	struct acpidmar_rmrr	rmrr;
5692d915ce1Sjordan 	struct acpidmar_atsr	atsr;
5702d915ce1Sjordan } __packed;
5712d915ce1Sjordan 
5722d915ce1Sjordan struct acpi_dmar {
5732d915ce1Sjordan 	struct acpi_table_header	hdr;
5742d915ce1Sjordan #define DMAR_SIG	"DMAR"
5752d915ce1Sjordan 	uint8_t		haw;
5762d915ce1Sjordan 	uint8_t		flags;
5772d915ce1Sjordan 	uint8_t		reserved[10];
5782d915ce1Sjordan 	/* struct acpidmar_entry[]; */
5792d915ce1Sjordan } __packed;
5802d915ce1Sjordan 
5812d915ce1Sjordan /*
5822d915ce1Sjordan  * AMD I/O Virtualization Remapping Entries
5832d915ce1Sjordan  */
5842d915ce1Sjordan union acpi_ivhd_entry {
5852d915ce1Sjordan 	uint8_t		type;
5862d915ce1Sjordan #define IVHD_ALL			1
5872d915ce1Sjordan #define IVHD_SEL			2
5882d915ce1Sjordan #define IVHD_SOR			3
5892d915ce1Sjordan #define IVHD_EOR			4
5902d915ce1Sjordan #define IVHD_ALIAS_SEL			66
5912d915ce1Sjordan #define IVHD_ALIAS_SOR			67
5922d915ce1Sjordan #define IVHD_EXT_SEL			70
5932d915ce1Sjordan #define IVHD_EXT_SOR			71
5942d915ce1Sjordan #define IVHD_SPECIAL			72
5952d915ce1Sjordan 	struct {
5962d915ce1Sjordan 		uint8_t		type;
5972d915ce1Sjordan 		uint16_t	resvd;
5982d915ce1Sjordan 		uint8_t		data;
5992d915ce1Sjordan 	} __packed all;
6002d915ce1Sjordan 	struct {
6012d915ce1Sjordan 		uint8_t		type;
6022d915ce1Sjordan 		uint16_t	devid;
6032d915ce1Sjordan 		uint8_t		data;
6042d915ce1Sjordan 	} __packed sel;
6052d915ce1Sjordan 	struct {
6062d915ce1Sjordan 		uint8_t		type;
6072d915ce1Sjordan 		uint16_t	devid;
6082d915ce1Sjordan 		uint8_t		data;
6092d915ce1Sjordan 	} __packed sor;
6102d915ce1Sjordan 	struct {
6112d915ce1Sjordan 		uint8_t		type;
6122d915ce1Sjordan 		uint16_t	devid;
6132d915ce1Sjordan 		uint8_t		resvd;
6142d915ce1Sjordan 	} __packed eor;
6152d915ce1Sjordan 	struct {
6162d915ce1Sjordan 		uint8_t		type;
6172d915ce1Sjordan 		uint16_t	devid;
6182d915ce1Sjordan 		uint8_t		data;
6192d915ce1Sjordan 		uint8_t		resvd1;
6202d915ce1Sjordan 		uint16_t	srcid;
6212d915ce1Sjordan 		uint8_t		resvd2;
6222d915ce1Sjordan 	} __packed alias;
6232d915ce1Sjordan 	struct {
6242d915ce1Sjordan 		uint8_t		type;
6252d915ce1Sjordan 		uint16_t	devid;
6262d915ce1Sjordan 		uint8_t		data;
6272d915ce1Sjordan 		uint32_t	extdata;
6282d915ce1Sjordan #define IVHD_ATS_DIS			(1L << 31)
6292d915ce1Sjordan 	} __packed ext;
6302d915ce1Sjordan 	struct {
6312d915ce1Sjordan 		uint8_t		type;
6322d915ce1Sjordan 		uint16_t	resvd;
6332d915ce1Sjordan 		uint8_t		data;
6342d915ce1Sjordan 		uint8_t		handle;
6352d915ce1Sjordan 		uint16_t	devid;
6362d915ce1Sjordan 		uint8_t		variety;
6372d915ce1Sjordan #define IVHD_IOAPIC			0x01
6382d915ce1Sjordan #define IVHD_HPET			0x02
6392d915ce1Sjordan 	} __packed special;
6402d915ce1Sjordan } __packed;
6412d915ce1Sjordan 
64257ab8bb1Sjordan struct acpi_ivmd {
6432d915ce1Sjordan 	uint8_t		type;
6442d915ce1Sjordan 	uint8_t		flags;
6452d915ce1Sjordan #define	IVMD_EXCLRANGE			(1L << 3)
6462d915ce1Sjordan #define IVMD_IW				(1L << 2)
6472d915ce1Sjordan #define IVMD_IR				(1L << 1)
6482d915ce1Sjordan #define IVMD_UNITY			(1L << 0)
6492d915ce1Sjordan 	uint16_t	length;
6502d915ce1Sjordan 	uint16_t	devid;
6512d915ce1Sjordan 	uint16_t	auxdata;
6522d915ce1Sjordan 	uint8_t		reserved[8];
6532d915ce1Sjordan 	uint64_t	base;
6542d915ce1Sjordan 	uint64_t	limit;
6552d915ce1Sjordan } __packed;
6562d915ce1Sjordan 
65757ab8bb1Sjordan struct acpi_ivhd {
6582d915ce1Sjordan 	uint8_t		type;
6592d915ce1Sjordan 	uint8_t		flags;
66052938089Sjordan #define IVHD_PPRSUP		(1L << 7)
66152938089Sjordan #define IVHD_PREFSUP		(1L << 6)
66252938089Sjordan #define IVHD_COHERENT		(1L << 5)
6632d915ce1Sjordan #define IVHD_IOTLB		(1L << 4)
6642d915ce1Sjordan #define IVHD_ISOC		(1L << 3)
6652d915ce1Sjordan #define IVHD_RESPASSPW		(1L << 2)
6662d915ce1Sjordan #define IVHD_PASSPW		(1L << 1)
6672d915ce1Sjordan #define IVHD_HTTUNEN		(1L << 0)
6682d915ce1Sjordan 	uint16_t	length;
6692d915ce1Sjordan 	uint16_t	devid;
6702d915ce1Sjordan 	uint16_t	cap;
6712d915ce1Sjordan 	uint64_t	address;
6722d915ce1Sjordan 	uint16_t	segment;
6732d915ce1Sjordan 	uint16_t	info;
6742d915ce1Sjordan #define IVHD_UNITID_SHIFT	8
6752d915ce1Sjordan #define IVHD_UNITID_MASK	0x1F
6762d915ce1Sjordan #define IVHD_MSINUM_SHIFT	0
6772d915ce1Sjordan #define IVHD_MSINUM_MASK	0x1F
67852938089Sjordan 	uint32_t	feature;
67952938089Sjordan } __packed;
68052938089Sjordan 
68152938089Sjordan struct acpi_ivhd_ext {
68252938089Sjordan 	uint8_t		type;
68352938089Sjordan 	uint8_t		flags;
68452938089Sjordan 	uint16_t	length;
68552938089Sjordan 	uint16_t	devid;
68652938089Sjordan 	uint16_t	cap;
68752938089Sjordan 	uint64_t	address;
68852938089Sjordan 	uint16_t	segment;
68952938089Sjordan 	uint16_t	info;
69052938089Sjordan 	uint32_t	attrib;
69152938089Sjordan 	uint64_t	efr;
69252938089Sjordan 	uint8_t		reserved[8];
6932d915ce1Sjordan } __packed;
6942d915ce1Sjordan 
6952d915ce1Sjordan union acpi_ivrs_entry {
6962d915ce1Sjordan 	struct {
6972d915ce1Sjordan 		uint8_t		type;
6982d915ce1Sjordan #define IVRS_IVHD			0x10
69952938089Sjordan #define IVRS_IVHD_EXT			0x11
7002d915ce1Sjordan #define IVRS_IVMD_ALL			0x20
7012d915ce1Sjordan #define IVRS_IVMD_SPECIFIED		0x21
7022d915ce1Sjordan #define IVRS_IVMD_RANGE			0x22
7032d915ce1Sjordan 		uint8_t		flags;
7042d915ce1Sjordan 		uint16_t	length;
7052d915ce1Sjordan 	} __packed;
7062d915ce1Sjordan 	struct acpi_ivhd	ivhd;
70752938089Sjordan 	struct acpi_ivhd_ext	ivhd_ext;
7082d915ce1Sjordan 	struct acpi_ivmd	ivmd;
7092d915ce1Sjordan } __packed;
7102d915ce1Sjordan 
71157ab8bb1Sjordan struct acpi_ivrs {
7122d915ce1Sjordan 	struct acpi_table_header	hdr;
7132d915ce1Sjordan #define IVRS_SIG	"IVRS"
7142d915ce1Sjordan 	uint32_t		ivinfo;
7152d915ce1Sjordan #define IVRS_ATSRNG		(1L << 22)
7162d915ce1Sjordan #define IVRS_VASIZE_SHIFT	15
7172d915ce1Sjordan #define IVRS_VASIZE_MASK	0x7F
7182d915ce1Sjordan #define IVRS_PASIZE_SHIFT	8
7192d915ce1Sjordan #define IVRS_PASIZE_MASK	0x7F
7202d915ce1Sjordan 	uint8_t			reserved[8];
7212d915ce1Sjordan } __packed;
7222d915ce1Sjordan 
7238a4c6a2eSpatrick struct acpi_iort {
7248a4c6a2eSpatrick 	struct acpi_table_header	hdr;
7258a4c6a2eSpatrick #define IORT_SIG	"IORT"
7268a4c6a2eSpatrick 	uint32_t	number_of_nodes;
7278a4c6a2eSpatrick 	uint32_t	offset;
7288a4c6a2eSpatrick 	uint32_t	reserved;
7298a4c6a2eSpatrick } __packed;
7308a4c6a2eSpatrick 
7318a4c6a2eSpatrick struct acpi_iort_node {
7328a4c6a2eSpatrick 	uint8_t		type;
7338a4c6a2eSpatrick #define ACPI_IORT_ITS			0
734fe67bbf9Spatrick #define ACPI_IORT_NAMED_COMPONENT	1
7358a4c6a2eSpatrick #define ACPI_IORT_ROOT_COMPLEX		2
7368a4c6a2eSpatrick #define ACPI_IORT_SMMU			3
73767472c6aSpatrick #define ACPI_IORT_SMMU_V3		4
7388a4c6a2eSpatrick 	uint16_t	length;
7398a4c6a2eSpatrick 	uint8_t		revision;
7408a4c6a2eSpatrick 	uint32_t	reserved1;
7418a4c6a2eSpatrick 	uint32_t	number_of_mappings;
7428a4c6a2eSpatrick 	uint32_t	mapping_offset;
7436642123eSpatrick } __packed;
7446642123eSpatrick 
745aa5ad52dSjmatthew struct acpi_iort_its_node {
746aa5ad52dSjmatthew 	uint32_t	number_of_itss;
747aa5ad52dSjmatthew 	uint32_t	its_ids[];
748aa5ad52dSjmatthew } __packed;
749aa5ad52dSjmatthew 
750fe67bbf9Spatrick struct acpi_iort_nc_node {
751fe67bbf9Spatrick 	uint32_t	node_flags;
752fe67bbf9Spatrick 	uint64_t	memory_access_properties;
753fe67bbf9Spatrick 	uint8_t		device_memory_address_size_limit;
754fe67bbf9Spatrick 	char		device_object_name[];
755fe67bbf9Spatrick } __packed;
756fe67bbf9Spatrick 
7576642123eSpatrick struct acpi_iort_rc_node {
7588a4c6a2eSpatrick 	uint64_t	memory_access_properties;
7592ee17f52Spatrick 	uint32_t	ats_attributes;
7608a4c6a2eSpatrick 	uint32_t	segment;
7618a4c6a2eSpatrick 	uint8_t		memory_address_size_limit;
7628a4c6a2eSpatrick 	uint8_t		reserved2[3];
7638a4c6a2eSpatrick } __packed;
7648a4c6a2eSpatrick 
76553e51ee2Spatrick struct acpi_iort_smmu_node {
76653e51ee2Spatrick 	uint64_t	base_address;
76753e51ee2Spatrick 	uint64_t	span;
7681e52e0acSpatrick 	uint32_t	model;
7691e52e0acSpatrick #define ACPI_IORT_SMMU_V1		0
7701e52e0acSpatrick #define ACPI_IORT_SMMU_V2		1
7711e52e0acSpatrick #define ACPI_IORT_SMMU_CORELINK_MMU400	2
7721e52e0acSpatrick #define ACPI_IORT_SMMU_CORELINK_MMU500	3
7731e52e0acSpatrick #define ACPI_IORT_SMMU_CORELINK_MMU401	4
7741e52e0acSpatrick #define ACPI_IORT_SMMU_CAVIUM_THUNDERX	5
77553e51ee2Spatrick 	uint32_t	flags;
77653e51ee2Spatrick #define ACPI_IORT_SMMU_DVM		0x00000001
77753e51ee2Spatrick #define ACPI_IORT_SMMU_COHERENT		0x00000002
77853e51ee2Spatrick 	uint32_t	global_interrupt_offset;
77953e51ee2Spatrick 	uint32_t	number_of_context_interrupts;
78053e51ee2Spatrick 	uint32_t	context_interrupt_offset;
78153e51ee2Spatrick 	uint32_t	number_of_pmu_interrupts;
78253e51ee2Spatrick 	uint32_t	pmu_interrupt_offset;
78353e51ee2Spatrick } __packed;
78453e51ee2Spatrick 
78553e51ee2Spatrick struct acpi_iort_smmu_global_interrupt {
78653e51ee2Spatrick 	uint32_t	nsgirpt_gsiv;
78753e51ee2Spatrick 	uint32_t	nsgirpt_flags;
78853e51ee2Spatrick #define ACPI_IORT_SMMU_INTR_EDGE	(1 << 0)
78953e51ee2Spatrick 	uint32_t	nscfgirpt_gsiv;
79053e51ee2Spatrick 	uint32_t	nscfgirpt_flags;
79153e51ee2Spatrick } __packed;
79253e51ee2Spatrick 
79353e51ee2Spatrick struct acpi_iort_smmu_context_interrupt {
794f3d34aacSpatrick 	uint32_t	gsiv;
795f3d34aacSpatrick 	uint32_t	flags;
79653e51ee2Spatrick } __packed;
79753e51ee2Spatrick 
79853e51ee2Spatrick struct acpi_iort_smmu_pmu_interrupt {
799f3d34aacSpatrick 	uint32_t	gsiv;
800f3d34aacSpatrick 	uint32_t	flags;
80153e51ee2Spatrick } __packed;
80253e51ee2Spatrick 
8038a4c6a2eSpatrick struct acpi_iort_mapping {
8048a4c6a2eSpatrick 	uint32_t	input_base;
8058a4c6a2eSpatrick 	uint32_t	number_of_ids;
8068a4c6a2eSpatrick 	uint32_t	output_base;
8078a4c6a2eSpatrick 	uint32_t	output_reference;
8088a4c6a2eSpatrick 	uint32_t	flags;
8098a4c6a2eSpatrick #define ACPI_IORT_MAPPING_SINGLE	0x00000001
8108a4c6a2eSpatrick } __packed;
8112d915ce1Sjordan 
8127934d707Stholo #define ACPI_FREQUENCY	3579545		/* Per ACPI spec */
8137934d707Stholo 
8147934d707Stholo /*
81528dc4ec2Sjordan  * PCI Configuration space
81628dc4ec2Sjordan  */
817d2eaebe9Skettenis #define ACPI_ADR_PCIDEV(addr)	(uint16_t)(addr >> 16)
818d2eaebe9Skettenis #define ACPI_ADR_PCIFUN(addr)	(uint16_t)(addr & 0xFFFF)
819d6a1c66eSkettenis 
820d6a1c66eSkettenis #define ACPI_PCI_SEG(addr) (uint16_t)((addr) >> 48)
821d6a1c66eSkettenis #define ACPI_PCI_BUS(addr) (uint8_t)((addr) >> 40)
822d6a1c66eSkettenis #define ACPI_PCI_DEV(addr) (uint8_t)((addr) >> 32)
823d2eaebe9Skettenis #define ACPI_PCI_FN(addr)  (uint16_t)((addr) >> 16)
824d2eaebe9Skettenis #define ACPI_PCI_REG(addr) (uint16_t)(addr)
82528dc4ec2Sjordan 
82628dc4ec2Sjordan /*
8277934d707Stholo  * PM1 Status Registers Fixed Hardware Feature Status Bits
8287934d707Stholo  */
8297934d707Stholo #define	ACPI_PM1_STATUS			0x00
8307934d707Stholo #define		ACPI_PM1_TMR_STS		0x0001
8317934d707Stholo #define		ACPI_PM1_BM_STS			0x0010
8327934d707Stholo #define		ACPI_PM1_GBL_STS		0x0020
8337934d707Stholo #define		ACPI_PM1_PWRBTN_STS		0x0100
8347934d707Stholo #define		ACPI_PM1_SLPBTN_STS		0x0200
8357934d707Stholo #define		ACPI_PM1_RTC_STS		0x0400
8367934d707Stholo #define		ACPI_PM1_PCIEXP_WAKE_STS	0x4000
8377934d707Stholo #define		ACPI_PM1_WAK_STS		0x8000
8387934d707Stholo 
83950c82a80Smlarkin #define	ACPI_PM1_ALL_STS (ACPI_PM1_TMR_STS | ACPI_PM1_BM_STS | \
84050c82a80Smlarkin 	    ACPI_PM1_GBL_STS | ACPI_PM1_PWRBTN_STS | \
84150c82a80Smlarkin 	    ACPI_PM1_SLPBTN_STS | ACPI_PM1_RTC_STS | \
84250c82a80Smlarkin 	    ACPI_PM1_PCIEXP_WAKE_STS | ACPI_PM1_WAK_STS )
84350c82a80Smlarkin 
8447934d707Stholo /*
8457934d707Stholo  * PM1 Enable Registers
8467934d707Stholo  */
8477934d707Stholo #define	ACPI_PM1_ENABLE			0x02
8487934d707Stholo #define		ACPI_PM1_TMR_EN			0x0001
8497934d707Stholo #define		ACPI_PM1_GBL_EN			0x0020
8507934d707Stholo #define		ACPI_PM1_PWRBTN_EN		0x0100
8517934d707Stholo #define		ACPI_PM1_SLPBTN_EN		0x0200
8527934d707Stholo #define		ACPI_PM1_RTC_EN			0x0400
8537934d707Stholo #define		ACPI_PM1_PCIEXP_WAKE_DIS	0x4000
8547934d707Stholo 
8557934d707Stholo /*
8567934d707Stholo  * PM1 Control Registers
8577934d707Stholo  */
8587934d707Stholo #define	ACPI_PM1_CONTROL		0x00
8597934d707Stholo #define		ACPI_PM1_SCI_EN			0x0001
8607934d707Stholo #define		ACPI_PM1_BM_RLD			0x0002
8617934d707Stholo #define		ACPI_PM1_GBL_RLS		0x0004
8623b4fc88bSgrange #define		ACPI_PM1_SLP_TYPX(x)		((x) << 10)
8633b4fc88bSgrange #define		ACPI_PM1_SLP_TYPX_MASK		0x1c00
8647934d707Stholo #define		ACPI_PM1_SLP_EN			0x2000
865d2e44dfbSgrange 
86624353b8aSmarco /*
867fbb4bab4Smarco  * PM2 Control Registers
868fbb4bab4Smarco  */
869fbb4bab4Smarco #define ACPI_PM2_CONTROL		0x06
870fbb4bab4Smarco #define	ACPI_PM2_ARB_DIS		0x0001
871fbb4bab4Smarco 
872de93333bSkettenis /*
873de93333bSkettenis  * Operation Region Address Space Identifiers
874de93333bSkettenis  */
875de93333bSkettenis #define ACPI_OPREG_SYSMEM	0	/* SystemMemory */
876de93333bSkettenis #define ACPI_OPREG_SYSIO	1	/* SystemIO */
877de93333bSkettenis #define ACPI_OPREG_PCICFG	2	/* PCI_Config */
878de93333bSkettenis #define ACPI_OPREG_EC		3	/* EmbeddedControl */
879de93333bSkettenis #define ACPI_OPREG_SMBUS	4	/* SMBus */
880de93333bSkettenis #define ACPI_OPREG_CMOS		5	/* CMOS */
881de93333bSkettenis #define ACPI_OPREG_PCIBAR	6	/* PCIBARTarget */
882de93333bSkettenis #define ACPI_OPREG_IPMI		7	/* IPMI */
883de93333bSkettenis #define ACPI_OPREG_GPIO		8	/* GeneralPurposeIO */
884de93333bSkettenis #define ACPI_OPREG_GSB		9	/* GenericSerialBus */
885fbb4bab4Smarco 
886fbb4bab4Smarco /*
88717c9ba6cSgrange  * Sleeping States
88817c9ba6cSgrange  */
88917c9ba6cSgrange #define ACPI_STATE_S0		0
89017c9ba6cSgrange #define ACPI_STATE_S1		1
89117c9ba6cSgrange #define ACPI_STATE_S2		2
89217c9ba6cSgrange #define ACPI_STATE_S3		3
89317c9ba6cSgrange #define ACPI_STATE_S4		4
89417c9ba6cSgrange #define ACPI_STATE_S5		5
89517c9ba6cSgrange 
89617c9ba6cSgrange /*
897b08441edSmpi  * Device Power States
898b08441edSmpi  */
899b08441edSmpi #define ACPI_STATE_D0		0
900b08441edSmpi #define ACPI_STATE_D1		1
901b08441edSmpi #define ACPI_STATE_D2		2
902b08441edSmpi #define ACPI_STATE_D3		3
903b08441edSmpi 
904b08441edSmpi /*
90524353b8aSmarco  * ACPI Device IDs
90624353b8aSmarco  */
907c9fcb6a2Sbrad #define ACPI_DEV_TIM	"PNP0100"	/* System timer */
90824353b8aSmarco #define ACPI_DEV_ACPI	"PNP0C08"	/* ACPI device */
909c9fcb6a2Sbrad #define ACPI_DEV_PCIB	"PNP0A03"	/* PCI bus */
91024353b8aSmarco #define ACPI_DEV_GISAB	"PNP0A05"	/* Generic ISA Bus */
91124353b8aSmarco #define ACPI_DEV_EIOB	"PNP0A06"	/* Extended I/O Bus */
91273cb7cd1Skettenis #define ACPI_DEV_PCIEB	"PNP0A08"	/* PCIe bus */
913c9fcb6a2Sbrad #define ACPI_DEV_MR	"PNP0C02"	/* Motherboard resources */
914c9fcb6a2Sbrad #define ACPI_DEV_NPROC	"PNP0C04"	/* Numeric data processor */
915695e87c5Smk #define ACPI_DEV_CS	"PNP0C08"	/* ACPI-Compliant System */
91624353b8aSmarco #define ACPI_DEV_ECD	"PNP0C09"	/* Embedded Controller Device */
91724353b8aSmarco #define ACPI_DEV_CMB	"PNP0C0A"	/* Control Method Battery */
91824353b8aSmarco #define ACPI_DEV_FAN	"PNP0C0B"	/* Fan Device */
91924353b8aSmarco #define ACPI_DEV_PBD	"PNP0C0C"	/* Power Button Device */
92024353b8aSmarco #define ACPI_DEV_LD	"PNP0C0D"	/* Lid Device */
92124353b8aSmarco #define ACPI_DEV_SBD	"PNP0C0E"	/* Sleep Button Device */
92224353b8aSmarco #define ACPI_DEV_PILD	"PNP0C0F"	/* PCI Interrupt Link Device */
92324353b8aSmarco #define ACPI_DEV_MEMD	"PNP0C80"	/* Memory Device */
924ac6c6540Sjsg #define ACPI_DEV_MOUSE	"PNP0F13"	/* PS/2 Mouse */
92524353b8aSmarco #define ACPI_DEV_SHC	"ACPI0001"	/* SMBus 1.0 Host Controller */
9266715140aSjcs #define ACPI_DEV_SBS	"ACPI0002"	/* Smart Battery Subsystem */
927a9671257Smarco #define ACPI_DEV_AC	"ACPI0003"	/* AC Device */
92824353b8aSmarco #define ACPI_DEV_MD	"ACPI0004"	/* Module Device */
9296715140aSjcs #define ACPI_DEV_SMBUS	"ACPI0005"	/* SMBus 2.0 Host Controller */
93024353b8aSmarco #define ACPI_DEV_GBD	"ACPI0006"	/* GPE Block Device */
93124353b8aSmarco #define ACPI_DEV_PD	"ACPI0007"	/* Processor Device */
93224353b8aSmarco #define ACPI_DEV_ALSD	"ACPI0008"	/* Ambient Light Sensor Device */
93324353b8aSmarco #define ACPI_DEV_IOXA	"ACPI0009"	/* IO x APIC Device */
93424353b8aSmarco #define ACPI_DEV_IOA	"ACPI000A"	/* IO APIC Device */
93524353b8aSmarco #define ACPI_DEV_IOSA	"ACPI000B"	/* IO SAPIC Device */
936c9fcb6a2Sbrad #define ACPI_DEV_THZ	"THERMALZONE"	/* Thermal Zone */
937c9fcb6a2Sbrad #define ACPI_DEV_FFB	"FIXEDBUTTON"	/* Fixed Feature Button */
938a74532a1Spatrick #define ACPI_DEV_IPMI	"IPI0001"	/* IPMI */
939b037e2e6Sjcs 
940d2e44dfbSgrange #endif	/* !_DEV_ACPI_ACPIREG_H_ */
941