1*3f0275a0SJung-uk Kim /****************************************************************************** 2*3f0275a0SJung-uk Kim * 3*3f0275a0SJung-uk Kim * Name: actbl3.h - ACPI Table Definitions 4*3f0275a0SJung-uk Kim * 5*3f0275a0SJung-uk Kim *****************************************************************************/ 6*3f0275a0SJung-uk Kim 7*3f0275a0SJung-uk Kim /* 8*3f0275a0SJung-uk Kim * Copyright (C) 2000 - 2011, Intel Corp. 9*3f0275a0SJung-uk Kim * All rights reserved. 10*3f0275a0SJung-uk Kim * 11*3f0275a0SJung-uk Kim * Redistribution and use in source and binary forms, with or without 12*3f0275a0SJung-uk Kim * modification, are permitted provided that the following conditions 13*3f0275a0SJung-uk Kim * are met: 14*3f0275a0SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 15*3f0275a0SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 16*3f0275a0SJung-uk Kim * without modification. 17*3f0275a0SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18*3f0275a0SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 19*3f0275a0SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 20*3f0275a0SJung-uk Kim * including a substantially similar Disclaimer requirement for further 21*3f0275a0SJung-uk Kim * binary redistribution. 22*3f0275a0SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 23*3f0275a0SJung-uk Kim * of any contributors may be used to endorse or promote products derived 24*3f0275a0SJung-uk Kim * from this software without specific prior written permission. 25*3f0275a0SJung-uk Kim * 26*3f0275a0SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 27*3f0275a0SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 28*3f0275a0SJung-uk Kim * Software Foundation. 29*3f0275a0SJung-uk Kim * 30*3f0275a0SJung-uk Kim * NO WARRANTY 31*3f0275a0SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32*3f0275a0SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33*3f0275a0SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34*3f0275a0SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35*3f0275a0SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36*3f0275a0SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37*3f0275a0SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38*3f0275a0SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39*3f0275a0SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40*3f0275a0SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41*3f0275a0SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 42*3f0275a0SJung-uk Kim */ 43*3f0275a0SJung-uk Kim 44*3f0275a0SJung-uk Kim #ifndef __ACTBL3_H__ 45*3f0275a0SJung-uk Kim #define __ACTBL3_H__ 46*3f0275a0SJung-uk Kim 47*3f0275a0SJung-uk Kim 48*3f0275a0SJung-uk Kim /******************************************************************************* 49*3f0275a0SJung-uk Kim * 50*3f0275a0SJung-uk Kim * Additional ACPI Tables (3) 51*3f0275a0SJung-uk Kim * 52*3f0275a0SJung-uk Kim * These tables are not consumed directly by the ACPICA subsystem, but are 53*3f0275a0SJung-uk Kim * included here to support device drivers and the AML disassembler. 54*3f0275a0SJung-uk Kim * 55*3f0275a0SJung-uk Kim * The tables in this file are fully defined within the ACPI specification. 56*3f0275a0SJung-uk Kim * 57*3f0275a0SJung-uk Kim ******************************************************************************/ 58*3f0275a0SJung-uk Kim 59*3f0275a0SJung-uk Kim 60*3f0275a0SJung-uk Kim /* 61*3f0275a0SJung-uk Kim * Values for description table header signatures for tables defined in this 62*3f0275a0SJung-uk Kim * file. Useful because they make it more difficult to inadvertently type in 63*3f0275a0SJung-uk Kim * the wrong signature. 64*3f0275a0SJung-uk Kim */ 65*3f0275a0SJung-uk Kim #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ 66*3f0275a0SJung-uk Kim #define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ 67*3f0275a0SJung-uk Kim #define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ 68*3f0275a0SJung-uk Kim #define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ 69*3f0275a0SJung-uk Kim #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 70*3f0275a0SJung-uk Kim #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 71*3f0275a0SJung-uk Kim #define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 72*3f0275a0SJung-uk Kim #define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 73*3f0275a0SJung-uk Kim 74*3f0275a0SJung-uk Kim #define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ 75*3f0275a0SJung-uk Kim #define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ 76*3f0275a0SJung-uk Kim 77*3f0275a0SJung-uk Kim /* Reserved table signatures */ 78*3f0275a0SJung-uk Kim 79*3f0275a0SJung-uk Kim #define ACPI_SIG_CSRT "CSRT" /* Core System Resources Table */ 80*3f0275a0SJung-uk Kim #define ACPI_SIG_DBG2 "DBG2" /* Debug Port table 2 */ 81*3f0275a0SJung-uk Kim #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ 82*3f0275a0SJung-uk Kim #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 83*3f0275a0SJung-uk Kim #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ 84*3f0275a0SJung-uk Kim 85*3f0275a0SJung-uk Kim /* 86*3f0275a0SJung-uk Kim * All tables must be byte-packed to match the ACPI specification, since 87*3f0275a0SJung-uk Kim * the tables are provided by the system BIOS. 88*3f0275a0SJung-uk Kim */ 89*3f0275a0SJung-uk Kim #pragma pack(1) 90*3f0275a0SJung-uk Kim 91*3f0275a0SJung-uk Kim /* 92*3f0275a0SJung-uk Kim * Note about bitfields: The UINT8 type is used for bitfields in ACPI tables. 93*3f0275a0SJung-uk Kim * This is the only type that is even remotely portable. Anything else is not 94*3f0275a0SJung-uk Kim * portable, so do not use any other bitfield types. 95*3f0275a0SJung-uk Kim */ 96*3f0275a0SJung-uk Kim 97*3f0275a0SJung-uk Kim 98*3f0275a0SJung-uk Kim /******************************************************************************* 99*3f0275a0SJung-uk Kim * 100*3f0275a0SJung-uk Kim * BGRT - Boot Graphics Resource Table (ACPI 5.0) 101*3f0275a0SJung-uk Kim * Version 1 102*3f0275a0SJung-uk Kim * 103*3f0275a0SJung-uk Kim ******************************************************************************/ 104*3f0275a0SJung-uk Kim 105*3f0275a0SJung-uk Kim typedef struct acpi_table_bgrt 106*3f0275a0SJung-uk Kim { 107*3f0275a0SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 108*3f0275a0SJung-uk Kim UINT16 Version; 109*3f0275a0SJung-uk Kim UINT8 Status; 110*3f0275a0SJung-uk Kim UINT8 ImageType; 111*3f0275a0SJung-uk Kim UINT64 ImageAddress; 112*3f0275a0SJung-uk Kim UINT32 ImageOffsetX; 113*3f0275a0SJung-uk Kim UINT32 ImageOffsetY; 114*3f0275a0SJung-uk Kim 115*3f0275a0SJung-uk Kim } ACPI_TABLE_BGRT; 116*3f0275a0SJung-uk Kim 117*3f0275a0SJung-uk Kim 118*3f0275a0SJung-uk Kim /******************************************************************************* 119*3f0275a0SJung-uk Kim * 120*3f0275a0SJung-uk Kim * DRTM - Dynamic Root of Trust for Measurement table 121*3f0275a0SJung-uk Kim * 122*3f0275a0SJung-uk Kim ******************************************************************************/ 123*3f0275a0SJung-uk Kim 124*3f0275a0SJung-uk Kim typedef struct acpi_table_drtm 125*3f0275a0SJung-uk Kim { 126*3f0275a0SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 127*3f0275a0SJung-uk Kim UINT64 EntryBaseAddress; 128*3f0275a0SJung-uk Kim UINT64 EntryLength; 129*3f0275a0SJung-uk Kim UINT32 EntryAddress32; 130*3f0275a0SJung-uk Kim UINT64 EntryAddress64; 131*3f0275a0SJung-uk Kim UINT64 ExitAddress; 132*3f0275a0SJung-uk Kim UINT64 LogAreaAddress; 133*3f0275a0SJung-uk Kim UINT32 LogAreaLength; 134*3f0275a0SJung-uk Kim UINT64 ArchDependentAddress; 135*3f0275a0SJung-uk Kim UINT32 Flags; 136*3f0275a0SJung-uk Kim 137*3f0275a0SJung-uk Kim } ACPI_TABLE_DRTM; 138*3f0275a0SJung-uk Kim 139*3f0275a0SJung-uk Kim /* 1) Validated Tables List */ 140*3f0275a0SJung-uk Kim 141*3f0275a0SJung-uk Kim typedef struct acpi_drtm_vtl_list 142*3f0275a0SJung-uk Kim { 143*3f0275a0SJung-uk Kim UINT32 ValidatedTableListCount; 144*3f0275a0SJung-uk Kim 145*3f0275a0SJung-uk Kim } ACPI_DRTM_VTL_LIST; 146*3f0275a0SJung-uk Kim 147*3f0275a0SJung-uk Kim /* 2) Resources List */ 148*3f0275a0SJung-uk Kim 149*3f0275a0SJung-uk Kim typedef struct acpi_drtm_resource_list 150*3f0275a0SJung-uk Kim { 151*3f0275a0SJung-uk Kim UINT32 ResourceListCount; 152*3f0275a0SJung-uk Kim 153*3f0275a0SJung-uk Kim } ACPI_DRTM_RESOURCE_LIST; 154*3f0275a0SJung-uk Kim 155*3f0275a0SJung-uk Kim /* 3) Platform-specific Identifiers List */ 156*3f0275a0SJung-uk Kim 157*3f0275a0SJung-uk Kim typedef struct acpi_drtm_id_list 158*3f0275a0SJung-uk Kim { 159*3f0275a0SJung-uk Kim UINT32 IdListCount; 160*3f0275a0SJung-uk Kim 161*3f0275a0SJung-uk Kim } ACPI_DRTM_ID_LIST; 162*3f0275a0SJung-uk Kim 163*3f0275a0SJung-uk Kim 164*3f0275a0SJung-uk Kim /******************************************************************************* 165*3f0275a0SJung-uk Kim * 166*3f0275a0SJung-uk Kim * FPDT - Firmware Performance Data Table (ACPI 5.0) 167*3f0275a0SJung-uk Kim * Version 1 168*3f0275a0SJung-uk Kim * 169*3f0275a0SJung-uk Kim ******************************************************************************/ 170*3f0275a0SJung-uk Kim 171*3f0275a0SJung-uk Kim typedef struct acpi_table_fpdt 172*3f0275a0SJung-uk Kim { 173*3f0275a0SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 174*3f0275a0SJung-uk Kim 175*3f0275a0SJung-uk Kim } ACPI_TABLE_FPDT; 176*3f0275a0SJung-uk Kim 177*3f0275a0SJung-uk Kim 178*3f0275a0SJung-uk Kim /* FPDT subtable header */ 179*3f0275a0SJung-uk Kim 180*3f0275a0SJung-uk Kim typedef struct acpi_fpdt_header 181*3f0275a0SJung-uk Kim { 182*3f0275a0SJung-uk Kim UINT16 Type; 183*3f0275a0SJung-uk Kim UINT8 Length; 184*3f0275a0SJung-uk Kim UINT8 Revision; 185*3f0275a0SJung-uk Kim 186*3f0275a0SJung-uk Kim } ACPI_FPDT_HEADER; 187*3f0275a0SJung-uk Kim 188*3f0275a0SJung-uk Kim /* Values for Type field above */ 189*3f0275a0SJung-uk Kim 190*3f0275a0SJung-uk Kim enum AcpiFpdtType 191*3f0275a0SJung-uk Kim { 192*3f0275a0SJung-uk Kim ACPI_FPDT_TYPE_BOOT = 0, 193*3f0275a0SJung-uk Kim ACPI_FPDT_TYPE_S3PERF = 1, 194*3f0275a0SJung-uk Kim }; 195*3f0275a0SJung-uk Kim 196*3f0275a0SJung-uk Kim 197*3f0275a0SJung-uk Kim /* 198*3f0275a0SJung-uk Kim * FPDT subtables 199*3f0275a0SJung-uk Kim */ 200*3f0275a0SJung-uk Kim 201*3f0275a0SJung-uk Kim /* 0: Firmware Basic Boot Performance Record */ 202*3f0275a0SJung-uk Kim 203*3f0275a0SJung-uk Kim typedef struct acpi_fpdt_boot 204*3f0275a0SJung-uk Kim { 205*3f0275a0SJung-uk Kim ACPI_FPDT_HEADER Header; 206*3f0275a0SJung-uk Kim UINT8 Reserved[4]; 207*3f0275a0SJung-uk Kim UINT64 ResetEnd; 208*3f0275a0SJung-uk Kim UINT64 LoadStart; 209*3f0275a0SJung-uk Kim UINT64 StartupStart; 210*3f0275a0SJung-uk Kim UINT64 ExitServicesEntry; 211*3f0275a0SJung-uk Kim UINT64 ExitServicesExit; 212*3f0275a0SJung-uk Kim 213*3f0275a0SJung-uk Kim } ACPI_FPDT_BOOT; 214*3f0275a0SJung-uk Kim 215*3f0275a0SJung-uk Kim 216*3f0275a0SJung-uk Kim /* 1: S3 Performance Table Pointer Record */ 217*3f0275a0SJung-uk Kim 218*3f0275a0SJung-uk Kim typedef struct acpi_fpdt_s3pt_ptr 219*3f0275a0SJung-uk Kim { 220*3f0275a0SJung-uk Kim ACPI_FPDT_HEADER Header; 221*3f0275a0SJung-uk Kim UINT8 Reserved[4]; 222*3f0275a0SJung-uk Kim UINT64 Address; 223*3f0275a0SJung-uk Kim 224*3f0275a0SJung-uk Kim } ACPI_FPDT_S3PT_PTR; 225*3f0275a0SJung-uk Kim 226*3f0275a0SJung-uk Kim 227*3f0275a0SJung-uk Kim /* 228*3f0275a0SJung-uk Kim * S3PT - S3 Performance Table. This table is pointed to by the 229*3f0275a0SJung-uk Kim * FPDT S3 Pointer Record above. 230*3f0275a0SJung-uk Kim */ 231*3f0275a0SJung-uk Kim typedef struct acpi_table_s3pt 232*3f0275a0SJung-uk Kim { 233*3f0275a0SJung-uk Kim UINT8 Signature[4]; /* "S3PT" */ 234*3f0275a0SJung-uk Kim UINT32 Length; 235*3f0275a0SJung-uk Kim 236*3f0275a0SJung-uk Kim } ACPI_TABLE_S3PT; 237*3f0275a0SJung-uk Kim 238*3f0275a0SJung-uk Kim 239*3f0275a0SJung-uk Kim /* 240*3f0275a0SJung-uk Kim * S3PT Subtables 241*3f0275a0SJung-uk Kim */ 242*3f0275a0SJung-uk Kim typedef struct acpi_s3pt_header 243*3f0275a0SJung-uk Kim { 244*3f0275a0SJung-uk Kim UINT16 Type; 245*3f0275a0SJung-uk Kim UINT8 Length; 246*3f0275a0SJung-uk Kim UINT8 Revision; 247*3f0275a0SJung-uk Kim 248*3f0275a0SJung-uk Kim } ACPI_S3PT_HEADER; 249*3f0275a0SJung-uk Kim 250*3f0275a0SJung-uk Kim /* Values for Type field above */ 251*3f0275a0SJung-uk Kim 252*3f0275a0SJung-uk Kim enum AcpiS3ptType 253*3f0275a0SJung-uk Kim { 254*3f0275a0SJung-uk Kim ACPI_S3PT_TYPE_RESUME = 0, 255*3f0275a0SJung-uk Kim ACPI_S3PT_TYPE_SUSPEND = 1, 256*3f0275a0SJung-uk Kim }; 257*3f0275a0SJung-uk Kim 258*3f0275a0SJung-uk Kim typedef struct acpi_s3pt_resume 259*3f0275a0SJung-uk Kim { 260*3f0275a0SJung-uk Kim ACPI_S3PT_HEADER Header; 261*3f0275a0SJung-uk Kim UINT32 ResumeCount; 262*3f0275a0SJung-uk Kim UINT64 FullResume; 263*3f0275a0SJung-uk Kim UINT64 AverageResume; 264*3f0275a0SJung-uk Kim 265*3f0275a0SJung-uk Kim } ACPI_S3PT_RESUME; 266*3f0275a0SJung-uk Kim 267*3f0275a0SJung-uk Kim typedef struct acpi_s3pt_suspend 268*3f0275a0SJung-uk Kim { 269*3f0275a0SJung-uk Kim ACPI_S3PT_HEADER Header; 270*3f0275a0SJung-uk Kim UINT64 SuspendStart; 271*3f0275a0SJung-uk Kim UINT64 SuspendEnd; 272*3f0275a0SJung-uk Kim 273*3f0275a0SJung-uk Kim } ACPI_S3PT_SUSPEND; 274*3f0275a0SJung-uk Kim 275*3f0275a0SJung-uk Kim 276*3f0275a0SJung-uk Kim /******************************************************************************* 277*3f0275a0SJung-uk Kim * 278*3f0275a0SJung-uk Kim * GTDT - Generic Timer Description Table (ACPI 5.0) 279*3f0275a0SJung-uk Kim * Version 1 280*3f0275a0SJung-uk Kim * 281*3f0275a0SJung-uk Kim ******************************************************************************/ 282*3f0275a0SJung-uk Kim 283*3f0275a0SJung-uk Kim typedef struct acpi_table_gtdt 284*3f0275a0SJung-uk Kim { 285*3f0275a0SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 286*3f0275a0SJung-uk Kim UINT64 Address; 287*3f0275a0SJung-uk Kim UINT32 Flags; 288*3f0275a0SJung-uk Kim UINT32 SecurePl1Interrupt; 289*3f0275a0SJung-uk Kim UINT32 SecurePl1Flags; 290*3f0275a0SJung-uk Kim UINT32 NonSecurePl1Interrupt; 291*3f0275a0SJung-uk Kim UINT32 NonSecurePl1Flags; 292*3f0275a0SJung-uk Kim UINT32 VirtualTimerInterrupt; 293*3f0275a0SJung-uk Kim UINT32 VirtualTimerFlags; 294*3f0275a0SJung-uk Kim UINT32 NonSecurePl2Interrupt; 295*3f0275a0SJung-uk Kim UINT32 NonSecurePl2Flags; 296*3f0275a0SJung-uk Kim 297*3f0275a0SJung-uk Kim } ACPI_TABLE_GTDT; 298*3f0275a0SJung-uk Kim 299*3f0275a0SJung-uk Kim /* Values for Flags field above */ 300*3f0275a0SJung-uk Kim 301*3f0275a0SJung-uk Kim #define ACPI_GTDT_MAPPED_BLOCK_PRESENT 1 302*3f0275a0SJung-uk Kim 303*3f0275a0SJung-uk Kim /* Values for all "TimerFlags" fields above */ 304*3f0275a0SJung-uk Kim 305*3f0275a0SJung-uk Kim #define ACPI_GTDT_INTERRUPT_MODE 1 306*3f0275a0SJung-uk Kim #define ACPI_GTDT_INTERRUPT_POLARITY 2 307*3f0275a0SJung-uk Kim 308*3f0275a0SJung-uk Kim 309*3f0275a0SJung-uk Kim /******************************************************************************* 310*3f0275a0SJung-uk Kim * 311*3f0275a0SJung-uk Kim * MPST - Memory Power State Table (ACPI 5.0) 312*3f0275a0SJung-uk Kim * Version 1 313*3f0275a0SJung-uk Kim * 314*3f0275a0SJung-uk Kim ******************************************************************************/ 315*3f0275a0SJung-uk Kim 316*3f0275a0SJung-uk Kim #define ACPI_MPST_CHANNEL_INFO \ 317*3f0275a0SJung-uk Kim UINT16 Reserved1; \ 318*3f0275a0SJung-uk Kim UINT8 ChannelId; \ 319*3f0275a0SJung-uk Kim UINT8 Reserved2; \ 320*3f0275a0SJung-uk Kim UINT16 PowerNodeCount; 321*3f0275a0SJung-uk Kim 322*3f0275a0SJung-uk Kim /* Main table */ 323*3f0275a0SJung-uk Kim 324*3f0275a0SJung-uk Kim typedef struct acpi_table_mpst 325*3f0275a0SJung-uk Kim { 326*3f0275a0SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 327*3f0275a0SJung-uk Kim ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 328*3f0275a0SJung-uk Kim 329*3f0275a0SJung-uk Kim } ACPI_TABLE_MPST; 330*3f0275a0SJung-uk Kim 331*3f0275a0SJung-uk Kim 332*3f0275a0SJung-uk Kim /* Memory Platform Communication Channel Info */ 333*3f0275a0SJung-uk Kim 334*3f0275a0SJung-uk Kim typedef struct acpi_mpst_channel 335*3f0275a0SJung-uk Kim { 336*3f0275a0SJung-uk Kim ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 337*3f0275a0SJung-uk Kim 338*3f0275a0SJung-uk Kim } ACPI_MPST_CHANNEL; 339*3f0275a0SJung-uk Kim 340*3f0275a0SJung-uk Kim 341*3f0275a0SJung-uk Kim /* Memory Power Node Structure */ 342*3f0275a0SJung-uk Kim 343*3f0275a0SJung-uk Kim typedef struct acpi_mpst_power_node 344*3f0275a0SJung-uk Kim { 345*3f0275a0SJung-uk Kim UINT8 Flags; 346*3f0275a0SJung-uk Kim UINT8 Reserved1; 347*3f0275a0SJung-uk Kim UINT16 NodeId; 348*3f0275a0SJung-uk Kim UINT32 Length; 349*3f0275a0SJung-uk Kim UINT64 RangeAddress; 350*3f0275a0SJung-uk Kim UINT64 RangeLength; 351*3f0275a0SJung-uk Kim UINT8 NumPowerStates; 352*3f0275a0SJung-uk Kim UINT8 NumPhysicalComponents; 353*3f0275a0SJung-uk Kim UINT16 Reserved2; 354*3f0275a0SJung-uk Kim 355*3f0275a0SJung-uk Kim } ACPI_MPST_POWER_NODE; 356*3f0275a0SJung-uk Kim 357*3f0275a0SJung-uk Kim /* Values for Flags field above */ 358*3f0275a0SJung-uk Kim 359*3f0275a0SJung-uk Kim #define ACPI_MPST_ENABLED 1 360*3f0275a0SJung-uk Kim #define ACPI_MPST_POWER_MANAGED 2 361*3f0275a0SJung-uk Kim #define ACPI_MPST_HOT_PLUG_CAPABLE 4 362*3f0275a0SJung-uk Kim 363*3f0275a0SJung-uk Kim 364*3f0275a0SJung-uk Kim /* Memory Power State Structure (follows POWER_NODE above) */ 365*3f0275a0SJung-uk Kim 366*3f0275a0SJung-uk Kim typedef struct acpi_mpst_power_state 367*3f0275a0SJung-uk Kim { 368*3f0275a0SJung-uk Kim UINT8 PowerState; 369*3f0275a0SJung-uk Kim UINT8 InfoIndex; 370*3f0275a0SJung-uk Kim 371*3f0275a0SJung-uk Kim } ACPI_MPST_POWER_STATE; 372*3f0275a0SJung-uk Kim 373*3f0275a0SJung-uk Kim 374*3f0275a0SJung-uk Kim /* Physical Component ID Structure (follows POWER_STATE above) */ 375*3f0275a0SJung-uk Kim 376*3f0275a0SJung-uk Kim typedef struct acpi_mpst_component 377*3f0275a0SJung-uk Kim { 378*3f0275a0SJung-uk Kim UINT16 ComponentId; 379*3f0275a0SJung-uk Kim 380*3f0275a0SJung-uk Kim } ACPI_MPST_COMPONENT; 381*3f0275a0SJung-uk Kim 382*3f0275a0SJung-uk Kim 383*3f0275a0SJung-uk Kim /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 384*3f0275a0SJung-uk Kim 385*3f0275a0SJung-uk Kim typedef struct acpi_mpst_data_hdr 386*3f0275a0SJung-uk Kim { 387*3f0275a0SJung-uk Kim UINT16 CharacteristicsCount; 388*3f0275a0SJung-uk Kim 389*3f0275a0SJung-uk Kim } ACPI_MPST_DATA_HDR; 390*3f0275a0SJung-uk Kim 391*3f0275a0SJung-uk Kim typedef struct acpi_mpst_power_data 392*3f0275a0SJung-uk Kim { 393*3f0275a0SJung-uk Kim UINT8 Revision; 394*3f0275a0SJung-uk Kim UINT8 Flags; 395*3f0275a0SJung-uk Kim UINT16 Reserved1; 396*3f0275a0SJung-uk Kim UINT32 AveragePower; 397*3f0275a0SJung-uk Kim UINT32 PowerSaving; 398*3f0275a0SJung-uk Kim UINT64 ExitLatency; 399*3f0275a0SJung-uk Kim UINT64 Reserved2; 400*3f0275a0SJung-uk Kim 401*3f0275a0SJung-uk Kim } ACPI_MPST_POWER_DATA; 402*3f0275a0SJung-uk Kim 403*3f0275a0SJung-uk Kim /* Values for Flags field above */ 404*3f0275a0SJung-uk Kim 405*3f0275a0SJung-uk Kim #define ACPI_MPST_PRESERVE 1 406*3f0275a0SJung-uk Kim #define ACPI_MPST_AUTOENTRY 2 407*3f0275a0SJung-uk Kim #define ACPI_MPST_AUTOEXIT 4 408*3f0275a0SJung-uk Kim 409*3f0275a0SJung-uk Kim 410*3f0275a0SJung-uk Kim /* Shared Memory Region (not part of an ACPI table) */ 411*3f0275a0SJung-uk Kim 412*3f0275a0SJung-uk Kim typedef struct acpi_mpst_shared 413*3f0275a0SJung-uk Kim { 414*3f0275a0SJung-uk Kim UINT32 Signature; 415*3f0275a0SJung-uk Kim UINT16 PccCommand; 416*3f0275a0SJung-uk Kim UINT16 PccStatus; 417*3f0275a0SJung-uk Kim UINT16 CommandRegister; 418*3f0275a0SJung-uk Kim UINT16 StatusRegister; 419*3f0275a0SJung-uk Kim UINT16 PowerStateId; 420*3f0275a0SJung-uk Kim UINT16 PowerNodeId; 421*3f0275a0SJung-uk Kim UINT64 EnergyConsumed; 422*3f0275a0SJung-uk Kim UINT64 AveragePower; 423*3f0275a0SJung-uk Kim 424*3f0275a0SJung-uk Kim } ACPI_MPST_SHARED; 425*3f0275a0SJung-uk Kim 426*3f0275a0SJung-uk Kim 427*3f0275a0SJung-uk Kim /******************************************************************************* 428*3f0275a0SJung-uk Kim * 429*3f0275a0SJung-uk Kim * PCCT - Platform Communications Channel Table (ACPI 5.0) 430*3f0275a0SJung-uk Kim * Version 1 431*3f0275a0SJung-uk Kim * 432*3f0275a0SJung-uk Kim ******************************************************************************/ 433*3f0275a0SJung-uk Kim 434*3f0275a0SJung-uk Kim typedef struct acpi_table_pcct 435*3f0275a0SJung-uk Kim { 436*3f0275a0SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 437*3f0275a0SJung-uk Kim UINT32 Flags; 438*3f0275a0SJung-uk Kim UINT32 Latency; 439*3f0275a0SJung-uk Kim UINT32 Reserved; 440*3f0275a0SJung-uk Kim 441*3f0275a0SJung-uk Kim } ACPI_TABLE_PCCT; 442*3f0275a0SJung-uk Kim 443*3f0275a0SJung-uk Kim /* Values for Flags field above */ 444*3f0275a0SJung-uk Kim 445*3f0275a0SJung-uk Kim #define ACPI_PCCT_DOORBELL 1 446*3f0275a0SJung-uk Kim 447*3f0275a0SJung-uk Kim /* 448*3f0275a0SJung-uk Kim * PCCT subtables 449*3f0275a0SJung-uk Kim */ 450*3f0275a0SJung-uk Kim 451*3f0275a0SJung-uk Kim /* 0: Generic Communications Subspace */ 452*3f0275a0SJung-uk Kim 453*3f0275a0SJung-uk Kim typedef struct acpi_pcct_subspace 454*3f0275a0SJung-uk Kim { 455*3f0275a0SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 456*3f0275a0SJung-uk Kim UINT8 Reserved[6]; 457*3f0275a0SJung-uk Kim UINT64 BaseAddress; 458*3f0275a0SJung-uk Kim UINT64 Length; 459*3f0275a0SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 460*3f0275a0SJung-uk Kim UINT64 PreserveMask; 461*3f0275a0SJung-uk Kim UINT64 WriteMask; 462*3f0275a0SJung-uk Kim 463*3f0275a0SJung-uk Kim } ACPI_PCCT_SUBSPACE; 464*3f0275a0SJung-uk Kim 465*3f0275a0SJung-uk Kim 466*3f0275a0SJung-uk Kim /* 467*3f0275a0SJung-uk Kim * PCC memory structures (not part of the ACPI table) 468*3f0275a0SJung-uk Kim */ 469*3f0275a0SJung-uk Kim 470*3f0275a0SJung-uk Kim /* Shared Memory Region */ 471*3f0275a0SJung-uk Kim 472*3f0275a0SJung-uk Kim typedef struct acpi_pcct_shared_memory 473*3f0275a0SJung-uk Kim { 474*3f0275a0SJung-uk Kim UINT32 Signature; 475*3f0275a0SJung-uk Kim UINT16 Command; 476*3f0275a0SJung-uk Kim UINT16 Status; 477*3f0275a0SJung-uk Kim 478*3f0275a0SJung-uk Kim } ACPI_PCCT_SHARED_MEMORY; 479*3f0275a0SJung-uk Kim 480*3f0275a0SJung-uk Kim 481*3f0275a0SJung-uk Kim /******************************************************************************* 482*3f0275a0SJung-uk Kim * 483*3f0275a0SJung-uk Kim * PMTT - Platform Memory Topology Table (ACPI 5.0) 484*3f0275a0SJung-uk Kim * Version 1 485*3f0275a0SJung-uk Kim * 486*3f0275a0SJung-uk Kim ******************************************************************************/ 487*3f0275a0SJung-uk Kim 488*3f0275a0SJung-uk Kim typedef struct acpi_table_pmtt 489*3f0275a0SJung-uk Kim { 490*3f0275a0SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 491*3f0275a0SJung-uk Kim UINT32 Reserved; 492*3f0275a0SJung-uk Kim 493*3f0275a0SJung-uk Kim } ACPI_TABLE_PMTT; 494*3f0275a0SJung-uk Kim 495*3f0275a0SJung-uk Kim 496*3f0275a0SJung-uk Kim /* Common header for PMTT subtables that follow main table */ 497*3f0275a0SJung-uk Kim 498*3f0275a0SJung-uk Kim typedef struct acpi_pmtt_header 499*3f0275a0SJung-uk Kim { 500*3f0275a0SJung-uk Kim UINT8 Type; 501*3f0275a0SJung-uk Kim UINT8 Reserved1; 502*3f0275a0SJung-uk Kim UINT16 Length; 503*3f0275a0SJung-uk Kim UINT16 Flags; 504*3f0275a0SJung-uk Kim UINT16 Reserved2; 505*3f0275a0SJung-uk Kim 506*3f0275a0SJung-uk Kim } ACPI_PMTT_HEADER; 507*3f0275a0SJung-uk Kim 508*3f0275a0SJung-uk Kim /* Values for Type field above */ 509*3f0275a0SJung-uk Kim 510*3f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_SOCKET 0 511*3f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_CONTROLLER 1 512*3f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_DIMM 2 513*3f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ 514*3f0275a0SJung-uk Kim 515*3f0275a0SJung-uk Kim /* Values for Flags field above */ 516*3f0275a0SJung-uk Kim 517*3f0275a0SJung-uk Kim #define ACPI_PMTT_TOP_LEVEL 0x0001 518*3f0275a0SJung-uk Kim #define ACPI_PMTT_PHYSICAL 0x0002 519*3f0275a0SJung-uk Kim #define ACPI_PMTT_MEMORY_TYPE 0x000C 520*3f0275a0SJung-uk Kim 521*3f0275a0SJung-uk Kim 522*3f0275a0SJung-uk Kim /* 523*3f0275a0SJung-uk Kim * PMTT subtables, correspond to Type in acpi_pmtt_header 524*3f0275a0SJung-uk Kim */ 525*3f0275a0SJung-uk Kim 526*3f0275a0SJung-uk Kim 527*3f0275a0SJung-uk Kim /* 0: Socket Structure */ 528*3f0275a0SJung-uk Kim 529*3f0275a0SJung-uk Kim typedef struct acpi_pmtt_socket 530*3f0275a0SJung-uk Kim { 531*3f0275a0SJung-uk Kim ACPI_PMTT_HEADER Header; 532*3f0275a0SJung-uk Kim UINT16 SocketId; 533*3f0275a0SJung-uk Kim UINT16 Reserved; 534*3f0275a0SJung-uk Kim 535*3f0275a0SJung-uk Kim } ACPI_PMTT_SOCKET; 536*3f0275a0SJung-uk Kim 537*3f0275a0SJung-uk Kim 538*3f0275a0SJung-uk Kim /* 1: Memory Controller subtable */ 539*3f0275a0SJung-uk Kim 540*3f0275a0SJung-uk Kim typedef struct acpi_pmtt_controller 541*3f0275a0SJung-uk Kim { 542*3f0275a0SJung-uk Kim ACPI_PMTT_HEADER Header; 543*3f0275a0SJung-uk Kim UINT32 ReadLatency; 544*3f0275a0SJung-uk Kim UINT32 WriteLatency; 545*3f0275a0SJung-uk Kim UINT32 ReadBandwidth; 546*3f0275a0SJung-uk Kim UINT32 WriteBandwidth; 547*3f0275a0SJung-uk Kim UINT16 AccessWidth; 548*3f0275a0SJung-uk Kim UINT16 Alignment; 549*3f0275a0SJung-uk Kim UINT16 Reserved; 550*3f0275a0SJung-uk Kim UINT16 DomainCount; 551*3f0275a0SJung-uk Kim 552*3f0275a0SJung-uk Kim } ACPI_PMTT_CONTROLLER; 553*3f0275a0SJung-uk Kim 554*3f0275a0SJung-uk Kim /* 1a: Proximity Domain substructure */ 555*3f0275a0SJung-uk Kim 556*3f0275a0SJung-uk Kim typedef struct acpi_pmtt_domain 557*3f0275a0SJung-uk Kim { 558*3f0275a0SJung-uk Kim UINT32 ProximityDomain; 559*3f0275a0SJung-uk Kim 560*3f0275a0SJung-uk Kim } ACPI_PMTT_DOMAIN; 561*3f0275a0SJung-uk Kim 562*3f0275a0SJung-uk Kim 563*3f0275a0SJung-uk Kim /* 2: Physical Component Identifier (DIMM) */ 564*3f0275a0SJung-uk Kim 565*3f0275a0SJung-uk Kim typedef struct acpi_pmtt_physical_component 566*3f0275a0SJung-uk Kim { 567*3f0275a0SJung-uk Kim ACPI_PMTT_HEADER Header; 568*3f0275a0SJung-uk Kim UINT16 ComponentId; 569*3f0275a0SJung-uk Kim UINT16 Reserved; 570*3f0275a0SJung-uk Kim UINT32 MemorySize; 571*3f0275a0SJung-uk Kim UINT32 BiosHandle; 572*3f0275a0SJung-uk Kim 573*3f0275a0SJung-uk Kim } ACPI_PMTT_PHYSICAL_COMPONENT; 574*3f0275a0SJung-uk Kim 575*3f0275a0SJung-uk Kim 576*3f0275a0SJung-uk Kim /******************************************************************************* 577*3f0275a0SJung-uk Kim * 578*3f0275a0SJung-uk Kim * RASF - RAS Feature Table (ACPI 5.0) 579*3f0275a0SJung-uk Kim * Version 1 580*3f0275a0SJung-uk Kim * 581*3f0275a0SJung-uk Kim ******************************************************************************/ 582*3f0275a0SJung-uk Kim 583*3f0275a0SJung-uk Kim typedef struct acpi_table_rasf 584*3f0275a0SJung-uk Kim { 585*3f0275a0SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 586*3f0275a0SJung-uk Kim UINT8 ChannelId[12]; 587*3f0275a0SJung-uk Kim 588*3f0275a0SJung-uk Kim } ACPI_TABLE_RASF; 589*3f0275a0SJung-uk Kim 590*3f0275a0SJung-uk Kim /* RASF Platform Communication Channel Shared Memory Region */ 591*3f0275a0SJung-uk Kim 592*3f0275a0SJung-uk Kim typedef struct acpi_rasf_shared_memory 593*3f0275a0SJung-uk Kim { 594*3f0275a0SJung-uk Kim UINT32 Signature; 595*3f0275a0SJung-uk Kim UINT16 Command; 596*3f0275a0SJung-uk Kim UINT16 Status; 597*3f0275a0SJung-uk Kim UINT64 RequestedAddress; 598*3f0275a0SJung-uk Kim UINT64 RequestedLength; 599*3f0275a0SJung-uk Kim UINT64 ActualAddress; 600*3f0275a0SJung-uk Kim UINT64 ActualLength; 601*3f0275a0SJung-uk Kim UINT16 Flags; 602*3f0275a0SJung-uk Kim UINT8 Speed; 603*3f0275a0SJung-uk Kim 604*3f0275a0SJung-uk Kim } ACPI_RASF_SHARED_MEMORY; 605*3f0275a0SJung-uk Kim 606*3f0275a0SJung-uk Kim /* Masks for Flags and Speed fields above */ 607*3f0275a0SJung-uk Kim 608*3f0275a0SJung-uk Kim #define ACPI_RASF_SCRUBBER_RUNNING 1 609*3f0275a0SJung-uk Kim #define ACPI_RASF_SPEED (7<<1) 610*3f0275a0SJung-uk Kim 611*3f0275a0SJung-uk Kim /* Channel Commands */ 612*3f0275a0SJung-uk Kim 613*3f0275a0SJung-uk Kim enum AcpiRasfCommands 614*3f0275a0SJung-uk Kim { 615*3f0275a0SJung-uk Kim ACPI_RASF_GET_RAS_CAPABILITIES = 1, 616*3f0275a0SJung-uk Kim ACPI_RASF_GET_PATROL_PARAMETERS = 2, 617*3f0275a0SJung-uk Kim ACPI_RASF_START_PATROL_SCRUBBER = 3, 618*3f0275a0SJung-uk Kim ACPI_RASF_STOP_PATROL_SCRUBBER = 4 619*3f0275a0SJung-uk Kim }; 620*3f0275a0SJung-uk Kim 621*3f0275a0SJung-uk Kim /* Channel Command flags */ 622*3f0275a0SJung-uk Kim 623*3f0275a0SJung-uk Kim #define ACPI_RASF_GENERATE_SCI (1<<15) 624*3f0275a0SJung-uk Kim 625*3f0275a0SJung-uk Kim /* Status values */ 626*3f0275a0SJung-uk Kim 627*3f0275a0SJung-uk Kim enum AcpiRasfStatus 628*3f0275a0SJung-uk Kim { 629*3f0275a0SJung-uk Kim ACPI_RASF_SUCCESS = 0, 630*3f0275a0SJung-uk Kim ACPI_RASF_NOT_VALID = 1, 631*3f0275a0SJung-uk Kim ACPI_RASF_NOT_SUPPORTED = 2, 632*3f0275a0SJung-uk Kim ACPI_RASF_BUSY = 3, 633*3f0275a0SJung-uk Kim ACPI_RASF_FAILED = 4, 634*3f0275a0SJung-uk Kim ACPI_RASF_ABORTED = 5, 635*3f0275a0SJung-uk Kim ACPI_RASF_INVALID_DATA = 6 636*3f0275a0SJung-uk Kim }; 637*3f0275a0SJung-uk Kim 638*3f0275a0SJung-uk Kim /* Status flags */ 639*3f0275a0SJung-uk Kim 640*3f0275a0SJung-uk Kim #define ACPI_RASF_COMMAND_COMPLETE (1) 641*3f0275a0SJung-uk Kim #define ACPI_RASF_SCI_DOORBELL (1<<1) 642*3f0275a0SJung-uk Kim #define ACPI_RASF_ERROR (1<<2) 643*3f0275a0SJung-uk Kim #define ACPI_RASF_STATUS (0x1F<<3) 644*3f0275a0SJung-uk Kim 645*3f0275a0SJung-uk Kim 646*3f0275a0SJung-uk Kim /* Reset to default packing */ 647*3f0275a0SJung-uk Kim 648*3f0275a0SJung-uk Kim #pragma pack() 649*3f0275a0SJung-uk Kim 650*3f0275a0SJung-uk Kim #endif /* __ACTBL3_H__ */ 651