1197104Sjkim/****************************************************************************** 2197104Sjkim * 3219707Sjkim * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec) 4197104Sjkim * 5197104Sjkim *****************************************************************************/ 6197104Sjkim 7217365Sjkim/* 8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp. 9197104Sjkim * All rights reserved. 10197104Sjkim * 11217365Sjkim * Redistribution and use in source and binary forms, with or without 12217365Sjkim * modification, are permitted provided that the following conditions 13217365Sjkim * are met: 14217365Sjkim * 1. Redistributions of source code must retain the above copyright 15217365Sjkim * notice, this list of conditions, and the following disclaimer, 16217365Sjkim * without modification. 17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20217365Sjkim * including a substantially similar Disclaimer requirement for further 21217365Sjkim * binary redistribution. 22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23217365Sjkim * of any contributors may be used to endorse or promote products derived 24217365Sjkim * from this software without specific prior written permission. 25197104Sjkim * 26217365Sjkim * Alternatively, this software may be distributed under the terms of the 27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28217365Sjkim * Software Foundation. 29197104Sjkim * 30217365Sjkim * NO WARRANTY 31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 42217365Sjkim */ 43197104Sjkim 44197104Sjkim#ifndef __ACTBL2_H__ 45197104Sjkim#define __ACTBL2_H__ 46197104Sjkim 47197104Sjkim 48197104Sjkim/******************************************************************************* 49197104Sjkim * 50197104Sjkim * Additional ACPI Tables (2) 51197104Sjkim * 52197104Sjkim * These tables are not consumed directly by the ACPICA subsystem, but are 53197104Sjkim * included here to support device drivers and the AML disassembler. 54197104Sjkim * 55306536Sjkim * Generally, the tables in this file are defined by third-party specifications, 56306536Sjkim * and are not defined directly by the ACPI specification itself. 57197104Sjkim * 58197104Sjkim ******************************************************************************/ 59197104Sjkim 60197104Sjkim 61197104Sjkim/* 62197104Sjkim * Values for description table header signatures for tables defined in this 63197104Sjkim * file. Useful because they make it more difficult to inadvertently type in 64197104Sjkim * the wrong signature. 65197104Sjkim */ 66197104Sjkim#define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ 67197104Sjkim#define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ 68239340Sjkim#define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ 69239340Sjkim#define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ 70197104Sjkim#define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ 71197104Sjkim#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ 72197104Sjkim#define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ 73197104Sjkim#define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ 74284460Sjkim#define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ 75197104Sjkim#define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ 76281075Sdim#define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ 77197104Sjkim#define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ 78204773Sjkim#define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ 79281687Sjkim#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 80246849Sjkim#define ACPI_SIG_MTMR "MTMR" /* MID Timer table */ 81197104Sjkim#define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ 82197104Sjkim#define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ 83197104Sjkim#define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ 84197104Sjkim#define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ 85306536Sjkim#define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ 86197104Sjkim#define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ 87246849Sjkim#define ACPI_SIG_VRTC "VRTC" /* Virtual Real Time Clock Table */ 88197104Sjkim#define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ 89197104Sjkim#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ 90209746Sjkim#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ 91197104Sjkim#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ 92197104Sjkim 93209746Sjkim#ifdef ACPI_UNDEFINED_TABLES 94209746Sjkim/* 95209746Sjkim * These tables have been seen in the field, but no definition has been found 96209746Sjkim */ 97209746Sjkim#define ACPI_SIG_ATKG "ATKG" 98209746Sjkim#define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ 99209746Sjkim#define ACPI_SIG_IEIT "IEIT" 100209746Sjkim#endif 101197104Sjkim 102197104Sjkim/* 103197104Sjkim * All tables must be byte-packed to match the ACPI specification, since 104197104Sjkim * the tables are provided by the system BIOS. 105197104Sjkim */ 106197104Sjkim#pragma pack(1) 107197104Sjkim 108197104Sjkim/* 109239340Sjkim * Note: C bitfields are not used for this reason: 110239340Sjkim * 111239340Sjkim * "Bitfields are great and easy to read, but unfortunately the C language 112239340Sjkim * does not specify the layout of bitfields in memory, which means they are 113239340Sjkim * essentially useless for dealing with packed data in on-disk formats or 114239340Sjkim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 115239340Sjkim * this decision was a design error in C. Ritchie could have picked an order 116239340Sjkim * and stuck with it." Norman Ramsey. 117239340Sjkim * See http://stackoverflow.com/a/1053662/41661 118197104Sjkim */ 119197104Sjkim 120197104Sjkim 121197104Sjkim/******************************************************************************* 122197104Sjkim * 123197104Sjkim * ASF - Alert Standard Format table (Signature "ASF!") 124197104Sjkim * Revision 0x10 125197104Sjkim * 126197104Sjkim * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 127197104Sjkim * 128197104Sjkim ******************************************************************************/ 129197104Sjkim 130197104Sjkimtypedef struct acpi_table_asf 131197104Sjkim{ 132197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 133197104Sjkim 134197104Sjkim} ACPI_TABLE_ASF; 135197104Sjkim 136197104Sjkim 137197104Sjkim/* ASF subtable header */ 138197104Sjkim 139197104Sjkimtypedef struct acpi_asf_header 140197104Sjkim{ 141197104Sjkim UINT8 Type; 142197104Sjkim UINT8 Reserved; 143197104Sjkim UINT16 Length; 144197104Sjkim 145197104Sjkim} ACPI_ASF_HEADER; 146197104Sjkim 147197104Sjkim 148197104Sjkim/* Values for Type field above */ 149197104Sjkim 150197104Sjkimenum AcpiAsfType 151197104Sjkim{ 152197104Sjkim ACPI_ASF_TYPE_INFO = 0, 153197104Sjkim ACPI_ASF_TYPE_ALERT = 1, 154197104Sjkim ACPI_ASF_TYPE_CONTROL = 2, 155197104Sjkim ACPI_ASF_TYPE_BOOT = 3, 156197104Sjkim ACPI_ASF_TYPE_ADDRESS = 4, 157197104Sjkim ACPI_ASF_TYPE_RESERVED = 5 158197104Sjkim}; 159197104Sjkim 160197104Sjkim/* 161197104Sjkim * ASF subtables 162197104Sjkim */ 163197104Sjkim 164197104Sjkim/* 0: ASF Information */ 165197104Sjkim 166197104Sjkimtypedef struct acpi_asf_info 167197104Sjkim{ 168197104Sjkim ACPI_ASF_HEADER Header; 169197104Sjkim UINT8 MinResetValue; 170197104Sjkim UINT8 MinPollInterval; 171197104Sjkim UINT16 SystemId; 172197104Sjkim UINT32 MfgId; 173197104Sjkim UINT8 Flags; 174197104Sjkim UINT8 Reserved2[3]; 175197104Sjkim 176197104Sjkim} ACPI_ASF_INFO; 177197104Sjkim 178197104Sjkim/* Masks for Flags field above */ 179197104Sjkim 180197104Sjkim#define ACPI_ASF_SMBUS_PROTOCOLS (1) 181197104Sjkim 182197104Sjkim 183197104Sjkim/* 1: ASF Alerts */ 184197104Sjkim 185197104Sjkimtypedef struct acpi_asf_alert 186197104Sjkim{ 187197104Sjkim ACPI_ASF_HEADER Header; 188197104Sjkim UINT8 AssertMask; 189197104Sjkim UINT8 DeassertMask; 190197104Sjkim UINT8 Alerts; 191197104Sjkim UINT8 DataLength; 192197104Sjkim 193197104Sjkim} ACPI_ASF_ALERT; 194197104Sjkim 195197104Sjkimtypedef struct acpi_asf_alert_data 196197104Sjkim{ 197197104Sjkim UINT8 Address; 198197104Sjkim UINT8 Command; 199197104Sjkim UINT8 Mask; 200197104Sjkim UINT8 Value; 201197104Sjkim UINT8 SensorType; 202197104Sjkim UINT8 Type; 203197104Sjkim UINT8 Offset; 204197104Sjkim UINT8 SourceType; 205197104Sjkim UINT8 Severity; 206197104Sjkim UINT8 SensorNumber; 207197104Sjkim UINT8 Entity; 208197104Sjkim UINT8 Instance; 209197104Sjkim 210197104Sjkim} ACPI_ASF_ALERT_DATA; 211197104Sjkim 212197104Sjkim 213197104Sjkim/* 2: ASF Remote Control */ 214197104Sjkim 215197104Sjkimtypedef struct acpi_asf_remote 216197104Sjkim{ 217197104Sjkim ACPI_ASF_HEADER Header; 218197104Sjkim UINT8 Controls; 219197104Sjkim UINT8 DataLength; 220197104Sjkim UINT16 Reserved2; 221197104Sjkim 222197104Sjkim} ACPI_ASF_REMOTE; 223197104Sjkim 224197104Sjkimtypedef struct acpi_asf_control_data 225197104Sjkim{ 226197104Sjkim UINT8 Function; 227197104Sjkim UINT8 Address; 228197104Sjkim UINT8 Command; 229197104Sjkim UINT8 Value; 230197104Sjkim 231197104Sjkim} ACPI_ASF_CONTROL_DATA; 232197104Sjkim 233197104Sjkim 234197104Sjkim/* 3: ASF RMCP Boot Options */ 235197104Sjkim 236197104Sjkimtypedef struct acpi_asf_rmcp 237197104Sjkim{ 238197104Sjkim ACPI_ASF_HEADER Header; 239197104Sjkim UINT8 Capabilities[7]; 240197104Sjkim UINT8 CompletionCode; 241197104Sjkim UINT32 EnterpriseId; 242197104Sjkim UINT8 Command; 243197104Sjkim UINT16 Parameter; 244197104Sjkim UINT16 BootOptions; 245197104Sjkim UINT16 OemParameters; 246197104Sjkim 247197104Sjkim} ACPI_ASF_RMCP; 248197104Sjkim 249197104Sjkim 250197104Sjkim/* 4: ASF Address */ 251197104Sjkim 252197104Sjkimtypedef struct acpi_asf_address 253197104Sjkim{ 254197104Sjkim ACPI_ASF_HEADER Header; 255197104Sjkim UINT8 EpromAddress; 256197104Sjkim UINT8 Devices; 257197104Sjkim 258197104Sjkim} ACPI_ASF_ADDRESS; 259197104Sjkim 260197104Sjkim 261197104Sjkim/******************************************************************************* 262197104Sjkim * 263197104Sjkim * BOOT - Simple Boot Flag Table 264197104Sjkim * Version 1 265197104Sjkim * 266197104Sjkim * Conforms to the "Simple Boot Flag Specification", Version 2.1 267197104Sjkim * 268197104Sjkim ******************************************************************************/ 269197104Sjkim 270197104Sjkimtypedef struct acpi_table_boot 271197104Sjkim{ 272197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 273197104Sjkim UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ 274197104Sjkim UINT8 Reserved[3]; 275197104Sjkim 276197104Sjkim} ACPI_TABLE_BOOT; 277197104Sjkim 278197104Sjkim 279197104Sjkim/******************************************************************************* 280197104Sjkim * 281239340Sjkim * CSRT - Core System Resource Table 282239340Sjkim * Version 0 283239340Sjkim * 284239340Sjkim * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 285239340Sjkim * 286239340Sjkim ******************************************************************************/ 287239340Sjkim 288239340Sjkimtypedef struct acpi_table_csrt 289239340Sjkim{ 290239340Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 291239340Sjkim 292239340Sjkim} ACPI_TABLE_CSRT; 293239340Sjkim 294245582Sjkim 295239340Sjkim/* Resource Group subtable */ 296239340Sjkim 297239340Sjkimtypedef struct acpi_csrt_group 298239340Sjkim{ 299239340Sjkim UINT32 Length; 300239340Sjkim UINT32 VendorId; 301239340Sjkim UINT32 SubvendorId; 302239340Sjkim UINT16 DeviceId; 303239340Sjkim UINT16 SubdeviceId; 304239340Sjkim UINT16 Revision; 305239340Sjkim UINT16 Reserved; 306245582Sjkim UINT32 SharedInfoLength; 307239340Sjkim 308245582Sjkim /* Shared data immediately follows (Length = SharedInfoLength) */ 309239340Sjkim 310239340Sjkim} ACPI_CSRT_GROUP; 311239340Sjkim 312245582Sjkim/* Shared Info subtable */ 313245582Sjkim 314245582Sjkimtypedef struct acpi_csrt_shared_info 315245582Sjkim{ 316245582Sjkim UINT16 MajorVersion; 317245582Sjkim UINT16 MinorVersion; 318245582Sjkim UINT32 MmioBaseLow; 319245582Sjkim UINT32 MmioBaseHigh; 320245582Sjkim UINT32 GsiInterrupt; 321245582Sjkim UINT8 InterruptPolarity; 322245582Sjkim UINT8 InterruptMode; 323245582Sjkim UINT8 NumChannels; 324245582Sjkim UINT8 DmaAddressWidth; 325245582Sjkim UINT16 BaseRequestLine; 326245582Sjkim UINT16 NumHandshakeSignals; 327245582Sjkim UINT32 MaxBlockSize; 328245582Sjkim 329245582Sjkim /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ 330245582Sjkim 331245582Sjkim} ACPI_CSRT_SHARED_INFO; 332245582Sjkim 333239340Sjkim/* Resource Descriptor subtable */ 334239340Sjkim 335239340Sjkimtypedef struct acpi_csrt_descriptor 336239340Sjkim{ 337239340Sjkim UINT32 Length; 338239340Sjkim UINT16 Type; 339239340Sjkim UINT16 Subtype; 340239340Sjkim UINT32 Uid; 341239340Sjkim 342239340Sjkim /* Resource-specific information immediately follows */ 343239340Sjkim 344239340Sjkim} ACPI_CSRT_DESCRIPTOR; 345239340Sjkim 346239340Sjkim 347239340Sjkim/* Resource Types */ 348239340Sjkim 349239340Sjkim#define ACPI_CSRT_TYPE_INTERRUPT 0x0001 350239340Sjkim#define ACPI_CSRT_TYPE_TIMER 0x0002 351239340Sjkim#define ACPI_CSRT_TYPE_DMA 0x0003 352239340Sjkim 353239340Sjkim/* Resource Subtypes */ 354239340Sjkim 355239340Sjkim#define ACPI_CSRT_XRUPT_LINE 0x0000 356239340Sjkim#define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 357239340Sjkim#define ACPI_CSRT_TIMER 0x0000 358239340Sjkim#define ACPI_CSRT_DMA_CHANNEL 0x0000 359239340Sjkim#define ACPI_CSRT_DMA_CONTROLLER 0x0001 360239340Sjkim 361239340Sjkim 362239340Sjkim/******************************************************************************* 363239340Sjkim * 364239340Sjkim * DBG2 - Debug Port Table 2 365239340Sjkim * Version 0 (Both main table and subtables) 366239340Sjkim * 367306536Sjkim * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 368239340Sjkim * 369239340Sjkim ******************************************************************************/ 370239340Sjkim 371239340Sjkimtypedef struct acpi_table_dbg2 372239340Sjkim{ 373239340Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 374239340Sjkim UINT32 InfoOffset; 375239340Sjkim UINT32 InfoCount; 376239340Sjkim 377239340Sjkim} ACPI_TABLE_DBG2; 378239340Sjkim 379239340Sjkim 380281075Sdimtypedef struct acpi_dbg2_header 381281075Sdim{ 382281075Sdim UINT32 InfoOffset; 383281075Sdim UINT32 InfoCount; 384281075Sdim 385281075Sdim} ACPI_DBG2_HEADER; 386281075Sdim 387281075Sdim 388239340Sjkim/* Debug Device Information Subtable */ 389239340Sjkim 390239340Sjkimtypedef struct acpi_dbg2_device 391239340Sjkim{ 392239340Sjkim UINT8 Revision; 393239340Sjkim UINT16 Length; 394239340Sjkim UINT8 RegisterCount; /* Number of BaseAddress registers */ 395239340Sjkim UINT16 NamepathLength; 396239340Sjkim UINT16 NamepathOffset; 397239340Sjkim UINT16 OemDataLength; 398239340Sjkim UINT16 OemDataOffset; 399239340Sjkim UINT16 PortType; 400239340Sjkim UINT16 PortSubtype; 401239340Sjkim UINT16 Reserved; 402239340Sjkim UINT16 BaseAddressOffset; 403239340Sjkim UINT16 AddressSizeOffset; 404239340Sjkim /* 405239340Sjkim * Data that follows: 406239340Sjkim * BaseAddress (required) - Each in 12-byte Generic Address Structure format. 407239340Sjkim * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. 408239340Sjkim * Namepath (required) - Null terminated string. Single dot if not supported. 409239340Sjkim * OemData (optional) - Length is OemDataLength. 410239340Sjkim */ 411239340Sjkim} ACPI_DBG2_DEVICE; 412239340Sjkim 413239340Sjkim/* Types for PortType field above */ 414239340Sjkim 415239340Sjkim#define ACPI_DBG2_SERIAL_PORT 0x8000 416239340Sjkim#define ACPI_DBG2_1394_PORT 0x8001 417239340Sjkim#define ACPI_DBG2_USB_PORT 0x8002 418239340Sjkim#define ACPI_DBG2_NET_PORT 0x8003 419239340Sjkim 420239340Sjkim/* Subtypes for PortSubtype field above */ 421239340Sjkim 422239340Sjkim#define ACPI_DBG2_16550_COMPATIBLE 0x0000 423239340Sjkim#define ACPI_DBG2_16550_SUBSET 0x0001 424306536Sjkim#define ACPI_DBG2_ARM_PL011 0x0003 425306536Sjkim#define ACPI_DBG2_ARM_SBSA_32BIT 0x000D 426306536Sjkim#define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E 427306536Sjkim#define ACPI_DBG2_ARM_DCC 0x000F 428306536Sjkim#define ACPI_DBG2_BCM2835 0x0010 429239340Sjkim 430239340Sjkim#define ACPI_DBG2_1394_STANDARD 0x0000 431239340Sjkim 432239340Sjkim#define ACPI_DBG2_USB_XHCI 0x0000 433239340Sjkim#define ACPI_DBG2_USB_EHCI 0x0001 434239340Sjkim 435239340Sjkim 436239340Sjkim/******************************************************************************* 437239340Sjkim * 438197104Sjkim * DBGP - Debug Port table 439197104Sjkim * Version 1 440197104Sjkim * 441197104Sjkim * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 442197104Sjkim * 443197104Sjkim ******************************************************************************/ 444197104Sjkim 445197104Sjkimtypedef struct acpi_table_dbgp 446197104Sjkim{ 447197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 448197104Sjkim UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ 449197104Sjkim UINT8 Reserved[3]; 450197104Sjkim ACPI_GENERIC_ADDRESS DebugPort; 451197104Sjkim 452197104Sjkim} ACPI_TABLE_DBGP; 453197104Sjkim 454197104Sjkim 455197104Sjkim/******************************************************************************* 456197104Sjkim * 457197104Sjkim * DMAR - DMA Remapping table 458197104Sjkim * Version 1 459197104Sjkim * 460197104Sjkim * Conforms to "Intel Virtualization Technology for Directed I/O", 461306536Sjkim * Version 2.3, October 2014 462197104Sjkim * 463197104Sjkim ******************************************************************************/ 464197104Sjkim 465197104Sjkimtypedef struct acpi_table_dmar 466197104Sjkim{ 467197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 468197104Sjkim UINT8 Width; /* Host Address Width */ 469197104Sjkim UINT8 Flags; 470197104Sjkim UINT8 Reserved[10]; 471197104Sjkim 472197104Sjkim} ACPI_TABLE_DMAR; 473197104Sjkim 474197104Sjkim/* Masks for Flags field above */ 475197104Sjkim 476197104Sjkim#define ACPI_DMAR_INTR_REMAP (1) 477306536Sjkim#define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) 478306536Sjkim#define ACPI_DMAR_X2APIC_MODE (1<<2) 479197104Sjkim 480197104Sjkim 481197104Sjkim/* DMAR subtable header */ 482197104Sjkim 483197104Sjkimtypedef struct acpi_dmar_header 484197104Sjkim{ 485197104Sjkim UINT16 Type; 486197104Sjkim UINT16 Length; 487197104Sjkim 488197104Sjkim} ACPI_DMAR_HEADER; 489197104Sjkim 490197104Sjkim/* Values for subtable type in ACPI_DMAR_HEADER */ 491197104Sjkim 492197104Sjkimenum AcpiDmarType 493197104Sjkim{ 494197104Sjkim ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, 495197104Sjkim ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, 496281075Sdim ACPI_DMAR_TYPE_ROOT_ATS = 2, 497281075Sdim ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, 498281075Sdim ACPI_DMAR_TYPE_NAMESPACE = 4, 499281075Sdim ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ 500197104Sjkim}; 501197104Sjkim 502197104Sjkim 503197104Sjkim/* DMAR Device Scope structure */ 504197104Sjkim 505197104Sjkimtypedef struct acpi_dmar_device_scope 506197104Sjkim{ 507197104Sjkim UINT8 EntryType; 508197104Sjkim UINT8 Length; 509197104Sjkim UINT16 Reserved; 510197104Sjkim UINT8 EnumerationId; 511197104Sjkim UINT8 Bus; 512197104Sjkim 513197104Sjkim} ACPI_DMAR_DEVICE_SCOPE; 514197104Sjkim 515281075Sdim/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ 516197104Sjkim 517197104Sjkimenum AcpiDmarScopeType 518197104Sjkim{ 519197104Sjkim ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, 520197104Sjkim ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, 521197104Sjkim ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, 522197104Sjkim ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, 523197104Sjkim ACPI_DMAR_SCOPE_TYPE_HPET = 4, 524281075Sdim ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, 525281075Sdim ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 526197104Sjkim}; 527197104Sjkim 528197104Sjkimtypedef struct acpi_dmar_pci_path 529197104Sjkim{ 530197104Sjkim UINT8 Device; 531197104Sjkim UINT8 Function; 532197104Sjkim 533197104Sjkim} ACPI_DMAR_PCI_PATH; 534197104Sjkim 535197104Sjkim 536197104Sjkim/* 537281075Sdim * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER 538197104Sjkim */ 539197104Sjkim 540197104Sjkim/* 0: Hardware Unit Definition */ 541197104Sjkim 542197104Sjkimtypedef struct acpi_dmar_hardware_unit 543197104Sjkim{ 544197104Sjkim ACPI_DMAR_HEADER Header; 545197104Sjkim UINT8 Flags; 546197104Sjkim UINT8 Reserved; 547197104Sjkim UINT16 Segment; 548197104Sjkim UINT64 Address; /* Register Base Address */ 549197104Sjkim 550197104Sjkim} ACPI_DMAR_HARDWARE_UNIT; 551197104Sjkim 552197104Sjkim/* Masks for Flags field above */ 553197104Sjkim 554197104Sjkim#define ACPI_DMAR_INCLUDE_ALL (1) 555197104Sjkim 556197104Sjkim 557197104Sjkim/* 1: Reserved Memory Defininition */ 558197104Sjkim 559197104Sjkimtypedef struct acpi_dmar_reserved_memory 560197104Sjkim{ 561197104Sjkim ACPI_DMAR_HEADER Header; 562197104Sjkim UINT16 Reserved; 563197104Sjkim UINT16 Segment; 564197104Sjkim UINT64 BaseAddress; /* 4K aligned base address */ 565197104Sjkim UINT64 EndAddress; /* 4K aligned limit address */ 566197104Sjkim 567197104Sjkim} ACPI_DMAR_RESERVED_MEMORY; 568197104Sjkim 569197104Sjkim/* Masks for Flags field above */ 570197104Sjkim 571197104Sjkim#define ACPI_DMAR_ALLOW_ALL (1) 572197104Sjkim 573197104Sjkim 574197104Sjkim/* 2: Root Port ATS Capability Reporting Structure */ 575197104Sjkim 576197104Sjkimtypedef struct acpi_dmar_atsr 577197104Sjkim{ 578197104Sjkim ACPI_DMAR_HEADER Header; 579197104Sjkim UINT8 Flags; 580197104Sjkim UINT8 Reserved; 581197104Sjkim UINT16 Segment; 582197104Sjkim 583197104Sjkim} ACPI_DMAR_ATSR; 584197104Sjkim 585197104Sjkim/* Masks for Flags field above */ 586197104Sjkim 587197104Sjkim#define ACPI_DMAR_ALL_PORTS (1) 588197104Sjkim 589197104Sjkim 590197104Sjkim/* 3: Remapping Hardware Static Affinity Structure */ 591197104Sjkim 592197104Sjkimtypedef struct acpi_dmar_rhsa 593197104Sjkim{ 594197104Sjkim ACPI_DMAR_HEADER Header; 595197104Sjkim UINT32 Reserved; 596197104Sjkim UINT64 BaseAddress; 597197104Sjkim UINT32 ProximityDomain; 598197104Sjkim 599197104Sjkim} ACPI_DMAR_RHSA; 600197104Sjkim 601197104Sjkim 602281075Sdim/* 4: ACPI Namespace Device Declaration Structure */ 603281075Sdim 604281075Sdimtypedef struct acpi_dmar_andd 605281075Sdim{ 606281075Sdim ACPI_DMAR_HEADER Header; 607281075Sdim UINT8 Reserved[3]; 608281075Sdim UINT8 DeviceNumber; 609281075Sdim char DeviceName[1]; 610281075Sdim 611281075Sdim} ACPI_DMAR_ANDD; 612281075Sdim 613281075Sdim 614197104Sjkim/******************************************************************************* 615197104Sjkim * 616197104Sjkim * HPET - High Precision Event Timer table 617197104Sjkim * Version 1 618197104Sjkim * 619197104Sjkim * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", 620197104Sjkim * Version 1.0a, October 2004 621197104Sjkim * 622197104Sjkim ******************************************************************************/ 623197104Sjkim 624197104Sjkimtypedef struct acpi_table_hpet 625197104Sjkim{ 626197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 627197104Sjkim UINT32 Id; /* Hardware ID of event timer block */ 628197104Sjkim ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ 629197104Sjkim UINT8 Sequence; /* HPET sequence number */ 630197104Sjkim UINT16 MinimumTick; /* Main counter min tick, periodic mode */ 631197104Sjkim UINT8 Flags; 632197104Sjkim 633197104Sjkim} ACPI_TABLE_HPET; 634197104Sjkim 635197104Sjkim/* Masks for Flags field above */ 636197104Sjkim 637197104Sjkim#define ACPI_HPET_PAGE_PROTECT_MASK (3) 638197104Sjkim 639197104Sjkim/* Values for Page Protect flags */ 640197104Sjkim 641197104Sjkimenum AcpiHpetPageProtect 642197104Sjkim{ 643197104Sjkim ACPI_HPET_NO_PAGE_PROTECT = 0, 644197104Sjkim ACPI_HPET_PAGE_PROTECT4 = 1, 645197104Sjkim ACPI_HPET_PAGE_PROTECT64 = 2 646197104Sjkim}; 647197104Sjkim 648197104Sjkim 649197104Sjkim/******************************************************************************* 650197104Sjkim * 651197104Sjkim * IBFT - Boot Firmware Table 652197104Sjkim * Version 1 653197104Sjkim * 654197104Sjkim * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b 655197104Sjkim * Specification", Version 1.01, March 1, 2007 656197104Sjkim * 657197104Sjkim * Note: It appears that this table is not intended to appear in the RSDT/XSDT. 658197104Sjkim * Therefore, it is not currently supported by the disassembler. 659197104Sjkim * 660197104Sjkim ******************************************************************************/ 661197104Sjkim 662197104Sjkimtypedef struct acpi_table_ibft 663197104Sjkim{ 664197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 665197104Sjkim UINT8 Reserved[12]; 666197104Sjkim 667197104Sjkim} ACPI_TABLE_IBFT; 668197104Sjkim 669197104Sjkim 670197104Sjkim/* IBFT common subtable header */ 671197104Sjkim 672197104Sjkimtypedef struct acpi_ibft_header 673197104Sjkim{ 674197104Sjkim UINT8 Type; 675197104Sjkim UINT8 Version; 676197104Sjkim UINT16 Length; 677197104Sjkim UINT8 Index; 678197104Sjkim UINT8 Flags; 679197104Sjkim 680197104Sjkim} ACPI_IBFT_HEADER; 681197104Sjkim 682197104Sjkim/* Values for Type field above */ 683197104Sjkim 684197104Sjkimenum AcpiIbftType 685197104Sjkim{ 686197104Sjkim ACPI_IBFT_TYPE_NOT_USED = 0, 687197104Sjkim ACPI_IBFT_TYPE_CONTROL = 1, 688197104Sjkim ACPI_IBFT_TYPE_INITIATOR = 2, 689197104Sjkim ACPI_IBFT_TYPE_NIC = 3, 690197104Sjkim ACPI_IBFT_TYPE_TARGET = 4, 691197104Sjkim ACPI_IBFT_TYPE_EXTENSIONS = 5, 692197104Sjkim ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 693197104Sjkim}; 694197104Sjkim 695197104Sjkim 696197104Sjkim/* IBFT subtables */ 697197104Sjkim 698197104Sjkimtypedef struct acpi_ibft_control 699197104Sjkim{ 700197104Sjkim ACPI_IBFT_HEADER Header; 701197104Sjkim UINT16 Extensions; 702197104Sjkim UINT16 InitiatorOffset; 703197104Sjkim UINT16 Nic0Offset; 704197104Sjkim UINT16 Target0Offset; 705197104Sjkim UINT16 Nic1Offset; 706197104Sjkim UINT16 Target1Offset; 707197104Sjkim 708197104Sjkim} ACPI_IBFT_CONTROL; 709197104Sjkim 710197104Sjkimtypedef struct acpi_ibft_initiator 711197104Sjkim{ 712197104Sjkim ACPI_IBFT_HEADER Header; 713197104Sjkim UINT8 SnsServer[16]; 714197104Sjkim UINT8 SlpServer[16]; 715197104Sjkim UINT8 PrimaryServer[16]; 716197104Sjkim UINT8 SecondaryServer[16]; 717197104Sjkim UINT16 NameLength; 718197104Sjkim UINT16 NameOffset; 719197104Sjkim 720197104Sjkim} ACPI_IBFT_INITIATOR; 721197104Sjkim 722197104Sjkimtypedef struct acpi_ibft_nic 723197104Sjkim{ 724197104Sjkim ACPI_IBFT_HEADER Header; 725197104Sjkim UINT8 IpAddress[16]; 726197104Sjkim UINT8 SubnetMaskPrefix; 727197104Sjkim UINT8 Origin; 728197104Sjkim UINT8 Gateway[16]; 729197104Sjkim UINT8 PrimaryDns[16]; 730197104Sjkim UINT8 SecondaryDns[16]; 731197104Sjkim UINT8 Dhcp[16]; 732197104Sjkim UINT16 Vlan; 733197104Sjkim UINT8 MacAddress[6]; 734197104Sjkim UINT16 PciAddress; 735197104Sjkim UINT16 NameLength; 736197104Sjkim UINT16 NameOffset; 737197104Sjkim 738197104Sjkim} ACPI_IBFT_NIC; 739197104Sjkim 740197104Sjkimtypedef struct acpi_ibft_target 741197104Sjkim{ 742197104Sjkim ACPI_IBFT_HEADER Header; 743197104Sjkim UINT8 TargetIpAddress[16]; 744197104Sjkim UINT16 TargetIpSocket; 745197104Sjkim UINT8 TargetBootLun[8]; 746197104Sjkim UINT8 ChapType; 747197104Sjkim UINT8 NicAssociation; 748197104Sjkim UINT16 TargetNameLength; 749197104Sjkim UINT16 TargetNameOffset; 750197104Sjkim UINT16 ChapNameLength; 751197104Sjkim UINT16 ChapNameOffset; 752197104Sjkim UINT16 ChapSecretLength; 753197104Sjkim UINT16 ChapSecretOffset; 754197104Sjkim UINT16 ReverseChapNameLength; 755197104Sjkim UINT16 ReverseChapNameOffset; 756197104Sjkim UINT16 ReverseChapSecretLength; 757197104Sjkim UINT16 ReverseChapSecretOffset; 758197104Sjkim 759197104Sjkim} ACPI_IBFT_TARGET; 760197104Sjkim 761197104Sjkim 762197104Sjkim/******************************************************************************* 763197104Sjkim * 764284460Sjkim * IORT - IO Remapping Table 765284460Sjkim * 766284460Sjkim * Conforms to "IO Remapping Table System Software on ARM Platforms", 767306536Sjkim * Document number: ARM DEN 0049B, October 2015 768284460Sjkim * 769284460Sjkim ******************************************************************************/ 770284460Sjkim 771284460Sjkimtypedef struct acpi_table_iort 772284460Sjkim{ 773284460Sjkim ACPI_TABLE_HEADER Header; 774284460Sjkim UINT32 NodeCount; 775284460Sjkim UINT32 NodeOffset; 776284460Sjkim UINT32 Reserved; 777284460Sjkim 778284460Sjkim} ACPI_TABLE_IORT; 779284460Sjkim 780284460Sjkim 781284460Sjkim/* 782284460Sjkim * IORT subtables 783284460Sjkim */ 784284460Sjkimtypedef struct acpi_iort_node 785284460Sjkim{ 786284460Sjkim UINT8 Type; 787284460Sjkim UINT16 Length; 788284460Sjkim UINT8 Revision; 789284460Sjkim UINT32 Reserved; 790284460Sjkim UINT32 MappingCount; 791284460Sjkim UINT32 MappingOffset; 792284460Sjkim char NodeData[1]; 793284460Sjkim 794284460Sjkim} ACPI_IORT_NODE; 795284460Sjkim 796284460Sjkim/* Values for subtable Type above */ 797284460Sjkim 798284460Sjkimenum AcpiIortNodeType 799284460Sjkim{ 800284460Sjkim ACPI_IORT_NODE_ITS_GROUP = 0x00, 801284460Sjkim ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, 802284460Sjkim ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, 803306536Sjkim ACPI_IORT_NODE_SMMU = 0x03, 804306536Sjkim ACPI_IORT_NODE_SMMU_V3 = 0x04 805284460Sjkim}; 806284460Sjkim 807284460Sjkim 808284460Sjkimtypedef struct acpi_iort_id_mapping 809284460Sjkim{ 810284460Sjkim UINT32 InputBase; /* Lowest value in input range */ 811284460Sjkim UINT32 IdCount; /* Number of IDs */ 812284460Sjkim UINT32 OutputBase; /* Lowest value in output range */ 813284460Sjkim UINT32 OutputReference; /* A reference to the output node */ 814284460Sjkim UINT32 Flags; 815284460Sjkim 816284460Sjkim} ACPI_IORT_ID_MAPPING; 817284460Sjkim 818284460Sjkim/* Masks for Flags field above for IORT subtable */ 819284460Sjkim 820284460Sjkim#define ACPI_IORT_ID_SINGLE_MAPPING (1) 821284460Sjkim 822284460Sjkim 823284460Sjkimtypedef struct acpi_iort_memory_access 824284460Sjkim{ 825284460Sjkim UINT32 CacheCoherency; 826284460Sjkim UINT8 Hints; 827284460Sjkim UINT16 Reserved; 828284460Sjkim UINT8 MemoryFlags; 829284460Sjkim 830284460Sjkim} ACPI_IORT_MEMORY_ACCESS; 831284460Sjkim 832284460Sjkim/* Values for CacheCoherency field above */ 833284460Sjkim 834284460Sjkim#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ 835284460Sjkim#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ 836284460Sjkim 837284460Sjkim/* Masks for Hints field above */ 838284460Sjkim 839284460Sjkim#define ACPI_IORT_HT_TRANSIENT (1) 840284460Sjkim#define ACPI_IORT_HT_WRITE (1<<1) 841284460Sjkim#define ACPI_IORT_HT_READ (1<<2) 842284460Sjkim#define ACPI_IORT_HT_OVERRIDE (1<<3) 843284460Sjkim 844284460Sjkim/* Masks for MemoryFlags field above */ 845284460Sjkim 846284460Sjkim#define ACPI_IORT_MF_COHERENCY (1) 847284460Sjkim#define ACPI_IORT_MF_ATTRIBUTES (1<<1) 848284460Sjkim 849284460Sjkim 850284460Sjkim/* 851284460Sjkim * IORT node specific subtables 852284460Sjkim */ 853284460Sjkimtypedef struct acpi_iort_its_group 854284460Sjkim{ 855284460Sjkim UINT32 ItsCount; 856284460Sjkim UINT32 Identifiers[1]; /* GIC ITS identifier arrary */ 857284460Sjkim 858284460Sjkim} ACPI_IORT_ITS_GROUP; 859284460Sjkim 860284460Sjkim 861284460Sjkimtypedef struct acpi_iort_named_component 862284460Sjkim{ 863284460Sjkim UINT32 NodeFlags; 864284460Sjkim UINT64 MemoryProperties; /* Memory access properties */ 865284460Sjkim UINT8 MemoryAddressLimit; /* Memory address size limit */ 866284460Sjkim char DeviceName[1]; /* Path of namespace object */ 867284460Sjkim 868284460Sjkim} ACPI_IORT_NAMED_COMPONENT; 869284460Sjkim 870284460Sjkim 871284460Sjkimtypedef struct acpi_iort_root_complex 872284460Sjkim{ 873284460Sjkim UINT64 MemoryProperties; /* Memory access properties */ 874284460Sjkim UINT32 AtsAttribute; 875284460Sjkim UINT32 PciSegmentNumber; 876284460Sjkim 877284460Sjkim} ACPI_IORT_ROOT_COMPLEX; 878284460Sjkim 879284460Sjkim/* Values for AtsAttribute field above */ 880284460Sjkim 881284460Sjkim#define ACPI_IORT_ATS_SUPPORTED 0x00000001 /* The root complex supports ATS */ 882284460Sjkim#define ACPI_IORT_ATS_UNSUPPORTED 0x00000000 /* The root complex doesn't support ATS */ 883284460Sjkim 884284460Sjkim 885284460Sjkimtypedef struct acpi_iort_smmu 886284460Sjkim{ 887284460Sjkim UINT64 BaseAddress; /* SMMU base address */ 888284460Sjkim UINT64 Span; /* Length of memory range */ 889284460Sjkim UINT32 Model; 890284460Sjkim UINT32 Flags; 891284460Sjkim UINT32 GlobalInterruptOffset; 892284460Sjkim UINT32 ContextInterruptCount; 893284460Sjkim UINT32 ContextInterruptOffset; 894284460Sjkim UINT32 PmuInterruptCount; 895284460Sjkim UINT32 PmuInterruptOffset; 896284460Sjkim UINT64 Interrupts[1]; /* Interrupt array */ 897284460Sjkim 898284460Sjkim} ACPI_IORT_SMMU; 899284460Sjkim 900284460Sjkim/* Values for Model field above */ 901284460Sjkim 902284460Sjkim#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ 903284460Sjkim#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ 904284460Sjkim#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ 905284460Sjkim#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ 906284460Sjkim 907284460Sjkim/* Masks for Flags field above */ 908284460Sjkim 909284460Sjkim#define ACPI_IORT_SMMU_DVM_SUPPORTED (1) 910284460Sjkim#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) 911284460Sjkim 912284460Sjkim 913306536Sjkimtypedef struct acpi_iort_smmu_v3 914306536Sjkim{ 915306536Sjkim UINT64 BaseAddress; /* SMMUv3 base address */ 916306536Sjkim UINT32 Flags; 917306536Sjkim UINT32 Reserved; 918306536Sjkim UINT64 VatosAddress; 919306536Sjkim UINT32 Model; /* O: generic SMMUv3 */ 920306536Sjkim UINT32 EventGsiv; 921306536Sjkim UINT32 PriGsiv; 922306536Sjkim UINT32 GerrGsiv; 923306536Sjkim UINT32 SyncGsiv; 924306536Sjkim 925306536Sjkim} ACPI_IORT_SMMU_V3; 926306536Sjkim 927306536Sjkim/* Masks for Flags field above */ 928306536Sjkim 929306536Sjkim#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) 930306536Sjkim#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (1<<1) 931306536Sjkim 932306536Sjkim 933284460Sjkim/******************************************************************************* 934284460Sjkim * 935197104Sjkim * IVRS - I/O Virtualization Reporting Structure 936197104Sjkim * Version 1 937197104Sjkim * 938197104Sjkim * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", 939197104Sjkim * Revision 1.26, February 2009. 940197104Sjkim * 941197104Sjkim ******************************************************************************/ 942197104Sjkim 943197104Sjkimtypedef struct acpi_table_ivrs 944197104Sjkim{ 945197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 946197104Sjkim UINT32 Info; /* Common virtualization info */ 947197104Sjkim UINT64 Reserved; 948197104Sjkim 949197104Sjkim} ACPI_TABLE_IVRS; 950197104Sjkim 951197104Sjkim/* Values for Info field above */ 952197104Sjkim 953197104Sjkim#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ 954197104Sjkim#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ 955197104Sjkim#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ 956197104Sjkim 957197104Sjkim 958197104Sjkim/* IVRS subtable header */ 959197104Sjkim 960197104Sjkimtypedef struct acpi_ivrs_header 961197104Sjkim{ 962197104Sjkim UINT8 Type; /* Subtable type */ 963197104Sjkim UINT8 Flags; 964197104Sjkim UINT16 Length; /* Subtable length */ 965197104Sjkim UINT16 DeviceId; /* ID of IOMMU */ 966197104Sjkim 967197104Sjkim} ACPI_IVRS_HEADER; 968197104Sjkim 969197104Sjkim/* Values for subtable Type above */ 970197104Sjkim 971197104Sjkimenum AcpiIvrsType 972197104Sjkim{ 973197104Sjkim ACPI_IVRS_TYPE_HARDWARE = 0x10, 974197104Sjkim ACPI_IVRS_TYPE_MEMORY1 = 0x20, 975197104Sjkim ACPI_IVRS_TYPE_MEMORY2 = 0x21, 976197104Sjkim ACPI_IVRS_TYPE_MEMORY3 = 0x22 977197104Sjkim}; 978197104Sjkim 979197104Sjkim/* Masks for Flags field above for IVHD subtable */ 980197104Sjkim 981197104Sjkim#define ACPI_IVHD_TT_ENABLE (1) 982197104Sjkim#define ACPI_IVHD_PASS_PW (1<<1) 983197104Sjkim#define ACPI_IVHD_RES_PASS_PW (1<<2) 984197104Sjkim#define ACPI_IVHD_ISOC (1<<3) 985197104Sjkim#define ACPI_IVHD_IOTLB (1<<4) 986197104Sjkim 987197104Sjkim/* Masks for Flags field above for IVMD subtable */ 988197104Sjkim 989197104Sjkim#define ACPI_IVMD_UNITY (1) 990197104Sjkim#define ACPI_IVMD_READ (1<<1) 991197104Sjkim#define ACPI_IVMD_WRITE (1<<2) 992197104Sjkim#define ACPI_IVMD_EXCLUSION_RANGE (1<<3) 993197104Sjkim 994197104Sjkim 995197104Sjkim/* 996197104Sjkim * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER 997197104Sjkim */ 998197104Sjkim 999197104Sjkim/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ 1000197104Sjkim 1001197104Sjkimtypedef struct acpi_ivrs_hardware 1002197104Sjkim{ 1003197104Sjkim ACPI_IVRS_HEADER Header; 1004197104Sjkim UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 1005197104Sjkim UINT64 BaseAddress; /* IOMMU control registers */ 1006197104Sjkim UINT16 PciSegmentGroup; 1007197104Sjkim UINT16 Info; /* MSI number and unit ID */ 1008197104Sjkim UINT32 Reserved; 1009197104Sjkim 1010197104Sjkim} ACPI_IVRS_HARDWARE; 1011197104Sjkim 1012197104Sjkim/* Masks for Info field above */ 1013197104Sjkim 1014197104Sjkim#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ 1015197104Sjkim#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ 1016197104Sjkim 1017197104Sjkim 1018197104Sjkim/* 1019197104Sjkim * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. 1020197104Sjkim * Upper two bits of the Type field are the (encoded) length of the structure. 1021197104Sjkim * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries 1022197104Sjkim * are reserved for future use but not defined. 1023197104Sjkim */ 1024197104Sjkimtypedef struct acpi_ivrs_de_header 1025197104Sjkim{ 1026197104Sjkim UINT8 Type; 1027197104Sjkim UINT16 Id; 1028197104Sjkim UINT8 DataSetting; 1029197104Sjkim 1030197104Sjkim} ACPI_IVRS_DE_HEADER; 1031197104Sjkim 1032197104Sjkim/* Length of device entry is in the top two bits of Type field above */ 1033197104Sjkim 1034197104Sjkim#define ACPI_IVHD_ENTRY_LENGTH 0xC0 1035197104Sjkim 1036197104Sjkim/* Values for device entry Type field above */ 1037197104Sjkim 1038197104Sjkimenum AcpiIvrsDeviceEntryType 1039197104Sjkim{ 1040197104Sjkim /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ 1041197104Sjkim 1042197104Sjkim ACPI_IVRS_TYPE_PAD4 = 0, 1043197104Sjkim ACPI_IVRS_TYPE_ALL = 1, 1044197104Sjkim ACPI_IVRS_TYPE_SELECT = 2, 1045197104Sjkim ACPI_IVRS_TYPE_START = 3, 1046197104Sjkim ACPI_IVRS_TYPE_END = 4, 1047197104Sjkim 1048197104Sjkim /* 8-byte device entries */ 1049197104Sjkim 1050197104Sjkim ACPI_IVRS_TYPE_PAD8 = 64, 1051197104Sjkim ACPI_IVRS_TYPE_NOT_USED = 65, 1052197104Sjkim ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ 1053197104Sjkim ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ 1054197104Sjkim ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ 1055197104Sjkim ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ 1056197104Sjkim ACPI_IVRS_TYPE_SPECIAL = 72 /* Uses ACPI_IVRS_DEVICE8C */ 1057197104Sjkim}; 1058197104Sjkim 1059197104Sjkim/* Values for Data field above */ 1060197104Sjkim 1061197104Sjkim#define ACPI_IVHD_INIT_PASS (1) 1062197104Sjkim#define ACPI_IVHD_EINT_PASS (1<<1) 1063197104Sjkim#define ACPI_IVHD_NMI_PASS (1<<2) 1064197104Sjkim#define ACPI_IVHD_SYSTEM_MGMT (3<<4) 1065197104Sjkim#define ACPI_IVHD_LINT0_PASS (1<<6) 1066197104Sjkim#define ACPI_IVHD_LINT1_PASS (1<<7) 1067197104Sjkim 1068197104Sjkim 1069197104Sjkim/* Types 0-4: 4-byte device entry */ 1070197104Sjkim 1071197104Sjkimtypedef struct acpi_ivrs_device4 1072197104Sjkim{ 1073197104Sjkim ACPI_IVRS_DE_HEADER Header; 1074197104Sjkim 1075197104Sjkim} ACPI_IVRS_DEVICE4; 1076197104Sjkim 1077197104Sjkim/* Types 66-67: 8-byte device entry */ 1078197104Sjkim 1079197104Sjkimtypedef struct acpi_ivrs_device8a 1080197104Sjkim{ 1081197104Sjkim ACPI_IVRS_DE_HEADER Header; 1082197104Sjkim UINT8 Reserved1; 1083197104Sjkim UINT16 UsedId; 1084197104Sjkim UINT8 Reserved2; 1085197104Sjkim 1086197104Sjkim} ACPI_IVRS_DEVICE8A; 1087197104Sjkim 1088197104Sjkim/* Types 70-71: 8-byte device entry */ 1089197104Sjkim 1090197104Sjkimtypedef struct acpi_ivrs_device8b 1091197104Sjkim{ 1092197104Sjkim ACPI_IVRS_DE_HEADER Header; 1093197104Sjkim UINT32 ExtendedData; 1094197104Sjkim 1095197104Sjkim} ACPI_IVRS_DEVICE8B; 1096197104Sjkim 1097197104Sjkim/* Values for ExtendedData above */ 1098197104Sjkim 1099197104Sjkim#define ACPI_IVHD_ATS_DISABLED (1<<31) 1100197104Sjkim 1101197104Sjkim/* Type 72: 8-byte device entry */ 1102197104Sjkim 1103197104Sjkimtypedef struct acpi_ivrs_device8c 1104197104Sjkim{ 1105197104Sjkim ACPI_IVRS_DE_HEADER Header; 1106197104Sjkim UINT8 Handle; 1107197104Sjkim UINT16 UsedId; 1108197104Sjkim UINT8 Variety; 1109197104Sjkim 1110197104Sjkim} ACPI_IVRS_DEVICE8C; 1111197104Sjkim 1112197104Sjkim/* Values for Variety field above */ 1113197104Sjkim 1114197104Sjkim#define ACPI_IVHD_IOAPIC 1 1115197104Sjkim#define ACPI_IVHD_HPET 2 1116197104Sjkim 1117197104Sjkim 1118197104Sjkim/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ 1119197104Sjkim 1120197104Sjkimtypedef struct acpi_ivrs_memory 1121197104Sjkim{ 1122197104Sjkim ACPI_IVRS_HEADER Header; 1123197104Sjkim UINT16 AuxData; 1124197104Sjkim UINT64 Reserved; 1125197104Sjkim UINT64 StartAddress; 1126197104Sjkim UINT64 MemoryLength; 1127197104Sjkim 1128197104Sjkim} ACPI_IVRS_MEMORY; 1129197104Sjkim 1130197104Sjkim 1131197104Sjkim/******************************************************************************* 1132197104Sjkim * 1133281075Sdim * LPIT - Low Power Idle Table 1134281075Sdim * 1135284460Sjkim * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. 1136281075Sdim * 1137281075Sdim ******************************************************************************/ 1138281075Sdim 1139281075Sdimtypedef struct acpi_table_lpit 1140281075Sdim{ 1141281075Sdim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1142281075Sdim 1143281075Sdim} ACPI_TABLE_LPIT; 1144281075Sdim 1145281075Sdim 1146281075Sdim/* LPIT subtable header */ 1147281075Sdim 1148281075Sdimtypedef struct acpi_lpit_header 1149281075Sdim{ 1150281075Sdim UINT32 Type; /* Subtable type */ 1151281075Sdim UINT32 Length; /* Subtable length */ 1152281075Sdim UINT16 UniqueId; 1153281075Sdim UINT16 Reserved; 1154281075Sdim UINT32 Flags; 1155281075Sdim 1156281075Sdim} ACPI_LPIT_HEADER; 1157281075Sdim 1158281075Sdim/* Values for subtable Type above */ 1159281075Sdim 1160281075Sdimenum AcpiLpitType 1161281075Sdim{ 1162281075Sdim ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, 1163284460Sjkim ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ 1164281075Sdim}; 1165281075Sdim 1166281075Sdim/* Masks for Flags field above */ 1167281075Sdim 1168281075Sdim#define ACPI_LPIT_STATE_DISABLED (1) 1169281075Sdim#define ACPI_LPIT_NO_COUNTER (1<<1) 1170281075Sdim 1171281075Sdim/* 1172281075Sdim * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER 1173281075Sdim */ 1174281075Sdim 1175281075Sdim/* 0x00: Native C-state instruction based LPI structure */ 1176281075Sdim 1177281075Sdimtypedef struct acpi_lpit_native 1178281075Sdim{ 1179281075Sdim ACPI_LPIT_HEADER Header; 1180281075Sdim ACPI_GENERIC_ADDRESS EntryTrigger; 1181281075Sdim UINT32 Residency; 1182281075Sdim UINT32 Latency; 1183281075Sdim ACPI_GENERIC_ADDRESS ResidencyCounter; 1184281075Sdim UINT64 CounterFrequency; 1185281075Sdim 1186281075Sdim} ACPI_LPIT_NATIVE; 1187281075Sdim 1188281075Sdim 1189281075Sdim/******************************************************************************* 1190281075Sdim * 1191281075Sdim * MCFG - PCI Memory Mapped Configuration table and subtable 1192197104Sjkim * Version 1 1193197104Sjkim * 1194197104Sjkim * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 1195197104Sjkim * 1196197104Sjkim ******************************************************************************/ 1197197104Sjkim 1198197104Sjkimtypedef struct acpi_table_mcfg 1199197104Sjkim{ 1200197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1201197104Sjkim UINT8 Reserved[8]; 1202197104Sjkim 1203197104Sjkim} ACPI_TABLE_MCFG; 1204197104Sjkim 1205197104Sjkim 1206197104Sjkim/* Subtable */ 1207197104Sjkim 1208197104Sjkimtypedef struct acpi_mcfg_allocation 1209197104Sjkim{ 1210197104Sjkim UINT64 Address; /* Base address, processor-relative */ 1211197104Sjkim UINT16 PciSegment; /* PCI segment group number */ 1212197104Sjkim UINT8 StartBusNumber; /* Starting PCI Bus number */ 1213197104Sjkim UINT8 EndBusNumber; /* Final PCI Bus number */ 1214197104Sjkim UINT32 Reserved; 1215197104Sjkim 1216197104Sjkim} ACPI_MCFG_ALLOCATION; 1217197104Sjkim 1218197104Sjkim 1219197104Sjkim/******************************************************************************* 1220197104Sjkim * 1221204773Sjkim * MCHI - Management Controller Host Interface Table 1222204773Sjkim * Version 1 1223204773Sjkim * 1224204773Sjkim * Conforms to "Management Component Transport Protocol (MCTP) Host 1225204773Sjkim * Interface Specification", Revision 1.0.0a, October 13, 2009 1226204773Sjkim * 1227204773Sjkim ******************************************************************************/ 1228204773Sjkim 1229204773Sjkimtypedef struct acpi_table_mchi 1230204773Sjkim{ 1231204773Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1232204773Sjkim UINT8 InterfaceType; 1233204773Sjkim UINT8 Protocol; 1234204773Sjkim UINT64 ProtocolData; 1235204773Sjkim UINT8 InterruptType; 1236204773Sjkim UINT8 Gpe; 1237204773Sjkim UINT8 PciDeviceFlag; 1238204773Sjkim UINT32 GlobalInterrupt; 1239204773Sjkim ACPI_GENERIC_ADDRESS ControlRegister; 1240204773Sjkim UINT8 PciSegment; 1241204773Sjkim UINT8 PciBus; 1242204773Sjkim UINT8 PciDevice; 1243204773Sjkim UINT8 PciFunction; 1244204773Sjkim 1245204773Sjkim} ACPI_TABLE_MCHI; 1246204773Sjkim 1247204773Sjkim 1248204773Sjkim/******************************************************************************* 1249204773Sjkim * 1250281687Sjkim * MSDM - Microsoft Data Management table 1251281687Sjkim * 1252281687Sjkim * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", 1253281687Sjkim * November 29, 2011. Copyright 2011 Microsoft 1254281687Sjkim * 1255281687Sjkim ******************************************************************************/ 1256281687Sjkim 1257281687Sjkim/* Basic MSDM table is only the common ACPI header */ 1258281687Sjkim 1259281687Sjkimtypedef struct acpi_table_msdm 1260281687Sjkim{ 1261281687Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1262281687Sjkim 1263281687Sjkim} ACPI_TABLE_MSDM; 1264281687Sjkim 1265281687Sjkim 1266281687Sjkim/******************************************************************************* 1267281687Sjkim * 1268246849Sjkim * MTMR - MID Timer Table 1269246849Sjkim * Version 1 1270246849Sjkim * 1271246849Sjkim * Conforms to "Simple Firmware Interface Specification", 1272246849Sjkim * Draft 0.8.2, Oct 19, 2010 1273246849Sjkim * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table. 1274246849Sjkim * 1275246849Sjkim ******************************************************************************/ 1276246849Sjkim 1277246849Sjkimtypedef struct acpi_table_mtmr 1278246849Sjkim{ 1279246849Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1280246849Sjkim 1281246849Sjkim} ACPI_TABLE_MTMR; 1282246849Sjkim 1283246849Sjkim/* MTMR entry */ 1284246849Sjkim 1285246849Sjkimtypedef struct acpi_mtmr_entry 1286246849Sjkim{ 1287246849Sjkim ACPI_GENERIC_ADDRESS PhysicalAddress; 1288246849Sjkim UINT32 Frequency; 1289246849Sjkim UINT32 Irq; 1290246849Sjkim 1291246849Sjkim} ACPI_MTMR_ENTRY; 1292246849Sjkim 1293246849Sjkim 1294246849Sjkim/******************************************************************************* 1295246849Sjkim * 1296219707Sjkim * SLIC - Software Licensing Description Table 1297219707Sjkim * 1298281687Sjkim * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", 1299281687Sjkim * November 29, 2011. Copyright 2011 Microsoft 1300219707Sjkim * 1301219707Sjkim ******************************************************************************/ 1302219707Sjkim 1303219707Sjkim/* Basic SLIC table is only the common ACPI header */ 1304219707Sjkim 1305219707Sjkimtypedef struct acpi_table_slic 1306219707Sjkim{ 1307219707Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1308219707Sjkim 1309219707Sjkim} ACPI_TABLE_SLIC; 1310219707Sjkim 1311219707Sjkim 1312219707Sjkim/******************************************************************************* 1313219707Sjkim * 1314197104Sjkim * SPCR - Serial Port Console Redirection table 1315306536Sjkim * Version 2 1316197104Sjkim * 1317197104Sjkim * Conforms to "Serial Port Console Redirection Table", 1318306536Sjkim * Version 1.03, August 10, 2015 1319197104Sjkim * 1320197104Sjkim ******************************************************************************/ 1321197104Sjkim 1322197104Sjkimtypedef struct acpi_table_spcr 1323197104Sjkim{ 1324197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1325197104Sjkim UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ 1326197104Sjkim UINT8 Reserved[3]; 1327197104Sjkim ACPI_GENERIC_ADDRESS SerialPort; 1328197104Sjkim UINT8 InterruptType; 1329197104Sjkim UINT8 PcInterrupt; 1330197104Sjkim UINT32 Interrupt; 1331197104Sjkim UINT8 BaudRate; 1332197104Sjkim UINT8 Parity; 1333197104Sjkim UINT8 StopBits; 1334197104Sjkim UINT8 FlowControl; 1335197104Sjkim UINT8 TerminalType; 1336197104Sjkim UINT8 Reserved1; 1337197104Sjkim UINT16 PciDeviceId; 1338197104Sjkim UINT16 PciVendorId; 1339197104Sjkim UINT8 PciBus; 1340197104Sjkim UINT8 PciDevice; 1341197104Sjkim UINT8 PciFunction; 1342197104Sjkim UINT32 PciFlags; 1343197104Sjkim UINT8 PciSegment; 1344197104Sjkim UINT32 Reserved2; 1345197104Sjkim 1346197104Sjkim} ACPI_TABLE_SPCR; 1347197104Sjkim 1348197104Sjkim/* Masks for PciFlags field above */ 1349197104Sjkim 1350197104Sjkim#define ACPI_SPCR_DO_NOT_DISABLE (1) 1351197104Sjkim 1352306536Sjkim/* Values for Interface Type: See the definition of the DBG2 table */ 1353197104Sjkim 1354306536Sjkim 1355197104Sjkim/******************************************************************************* 1356197104Sjkim * 1357197104Sjkim * SPMI - Server Platform Management Interface table 1358197104Sjkim * Version 5 1359197104Sjkim * 1360197104Sjkim * Conforms to "Intelligent Platform Management Interface Specification 1361197104Sjkim * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with 1362197104Sjkim * June 12, 2009 markup. 1363197104Sjkim * 1364197104Sjkim ******************************************************************************/ 1365197104Sjkim 1366197104Sjkimtypedef struct acpi_table_spmi 1367197104Sjkim{ 1368197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1369197104Sjkim UINT8 InterfaceType; 1370197104Sjkim UINT8 Reserved; /* Must be 1 */ 1371197104Sjkim UINT16 SpecRevision; /* Version of IPMI */ 1372197104Sjkim UINT8 InterruptType; 1373197104Sjkim UINT8 GpeNumber; /* GPE assigned */ 1374197104Sjkim UINT8 Reserved1; 1375197104Sjkim UINT8 PciDeviceFlag; 1376197104Sjkim UINT32 Interrupt; 1377197104Sjkim ACPI_GENERIC_ADDRESS IpmiRegister; 1378197104Sjkim UINT8 PciSegment; 1379197104Sjkim UINT8 PciBus; 1380197104Sjkim UINT8 PciDevice; 1381197104Sjkim UINT8 PciFunction; 1382197104Sjkim UINT8 Reserved2; 1383197104Sjkim 1384197104Sjkim} ACPI_TABLE_SPMI; 1385197104Sjkim 1386197104Sjkim/* Values for InterfaceType above */ 1387197104Sjkim 1388197104Sjkimenum AcpiSpmiInterfaceTypes 1389197104Sjkim{ 1390197104Sjkim ACPI_SPMI_NOT_USED = 0, 1391197104Sjkim ACPI_SPMI_KEYBOARD = 1, 1392197104Sjkim ACPI_SPMI_SMI = 2, 1393197104Sjkim ACPI_SPMI_BLOCK_TRANSFER = 3, 1394197104Sjkim ACPI_SPMI_SMBUS = 4, 1395197104Sjkim ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ 1396197104Sjkim}; 1397197104Sjkim 1398197104Sjkim 1399197104Sjkim/******************************************************************************* 1400197104Sjkim * 1401197104Sjkim * TCPA - Trusted Computing Platform Alliance table 1402306536Sjkim * Version 2 1403197104Sjkim * 1404306536Sjkim * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", 1405306536Sjkim * December 19, 2014 1406197104Sjkim * 1407306536Sjkim * NOTE: There are two versions of the table with the same signature -- 1408306536Sjkim * the client version and the server version. The common PlatformClass 1409306536Sjkim * field is used to differentiate the two types of tables. 1410306536Sjkim * 1411197104Sjkim ******************************************************************************/ 1412197104Sjkim 1413306536Sjkimtypedef struct acpi_table_tcpa_hdr 1414197104Sjkim{ 1415197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1416306536Sjkim UINT16 PlatformClass; 1417306536Sjkim 1418306536Sjkim} ACPI_TABLE_TCPA_HDR; 1419306536Sjkim 1420306536Sjkim/* 1421306536Sjkim * Values for PlatformClass above. 1422306536Sjkim * This is how the client and server subtables are differentiated 1423306536Sjkim */ 1424306536Sjkim#define ACPI_TCPA_CLIENT_TABLE 0 1425306536Sjkim#define ACPI_TCPA_SERVER_TABLE 1 1426306536Sjkim 1427306536Sjkim 1428306536Sjkimtypedef struct acpi_table_tcpa_client 1429306536Sjkim{ 1430306536Sjkim UINT32 MinimumLogLength; /* Minimum length for the event log area */ 1431306536Sjkim UINT64 LogAddress; /* Address of the event log area */ 1432306536Sjkim 1433306536Sjkim} ACPI_TABLE_TCPA_CLIENT; 1434306536Sjkim 1435306536Sjkimtypedef struct acpi_table_tcpa_server 1436306536Sjkim{ 1437197104Sjkim UINT16 Reserved; 1438306536Sjkim UINT64 MinimumLogLength; /* Minimum length for the event log area */ 1439197104Sjkim UINT64 LogAddress; /* Address of the event log area */ 1440306536Sjkim UINT16 SpecRevision; 1441306536Sjkim UINT8 DeviceFlags; 1442306536Sjkim UINT8 InterruptFlags; 1443306536Sjkim UINT8 GpeNumber; 1444306536Sjkim UINT8 Reserved2[3]; 1445306536Sjkim UINT32 GlobalInterrupt; 1446306536Sjkim ACPI_GENERIC_ADDRESS Address; 1447306536Sjkim UINT32 Reserved3; 1448306536Sjkim ACPI_GENERIC_ADDRESS ConfigAddress; 1449306536Sjkim UINT8 Group; 1450306536Sjkim UINT8 Bus; /* PCI Bus/Segment/Function numbers */ 1451306536Sjkim UINT8 Device; 1452306536Sjkim UINT8 Function; 1453197104Sjkim 1454306536Sjkim} ACPI_TABLE_TCPA_SERVER; 1455197104Sjkim 1456306536Sjkim/* Values for DeviceFlags above */ 1457197104Sjkim 1458306536Sjkim#define ACPI_TCPA_PCI_DEVICE (1) 1459306536Sjkim#define ACPI_TCPA_BUS_PNP (1<<1) 1460306536Sjkim#define ACPI_TCPA_ADDRESS_VALID (1<<2) 1461306536Sjkim 1462306536Sjkim/* Values for InterruptFlags above */ 1463306536Sjkim 1464306536Sjkim#define ACPI_TCPA_INTERRUPT_MODE (1) 1465306536Sjkim#define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) 1466306536Sjkim#define ACPI_TCPA_SCI_VIA_GPE (1<<2) 1467306536Sjkim#define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) 1468306536Sjkim 1469306536Sjkim 1470197104Sjkim/******************************************************************************* 1471197104Sjkim * 1472306536Sjkim * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table 1473306536Sjkim * Version 4 1474306536Sjkim * 1475306536Sjkim * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", 1476306536Sjkim * December 19, 2014 1477306536Sjkim * 1478306536Sjkim ******************************************************************************/ 1479306536Sjkim 1480306536Sjkimtypedef struct acpi_table_tpm2 1481306536Sjkim{ 1482306536Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1483306536Sjkim UINT16 PlatformClass; 1484306536Sjkim UINT16 Reserved; 1485306536Sjkim UINT64 ControlAddress; 1486306536Sjkim UINT32 StartMethod; 1487306536Sjkim 1488306536Sjkim /* Platform-specific data follows */ 1489306536Sjkim 1490306536Sjkim} ACPI_TABLE_TPM2; 1491306536Sjkim 1492306536Sjkim/* Values for StartMethod above */ 1493306536Sjkim 1494306536Sjkim#define ACPI_TPM2_NOT_ALLOWED 0 1495306536Sjkim#define ACPI_TPM2_START_METHOD 2 1496306536Sjkim#define ACPI_TPM2_MEMORY_MAPPED 6 1497306536Sjkim#define ACPI_TPM2_COMMAND_BUFFER 7 1498306536Sjkim#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 1499306536Sjkim 1500306536Sjkim 1501306536Sjkim/******************************************************************************* 1502306536Sjkim * 1503197104Sjkim * UEFI - UEFI Boot optimization Table 1504197104Sjkim * Version 1 1505197104Sjkim * 1506197104Sjkim * Conforms to "Unified Extensible Firmware Interface Specification", 1507197104Sjkim * Version 2.3, May 8, 2009 1508197104Sjkim * 1509197104Sjkim ******************************************************************************/ 1510197104Sjkim 1511197104Sjkimtypedef struct acpi_table_uefi 1512197104Sjkim{ 1513197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1514197104Sjkim UINT8 Identifier[16]; /* UUID identifier */ 1515197104Sjkim UINT16 DataOffset; /* Offset of remaining data in table */ 1516197104Sjkim 1517197104Sjkim} ACPI_TABLE_UEFI; 1518197104Sjkim 1519197104Sjkim 1520197104Sjkim/******************************************************************************* 1521197104Sjkim * 1522246849Sjkim * VRTC - Virtual Real Time Clock Table 1523246849Sjkim * Version 1 1524246849Sjkim * 1525246849Sjkim * Conforms to "Simple Firmware Interface Specification", 1526246849Sjkim * Draft 0.8.2, Oct 19, 2010 1527246849Sjkim * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table. 1528246849Sjkim * 1529246849Sjkim ******************************************************************************/ 1530246849Sjkim 1531246849Sjkimtypedef struct acpi_table_vrtc 1532246849Sjkim{ 1533246849Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1534246849Sjkim 1535246849Sjkim} ACPI_TABLE_VRTC; 1536246849Sjkim 1537246849Sjkim/* VRTC entry */ 1538246849Sjkim 1539246849Sjkimtypedef struct acpi_vrtc_entry 1540246849Sjkim{ 1541246849Sjkim ACPI_GENERIC_ADDRESS PhysicalAddress; 1542246849Sjkim UINT32 Irq; 1543246849Sjkim 1544246849Sjkim} ACPI_VRTC_ENTRY; 1545246849Sjkim 1546246849Sjkim 1547246849Sjkim/******************************************************************************* 1548246849Sjkim * 1549197104Sjkim * WAET - Windows ACPI Emulated devices Table 1550197104Sjkim * Version 1 1551197104Sjkim * 1552197104Sjkim * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 1553197104Sjkim * 1554197104Sjkim ******************************************************************************/ 1555197104Sjkim 1556197104Sjkimtypedef struct acpi_table_waet 1557197104Sjkim{ 1558197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1559197104Sjkim UINT32 Flags; 1560197104Sjkim 1561197104Sjkim} ACPI_TABLE_WAET; 1562197104Sjkim 1563197104Sjkim/* Masks for Flags field above */ 1564197104Sjkim 1565197104Sjkim#define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ 1566197104Sjkim#define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ 1567197104Sjkim 1568197104Sjkim 1569197104Sjkim/******************************************************************************* 1570197104Sjkim * 1571197104Sjkim * WDAT - Watchdog Action Table 1572197104Sjkim * Version 1 1573197104Sjkim * 1574197104Sjkim * Conforms to "Hardware Watchdog Timers Design Specification", 1575197104Sjkim * Copyright 2006 Microsoft Corporation. 1576197104Sjkim * 1577197104Sjkim ******************************************************************************/ 1578197104Sjkim 1579197104Sjkimtypedef struct acpi_table_wdat 1580197104Sjkim{ 1581197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1582197104Sjkim UINT32 HeaderLength; /* Watchdog Header Length */ 1583197104Sjkim UINT16 PciSegment; /* PCI Segment number */ 1584197104Sjkim UINT8 PciBus; /* PCI Bus number */ 1585197104Sjkim UINT8 PciDevice; /* PCI Device number */ 1586197104Sjkim UINT8 PciFunction; /* PCI Function number */ 1587197104Sjkim UINT8 Reserved[3]; 1588197104Sjkim UINT32 TimerPeriod; /* Period of one timer count (msec) */ 1589197104Sjkim UINT32 MaxCount; /* Maximum counter value supported */ 1590197104Sjkim UINT32 MinCount; /* Minimum counter value */ 1591197104Sjkim UINT8 Flags; 1592197104Sjkim UINT8 Reserved2[3]; 1593197104Sjkim UINT32 Entries; /* Number of watchdog entries that follow */ 1594197104Sjkim 1595197104Sjkim} ACPI_TABLE_WDAT; 1596197104Sjkim 1597197104Sjkim/* Masks for Flags field above */ 1598197104Sjkim 1599197104Sjkim#define ACPI_WDAT_ENABLED (1) 1600197104Sjkim#define ACPI_WDAT_STOPPED 0x80 1601197104Sjkim 1602197104Sjkim 1603197104Sjkim/* WDAT Instruction Entries (actions) */ 1604197104Sjkim 1605197104Sjkimtypedef struct acpi_wdat_entry 1606197104Sjkim{ 1607197104Sjkim UINT8 Action; 1608197104Sjkim UINT8 Instruction; 1609197104Sjkim UINT16 Reserved; 1610197104Sjkim ACPI_GENERIC_ADDRESS RegisterRegion; 1611197104Sjkim UINT32 Value; /* Value used with Read/Write register */ 1612197104Sjkim UINT32 Mask; /* Bitmask required for this register instruction */ 1613197104Sjkim 1614197104Sjkim} ACPI_WDAT_ENTRY; 1615197104Sjkim 1616197104Sjkim/* Values for Action field above */ 1617197104Sjkim 1618197104Sjkimenum AcpiWdatActions 1619197104Sjkim{ 1620197104Sjkim ACPI_WDAT_RESET = 1, 1621197104Sjkim ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, 1622197104Sjkim ACPI_WDAT_GET_COUNTDOWN = 5, 1623197104Sjkim ACPI_WDAT_SET_COUNTDOWN = 6, 1624197104Sjkim ACPI_WDAT_GET_RUNNING_STATE = 8, 1625197104Sjkim ACPI_WDAT_SET_RUNNING_STATE = 9, 1626197104Sjkim ACPI_WDAT_GET_STOPPED_STATE = 10, 1627197104Sjkim ACPI_WDAT_SET_STOPPED_STATE = 11, 1628197104Sjkim ACPI_WDAT_GET_REBOOT = 16, 1629197104Sjkim ACPI_WDAT_SET_REBOOT = 17, 1630197104Sjkim ACPI_WDAT_GET_SHUTDOWN = 18, 1631197104Sjkim ACPI_WDAT_SET_SHUTDOWN = 19, 1632197104Sjkim ACPI_WDAT_GET_STATUS = 32, 1633197104Sjkim ACPI_WDAT_SET_STATUS = 33, 1634197104Sjkim ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ 1635197104Sjkim}; 1636197104Sjkim 1637197104Sjkim/* Values for Instruction field above */ 1638197104Sjkim 1639197104Sjkimenum AcpiWdatInstructions 1640197104Sjkim{ 1641197104Sjkim ACPI_WDAT_READ_VALUE = 0, 1642197104Sjkim ACPI_WDAT_READ_COUNTDOWN = 1, 1643197104Sjkim ACPI_WDAT_WRITE_VALUE = 2, 1644197104Sjkim ACPI_WDAT_WRITE_COUNTDOWN = 3, 1645197104Sjkim ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ 1646197104Sjkim ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ 1647197104Sjkim}; 1648197104Sjkim 1649197104Sjkim 1650197104Sjkim/******************************************************************************* 1651197104Sjkim * 1652209746Sjkim * WDDT - Watchdog Descriptor Table 1653209746Sjkim * Version 1 1654209746Sjkim * 1655209746Sjkim * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", 1656209746Sjkim * Version 001, September 2002 1657209746Sjkim * 1658209746Sjkim ******************************************************************************/ 1659209746Sjkim 1660209746Sjkimtypedef struct acpi_table_wddt 1661209746Sjkim{ 1662209746Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1663209746Sjkim UINT16 SpecVersion; 1664209746Sjkim UINT16 TableVersion; 1665209746Sjkim UINT16 PciVendorId; 1666209746Sjkim ACPI_GENERIC_ADDRESS Address; 1667209746Sjkim UINT16 MaxCount; /* Maximum counter value supported */ 1668209746Sjkim UINT16 MinCount; /* Minimum counter value supported */ 1669209746Sjkim UINT16 Period; 1670209746Sjkim UINT16 Status; 1671209746Sjkim UINT16 Capability; 1672209746Sjkim 1673209746Sjkim} ACPI_TABLE_WDDT; 1674209746Sjkim 1675209746Sjkim/* Flags for Status field above */ 1676209746Sjkim 1677209746Sjkim#define ACPI_WDDT_AVAILABLE (1) 1678209746Sjkim#define ACPI_WDDT_ACTIVE (1<<1) 1679209746Sjkim#define ACPI_WDDT_TCO_OS_OWNED (1<<2) 1680209746Sjkim#define ACPI_WDDT_USER_RESET (1<<11) 1681209746Sjkim#define ACPI_WDDT_WDT_RESET (1<<12) 1682209746Sjkim#define ACPI_WDDT_POWER_FAIL (1<<13) 1683209746Sjkim#define ACPI_WDDT_UNKNOWN_RESET (1<<14) 1684209746Sjkim 1685209746Sjkim/* Flags for Capability field above */ 1686209746Sjkim 1687209746Sjkim#define ACPI_WDDT_AUTO_RESET (1) 1688209746Sjkim#define ACPI_WDDT_ALERT_SUPPORT (1<<1) 1689209746Sjkim 1690209746Sjkim 1691209746Sjkim/******************************************************************************* 1692209746Sjkim * 1693197104Sjkim * WDRT - Watchdog Resource Table 1694197104Sjkim * Version 1 1695197104Sjkim * 1696197104Sjkim * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", 1697197104Sjkim * Version 1.01, August 28, 2006 1698197104Sjkim * 1699197104Sjkim ******************************************************************************/ 1700197104Sjkim 1701197104Sjkimtypedef struct acpi_table_wdrt 1702197104Sjkim{ 1703197104Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1704197104Sjkim ACPI_GENERIC_ADDRESS ControlRegister; 1705197104Sjkim ACPI_GENERIC_ADDRESS CountRegister; 1706197104Sjkim UINT16 PciDeviceId; 1707197104Sjkim UINT16 PciVendorId; 1708197104Sjkim UINT8 PciBus; /* PCI Bus number */ 1709197104Sjkim UINT8 PciDevice; /* PCI Device number */ 1710197104Sjkim UINT8 PciFunction; /* PCI Function number */ 1711197104Sjkim UINT8 PciSegment; /* PCI Segment number */ 1712197104Sjkim UINT16 MaxCount; /* Maximum counter value supported */ 1713197104Sjkim UINT8 Units; 1714197104Sjkim 1715197104Sjkim} ACPI_TABLE_WDRT; 1716197104Sjkim 1717197104Sjkim 1718197104Sjkim/* Reset to default packing */ 1719197104Sjkim 1720197104Sjkim#pragma pack() 1721197104Sjkim 1722197104Sjkim#endif /* __ACTBL2_H__ */ 1723