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