xref: /onnv-gate/usr/src/uts/i86pc/os/acpi_fw.h (revision 12004:93f274d4a367)
13446Smrj /*
23446Smrj  * CDDL HEADER START
33446Smrj  *
43446Smrj  * The contents of this file are subject to the terms of the
53446Smrj  * Common Development and Distribution License (the "License").
63446Smrj  * You may not use this file except in compliance with the License.
73446Smrj  *
83446Smrj  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
93446Smrj  * or http://www.opensolaris.org/os/licensing.
103446Smrj  * See the License for the specific language governing permissions
113446Smrj  * and limitations under the License.
123446Smrj  *
133446Smrj  * When distributing Covered Code, include this CDDL HEADER in each
143446Smrj  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
153446Smrj  * If applicable, add the following below this CDDL HEADER, with the
163446Smrj  * fields enclosed by brackets "[]" replaced with your own identifying
173446Smrj  * information: Portions Copyright [yyyy] [name of copyright owner]
183446Smrj  *
193446Smrj  * CDDL HEADER END
203446Smrj  */
213446Smrj /*
2211245SZhijun.Fu@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
233446Smrj  * Use is subject to license terms.
243446Smrj  */
25*12004Sjiang.liu@intel.com /*
26*12004Sjiang.liu@intel.com  * Copyright (c) 2010, Intel Corporation.
27*12004Sjiang.liu@intel.com  * All rights reserved.
28*12004Sjiang.liu@intel.com  */
293446Smrj 
303446Smrj #ifndef _ACPI_FW_H
313446Smrj #define	_ACPI_FW_H
323446Smrj 
333446Smrj #ifdef __cplusplus
343446Smrj extern "C" {
353446Smrj #endif
363446Smrj 
373446Smrj extern void process_acpi_properties();
383446Smrj 
393446Smrj #define	ACPI_RSDP_SIG		"RSD PTR "
403446Smrj #define	ACPI_RSDP_SIG_LEN	(8)
413446Smrj #define	ACPI_TABLE_SIG_LEN	(4)
423446Smrj #define	ACPI_EBDA_SEG_ADDR	(0x40e)
433446Smrj #define	ACPI_EBDA_LEN		(1024)
443446Smrj 
453446Smrj #pragma pack(1)
463446Smrj 
473446Smrj struct rsdp_v1 {
483446Smrj 	char	sig[8];
493446Smrj 	uint8_t	checksum;
503446Smrj 	char	oem_id[6];
513446Smrj 	char	revision;
523446Smrj 	uint32_t rsdt;
533446Smrj };
543446Smrj 
553446Smrj struct rsdp {
563446Smrj 	struct rsdp_v1 v1;
573446Smrj 	uint32_t len;
583446Smrj 	uint64_t xsdt;
593446Smrj 	uint8_t  ext_checksum;
603446Smrj 	char	reserved[3];
613446Smrj };
623446Smrj 
633446Smrj struct table_header {
643446Smrj 	char	 sig[4];
653446Smrj 	uint32_t len;
663446Smrj 	uint8_t	 revision;
673446Smrj 	uint8_t	 checksum;
683446Smrj 	char	 oem_id[6];
693446Smrj 	char	 oem_table_id[8];
703446Smrj 	uint32_t oem_revision;
713446Smrj 	uint32_t creator_id;
723446Smrj 	uint32_t creator_revision;
733446Smrj };
743446Smrj 
753446Smrj struct xsdt {
763446Smrj 	struct table_header hdr;
773446Smrj 	union {
783446Smrj 		uint32_t r[1];
793446Smrj 		uint64_t x[1];
803446Smrj 	} p;
813446Smrj };
823446Smrj 
833446Smrj 
843446Smrj #define	MADT_PROCESSOR	0
853446Smrj 
863446Smrj struct madt_processor {
873446Smrj 	uint8_t	type;
883446Smrj 	uint8_t	len;
893446Smrj 	uint8_t	acpi_processor_id;
903446Smrj 	uint8_t apic_id;
913446Smrj 	uint32_t flags;
923446Smrj };
933446Smrj 
943446Smrj struct madt {
953446Smrj 	struct table_header hdr;
963446Smrj 	uint32_t lapic_addr;
973446Smrj 	uint32_t flags;
983446Smrj 	struct madt_processor list[1];
993446Smrj };
1003446Smrj 
1013446Smrj struct srat_processor {
1023446Smrj 	uint8_t	domain1;
1033446Smrj 	uint8_t	apic_id;
1043446Smrj 	uint32_t flags;
1053446Smrj 	uint8_t  local_sapic_eid;
1063446Smrj 	uint8_t  domain2[3];
1073446Smrj 	uint8_t  reserved[4];
1083446Smrj };
1093446Smrj 
1107282Smishra struct srat_x2apic {
1117282Smishra 	uint8_t reserved[2];
1127282Smishra 	uint32_t domain;
1137282Smishra 	uint32_t x2apic_id;
1147282Smishra 	uint32_t flags;
1157282Smishra };
1167282Smishra 
1173446Smrj struct srat_memory {
1183446Smrj 	uint32_t domain;
1193446Smrj 	uint8_t	 reserved1[2];
1203446Smrj 	uint64_t base_addr;
1213446Smrj 	uint64_t len;
1223446Smrj 	uint8_t  reserved2[4];
1233446Smrj 	uint32_t flags;
1243446Smrj 	uint8_t  reserved3[8];
1253446Smrj };
1263446Smrj 
1273446Smrj struct srat_item {
1283446Smrj 	uint8_t	type;
1293446Smrj 	uint8_t len;
1303446Smrj 	union {
1313446Smrj 		struct srat_processor p;
1323446Smrj 		struct srat_memory m;
1337282Smishra 		struct srat_x2apic xp;
1343446Smrj 	} i;
1353446Smrj };
1363446Smrj 
1373446Smrj struct srat {
1383446Smrj 	struct table_header hdr;
1393446Smrj 	uint32_t reserved1;
1403446Smrj 	uint8_t  reserved2[8];
1413446Smrj 	struct srat_item list[1];
1423446Smrj };
1433446Smrj 
1443446Smrj #define	SRAT_PROCESSOR	  (0)
1453446Smrj #define	SRAT_MEMORY	  (1)
1467282Smishra #define	SRAT_X2APIC	  (2)
1473446Smrj 
1483446Smrj #define	SRAT_ENABLED	  (1)
1493446Smrj #define	SRAT_HOT_PLUG	  (2)
1503446Smrj #define	SRAT_NON_VOLATILE (4)
1513446Smrj 
1526445Sjjc /*
1536445Sjjc  * Pointer to System Resource Affinity Table (SRAT)
1546445Sjjc  */
1556445Sjjc extern struct srat	*srat_ptr;
1566445Sjjc 
1573606Smyers struct slit {
1583606Smyers 	struct table_header hdr;
1593606Smyers 	uint64_t number;
1603606Smyers 	uint8_t  entry[1];
1613606Smyers };
1623606Smyers 
1633606Smyers /*
1646445Sjjc  * Pointer to System Locality Information Table (SLIT)
1656445Sjjc  */
1666445Sjjc extern struct slit	*slit_ptr;
1676445Sjjc 
168*12004Sjiang.liu@intel.com struct msct_proximity_domain {
169*12004Sjiang.liu@intel.com 	uint8_t revision;
170*12004Sjiang.liu@intel.com 	uint8_t length;
171*12004Sjiang.liu@intel.com 	uint32_t domain_min;
172*12004Sjiang.liu@intel.com 	uint32_t domain_max;
173*12004Sjiang.liu@intel.com 	uint32_t processor_max;
174*12004Sjiang.liu@intel.com 	uint64_t memory_max;
175*12004Sjiang.liu@intel.com };
176*12004Sjiang.liu@intel.com 
177*12004Sjiang.liu@intel.com struct msct {
178*12004Sjiang.liu@intel.com 	struct table_header hdr;
179*12004Sjiang.liu@intel.com 	uint32_t proximity_domain_offset;
180*12004Sjiang.liu@intel.com 	uint32_t maximum_proximity_domains;
181*12004Sjiang.liu@intel.com 	uint32_t maximum_power_domains;
182*12004Sjiang.liu@intel.com 	uint64_t maximum_physical_address;
183*12004Sjiang.liu@intel.com };
184*12004Sjiang.liu@intel.com 
185*12004Sjiang.liu@intel.com /*
186*12004Sjiang.liu@intel.com  * Pointer to Maximum System Capability Table (MSCT)
187*12004Sjiang.liu@intel.com  */
188*12004Sjiang.liu@intel.com extern struct msct	*msct_ptr;
189*12004Sjiang.liu@intel.com 
19011245SZhijun.Fu@Sun.COM struct cfg_base_addr_alloc {
19111245SZhijun.Fu@Sun.COM 	uint64_t	base_addr;
19211245SZhijun.Fu@Sun.COM 	uint16_t	segment;
19311245SZhijun.Fu@Sun.COM 	uint8_t		start_bno;
19411245SZhijun.Fu@Sun.COM 	uint8_t		end_bno;
19511245SZhijun.Fu@Sun.COM 	uint32_t	reserved;
19611245SZhijun.Fu@Sun.COM };
19711245SZhijun.Fu@Sun.COM 
19811245SZhijun.Fu@Sun.COM struct mcfg {
19911245SZhijun.Fu@Sun.COM 	char		Signature[4];
20011245SZhijun.Fu@Sun.COM 	uint32_t	Length;
20111245SZhijun.Fu@Sun.COM 	uint8_t		Revision;
20211245SZhijun.Fu@Sun.COM 	uint8_t		Checksum;
20311245SZhijun.Fu@Sun.COM 	char		OemId[6];
20411245SZhijun.Fu@Sun.COM 	char		OemTableId[8];
20511245SZhijun.Fu@Sun.COM 	uint32_t	OemRevision;
20611245SZhijun.Fu@Sun.COM 	char		CreatorId[4];
20711245SZhijun.Fu@Sun.COM 	uint32_t	CreatorRevision;
20811245SZhijun.Fu@Sun.COM 	uint8_t		Reserved[8];
20911245SZhijun.Fu@Sun.COM 	struct cfg_base_addr_alloc	CfgBaseAddrAllocList[1];
21011245SZhijun.Fu@Sun.COM };
21111245SZhijun.Fu@Sun.COM 
2127589SVikram.Hegde@Sun.COM struct dmar {
2137589SVikram.Hegde@Sun.COM 	struct table_header hdr;
2147589SVikram.Hegde@Sun.COM 	uint8_t width;
2157589SVikram.Hegde@Sun.COM 	uint8_t flags;
2167589SVikram.Hegde@Sun.COM 	uint8_t rsvd[10];
2177589SVikram.Hegde@Sun.COM };
2187589SVikram.Hegde@Sun.COM 
2197589SVikram.Hegde@Sun.COM 
2206445Sjjc /*
2213606Smyers  * Arbitrary limit on number of localities we handle; if
2223606Smyers  * this limit is raised to more than UINT16_MAX, make sure
2233606Smyers  * process_slit() knows how to handle it.
2243606Smyers  */
2253606Smyers #define	SLIT_LOCALITIES_MAX	(4096)
2263606Smyers 
2273606Smyers #define	SLIT_NUM_PROPNAME	"acpi-slit-localities"
2283606Smyers #define	SLIT_PROPNAME		"acpi-slit"
2293446Smrj 
2303446Smrj #pragma pack()
2313446Smrj 
2323446Smrj #ifdef __cplusplus
2333446Smrj }
2343446Smrj #endif
2353446Smrj 
2363446Smrj #endif /* _ACPI_FW_H */
237