1227896Sjkim/****************************************************************************** 2227896Sjkim * 3227896Sjkim * Name: actbl3.h - ACPI Table Definitions 4227896Sjkim * 5227896Sjkim *****************************************************************************/ 6227896Sjkim 7227896Sjkim/* 8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp. 9227896Sjkim * All rights reserved. 10227896Sjkim * 11227896Sjkim * Redistribution and use in source and binary forms, with or without 12227896Sjkim * modification, are permitted provided that the following conditions 13227896Sjkim * are met: 14227896Sjkim * 1. Redistributions of source code must retain the above copyright 15227896Sjkim * notice, this list of conditions, and the following disclaimer, 16227896Sjkim * without modification. 17227896Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18227896Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19227896Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20227896Sjkim * including a substantially similar Disclaimer requirement for further 21227896Sjkim * binary redistribution. 22227896Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23227896Sjkim * of any contributors may be used to endorse or promote products derived 24227896Sjkim * from this software without specific prior written permission. 25227896Sjkim * 26227896Sjkim * Alternatively, this software may be distributed under the terms of the 27227896Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28227896Sjkim * Software Foundation. 29227896Sjkim * 30227896Sjkim * NO WARRANTY 31227896Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32227896Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33227896Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34227896Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35227896Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36227896Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37227896Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38227896Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39227896Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40227896Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41227896Sjkim * POSSIBILITY OF SUCH DAMAGES. 42227896Sjkim */ 43227896Sjkim 44227896Sjkim#ifndef __ACTBL3_H__ 45227896Sjkim#define __ACTBL3_H__ 46227896Sjkim 47227896Sjkim 48227896Sjkim/******************************************************************************* 49227896Sjkim * 50227896Sjkim * Additional ACPI Tables (3) 51227896Sjkim * 52227896Sjkim * These tables are not consumed directly by the ACPICA subsystem, but are 53227896Sjkim * included here to support device drivers and the AML disassembler. 54227896Sjkim * 55306536Sjkim * In general, the tables in this file are fully defined within the ACPI 56306536Sjkim * specification. 57227896Sjkim * 58227896Sjkim ******************************************************************************/ 59227896Sjkim 60227896Sjkim 61227896Sjkim/* 62227896Sjkim * Values for description table header signatures for tables defined in this 63227896Sjkim * file. Useful because they make it more difficult to inadvertently type in 64227896Sjkim * the wrong signature. 65227896Sjkim */ 66227896Sjkim#define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ 67227896Sjkim#define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ 68227896Sjkim#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ 69227896Sjkim#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ 70227896Sjkim#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 71227896Sjkim#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 72227896Sjkim#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 73227896Sjkim#define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 74284460Sjkim#define ACPI_SIG_STAO "STAO" /* Status Override table */ 75284460Sjkim#define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ 76284460Sjkim#define ACPI_SIG_XENV "XENV" /* Xen Environment table */ 77227896Sjkim 78227896Sjkim#define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ 79227896Sjkim#define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ 80227896Sjkim 81227896Sjkim/* Reserved table signatures */ 82227896Sjkim 83227896Sjkim#define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ 84227896Sjkim#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 85227896Sjkim 86227896Sjkim/* 87227896Sjkim * All tables must be byte-packed to match the ACPI specification, since 88227896Sjkim * the tables are provided by the system BIOS. 89227896Sjkim */ 90227896Sjkim#pragma pack(1) 91227896Sjkim 92227896Sjkim/* 93239340Sjkim * Note: C bitfields are not used for this reason: 94239340Sjkim * 95239340Sjkim * "Bitfields are great and easy to read, but unfortunately the C language 96239340Sjkim * does not specify the layout of bitfields in memory, which means they are 97239340Sjkim * essentially useless for dealing with packed data in on-disk formats or 98239340Sjkim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 99239340Sjkim * this decision was a design error in C. Ritchie could have picked an order 100239340Sjkim * and stuck with it." Norman Ramsey. 101239340Sjkim * See http://stackoverflow.com/a/1053662/41661 102227896Sjkim */ 103227896Sjkim 104227896Sjkim 105227896Sjkim/******************************************************************************* 106227896Sjkim * 107227896Sjkim * BGRT - Boot Graphics Resource Table (ACPI 5.0) 108227896Sjkim * Version 1 109227896Sjkim * 110227896Sjkim ******************************************************************************/ 111227896Sjkim 112227896Sjkimtypedef struct acpi_table_bgrt 113227896Sjkim{ 114227896Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 115227896Sjkim UINT16 Version; 116227896Sjkim UINT8 Status; 117227896Sjkim UINT8 ImageType; 118227896Sjkim UINT64 ImageAddress; 119227896Sjkim UINT32 ImageOffsetX; 120227896Sjkim UINT32 ImageOffsetY; 121227896Sjkim 122227896Sjkim} ACPI_TABLE_BGRT; 123227896Sjkim 124227896Sjkim 125227896Sjkim/******************************************************************************* 126227896Sjkim * 127227896Sjkim * DRTM - Dynamic Root of Trust for Measurement table 128284460Sjkim * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 129284460Sjkim * Table version 1 130227896Sjkim * 131227896Sjkim ******************************************************************************/ 132227896Sjkim 133227896Sjkimtypedef struct acpi_table_drtm 134227896Sjkim{ 135227896Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 136227896Sjkim UINT64 EntryBaseAddress; 137227896Sjkim UINT64 EntryLength; 138227896Sjkim UINT32 EntryAddress32; 139227896Sjkim UINT64 EntryAddress64; 140227896Sjkim UINT64 ExitAddress; 141227896Sjkim UINT64 LogAreaAddress; 142227896Sjkim UINT32 LogAreaLength; 143227896Sjkim UINT64 ArchDependentAddress; 144227896Sjkim UINT32 Flags; 145227896Sjkim 146227896Sjkim} ACPI_TABLE_DRTM; 147227896Sjkim 148284460Sjkim/* Flag Definitions for above */ 149227896Sjkim 150284460Sjkim#define ACPI_DRTM_ACCESS_ALLOWED (1) 151284460Sjkim#define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) 152284460Sjkim#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) 153284460Sjkim#define ACPI_DRTM_AUTHORITY_ORDER (1<<3) 154284460Sjkim 155284460Sjkim 156284460Sjkim/* 1) Validated Tables List (64-bit addresses) */ 157284460Sjkim 158284460Sjkimtypedef struct acpi_drtm_vtable_list 159227896Sjkim{ 160284460Sjkim UINT32 ValidatedTableCount; 161284460Sjkim UINT64 ValidatedTables[1]; 162227896Sjkim 163284460Sjkim} ACPI_DRTM_VTABLE_LIST; 164227896Sjkim 165284460Sjkim/* 2) Resources List (of Resource Descriptors) */ 166227896Sjkim 167284460Sjkim/* Resource Descriptor */ 168284460Sjkim 169284460Sjkimtypedef struct acpi_drtm_resource 170284460Sjkim{ 171284460Sjkim UINT8 Size[7]; 172284460Sjkim UINT8 Type; 173284460Sjkim UINT64 Address; 174284460Sjkim 175284460Sjkim} ACPI_DRTM_RESOURCE; 176284460Sjkim 177227896Sjkimtypedef struct acpi_drtm_resource_list 178227896Sjkim{ 179284460Sjkim UINT32 ResourceCount; 180284460Sjkim ACPI_DRTM_RESOURCE Resources[1]; 181227896Sjkim 182227896Sjkim} ACPI_DRTM_RESOURCE_LIST; 183227896Sjkim 184227896Sjkim/* 3) Platform-specific Identifiers List */ 185227896Sjkim 186284460Sjkimtypedef struct acpi_drtm_dps_id 187227896Sjkim{ 188284460Sjkim UINT32 DpsIdLength; 189284460Sjkim UINT8 DpsId[16]; 190227896Sjkim 191284460Sjkim} ACPI_DRTM_DPS_ID; 192227896Sjkim 193227896Sjkim 194227896Sjkim/******************************************************************************* 195227896Sjkim * 196227896Sjkim * FPDT - Firmware Performance Data Table (ACPI 5.0) 197227896Sjkim * Version 1 198227896Sjkim * 199227896Sjkim ******************************************************************************/ 200227896Sjkim 201227896Sjkimtypedef struct acpi_table_fpdt 202227896Sjkim{ 203227896Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 204227896Sjkim 205227896Sjkim} ACPI_TABLE_FPDT; 206227896Sjkim 207227896Sjkim 208306536Sjkim/* FPDT subtable header (Performance Record Structure) */ 209227896Sjkim 210227896Sjkimtypedef struct acpi_fpdt_header 211227896Sjkim{ 212227896Sjkim UINT16 Type; 213227896Sjkim UINT8 Length; 214227896Sjkim UINT8 Revision; 215227896Sjkim 216227896Sjkim} ACPI_FPDT_HEADER; 217227896Sjkim 218227896Sjkim/* Values for Type field above */ 219227896Sjkim 220227896Sjkimenum AcpiFpdtType 221227896Sjkim{ 222227896Sjkim ACPI_FPDT_TYPE_BOOT = 0, 223246849Sjkim ACPI_FPDT_TYPE_S3PERF = 1 224227896Sjkim}; 225227896Sjkim 226227896Sjkim 227227896Sjkim/* 228227896Sjkim * FPDT subtables 229227896Sjkim */ 230227896Sjkim 231227896Sjkim/* 0: Firmware Basic Boot Performance Record */ 232227896Sjkim 233306536Sjkimtypedef struct acpi_fpdt_boot_pointer 234227896Sjkim{ 235227896Sjkim ACPI_FPDT_HEADER Header; 236227896Sjkim UINT8 Reserved[4]; 237306536Sjkim UINT64 Address; 238227896Sjkim 239306536Sjkim} ACPI_FPDT_BOOT_POINTER; 240227896Sjkim 241227896Sjkim 242227896Sjkim/* 1: S3 Performance Table Pointer Record */ 243227896Sjkim 244306536Sjkimtypedef struct acpi_fpdt_s3pt_pointer 245227896Sjkim{ 246227896Sjkim ACPI_FPDT_HEADER Header; 247227896Sjkim UINT8 Reserved[4]; 248227896Sjkim UINT64 Address; 249227896Sjkim 250306536Sjkim} ACPI_FPDT_S3PT_POINTER; 251227896Sjkim 252227896Sjkim 253227896Sjkim/* 254227896Sjkim * S3PT - S3 Performance Table. This table is pointed to by the 255306536Sjkim * S3 Pointer Record above. 256227896Sjkim */ 257227896Sjkimtypedef struct acpi_table_s3pt 258227896Sjkim{ 259227896Sjkim UINT8 Signature[4]; /* "S3PT" */ 260227896Sjkim UINT32 Length; 261227896Sjkim 262227896Sjkim} ACPI_TABLE_S3PT; 263227896Sjkim 264227896Sjkim 265227896Sjkim/* 266306536Sjkim * S3PT Subtables (Not part of the actual FPDT) 267227896Sjkim */ 268227896Sjkim 269306536Sjkim/* Values for Type field in S3PT header */ 270227896Sjkim 271227896Sjkimenum AcpiS3ptType 272227896Sjkim{ 273227896Sjkim ACPI_S3PT_TYPE_RESUME = 0, 274306536Sjkim ACPI_S3PT_TYPE_SUSPEND = 1, 275306536Sjkim ACPI_FPDT_BOOT_PERFORMANCE = 2 276227896Sjkim}; 277227896Sjkim 278227896Sjkimtypedef struct acpi_s3pt_resume 279227896Sjkim{ 280306536Sjkim ACPI_FPDT_HEADER Header; 281227896Sjkim UINT32 ResumeCount; 282227896Sjkim UINT64 FullResume; 283227896Sjkim UINT64 AverageResume; 284227896Sjkim 285227896Sjkim} ACPI_S3PT_RESUME; 286227896Sjkim 287227896Sjkimtypedef struct acpi_s3pt_suspend 288227896Sjkim{ 289306536Sjkim ACPI_FPDT_HEADER Header; 290227896Sjkim UINT64 SuspendStart; 291227896Sjkim UINT64 SuspendEnd; 292227896Sjkim 293227896Sjkim} ACPI_S3PT_SUSPEND; 294227896Sjkim 295227896Sjkim 296306536Sjkim/* 297306536Sjkim * FPDT Boot Performance Record (Not part of the actual FPDT) 298306536Sjkim */ 299306536Sjkimtypedef struct acpi_fpdt_boot 300306536Sjkim{ 301306536Sjkim ACPI_FPDT_HEADER Header; 302306536Sjkim UINT8 Reserved[4]; 303306536Sjkim UINT64 ResetEnd; 304306536Sjkim UINT64 LoadStart; 305306536Sjkim UINT64 StartupStart; 306306536Sjkim UINT64 ExitServicesEntry; 307306536Sjkim UINT64 ExitServicesExit; 308306536Sjkim 309306536Sjkim} ACPI_FPDT_BOOT; 310306536Sjkim 311306536Sjkim 312227896Sjkim/******************************************************************************* 313227896Sjkim * 314281075Sdim * GTDT - Generic Timer Description Table (ACPI 5.1) 315281075Sdim * Version 2 316227896Sjkim * 317227896Sjkim ******************************************************************************/ 318227896Sjkim 319227896Sjkimtypedef struct acpi_table_gtdt 320227896Sjkim{ 321227896Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 322281075Sdim UINT64 CounterBlockAddresss; 323281075Sdim UINT32 Reserved; 324281075Sdim UINT32 SecureEl1Interrupt; 325281075Sdim UINT32 SecureEl1Flags; 326281075Sdim UINT32 NonSecureEl1Interrupt; 327281075Sdim UINT32 NonSecureEl1Flags; 328227896Sjkim UINT32 VirtualTimerInterrupt; 329227896Sjkim UINT32 VirtualTimerFlags; 330281075Sdim UINT32 NonSecureEl2Interrupt; 331281075Sdim UINT32 NonSecureEl2Flags; 332281075Sdim UINT64 CounterReadBlockAddress; 333281075Sdim UINT32 PlatformTimerCount; 334281075Sdim UINT32 PlatformTimerOffset; 335227896Sjkim 336227896Sjkim} ACPI_TABLE_GTDT; 337227896Sjkim 338281075Sdim/* Flag Definitions: Timer Block Physical Timers and Virtual timers */ 339227896Sjkim 340281075Sdim#define ACPI_GTDT_INTERRUPT_MODE (1) 341281075Sdim#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) 342281075Sdim#define ACPI_GTDT_ALWAYS_ON (1<<2) 343227896Sjkim 344227896Sjkim 345281075Sdim/* Common GTDT subtable header */ 346227896Sjkim 347281075Sdimtypedef struct acpi_gtdt_header 348281075Sdim{ 349281075Sdim UINT8 Type; 350281075Sdim UINT16 Length; 351227896Sjkim 352281075Sdim} ACPI_GTDT_HEADER; 353281075Sdim 354281075Sdim/* Values for GTDT subtable type above */ 355281075Sdim 356281075Sdimenum AcpiGtdtType 357281075Sdim{ 358281075Sdim ACPI_GTDT_TYPE_TIMER_BLOCK = 0, 359281075Sdim ACPI_GTDT_TYPE_WATCHDOG = 1, 360281075Sdim ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 361281075Sdim}; 362281075Sdim 363281075Sdim 364281075Sdim/* GTDT Subtables, correspond to Type in acpi_gtdt_header */ 365281075Sdim 366281075Sdim/* 0: Generic Timer Block */ 367281075Sdim 368281075Sdimtypedef struct acpi_gtdt_timer_block 369281075Sdim{ 370281075Sdim ACPI_GTDT_HEADER Header; 371281075Sdim UINT8 Reserved; 372281075Sdim UINT64 BlockAddress; 373281075Sdim UINT32 TimerCount; 374281075Sdim UINT32 TimerOffset; 375281075Sdim 376281075Sdim} ACPI_GTDT_TIMER_BLOCK; 377281075Sdim 378281075Sdim/* Timer Sub-Structure, one per timer */ 379281075Sdim 380281075Sdimtypedef struct acpi_gtdt_timer_entry 381281075Sdim{ 382281075Sdim UINT8 FrameNumber; 383281075Sdim UINT8 Reserved[3]; 384281075Sdim UINT64 BaseAddress; 385281075Sdim UINT64 El0BaseAddress; 386281075Sdim UINT32 TimerInterrupt; 387281075Sdim UINT32 TimerFlags; 388281075Sdim UINT32 VirtualTimerInterrupt; 389281075Sdim UINT32 VirtualTimerFlags; 390281075Sdim UINT32 CommonFlags; 391281075Sdim 392281075Sdim} ACPI_GTDT_TIMER_ENTRY; 393281075Sdim 394281075Sdim/* Flag Definitions: TimerFlags and VirtualTimerFlags above */ 395281075Sdim 396281075Sdim#define ACPI_GTDT_GT_IRQ_MODE (1) 397281075Sdim#define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) 398281075Sdim 399281075Sdim/* Flag Definitions: CommonFlags above */ 400281075Sdim 401281075Sdim#define ACPI_GTDT_GT_IS_SECURE_TIMER (1) 402281075Sdim#define ACPI_GTDT_GT_ALWAYS_ON (1<<1) 403281075Sdim 404281075Sdim 405281075Sdim/* 1: SBSA Generic Watchdog Structure */ 406281075Sdim 407281075Sdimtypedef struct acpi_gtdt_watchdog 408281075Sdim{ 409281075Sdim ACPI_GTDT_HEADER Header; 410281075Sdim UINT8 Reserved; 411281075Sdim UINT64 RefreshFrameAddress; 412281075Sdim UINT64 ControlFrameAddress; 413281075Sdim UINT32 TimerInterrupt; 414281075Sdim UINT32 TimerFlags; 415281075Sdim 416281075Sdim} ACPI_GTDT_WATCHDOG; 417281075Sdim 418281075Sdim/* Flag Definitions: TimerFlags above */ 419281075Sdim 420281075Sdim#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) 421281075Sdim#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) 422281075Sdim#define ACPI_GTDT_WATCHDOG_SECURE (1<<2) 423281075Sdim 424281075Sdim 425227896Sjkim/******************************************************************************* 426227896Sjkim * 427227896Sjkim * MPST - Memory Power State Table (ACPI 5.0) 428227896Sjkim * Version 1 429227896Sjkim * 430227896Sjkim ******************************************************************************/ 431227896Sjkim 432227896Sjkim#define ACPI_MPST_CHANNEL_INFO \ 433227896Sjkim UINT8 ChannelId; \ 434241973Sjkim UINT8 Reserved1[3]; \ 435241973Sjkim UINT16 PowerNodeCount; \ 436241973Sjkim UINT16 Reserved2; 437227896Sjkim 438227896Sjkim/* Main table */ 439227896Sjkim 440227896Sjkimtypedef struct acpi_table_mpst 441227896Sjkim{ 442227896Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 443227896Sjkim ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 444227896Sjkim 445227896Sjkim} ACPI_TABLE_MPST; 446227896Sjkim 447227896Sjkim 448227896Sjkim/* Memory Platform Communication Channel Info */ 449227896Sjkim 450227896Sjkimtypedef struct acpi_mpst_channel 451227896Sjkim{ 452227896Sjkim ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 453227896Sjkim 454227896Sjkim} ACPI_MPST_CHANNEL; 455227896Sjkim 456227896Sjkim 457227896Sjkim/* Memory Power Node Structure */ 458227896Sjkim 459227896Sjkimtypedef struct acpi_mpst_power_node 460227896Sjkim{ 461227896Sjkim UINT8 Flags; 462227896Sjkim UINT8 Reserved1; 463227896Sjkim UINT16 NodeId; 464227896Sjkim UINT32 Length; 465227896Sjkim UINT64 RangeAddress; 466227896Sjkim UINT64 RangeLength; 467241973Sjkim UINT32 NumPowerStates; 468241973Sjkim UINT32 NumPhysicalComponents; 469227896Sjkim 470227896Sjkim} ACPI_MPST_POWER_NODE; 471227896Sjkim 472227896Sjkim/* Values for Flags field above */ 473227896Sjkim 474227896Sjkim#define ACPI_MPST_ENABLED 1 475227896Sjkim#define ACPI_MPST_POWER_MANAGED 2 476227896Sjkim#define ACPI_MPST_HOT_PLUG_CAPABLE 4 477227896Sjkim 478227896Sjkim 479227896Sjkim/* Memory Power State Structure (follows POWER_NODE above) */ 480227896Sjkim 481227896Sjkimtypedef struct acpi_mpst_power_state 482227896Sjkim{ 483227896Sjkim UINT8 PowerState; 484227896Sjkim UINT8 InfoIndex; 485227896Sjkim 486227896Sjkim} ACPI_MPST_POWER_STATE; 487227896Sjkim 488227896Sjkim 489227896Sjkim/* Physical Component ID Structure (follows POWER_STATE above) */ 490227896Sjkim 491227896Sjkimtypedef struct acpi_mpst_component 492227896Sjkim{ 493227896Sjkim UINT16 ComponentId; 494227896Sjkim 495227896Sjkim} ACPI_MPST_COMPONENT; 496227896Sjkim 497227896Sjkim 498227896Sjkim/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 499227896Sjkim 500227896Sjkimtypedef struct acpi_mpst_data_hdr 501227896Sjkim{ 502227896Sjkim UINT16 CharacteristicsCount; 503241973Sjkim UINT16 Reserved; 504227896Sjkim 505227896Sjkim} ACPI_MPST_DATA_HDR; 506227896Sjkim 507227896Sjkimtypedef struct acpi_mpst_power_data 508227896Sjkim{ 509241973Sjkim UINT8 StructureId; 510227896Sjkim UINT8 Flags; 511227896Sjkim UINT16 Reserved1; 512227896Sjkim UINT32 AveragePower; 513227896Sjkim UINT32 PowerSaving; 514227896Sjkim UINT64 ExitLatency; 515227896Sjkim UINT64 Reserved2; 516227896Sjkim 517227896Sjkim} ACPI_MPST_POWER_DATA; 518227896Sjkim 519227896Sjkim/* Values for Flags field above */ 520227896Sjkim 521227896Sjkim#define ACPI_MPST_PRESERVE 1 522227896Sjkim#define ACPI_MPST_AUTOENTRY 2 523227896Sjkim#define ACPI_MPST_AUTOEXIT 4 524227896Sjkim 525227896Sjkim 526227896Sjkim/* Shared Memory Region (not part of an ACPI table) */ 527227896Sjkim 528227896Sjkimtypedef struct acpi_mpst_shared 529227896Sjkim{ 530227896Sjkim UINT32 Signature; 531227896Sjkim UINT16 PccCommand; 532227896Sjkim UINT16 PccStatus; 533241973Sjkim UINT32 CommandRegister; 534241973Sjkim UINT32 StatusRegister; 535241973Sjkim UINT32 PowerStateId; 536241973Sjkim UINT32 PowerNodeId; 537227896Sjkim UINT64 EnergyConsumed; 538227896Sjkim UINT64 AveragePower; 539227896Sjkim 540227896Sjkim} ACPI_MPST_SHARED; 541227896Sjkim 542227896Sjkim 543227896Sjkim/******************************************************************************* 544227896Sjkim * 545227896Sjkim * PCCT - Platform Communications Channel Table (ACPI 5.0) 546227896Sjkim * Version 1 547227896Sjkim * 548227896Sjkim ******************************************************************************/ 549227896Sjkim 550227896Sjkimtypedef struct acpi_table_pcct 551227896Sjkim{ 552227896Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 553227896Sjkim UINT32 Flags; 554281075Sdim UINT64 Reserved; 555227896Sjkim 556227896Sjkim} ACPI_TABLE_PCCT; 557227896Sjkim 558227896Sjkim/* Values for Flags field above */ 559227896Sjkim 560227896Sjkim#define ACPI_PCCT_DOORBELL 1 561227896Sjkim 562281075Sdim/* Values for subtable type in ACPI_SUBTABLE_HEADER */ 563281075Sdim 564281075Sdimenum AcpiPcctType 565281075Sdim{ 566306536Sjkim ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, 567306536Sjkim ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, 568306536Sjkim ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ 569306536Sjkim ACPI_PCCT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 570281075Sdim}; 571281075Sdim 572227896Sjkim/* 573281075Sdim * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 574227896Sjkim */ 575227896Sjkim 576227896Sjkim/* 0: Generic Communications Subspace */ 577227896Sjkim 578227896Sjkimtypedef struct acpi_pcct_subspace 579227896Sjkim{ 580227896Sjkim ACPI_SUBTABLE_HEADER Header; 581227896Sjkim UINT8 Reserved[6]; 582227896Sjkim UINT64 BaseAddress; 583227896Sjkim UINT64 Length; 584227896Sjkim ACPI_GENERIC_ADDRESS DoorbellRegister; 585227896Sjkim UINT64 PreserveMask; 586227896Sjkim UINT64 WriteMask; 587281075Sdim UINT32 Latency; 588281075Sdim UINT32 MaxAccessRate; 589281075Sdim UINT16 MinTurnaroundTime; 590227896Sjkim 591227896Sjkim} ACPI_PCCT_SUBSPACE; 592227896Sjkim 593227896Sjkim 594281075Sdim/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ 595281075Sdim 596281075Sdimtypedef struct acpi_pcct_hw_reduced 597281075Sdim{ 598281075Sdim ACPI_SUBTABLE_HEADER Header; 599281075Sdim UINT32 DoorbellInterrupt; 600281075Sdim UINT8 Flags; 601281075Sdim UINT8 Reserved; 602281075Sdim UINT64 BaseAddress; 603281075Sdim UINT64 Length; 604281075Sdim ACPI_GENERIC_ADDRESS DoorbellRegister; 605281075Sdim UINT64 PreserveMask; 606281075Sdim UINT64 WriteMask; 607281075Sdim UINT32 Latency; 608281075Sdim UINT32 MaxAccessRate; 609281075Sdim UINT16 MinTurnaroundTime; 610281075Sdim 611281075Sdim} ACPI_PCCT_HW_REDUCED; 612281075Sdim 613306536Sjkim 614306536Sjkim/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ 615306536Sjkim 616306536Sjkimtypedef struct acpi_pcct_hw_reduced_type2 617306536Sjkim{ 618306536Sjkim ACPI_SUBTABLE_HEADER Header; 619306536Sjkim UINT32 DoorbellInterrupt; 620306536Sjkim UINT8 Flags; 621306536Sjkim UINT8 Reserved; 622306536Sjkim UINT64 BaseAddress; 623306536Sjkim UINT64 Length; 624306536Sjkim ACPI_GENERIC_ADDRESS DoorbellRegister; 625306536Sjkim UINT64 PreserveMask; 626306536Sjkim UINT64 WriteMask; 627306536Sjkim UINT32 Latency; 628306536Sjkim UINT32 MaxAccessRate; 629306536Sjkim UINT16 MinTurnaroundTime; 630306536Sjkim ACPI_GENERIC_ADDRESS DoorbellAckRegister; 631306536Sjkim UINT64 AckPreserveMask; 632306536Sjkim UINT64 AckWriteMask; 633306536Sjkim 634306536Sjkim} ACPI_PCCT_HW_REDUCED_TYPE2; 635306536Sjkim 636306536Sjkim 637281075Sdim/* Values for doorbell flags above */ 638281075Sdim 639281075Sdim#define ACPI_PCCT_INTERRUPT_POLARITY (1) 640281075Sdim#define ACPI_PCCT_INTERRUPT_MODE (1<<1) 641281075Sdim 642281075Sdim 643227896Sjkim/* 644227896Sjkim * PCC memory structures (not part of the ACPI table) 645227896Sjkim */ 646227896Sjkim 647227896Sjkim/* Shared Memory Region */ 648227896Sjkim 649227896Sjkimtypedef struct acpi_pcct_shared_memory 650227896Sjkim{ 651227896Sjkim UINT32 Signature; 652227896Sjkim UINT16 Command; 653227896Sjkim UINT16 Status; 654227896Sjkim 655227896Sjkim} ACPI_PCCT_SHARED_MEMORY; 656227896Sjkim 657227896Sjkim 658227896Sjkim/******************************************************************************* 659227896Sjkim * 660227896Sjkim * PMTT - Platform Memory Topology Table (ACPI 5.0) 661227896Sjkim * Version 1 662227896Sjkim * 663227896Sjkim ******************************************************************************/ 664227896Sjkim 665227896Sjkimtypedef struct acpi_table_pmtt 666227896Sjkim{ 667227896Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 668227896Sjkim UINT32 Reserved; 669227896Sjkim 670227896Sjkim} ACPI_TABLE_PMTT; 671227896Sjkim 672227896Sjkim 673227896Sjkim/* Common header for PMTT subtables that follow main table */ 674227896Sjkim 675227896Sjkimtypedef struct acpi_pmtt_header 676227896Sjkim{ 677227896Sjkim UINT8 Type; 678227896Sjkim UINT8 Reserved1; 679227896Sjkim UINT16 Length; 680227896Sjkim UINT16 Flags; 681227896Sjkim UINT16 Reserved2; 682227896Sjkim 683227896Sjkim} ACPI_PMTT_HEADER; 684227896Sjkim 685227896Sjkim/* Values for Type field above */ 686227896Sjkim 687227896Sjkim#define ACPI_PMTT_TYPE_SOCKET 0 688227896Sjkim#define ACPI_PMTT_TYPE_CONTROLLER 1 689227896Sjkim#define ACPI_PMTT_TYPE_DIMM 2 690227896Sjkim#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ 691227896Sjkim 692227896Sjkim/* Values for Flags field above */ 693227896Sjkim 694227896Sjkim#define ACPI_PMTT_TOP_LEVEL 0x0001 695227896Sjkim#define ACPI_PMTT_PHYSICAL 0x0002 696227896Sjkim#define ACPI_PMTT_MEMORY_TYPE 0x000C 697227896Sjkim 698227896Sjkim 699227896Sjkim/* 700227896Sjkim * PMTT subtables, correspond to Type in acpi_pmtt_header 701227896Sjkim */ 702227896Sjkim 703227896Sjkim 704227896Sjkim/* 0: Socket Structure */ 705227896Sjkim 706227896Sjkimtypedef struct acpi_pmtt_socket 707227896Sjkim{ 708227896Sjkim ACPI_PMTT_HEADER Header; 709227896Sjkim UINT16 SocketId; 710227896Sjkim UINT16 Reserved; 711227896Sjkim 712227896Sjkim} ACPI_PMTT_SOCKET; 713227896Sjkim 714227896Sjkim 715227896Sjkim/* 1: Memory Controller subtable */ 716227896Sjkim 717227896Sjkimtypedef struct acpi_pmtt_controller 718227896Sjkim{ 719227896Sjkim ACPI_PMTT_HEADER Header; 720227896Sjkim UINT32 ReadLatency; 721227896Sjkim UINT32 WriteLatency; 722227896Sjkim UINT32 ReadBandwidth; 723227896Sjkim UINT32 WriteBandwidth; 724227896Sjkim UINT16 AccessWidth; 725227896Sjkim UINT16 Alignment; 726227896Sjkim UINT16 Reserved; 727227896Sjkim UINT16 DomainCount; 728227896Sjkim 729227896Sjkim} ACPI_PMTT_CONTROLLER; 730227896Sjkim 731227896Sjkim/* 1a: Proximity Domain substructure */ 732227896Sjkim 733227896Sjkimtypedef struct acpi_pmtt_domain 734227896Sjkim{ 735227896Sjkim UINT32 ProximityDomain; 736227896Sjkim 737227896Sjkim} ACPI_PMTT_DOMAIN; 738227896Sjkim 739227896Sjkim 740227896Sjkim/* 2: Physical Component Identifier (DIMM) */ 741227896Sjkim 742227896Sjkimtypedef struct acpi_pmtt_physical_component 743227896Sjkim{ 744227896Sjkim ACPI_PMTT_HEADER Header; 745227896Sjkim UINT16 ComponentId; 746227896Sjkim UINT16 Reserved; 747227896Sjkim UINT32 MemorySize; 748227896Sjkim UINT32 BiosHandle; 749227896Sjkim 750227896Sjkim} ACPI_PMTT_PHYSICAL_COMPONENT; 751227896Sjkim 752227896Sjkim 753227896Sjkim/******************************************************************************* 754227896Sjkim * 755227896Sjkim * RASF - RAS Feature Table (ACPI 5.0) 756227896Sjkim * Version 1 757227896Sjkim * 758227896Sjkim ******************************************************************************/ 759227896Sjkim 760227896Sjkimtypedef struct acpi_table_rasf 761227896Sjkim{ 762227896Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 763227896Sjkim UINT8 ChannelId[12]; 764227896Sjkim 765227896Sjkim} ACPI_TABLE_RASF; 766227896Sjkim 767227896Sjkim/* RASF Platform Communication Channel Shared Memory Region */ 768227896Sjkim 769227896Sjkimtypedef struct acpi_rasf_shared_memory 770227896Sjkim{ 771227896Sjkim UINT32 Signature; 772227896Sjkim UINT16 Command; 773227896Sjkim UINT16 Status; 774246849Sjkim UINT16 Version; 775246849Sjkim UINT8 Capabilities[16]; 776246849Sjkim UINT8 SetCapabilities[16]; 777246849Sjkim UINT16 NumParameterBlocks; 778246849Sjkim UINT32 SetCapabilitiesStatus; 779227896Sjkim 780227896Sjkim} ACPI_RASF_SHARED_MEMORY; 781227896Sjkim 782246849Sjkim/* RASF Parameter Block Structure Header */ 783246849Sjkim 784246849Sjkimtypedef struct acpi_rasf_parameter_block 785246849Sjkim{ 786246849Sjkim UINT16 Type; 787246849Sjkim UINT16 Version; 788246849Sjkim UINT16 Length; 789246849Sjkim 790246849Sjkim} ACPI_RASF_PARAMETER_BLOCK; 791246849Sjkim 792246849Sjkim/* RASF Parameter Block Structure for PATROL_SCRUB */ 793246849Sjkim 794246849Sjkimtypedef struct acpi_rasf_patrol_scrub_parameter 795246849Sjkim{ 796246849Sjkim ACPI_RASF_PARAMETER_BLOCK Header; 797246849Sjkim UINT16 PatrolScrubCommand; 798246849Sjkim UINT64 RequestedAddressRange[2]; 799246849Sjkim UINT64 ActualAddressRange[2]; 800246849Sjkim UINT16 Flags; 801246849Sjkim UINT8 RequestedSpeed; 802246849Sjkim 803246849Sjkim} ACPI_RASF_PATROL_SCRUB_PARAMETER; 804246849Sjkim 805227896Sjkim/* Masks for Flags and Speed fields above */ 806227896Sjkim 807227896Sjkim#define ACPI_RASF_SCRUBBER_RUNNING 1 808227896Sjkim#define ACPI_RASF_SPEED (7<<1) 809246849Sjkim#define ACPI_RASF_SPEED_SLOW (0<<1) 810246849Sjkim#define ACPI_RASF_SPEED_MEDIUM (4<<1) 811246849Sjkim#define ACPI_RASF_SPEED_FAST (7<<1) 812227896Sjkim 813227896Sjkim/* Channel Commands */ 814227896Sjkim 815227896Sjkimenum AcpiRasfCommands 816227896Sjkim{ 817246849Sjkim ACPI_RASF_EXECUTE_RASF_COMMAND = 1 818227896Sjkim}; 819227896Sjkim 820246849Sjkim/* Platform RAS Capabilities */ 821246849Sjkim 822246849Sjkimenum AcpiRasfCapabiliities 823246849Sjkim{ 824246849Sjkim ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, 825246849Sjkim ACPI_SW_PATROL_SCRUB_EXPOSED = 1 826246849Sjkim}; 827246849Sjkim 828246849Sjkim/* Patrol Scrub Commands */ 829246849Sjkim 830246849Sjkimenum AcpiRasfPatrolScrubCommands 831246849Sjkim{ 832246849Sjkim ACPI_RASF_GET_PATROL_PARAMETERS = 1, 833246849Sjkim ACPI_RASF_START_PATROL_SCRUBBER = 2, 834246849Sjkim ACPI_RASF_STOP_PATROL_SCRUBBER = 3 835246849Sjkim}; 836246849Sjkim 837227896Sjkim/* Channel Command flags */ 838227896Sjkim 839227896Sjkim#define ACPI_RASF_GENERATE_SCI (1<<15) 840227896Sjkim 841227896Sjkim/* Status values */ 842227896Sjkim 843227896Sjkimenum AcpiRasfStatus 844227896Sjkim{ 845227896Sjkim ACPI_RASF_SUCCESS = 0, 846227896Sjkim ACPI_RASF_NOT_VALID = 1, 847227896Sjkim ACPI_RASF_NOT_SUPPORTED = 2, 848227896Sjkim ACPI_RASF_BUSY = 3, 849227896Sjkim ACPI_RASF_FAILED = 4, 850227896Sjkim ACPI_RASF_ABORTED = 5, 851227896Sjkim ACPI_RASF_INVALID_DATA = 6 852227896Sjkim}; 853227896Sjkim 854227896Sjkim/* Status flags */ 855227896Sjkim 856227896Sjkim#define ACPI_RASF_COMMAND_COMPLETE (1) 857227896Sjkim#define ACPI_RASF_SCI_DOORBELL (1<<1) 858227896Sjkim#define ACPI_RASF_ERROR (1<<2) 859227896Sjkim#define ACPI_RASF_STATUS (0x1F<<3) 860227896Sjkim 861227896Sjkim 862245582Sjkim/******************************************************************************* 863245582Sjkim * 864284460Sjkim * STAO - Status Override Table (_STA override) - ACPI 6.0 865284460Sjkim * Version 1 866284460Sjkim * 867284460Sjkim * Conforms to "ACPI Specification for Status Override Table" 868284460Sjkim * 6 January 2015 869284460Sjkim * 870284460Sjkim ******************************************************************************/ 871284460Sjkim 872284460Sjkimtypedef struct acpi_table_stao 873284460Sjkim{ 874284460Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 875284460Sjkim UINT8 IgnoreUart; 876284460Sjkim 877284460Sjkim} ACPI_TABLE_STAO; 878284460Sjkim 879284460Sjkim 880284460Sjkim/******************************************************************************* 881284460Sjkim * 882284460Sjkim * WPBT - Windows Platform Environment Table (ACPI 6.0) 883284460Sjkim * Version 1 884284460Sjkim * 885284460Sjkim * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 886284460Sjkim * 887284460Sjkim ******************************************************************************/ 888284460Sjkim 889284460Sjkimtypedef struct acpi_table_wpbt 890284460Sjkim{ 891284460Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 892284460Sjkim UINT32 HandoffSize; 893284460Sjkim UINT64 HandoffAddress; 894284460Sjkim UINT8 Layout; 895284460Sjkim UINT8 Type; 896284460Sjkim UINT16 ArgumentsLength; 897284460Sjkim 898284460Sjkim} ACPI_TABLE_WPBT; 899284460Sjkim 900284460Sjkim 901284460Sjkim/******************************************************************************* 902284460Sjkim * 903284460Sjkim * XENV - Xen Environment Table (ACPI 6.0) 904284460Sjkim * Version 1 905284460Sjkim * 906284460Sjkim * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015 907284460Sjkim * 908284460Sjkim ******************************************************************************/ 909284460Sjkim 910284460Sjkimtypedef struct acpi_table_xenv 911284460Sjkim{ 912284460Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 913284460Sjkim UINT64 GrantTableAddress; 914284460Sjkim UINT64 GrantTableSize; 915284460Sjkim UINT32 EventInterrupt; 916284460Sjkim UINT8 EventFlags; 917284460Sjkim 918284460Sjkim} ACPI_TABLE_XENV; 919284460Sjkim 920284460Sjkim 921227896Sjkim/* Reset to default packing */ 922227896Sjkim 923227896Sjkim#pragma pack() 924227896Sjkim 925227896Sjkim#endif /* __ACTBL3_H__ */ 926