1*29492bb7SDavid van Moolenbroek /****************************************************************************** 2*29492bb7SDavid van Moolenbroek * 3*29492bb7SDavid van Moolenbroek * Name: actbl3.h - ACPI Table Definitions 4*29492bb7SDavid van Moolenbroek * 5*29492bb7SDavid van Moolenbroek *****************************************************************************/ 6*29492bb7SDavid van Moolenbroek 7*29492bb7SDavid van Moolenbroek /* 8*29492bb7SDavid van Moolenbroek * Copyright (C) 2000 - 2014, Intel Corp. 9*29492bb7SDavid van Moolenbroek * All rights reserved. 10*29492bb7SDavid van Moolenbroek * 11*29492bb7SDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 12*29492bb7SDavid van Moolenbroek * modification, are permitted provided that the following conditions 13*29492bb7SDavid van Moolenbroek * are met: 14*29492bb7SDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 15*29492bb7SDavid van Moolenbroek * notice, this list of conditions, and the following disclaimer, 16*29492bb7SDavid van Moolenbroek * without modification. 17*29492bb7SDavid van Moolenbroek * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18*29492bb7SDavid van Moolenbroek * substantially similar to the "NO WARRANTY" disclaimer below 19*29492bb7SDavid van Moolenbroek * ("Disclaimer") and any redistribution must be conditioned upon 20*29492bb7SDavid van Moolenbroek * including a substantially similar Disclaimer requirement for further 21*29492bb7SDavid van Moolenbroek * binary redistribution. 22*29492bb7SDavid van Moolenbroek * 3. Neither the names of the above-listed copyright holders nor the names 23*29492bb7SDavid van Moolenbroek * of any contributors may be used to endorse or promote products derived 24*29492bb7SDavid van Moolenbroek * from this software without specific prior written permission. 25*29492bb7SDavid van Moolenbroek * 26*29492bb7SDavid van Moolenbroek * Alternatively, this software may be distributed under the terms of the 27*29492bb7SDavid van Moolenbroek * GNU General Public License ("GPL") version 2 as published by the Free 28*29492bb7SDavid van Moolenbroek * Software Foundation. 29*29492bb7SDavid van Moolenbroek * 30*29492bb7SDavid van Moolenbroek * NO WARRANTY 31*29492bb7SDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32*29492bb7SDavid van Moolenbroek * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33*29492bb7SDavid van Moolenbroek * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34*29492bb7SDavid van Moolenbroek * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35*29492bb7SDavid van Moolenbroek * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36*29492bb7SDavid van Moolenbroek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37*29492bb7SDavid van Moolenbroek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38*29492bb7SDavid van Moolenbroek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39*29492bb7SDavid van Moolenbroek * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40*29492bb7SDavid van Moolenbroek * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41*29492bb7SDavid van Moolenbroek * POSSIBILITY OF SUCH DAMAGES. 42*29492bb7SDavid van Moolenbroek */ 43*29492bb7SDavid van Moolenbroek 44*29492bb7SDavid van Moolenbroek #ifndef __ACTBL3_H__ 45*29492bb7SDavid van Moolenbroek #define __ACTBL3_H__ 46*29492bb7SDavid van Moolenbroek 47*29492bb7SDavid van Moolenbroek 48*29492bb7SDavid van Moolenbroek /******************************************************************************* 49*29492bb7SDavid van Moolenbroek * 50*29492bb7SDavid van Moolenbroek * Additional ACPI Tables (3) 51*29492bb7SDavid van Moolenbroek * 52*29492bb7SDavid van Moolenbroek * These tables are not consumed directly by the ACPICA subsystem, but are 53*29492bb7SDavid van Moolenbroek * included here to support device drivers and the AML disassembler. 54*29492bb7SDavid van Moolenbroek * 55*29492bb7SDavid van Moolenbroek * The tables in this file are fully defined within the ACPI specification. 56*29492bb7SDavid van Moolenbroek * 57*29492bb7SDavid van Moolenbroek ******************************************************************************/ 58*29492bb7SDavid van Moolenbroek 59*29492bb7SDavid van Moolenbroek 60*29492bb7SDavid van Moolenbroek /* 61*29492bb7SDavid van Moolenbroek * Values for description table header signatures for tables defined in this 62*29492bb7SDavid van Moolenbroek * file. Useful because they make it more difficult to inadvertently type in 63*29492bb7SDavid van Moolenbroek * the wrong signature. 64*29492bb7SDavid van Moolenbroek */ 65*29492bb7SDavid van Moolenbroek #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ 66*29492bb7SDavid van Moolenbroek #define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ 67*29492bb7SDavid van Moolenbroek #define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ 68*29492bb7SDavid van Moolenbroek #define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ 69*29492bb7SDavid van Moolenbroek #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 70*29492bb7SDavid van Moolenbroek #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 71*29492bb7SDavid van Moolenbroek #define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 72*29492bb7SDavid van Moolenbroek #define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 73*29492bb7SDavid van Moolenbroek #define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ 74*29492bb7SDavid van Moolenbroek 75*29492bb7SDavid van Moolenbroek #define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ 76*29492bb7SDavid van Moolenbroek #define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ 77*29492bb7SDavid van Moolenbroek 78*29492bb7SDavid van Moolenbroek /* Reserved table signatures */ 79*29492bb7SDavid van Moolenbroek 80*29492bb7SDavid van Moolenbroek #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ 81*29492bb7SDavid van Moolenbroek #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 82*29492bb7SDavid van Moolenbroek #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ 83*29492bb7SDavid van Moolenbroek 84*29492bb7SDavid van Moolenbroek /* 85*29492bb7SDavid van Moolenbroek * All tables must be byte-packed to match the ACPI specification, since 86*29492bb7SDavid van Moolenbroek * the tables are provided by the system BIOS. 87*29492bb7SDavid van Moolenbroek */ 88*29492bb7SDavid van Moolenbroek #pragma pack(1) 89*29492bb7SDavid van Moolenbroek 90*29492bb7SDavid van Moolenbroek /* 91*29492bb7SDavid van Moolenbroek * Note: C bitfields are not used for this reason: 92*29492bb7SDavid van Moolenbroek * 93*29492bb7SDavid van Moolenbroek * "Bitfields are great and easy to read, but unfortunately the C language 94*29492bb7SDavid van Moolenbroek * does not specify the layout of bitfields in memory, which means they are 95*29492bb7SDavid van Moolenbroek * essentially useless for dealing with packed data in on-disk formats or 96*29492bb7SDavid van Moolenbroek * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 97*29492bb7SDavid van Moolenbroek * this decision was a design error in C. Ritchie could have picked an order 98*29492bb7SDavid van Moolenbroek * and stuck with it." Norman Ramsey. 99*29492bb7SDavid van Moolenbroek * See http://stackoverflow.com/a/1053662/41661 100*29492bb7SDavid van Moolenbroek */ 101*29492bb7SDavid van Moolenbroek 102*29492bb7SDavid van Moolenbroek 103*29492bb7SDavid van Moolenbroek /******************************************************************************* 104*29492bb7SDavid van Moolenbroek * 105*29492bb7SDavid van Moolenbroek * BGRT - Boot Graphics Resource Table (ACPI 5.0) 106*29492bb7SDavid van Moolenbroek * Version 1 107*29492bb7SDavid van Moolenbroek * 108*29492bb7SDavid van Moolenbroek ******************************************************************************/ 109*29492bb7SDavid van Moolenbroek 110*29492bb7SDavid van Moolenbroek typedef struct acpi_table_bgrt 111*29492bb7SDavid van Moolenbroek { 112*29492bb7SDavid van Moolenbroek ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 113*29492bb7SDavid van Moolenbroek UINT16 Version; 114*29492bb7SDavid van Moolenbroek UINT8 Status; 115*29492bb7SDavid van Moolenbroek UINT8 ImageType; 116*29492bb7SDavid van Moolenbroek UINT64 ImageAddress; 117*29492bb7SDavid van Moolenbroek UINT32 ImageOffsetX; 118*29492bb7SDavid van Moolenbroek UINT32 ImageOffsetY; 119*29492bb7SDavid van Moolenbroek 120*29492bb7SDavid van Moolenbroek } ACPI_TABLE_BGRT; 121*29492bb7SDavid van Moolenbroek 122*29492bb7SDavid van Moolenbroek 123*29492bb7SDavid van Moolenbroek /******************************************************************************* 124*29492bb7SDavid van Moolenbroek * 125*29492bb7SDavid van Moolenbroek * DRTM - Dynamic Root of Trust for Measurement table 126*29492bb7SDavid van Moolenbroek * 127*29492bb7SDavid van Moolenbroek ******************************************************************************/ 128*29492bb7SDavid van Moolenbroek 129*29492bb7SDavid van Moolenbroek typedef struct acpi_table_drtm 130*29492bb7SDavid van Moolenbroek { 131*29492bb7SDavid van Moolenbroek ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 132*29492bb7SDavid van Moolenbroek UINT64 EntryBaseAddress; 133*29492bb7SDavid van Moolenbroek UINT64 EntryLength; 134*29492bb7SDavid van Moolenbroek UINT32 EntryAddress32; 135*29492bb7SDavid van Moolenbroek UINT64 EntryAddress64; 136*29492bb7SDavid van Moolenbroek UINT64 ExitAddress; 137*29492bb7SDavid van Moolenbroek UINT64 LogAreaAddress; 138*29492bb7SDavid van Moolenbroek UINT32 LogAreaLength; 139*29492bb7SDavid van Moolenbroek UINT64 ArchDependentAddress; 140*29492bb7SDavid van Moolenbroek UINT32 Flags; 141*29492bb7SDavid van Moolenbroek 142*29492bb7SDavid van Moolenbroek } ACPI_TABLE_DRTM; 143*29492bb7SDavid van Moolenbroek 144*29492bb7SDavid van Moolenbroek /* 1) Validated Tables List */ 145*29492bb7SDavid van Moolenbroek 146*29492bb7SDavid van Moolenbroek typedef struct acpi_drtm_vtl_list 147*29492bb7SDavid van Moolenbroek { 148*29492bb7SDavid van Moolenbroek UINT32 ValidatedTableListCount; 149*29492bb7SDavid van Moolenbroek 150*29492bb7SDavid van Moolenbroek } ACPI_DRTM_VTL_LIST; 151*29492bb7SDavid van Moolenbroek 152*29492bb7SDavid van Moolenbroek /* 2) Resources List */ 153*29492bb7SDavid van Moolenbroek 154*29492bb7SDavid van Moolenbroek typedef struct acpi_drtm_resource_list 155*29492bb7SDavid van Moolenbroek { 156*29492bb7SDavid van Moolenbroek UINT32 ResourceListCount; 157*29492bb7SDavid van Moolenbroek 158*29492bb7SDavid van Moolenbroek } ACPI_DRTM_RESOURCE_LIST; 159*29492bb7SDavid van Moolenbroek 160*29492bb7SDavid van Moolenbroek /* 3) Platform-specific Identifiers List */ 161*29492bb7SDavid van Moolenbroek 162*29492bb7SDavid van Moolenbroek typedef struct acpi_drtm_id_list 163*29492bb7SDavid van Moolenbroek { 164*29492bb7SDavid van Moolenbroek UINT32 IdListCount; 165*29492bb7SDavid van Moolenbroek 166*29492bb7SDavid van Moolenbroek } ACPI_DRTM_ID_LIST; 167*29492bb7SDavid van Moolenbroek 168*29492bb7SDavid van Moolenbroek 169*29492bb7SDavid van Moolenbroek /******************************************************************************* 170*29492bb7SDavid van Moolenbroek * 171*29492bb7SDavid van Moolenbroek * FPDT - Firmware Performance Data Table (ACPI 5.0) 172*29492bb7SDavid van Moolenbroek * Version 1 173*29492bb7SDavid van Moolenbroek * 174*29492bb7SDavid van Moolenbroek ******************************************************************************/ 175*29492bb7SDavid van Moolenbroek 176*29492bb7SDavid van Moolenbroek typedef struct acpi_table_fpdt 177*29492bb7SDavid van Moolenbroek { 178*29492bb7SDavid van Moolenbroek ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 179*29492bb7SDavid van Moolenbroek 180*29492bb7SDavid van Moolenbroek } ACPI_TABLE_FPDT; 181*29492bb7SDavid van Moolenbroek 182*29492bb7SDavid van Moolenbroek 183*29492bb7SDavid van Moolenbroek /* FPDT subtable header */ 184*29492bb7SDavid van Moolenbroek 185*29492bb7SDavid van Moolenbroek typedef struct acpi_fpdt_header 186*29492bb7SDavid van Moolenbroek { 187*29492bb7SDavid van Moolenbroek UINT16 Type; 188*29492bb7SDavid van Moolenbroek UINT8 Length; 189*29492bb7SDavid van Moolenbroek UINT8 Revision; 190*29492bb7SDavid van Moolenbroek 191*29492bb7SDavid van Moolenbroek } ACPI_FPDT_HEADER; 192*29492bb7SDavid van Moolenbroek 193*29492bb7SDavid van Moolenbroek /* Values for Type field above */ 194*29492bb7SDavid van Moolenbroek 195*29492bb7SDavid van Moolenbroek enum AcpiFpdtType 196*29492bb7SDavid van Moolenbroek { 197*29492bb7SDavid van Moolenbroek ACPI_FPDT_TYPE_BOOT = 0, 198*29492bb7SDavid van Moolenbroek ACPI_FPDT_TYPE_S3PERF = 1 199*29492bb7SDavid van Moolenbroek }; 200*29492bb7SDavid van Moolenbroek 201*29492bb7SDavid van Moolenbroek 202*29492bb7SDavid van Moolenbroek /* 203*29492bb7SDavid van Moolenbroek * FPDT subtables 204*29492bb7SDavid van Moolenbroek */ 205*29492bb7SDavid van Moolenbroek 206*29492bb7SDavid van Moolenbroek /* 0: Firmware Basic Boot Performance Record */ 207*29492bb7SDavid van Moolenbroek 208*29492bb7SDavid van Moolenbroek typedef struct acpi_fpdt_boot 209*29492bb7SDavid van Moolenbroek { 210*29492bb7SDavid van Moolenbroek ACPI_FPDT_HEADER Header; 211*29492bb7SDavid van Moolenbroek UINT8 Reserved[4]; 212*29492bb7SDavid van Moolenbroek UINT64 ResetEnd; 213*29492bb7SDavid van Moolenbroek UINT64 LoadStart; 214*29492bb7SDavid van Moolenbroek UINT64 StartupStart; 215*29492bb7SDavid van Moolenbroek UINT64 ExitServicesEntry; 216*29492bb7SDavid van Moolenbroek UINT64 ExitServicesExit; 217*29492bb7SDavid van Moolenbroek 218*29492bb7SDavid van Moolenbroek } ACPI_FPDT_BOOT; 219*29492bb7SDavid van Moolenbroek 220*29492bb7SDavid van Moolenbroek 221*29492bb7SDavid van Moolenbroek /* 1: S3 Performance Table Pointer Record */ 222*29492bb7SDavid van Moolenbroek 223*29492bb7SDavid van Moolenbroek typedef struct acpi_fpdt_s3pt_ptr 224*29492bb7SDavid van Moolenbroek { 225*29492bb7SDavid van Moolenbroek ACPI_FPDT_HEADER Header; 226*29492bb7SDavid van Moolenbroek UINT8 Reserved[4]; 227*29492bb7SDavid van Moolenbroek UINT64 Address; 228*29492bb7SDavid van Moolenbroek 229*29492bb7SDavid van Moolenbroek } ACPI_FPDT_S3PT_PTR; 230*29492bb7SDavid van Moolenbroek 231*29492bb7SDavid van Moolenbroek 232*29492bb7SDavid van Moolenbroek /* 233*29492bb7SDavid van Moolenbroek * S3PT - S3 Performance Table. This table is pointed to by the 234*29492bb7SDavid van Moolenbroek * FPDT S3 Pointer Record above. 235*29492bb7SDavid van Moolenbroek */ 236*29492bb7SDavid van Moolenbroek typedef struct acpi_table_s3pt 237*29492bb7SDavid van Moolenbroek { 238*29492bb7SDavid van Moolenbroek UINT8 Signature[4]; /* "S3PT" */ 239*29492bb7SDavid van Moolenbroek UINT32 Length; 240*29492bb7SDavid van Moolenbroek 241*29492bb7SDavid van Moolenbroek } ACPI_TABLE_S3PT; 242*29492bb7SDavid van Moolenbroek 243*29492bb7SDavid van Moolenbroek 244*29492bb7SDavid van Moolenbroek /* 245*29492bb7SDavid van Moolenbroek * S3PT Subtables 246*29492bb7SDavid van Moolenbroek */ 247*29492bb7SDavid van Moolenbroek typedef struct acpi_s3pt_header 248*29492bb7SDavid van Moolenbroek { 249*29492bb7SDavid van Moolenbroek UINT16 Type; 250*29492bb7SDavid van Moolenbroek UINT8 Length; 251*29492bb7SDavid van Moolenbroek UINT8 Revision; 252*29492bb7SDavid van Moolenbroek 253*29492bb7SDavid van Moolenbroek } ACPI_S3PT_HEADER; 254*29492bb7SDavid van Moolenbroek 255*29492bb7SDavid van Moolenbroek /* Values for Type field above */ 256*29492bb7SDavid van Moolenbroek 257*29492bb7SDavid van Moolenbroek enum AcpiS3ptType 258*29492bb7SDavid van Moolenbroek { 259*29492bb7SDavid van Moolenbroek ACPI_S3PT_TYPE_RESUME = 0, 260*29492bb7SDavid van Moolenbroek ACPI_S3PT_TYPE_SUSPEND = 1 261*29492bb7SDavid van Moolenbroek }; 262*29492bb7SDavid van Moolenbroek 263*29492bb7SDavid van Moolenbroek typedef struct acpi_s3pt_resume 264*29492bb7SDavid van Moolenbroek { 265*29492bb7SDavid van Moolenbroek ACPI_S3PT_HEADER Header; 266*29492bb7SDavid van Moolenbroek UINT32 ResumeCount; 267*29492bb7SDavid van Moolenbroek UINT64 FullResume; 268*29492bb7SDavid van Moolenbroek UINT64 AverageResume; 269*29492bb7SDavid van Moolenbroek 270*29492bb7SDavid van Moolenbroek } ACPI_S3PT_RESUME; 271*29492bb7SDavid van Moolenbroek 272*29492bb7SDavid van Moolenbroek typedef struct acpi_s3pt_suspend 273*29492bb7SDavid van Moolenbroek { 274*29492bb7SDavid van Moolenbroek ACPI_S3PT_HEADER Header; 275*29492bb7SDavid van Moolenbroek UINT64 SuspendStart; 276*29492bb7SDavid van Moolenbroek UINT64 SuspendEnd; 277*29492bb7SDavid van Moolenbroek 278*29492bb7SDavid van Moolenbroek } ACPI_S3PT_SUSPEND; 279*29492bb7SDavid van Moolenbroek 280*29492bb7SDavid van Moolenbroek 281*29492bb7SDavid van Moolenbroek /******************************************************************************* 282*29492bb7SDavid van Moolenbroek * 283*29492bb7SDavid van Moolenbroek * GTDT - Generic Timer Description Table (ACPI 5.1) 284*29492bb7SDavid van Moolenbroek * Version 2 285*29492bb7SDavid van Moolenbroek * 286*29492bb7SDavid van Moolenbroek ******************************************************************************/ 287*29492bb7SDavid van Moolenbroek 288*29492bb7SDavid van Moolenbroek typedef struct acpi_table_gtdt 289*29492bb7SDavid van Moolenbroek { 290*29492bb7SDavid van Moolenbroek ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 291*29492bb7SDavid van Moolenbroek UINT64 CounterBlockAddresss; 292*29492bb7SDavid van Moolenbroek UINT32 Reserved; 293*29492bb7SDavid van Moolenbroek UINT32 SecureEl1Interrupt; 294*29492bb7SDavid van Moolenbroek UINT32 SecureEl1Flags; 295*29492bb7SDavid van Moolenbroek UINT32 NonSecureEl1Interrupt; 296*29492bb7SDavid van Moolenbroek UINT32 NonSecureEl1Flags; 297*29492bb7SDavid van Moolenbroek UINT32 VirtualTimerInterrupt; 298*29492bb7SDavid van Moolenbroek UINT32 VirtualTimerFlags; 299*29492bb7SDavid van Moolenbroek UINT32 NonSecureEl2Interrupt; 300*29492bb7SDavid van Moolenbroek UINT32 NonSecureEl2Flags; 301*29492bb7SDavid van Moolenbroek UINT64 CounterReadBlockAddress; 302*29492bb7SDavid van Moolenbroek UINT32 PlatformTimerCount; 303*29492bb7SDavid van Moolenbroek UINT32 PlatformTimerOffset; 304*29492bb7SDavid van Moolenbroek 305*29492bb7SDavid van Moolenbroek } ACPI_TABLE_GTDT; 306*29492bb7SDavid van Moolenbroek 307*29492bb7SDavid van Moolenbroek /* Flag Definitions: Timer Block Physical Timers and Virtual timers */ 308*29492bb7SDavid van Moolenbroek 309*29492bb7SDavid van Moolenbroek #define ACPI_GTDT_INTERRUPT_MODE (1) 310*29492bb7SDavid van Moolenbroek #define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) 311*29492bb7SDavid van Moolenbroek #define ACPI_GTDT_ALWAYS_ON (1<<2) 312*29492bb7SDavid van Moolenbroek 313*29492bb7SDavid van Moolenbroek 314*29492bb7SDavid van Moolenbroek /* Common GTDT subtable header */ 315*29492bb7SDavid van Moolenbroek 316*29492bb7SDavid van Moolenbroek typedef struct acpi_gtdt_header 317*29492bb7SDavid van Moolenbroek { 318*29492bb7SDavid van Moolenbroek UINT8 Type; 319*29492bb7SDavid van Moolenbroek UINT16 Length; 320*29492bb7SDavid van Moolenbroek 321*29492bb7SDavid van Moolenbroek } ACPI_GTDT_HEADER; 322*29492bb7SDavid van Moolenbroek 323*29492bb7SDavid van Moolenbroek /* Values for GTDT subtable type above */ 324*29492bb7SDavid van Moolenbroek 325*29492bb7SDavid van Moolenbroek enum AcpiGtdtType 326*29492bb7SDavid van Moolenbroek { 327*29492bb7SDavid van Moolenbroek ACPI_GTDT_TYPE_TIMER_BLOCK = 0, 328*29492bb7SDavid van Moolenbroek ACPI_GTDT_TYPE_WATCHDOG = 1, 329*29492bb7SDavid van Moolenbroek ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 330*29492bb7SDavid van Moolenbroek }; 331*29492bb7SDavid van Moolenbroek 332*29492bb7SDavid van Moolenbroek 333*29492bb7SDavid van Moolenbroek /* GTDT Subtables, correspond to Type in acpi_gtdt_header */ 334*29492bb7SDavid van Moolenbroek 335*29492bb7SDavid van Moolenbroek /* 0: Generic Timer Block */ 336*29492bb7SDavid van Moolenbroek 337*29492bb7SDavid van Moolenbroek typedef struct acpi_gtdt_timer_block 338*29492bb7SDavid van Moolenbroek { 339*29492bb7SDavid van Moolenbroek ACPI_GTDT_HEADER Header; 340*29492bb7SDavid van Moolenbroek UINT8 Reserved; 341*29492bb7SDavid van Moolenbroek UINT64 BlockAddress; 342*29492bb7SDavid van Moolenbroek UINT32 TimerCount; 343*29492bb7SDavid van Moolenbroek UINT32 TimerOffset; 344*29492bb7SDavid van Moolenbroek 345*29492bb7SDavid van Moolenbroek } ACPI_GTDT_TIMER_BLOCK; 346*29492bb7SDavid van Moolenbroek 347*29492bb7SDavid van Moolenbroek /* Timer Sub-Structure, one per timer */ 348*29492bb7SDavid van Moolenbroek 349*29492bb7SDavid van Moolenbroek typedef struct acpi_gtdt_timer_entry 350*29492bb7SDavid van Moolenbroek { 351*29492bb7SDavid van Moolenbroek UINT8 FrameNumber; 352*29492bb7SDavid van Moolenbroek UINT8 Reserved[3]; 353*29492bb7SDavid van Moolenbroek UINT64 BaseAddress; 354*29492bb7SDavid van Moolenbroek UINT64 El0BaseAddress; 355*29492bb7SDavid van Moolenbroek UINT32 TimerInterrupt; 356*29492bb7SDavid van Moolenbroek UINT32 TimerFlags; 357*29492bb7SDavid van Moolenbroek UINT32 VirtualTimerInterrupt; 358*29492bb7SDavid van Moolenbroek UINT32 VirtualTimerFlags; 359*29492bb7SDavid van Moolenbroek UINT32 CommonFlags; 360*29492bb7SDavid van Moolenbroek 361*29492bb7SDavid van Moolenbroek } ACPI_GTDT_TIMER_ENTRY; 362*29492bb7SDavid van Moolenbroek 363*29492bb7SDavid van Moolenbroek /* Flag Definitions: TimerFlags and VirtualTimerFlags above */ 364*29492bb7SDavid van Moolenbroek 365*29492bb7SDavid van Moolenbroek #define ACPI_GTDT_GT_IRQ_MODE (1) 366*29492bb7SDavid van Moolenbroek #define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) 367*29492bb7SDavid van Moolenbroek 368*29492bb7SDavid van Moolenbroek /* Flag Definitions: CommonFlags above */ 369*29492bb7SDavid van Moolenbroek 370*29492bb7SDavid van Moolenbroek #define ACPI_GTDT_GT_IS_SECURE_TIMER (1) 371*29492bb7SDavid van Moolenbroek #define ACPI_GTDT_GT_ALWAYS_ON (1<<1) 372*29492bb7SDavid van Moolenbroek 373*29492bb7SDavid van Moolenbroek 374*29492bb7SDavid van Moolenbroek /* 1: SBSA Generic Watchdog Structure */ 375*29492bb7SDavid van Moolenbroek 376*29492bb7SDavid van Moolenbroek typedef struct acpi_gtdt_watchdog 377*29492bb7SDavid van Moolenbroek { 378*29492bb7SDavid van Moolenbroek ACPI_GTDT_HEADER Header; 379*29492bb7SDavid van Moolenbroek UINT8 Reserved; 380*29492bb7SDavid van Moolenbroek UINT64 RefreshFrameAddress; 381*29492bb7SDavid van Moolenbroek UINT64 ControlFrameAddress; 382*29492bb7SDavid van Moolenbroek UINT32 TimerInterrupt; 383*29492bb7SDavid van Moolenbroek UINT32 TimerFlags; 384*29492bb7SDavid van Moolenbroek 385*29492bb7SDavid van Moolenbroek } ACPI_GTDT_WATCHDOG; 386*29492bb7SDavid van Moolenbroek 387*29492bb7SDavid van Moolenbroek /* Flag Definitions: TimerFlags above */ 388*29492bb7SDavid van Moolenbroek 389*29492bb7SDavid van Moolenbroek #define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) 390*29492bb7SDavid van Moolenbroek #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) 391*29492bb7SDavid van Moolenbroek #define ACPI_GTDT_WATCHDOG_SECURE (1<<2) 392*29492bb7SDavid van Moolenbroek 393*29492bb7SDavid van Moolenbroek 394*29492bb7SDavid van Moolenbroek /******************************************************************************* 395*29492bb7SDavid van Moolenbroek * 396*29492bb7SDavid van Moolenbroek * MPST - Memory Power State Table (ACPI 5.0) 397*29492bb7SDavid van Moolenbroek * Version 1 398*29492bb7SDavid van Moolenbroek * 399*29492bb7SDavid van Moolenbroek ******************************************************************************/ 400*29492bb7SDavid van Moolenbroek 401*29492bb7SDavid van Moolenbroek #define ACPI_MPST_CHANNEL_INFO \ 402*29492bb7SDavid van Moolenbroek UINT8 ChannelId; \ 403*29492bb7SDavid van Moolenbroek UINT8 Reserved1[3]; \ 404*29492bb7SDavid van Moolenbroek UINT16 PowerNodeCount; \ 405*29492bb7SDavid van Moolenbroek UINT16 Reserved2; 406*29492bb7SDavid van Moolenbroek 407*29492bb7SDavid van Moolenbroek /* Main table */ 408*29492bb7SDavid van Moolenbroek 409*29492bb7SDavid van Moolenbroek typedef struct acpi_table_mpst 410*29492bb7SDavid van Moolenbroek { 411*29492bb7SDavid van Moolenbroek ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 412*29492bb7SDavid van Moolenbroek ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 413*29492bb7SDavid van Moolenbroek 414*29492bb7SDavid van Moolenbroek } ACPI_TABLE_MPST; 415*29492bb7SDavid van Moolenbroek 416*29492bb7SDavid van Moolenbroek 417*29492bb7SDavid van Moolenbroek /* Memory Platform Communication Channel Info */ 418*29492bb7SDavid van Moolenbroek 419*29492bb7SDavid van Moolenbroek typedef struct acpi_mpst_channel 420*29492bb7SDavid van Moolenbroek { 421*29492bb7SDavid van Moolenbroek ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 422*29492bb7SDavid van Moolenbroek 423*29492bb7SDavid van Moolenbroek } ACPI_MPST_CHANNEL; 424*29492bb7SDavid van Moolenbroek 425*29492bb7SDavid van Moolenbroek 426*29492bb7SDavid van Moolenbroek /* Memory Power Node Structure */ 427*29492bb7SDavid van Moolenbroek 428*29492bb7SDavid van Moolenbroek typedef struct acpi_mpst_power_node 429*29492bb7SDavid van Moolenbroek { 430*29492bb7SDavid van Moolenbroek UINT8 Flags; 431*29492bb7SDavid van Moolenbroek UINT8 Reserved1; 432*29492bb7SDavid van Moolenbroek UINT16 NodeId; 433*29492bb7SDavid van Moolenbroek UINT32 Length; 434*29492bb7SDavid van Moolenbroek UINT64 RangeAddress; 435*29492bb7SDavid van Moolenbroek UINT64 RangeLength; 436*29492bb7SDavid van Moolenbroek UINT32 NumPowerStates; 437*29492bb7SDavid van Moolenbroek UINT32 NumPhysicalComponents; 438*29492bb7SDavid van Moolenbroek 439*29492bb7SDavid van Moolenbroek } ACPI_MPST_POWER_NODE; 440*29492bb7SDavid van Moolenbroek 441*29492bb7SDavid van Moolenbroek /* Values for Flags field above */ 442*29492bb7SDavid van Moolenbroek 443*29492bb7SDavid van Moolenbroek #define ACPI_MPST_ENABLED 1 444*29492bb7SDavid van Moolenbroek #define ACPI_MPST_POWER_MANAGED 2 445*29492bb7SDavid van Moolenbroek #define ACPI_MPST_HOT_PLUG_CAPABLE 4 446*29492bb7SDavid van Moolenbroek 447*29492bb7SDavid van Moolenbroek 448*29492bb7SDavid van Moolenbroek /* Memory Power State Structure (follows POWER_NODE above) */ 449*29492bb7SDavid van Moolenbroek 450*29492bb7SDavid van Moolenbroek typedef struct acpi_mpst_power_state 451*29492bb7SDavid van Moolenbroek { 452*29492bb7SDavid van Moolenbroek UINT8 PowerState; 453*29492bb7SDavid van Moolenbroek UINT8 InfoIndex; 454*29492bb7SDavid van Moolenbroek 455*29492bb7SDavid van Moolenbroek } ACPI_MPST_POWER_STATE; 456*29492bb7SDavid van Moolenbroek 457*29492bb7SDavid van Moolenbroek 458*29492bb7SDavid van Moolenbroek /* Physical Component ID Structure (follows POWER_STATE above) */ 459*29492bb7SDavid van Moolenbroek 460*29492bb7SDavid van Moolenbroek typedef struct acpi_mpst_component 461*29492bb7SDavid van Moolenbroek { 462*29492bb7SDavid van Moolenbroek UINT16 ComponentId; 463*29492bb7SDavid van Moolenbroek 464*29492bb7SDavid van Moolenbroek } ACPI_MPST_COMPONENT; 465*29492bb7SDavid van Moolenbroek 466*29492bb7SDavid van Moolenbroek 467*29492bb7SDavid van Moolenbroek /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 468*29492bb7SDavid van Moolenbroek 469*29492bb7SDavid van Moolenbroek typedef struct acpi_mpst_data_hdr 470*29492bb7SDavid van Moolenbroek { 471*29492bb7SDavid van Moolenbroek UINT16 CharacteristicsCount; 472*29492bb7SDavid van Moolenbroek UINT16 Reserved; 473*29492bb7SDavid van Moolenbroek 474*29492bb7SDavid van Moolenbroek } ACPI_MPST_DATA_HDR; 475*29492bb7SDavid van Moolenbroek 476*29492bb7SDavid van Moolenbroek typedef struct acpi_mpst_power_data 477*29492bb7SDavid van Moolenbroek { 478*29492bb7SDavid van Moolenbroek UINT8 StructureId; 479*29492bb7SDavid van Moolenbroek UINT8 Flags; 480*29492bb7SDavid van Moolenbroek UINT16 Reserved1; 481*29492bb7SDavid van Moolenbroek UINT32 AveragePower; 482*29492bb7SDavid van Moolenbroek UINT32 PowerSaving; 483*29492bb7SDavid van Moolenbroek UINT64 ExitLatency; 484*29492bb7SDavid van Moolenbroek UINT64 Reserved2; 485*29492bb7SDavid van Moolenbroek 486*29492bb7SDavid van Moolenbroek } ACPI_MPST_POWER_DATA; 487*29492bb7SDavid van Moolenbroek 488*29492bb7SDavid van Moolenbroek /* Values for Flags field above */ 489*29492bb7SDavid van Moolenbroek 490*29492bb7SDavid van Moolenbroek #define ACPI_MPST_PRESERVE 1 491*29492bb7SDavid van Moolenbroek #define ACPI_MPST_AUTOENTRY 2 492*29492bb7SDavid van Moolenbroek #define ACPI_MPST_AUTOEXIT 4 493*29492bb7SDavid van Moolenbroek 494*29492bb7SDavid van Moolenbroek 495*29492bb7SDavid van Moolenbroek /* Shared Memory Region (not part of an ACPI table) */ 496*29492bb7SDavid van Moolenbroek 497*29492bb7SDavid van Moolenbroek typedef struct acpi_mpst_shared 498*29492bb7SDavid van Moolenbroek { 499*29492bb7SDavid van Moolenbroek UINT32 Signature; 500*29492bb7SDavid van Moolenbroek UINT16 PccCommand; 501*29492bb7SDavid van Moolenbroek UINT16 PccStatus; 502*29492bb7SDavid van Moolenbroek UINT32 CommandRegister; 503*29492bb7SDavid van Moolenbroek UINT32 StatusRegister; 504*29492bb7SDavid van Moolenbroek UINT32 PowerStateId; 505*29492bb7SDavid van Moolenbroek UINT32 PowerNodeId; 506*29492bb7SDavid van Moolenbroek UINT64 EnergyConsumed; 507*29492bb7SDavid van Moolenbroek UINT64 AveragePower; 508*29492bb7SDavid van Moolenbroek 509*29492bb7SDavid van Moolenbroek } ACPI_MPST_SHARED; 510*29492bb7SDavid van Moolenbroek 511*29492bb7SDavid van Moolenbroek 512*29492bb7SDavid van Moolenbroek /******************************************************************************* 513*29492bb7SDavid van Moolenbroek * 514*29492bb7SDavid van Moolenbroek * PCCT - Platform Communications Channel Table (ACPI 5.0) 515*29492bb7SDavid van Moolenbroek * Version 1 516*29492bb7SDavid van Moolenbroek * 517*29492bb7SDavid van Moolenbroek ******************************************************************************/ 518*29492bb7SDavid van Moolenbroek 519*29492bb7SDavid van Moolenbroek typedef struct acpi_table_pcct 520*29492bb7SDavid van Moolenbroek { 521*29492bb7SDavid van Moolenbroek ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 522*29492bb7SDavid van Moolenbroek UINT32 Flags; 523*29492bb7SDavid van Moolenbroek UINT64 Reserved; 524*29492bb7SDavid van Moolenbroek 525*29492bb7SDavid van Moolenbroek } ACPI_TABLE_PCCT; 526*29492bb7SDavid van Moolenbroek 527*29492bb7SDavid van Moolenbroek /* Values for Flags field above */ 528*29492bb7SDavid van Moolenbroek 529*29492bb7SDavid van Moolenbroek #define ACPI_PCCT_DOORBELL 1 530*29492bb7SDavid van Moolenbroek 531*29492bb7SDavid van Moolenbroek /* Values for subtable type in ACPI_SUBTABLE_HEADER */ 532*29492bb7SDavid van Moolenbroek 533*29492bb7SDavid van Moolenbroek enum AcpiPcctType 534*29492bb7SDavid van Moolenbroek { 535*29492bb7SDavid van Moolenbroek ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, 536*29492bb7SDavid van Moolenbroek ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, 537*29492bb7SDavid van Moolenbroek ACPI_PCCT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 538*29492bb7SDavid van Moolenbroek }; 539*29492bb7SDavid van Moolenbroek 540*29492bb7SDavid van Moolenbroek /* 541*29492bb7SDavid van Moolenbroek * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 542*29492bb7SDavid van Moolenbroek */ 543*29492bb7SDavid van Moolenbroek 544*29492bb7SDavid van Moolenbroek /* 0: Generic Communications Subspace */ 545*29492bb7SDavid van Moolenbroek 546*29492bb7SDavid van Moolenbroek typedef struct acpi_pcct_subspace 547*29492bb7SDavid van Moolenbroek { 548*29492bb7SDavid van Moolenbroek ACPI_SUBTABLE_HEADER Header; 549*29492bb7SDavid van Moolenbroek UINT8 Reserved[6]; 550*29492bb7SDavid van Moolenbroek UINT64 BaseAddress; 551*29492bb7SDavid van Moolenbroek UINT64 Length; 552*29492bb7SDavid van Moolenbroek ACPI_GENERIC_ADDRESS DoorbellRegister; 553*29492bb7SDavid van Moolenbroek UINT64 PreserveMask; 554*29492bb7SDavid van Moolenbroek UINT64 WriteMask; 555*29492bb7SDavid van Moolenbroek UINT32 Latency; 556*29492bb7SDavid van Moolenbroek UINT32 MaxAccessRate; 557*29492bb7SDavid van Moolenbroek UINT16 MinTurnaroundTime; 558*29492bb7SDavid van Moolenbroek 559*29492bb7SDavid van Moolenbroek } ACPI_PCCT_SUBSPACE; 560*29492bb7SDavid van Moolenbroek 561*29492bb7SDavid van Moolenbroek 562*29492bb7SDavid van Moolenbroek /* 1: HW-reduced Communications Subspace (ACPI 5.1) */ 563*29492bb7SDavid van Moolenbroek 564*29492bb7SDavid van Moolenbroek typedef struct acpi_pcct_hw_reduced 565*29492bb7SDavid van Moolenbroek { 566*29492bb7SDavid van Moolenbroek ACPI_SUBTABLE_HEADER Header; 567*29492bb7SDavid van Moolenbroek UINT32 DoorbellInterrupt; 568*29492bb7SDavid van Moolenbroek UINT8 Flags; 569*29492bb7SDavid van Moolenbroek UINT8 Reserved; 570*29492bb7SDavid van Moolenbroek UINT64 BaseAddress; 571*29492bb7SDavid van Moolenbroek UINT64 Length; 572*29492bb7SDavid van Moolenbroek ACPI_GENERIC_ADDRESS DoorbellRegister; 573*29492bb7SDavid van Moolenbroek UINT64 PreserveMask; 574*29492bb7SDavid van Moolenbroek UINT64 WriteMask; 575*29492bb7SDavid van Moolenbroek UINT32 Latency; 576*29492bb7SDavid van Moolenbroek UINT32 MaxAccessRate; 577*29492bb7SDavid van Moolenbroek UINT16 MinTurnaroundTime; 578*29492bb7SDavid van Moolenbroek 579*29492bb7SDavid van Moolenbroek } ACPI_PCCT_HW_REDUCED; 580*29492bb7SDavid van Moolenbroek 581*29492bb7SDavid van Moolenbroek /* Values for doorbell flags above */ 582*29492bb7SDavid van Moolenbroek 583*29492bb7SDavid van Moolenbroek #define ACPI_PCCT_INTERRUPT_POLARITY (1) 584*29492bb7SDavid van Moolenbroek #define ACPI_PCCT_INTERRUPT_MODE (1<<1) 585*29492bb7SDavid van Moolenbroek 586*29492bb7SDavid van Moolenbroek 587*29492bb7SDavid van Moolenbroek /* 588*29492bb7SDavid van Moolenbroek * PCC memory structures (not part of the ACPI table) 589*29492bb7SDavid van Moolenbroek */ 590*29492bb7SDavid van Moolenbroek 591*29492bb7SDavid van Moolenbroek /* Shared Memory Region */ 592*29492bb7SDavid van Moolenbroek 593*29492bb7SDavid van Moolenbroek typedef struct acpi_pcct_shared_memory 594*29492bb7SDavid van Moolenbroek { 595*29492bb7SDavid van Moolenbroek UINT32 Signature; 596*29492bb7SDavid van Moolenbroek UINT16 Command; 597*29492bb7SDavid van Moolenbroek UINT16 Status; 598*29492bb7SDavid van Moolenbroek 599*29492bb7SDavid van Moolenbroek } ACPI_PCCT_SHARED_MEMORY; 600*29492bb7SDavid van Moolenbroek 601*29492bb7SDavid van Moolenbroek 602*29492bb7SDavid van Moolenbroek /******************************************************************************* 603*29492bb7SDavid van Moolenbroek * 604*29492bb7SDavid van Moolenbroek * PMTT - Platform Memory Topology Table (ACPI 5.0) 605*29492bb7SDavid van Moolenbroek * Version 1 606*29492bb7SDavid van Moolenbroek * 607*29492bb7SDavid van Moolenbroek ******************************************************************************/ 608*29492bb7SDavid van Moolenbroek 609*29492bb7SDavid van Moolenbroek typedef struct acpi_table_pmtt 610*29492bb7SDavid van Moolenbroek { 611*29492bb7SDavid van Moolenbroek ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 612*29492bb7SDavid van Moolenbroek UINT32 Reserved; 613*29492bb7SDavid van Moolenbroek 614*29492bb7SDavid van Moolenbroek } ACPI_TABLE_PMTT; 615*29492bb7SDavid van Moolenbroek 616*29492bb7SDavid van Moolenbroek 617*29492bb7SDavid van Moolenbroek /* Common header for PMTT subtables that follow main table */ 618*29492bb7SDavid van Moolenbroek 619*29492bb7SDavid van Moolenbroek typedef struct acpi_pmtt_header 620*29492bb7SDavid van Moolenbroek { 621*29492bb7SDavid van Moolenbroek UINT8 Type; 622*29492bb7SDavid van Moolenbroek UINT8 Reserved1; 623*29492bb7SDavid van Moolenbroek UINT16 Length; 624*29492bb7SDavid van Moolenbroek UINT16 Flags; 625*29492bb7SDavid van Moolenbroek UINT16 Reserved2; 626*29492bb7SDavid van Moolenbroek 627*29492bb7SDavid van Moolenbroek } ACPI_PMTT_HEADER; 628*29492bb7SDavid van Moolenbroek 629*29492bb7SDavid van Moolenbroek /* Values for Type field above */ 630*29492bb7SDavid van Moolenbroek 631*29492bb7SDavid van Moolenbroek #define ACPI_PMTT_TYPE_SOCKET 0 632*29492bb7SDavid van Moolenbroek #define ACPI_PMTT_TYPE_CONTROLLER 1 633*29492bb7SDavid van Moolenbroek #define ACPI_PMTT_TYPE_DIMM 2 634*29492bb7SDavid van Moolenbroek #define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ 635*29492bb7SDavid van Moolenbroek 636*29492bb7SDavid van Moolenbroek /* Values for Flags field above */ 637*29492bb7SDavid van Moolenbroek 638*29492bb7SDavid van Moolenbroek #define ACPI_PMTT_TOP_LEVEL 0x0001 639*29492bb7SDavid van Moolenbroek #define ACPI_PMTT_PHYSICAL 0x0002 640*29492bb7SDavid van Moolenbroek #define ACPI_PMTT_MEMORY_TYPE 0x000C 641*29492bb7SDavid van Moolenbroek 642*29492bb7SDavid van Moolenbroek 643*29492bb7SDavid van Moolenbroek /* 644*29492bb7SDavid van Moolenbroek * PMTT subtables, correspond to Type in acpi_pmtt_header 645*29492bb7SDavid van Moolenbroek */ 646*29492bb7SDavid van Moolenbroek 647*29492bb7SDavid van Moolenbroek 648*29492bb7SDavid van Moolenbroek /* 0: Socket Structure */ 649*29492bb7SDavid van Moolenbroek 650*29492bb7SDavid van Moolenbroek typedef struct acpi_pmtt_socket 651*29492bb7SDavid van Moolenbroek { 652*29492bb7SDavid van Moolenbroek ACPI_PMTT_HEADER Header; 653*29492bb7SDavid van Moolenbroek UINT16 SocketId; 654*29492bb7SDavid van Moolenbroek UINT16 Reserved; 655*29492bb7SDavid van Moolenbroek 656*29492bb7SDavid van Moolenbroek } ACPI_PMTT_SOCKET; 657*29492bb7SDavid van Moolenbroek 658*29492bb7SDavid van Moolenbroek 659*29492bb7SDavid van Moolenbroek /* 1: Memory Controller subtable */ 660*29492bb7SDavid van Moolenbroek 661*29492bb7SDavid van Moolenbroek typedef struct acpi_pmtt_controller 662*29492bb7SDavid van Moolenbroek { 663*29492bb7SDavid van Moolenbroek ACPI_PMTT_HEADER Header; 664*29492bb7SDavid van Moolenbroek UINT32 ReadLatency; 665*29492bb7SDavid van Moolenbroek UINT32 WriteLatency; 666*29492bb7SDavid van Moolenbroek UINT32 ReadBandwidth; 667*29492bb7SDavid van Moolenbroek UINT32 WriteBandwidth; 668*29492bb7SDavid van Moolenbroek UINT16 AccessWidth; 669*29492bb7SDavid van Moolenbroek UINT16 Alignment; 670*29492bb7SDavid van Moolenbroek UINT16 Reserved; 671*29492bb7SDavid van Moolenbroek UINT16 DomainCount; 672*29492bb7SDavid van Moolenbroek 673*29492bb7SDavid van Moolenbroek } ACPI_PMTT_CONTROLLER; 674*29492bb7SDavid van Moolenbroek 675*29492bb7SDavid van Moolenbroek /* 1a: Proximity Domain substructure */ 676*29492bb7SDavid van Moolenbroek 677*29492bb7SDavid van Moolenbroek typedef struct acpi_pmtt_domain 678*29492bb7SDavid van Moolenbroek { 679*29492bb7SDavid van Moolenbroek UINT32 ProximityDomain; 680*29492bb7SDavid van Moolenbroek 681*29492bb7SDavid van Moolenbroek } ACPI_PMTT_DOMAIN; 682*29492bb7SDavid van Moolenbroek 683*29492bb7SDavid van Moolenbroek 684*29492bb7SDavid van Moolenbroek /* 2: Physical Component Identifier (DIMM) */ 685*29492bb7SDavid van Moolenbroek 686*29492bb7SDavid van Moolenbroek typedef struct acpi_pmtt_physical_component 687*29492bb7SDavid van Moolenbroek { 688*29492bb7SDavid van Moolenbroek ACPI_PMTT_HEADER Header; 689*29492bb7SDavid van Moolenbroek UINT16 ComponentId; 690*29492bb7SDavid van Moolenbroek UINT16 Reserved; 691*29492bb7SDavid van Moolenbroek UINT32 MemorySize; 692*29492bb7SDavid van Moolenbroek UINT32 BiosHandle; 693*29492bb7SDavid van Moolenbroek 694*29492bb7SDavid van Moolenbroek } ACPI_PMTT_PHYSICAL_COMPONENT; 695*29492bb7SDavid van Moolenbroek 696*29492bb7SDavid van Moolenbroek 697*29492bb7SDavid van Moolenbroek /******************************************************************************* 698*29492bb7SDavid van Moolenbroek * 699*29492bb7SDavid van Moolenbroek * RASF - RAS Feature Table (ACPI 5.0) 700*29492bb7SDavid van Moolenbroek * Version 1 701*29492bb7SDavid van Moolenbroek * 702*29492bb7SDavid van Moolenbroek ******************************************************************************/ 703*29492bb7SDavid van Moolenbroek 704*29492bb7SDavid van Moolenbroek typedef struct acpi_table_rasf 705*29492bb7SDavid van Moolenbroek { 706*29492bb7SDavid van Moolenbroek ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 707*29492bb7SDavid van Moolenbroek UINT8 ChannelId[12]; 708*29492bb7SDavid van Moolenbroek 709*29492bb7SDavid van Moolenbroek } ACPI_TABLE_RASF; 710*29492bb7SDavid van Moolenbroek 711*29492bb7SDavid van Moolenbroek /* RASF Platform Communication Channel Shared Memory Region */ 712*29492bb7SDavid van Moolenbroek 713*29492bb7SDavid van Moolenbroek typedef struct acpi_rasf_shared_memory 714*29492bb7SDavid van Moolenbroek { 715*29492bb7SDavid van Moolenbroek UINT32 Signature; 716*29492bb7SDavid van Moolenbroek UINT16 Command; 717*29492bb7SDavid van Moolenbroek UINT16 Status; 718*29492bb7SDavid van Moolenbroek UINT16 Version; 719*29492bb7SDavid van Moolenbroek UINT8 Capabilities[16]; 720*29492bb7SDavid van Moolenbroek UINT8 SetCapabilities[16]; 721*29492bb7SDavid van Moolenbroek UINT16 NumParameterBlocks; 722*29492bb7SDavid van Moolenbroek UINT32 SetCapabilitiesStatus; 723*29492bb7SDavid van Moolenbroek 724*29492bb7SDavid van Moolenbroek } ACPI_RASF_SHARED_MEMORY; 725*29492bb7SDavid van Moolenbroek 726*29492bb7SDavid van Moolenbroek /* RASF Parameter Block Structure Header */ 727*29492bb7SDavid van Moolenbroek 728*29492bb7SDavid van Moolenbroek typedef struct acpi_rasf_parameter_block 729*29492bb7SDavid van Moolenbroek { 730*29492bb7SDavid van Moolenbroek UINT16 Type; 731*29492bb7SDavid van Moolenbroek UINT16 Version; 732*29492bb7SDavid van Moolenbroek UINT16 Length; 733*29492bb7SDavid van Moolenbroek 734*29492bb7SDavid van Moolenbroek } ACPI_RASF_PARAMETER_BLOCK; 735*29492bb7SDavid van Moolenbroek 736*29492bb7SDavid van Moolenbroek /* RASF Parameter Block Structure for PATROL_SCRUB */ 737*29492bb7SDavid van Moolenbroek 738*29492bb7SDavid van Moolenbroek typedef struct acpi_rasf_patrol_scrub_parameter 739*29492bb7SDavid van Moolenbroek { 740*29492bb7SDavid van Moolenbroek ACPI_RASF_PARAMETER_BLOCK Header; 741*29492bb7SDavid van Moolenbroek UINT16 PatrolScrubCommand; 742*29492bb7SDavid van Moolenbroek UINT64 RequestedAddressRange[2]; 743*29492bb7SDavid van Moolenbroek UINT64 ActualAddressRange[2]; 744*29492bb7SDavid van Moolenbroek UINT16 Flags; 745*29492bb7SDavid van Moolenbroek UINT8 RequestedSpeed; 746*29492bb7SDavid van Moolenbroek 747*29492bb7SDavid van Moolenbroek } ACPI_RASF_PATROL_SCRUB_PARAMETER; 748*29492bb7SDavid van Moolenbroek 749*29492bb7SDavid van Moolenbroek /* Masks for Flags and Speed fields above */ 750*29492bb7SDavid van Moolenbroek 751*29492bb7SDavid van Moolenbroek #define ACPI_RASF_SCRUBBER_RUNNING 1 752*29492bb7SDavid van Moolenbroek #define ACPI_RASF_SPEED (7<<1) 753*29492bb7SDavid van Moolenbroek #define ACPI_RASF_SPEED_SLOW (0<<1) 754*29492bb7SDavid van Moolenbroek #define ACPI_RASF_SPEED_MEDIUM (4<<1) 755*29492bb7SDavid van Moolenbroek #define ACPI_RASF_SPEED_FAST (7<<1) 756*29492bb7SDavid van Moolenbroek 757*29492bb7SDavid van Moolenbroek /* Channel Commands */ 758*29492bb7SDavid van Moolenbroek 759*29492bb7SDavid van Moolenbroek enum AcpiRasfCommands 760*29492bb7SDavid van Moolenbroek { 761*29492bb7SDavid van Moolenbroek ACPI_RASF_EXECUTE_RASF_COMMAND = 1 762*29492bb7SDavid van Moolenbroek }; 763*29492bb7SDavid van Moolenbroek 764*29492bb7SDavid van Moolenbroek /* Platform RAS Capabilities */ 765*29492bb7SDavid van Moolenbroek 766*29492bb7SDavid van Moolenbroek enum AcpiRasfCapabiliities 767*29492bb7SDavid van Moolenbroek { 768*29492bb7SDavid van Moolenbroek ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, 769*29492bb7SDavid van Moolenbroek ACPI_SW_PATROL_SCRUB_EXPOSED = 1 770*29492bb7SDavid van Moolenbroek }; 771*29492bb7SDavid van Moolenbroek 772*29492bb7SDavid van Moolenbroek /* Patrol Scrub Commands */ 773*29492bb7SDavid van Moolenbroek 774*29492bb7SDavid van Moolenbroek enum AcpiRasfPatrolScrubCommands 775*29492bb7SDavid van Moolenbroek { 776*29492bb7SDavid van Moolenbroek ACPI_RASF_GET_PATROL_PARAMETERS = 1, 777*29492bb7SDavid van Moolenbroek ACPI_RASF_START_PATROL_SCRUBBER = 2, 778*29492bb7SDavid van Moolenbroek ACPI_RASF_STOP_PATROL_SCRUBBER = 3 779*29492bb7SDavid van Moolenbroek }; 780*29492bb7SDavid van Moolenbroek 781*29492bb7SDavid van Moolenbroek /* Channel Command flags */ 782*29492bb7SDavid van Moolenbroek 783*29492bb7SDavid van Moolenbroek #define ACPI_RASF_GENERATE_SCI (1<<15) 784*29492bb7SDavid van Moolenbroek 785*29492bb7SDavid van Moolenbroek /* Status values */ 786*29492bb7SDavid van Moolenbroek 787*29492bb7SDavid van Moolenbroek enum AcpiRasfStatus 788*29492bb7SDavid van Moolenbroek { 789*29492bb7SDavid van Moolenbroek ACPI_RASF_SUCCESS = 0, 790*29492bb7SDavid van Moolenbroek ACPI_RASF_NOT_VALID = 1, 791*29492bb7SDavid van Moolenbroek ACPI_RASF_NOT_SUPPORTED = 2, 792*29492bb7SDavid van Moolenbroek ACPI_RASF_BUSY = 3, 793*29492bb7SDavid van Moolenbroek ACPI_RASF_FAILED = 4, 794*29492bb7SDavid van Moolenbroek ACPI_RASF_ABORTED = 5, 795*29492bb7SDavid van Moolenbroek ACPI_RASF_INVALID_DATA = 6 796*29492bb7SDavid van Moolenbroek }; 797*29492bb7SDavid van Moolenbroek 798*29492bb7SDavid van Moolenbroek /* Status flags */ 799*29492bb7SDavid van Moolenbroek 800*29492bb7SDavid van Moolenbroek #define ACPI_RASF_COMMAND_COMPLETE (1) 801*29492bb7SDavid van Moolenbroek #define ACPI_RASF_SCI_DOORBELL (1<<1) 802*29492bb7SDavid van Moolenbroek #define ACPI_RASF_ERROR (1<<2) 803*29492bb7SDavid van Moolenbroek #define ACPI_RASF_STATUS (0x1F<<3) 804*29492bb7SDavid van Moolenbroek 805*29492bb7SDavid van Moolenbroek 806*29492bb7SDavid van Moolenbroek /******************************************************************************* 807*29492bb7SDavid van Moolenbroek * 808*29492bb7SDavid van Moolenbroek * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table 809*29492bb7SDavid van Moolenbroek * Version 3 810*29492bb7SDavid van Moolenbroek * 811*29492bb7SDavid van Moolenbroek * Conforms to "TPM 2.0 Hardware Interface Table (TPM2)" 29 November 2011 812*29492bb7SDavid van Moolenbroek * 813*29492bb7SDavid van Moolenbroek ******************************************************************************/ 814*29492bb7SDavid van Moolenbroek 815*29492bb7SDavid van Moolenbroek typedef struct acpi_table_tpm2 816*29492bb7SDavid van Moolenbroek { 817*29492bb7SDavid van Moolenbroek ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 818*29492bb7SDavid van Moolenbroek UINT32 Flags; 819*29492bb7SDavid van Moolenbroek UINT64 ControlAddress; 820*29492bb7SDavid van Moolenbroek UINT32 StartMethod; 821*29492bb7SDavid van Moolenbroek 822*29492bb7SDavid van Moolenbroek } ACPI_TABLE_TPM2; 823*29492bb7SDavid van Moolenbroek 824*29492bb7SDavid van Moolenbroek /* Control area structure (not part of table, pointed to by ControlAddress) */ 825*29492bb7SDavid van Moolenbroek 826*29492bb7SDavid van Moolenbroek typedef struct acpi_tpm2_control 827*29492bb7SDavid van Moolenbroek { 828*29492bb7SDavid van Moolenbroek UINT32 Reserved; 829*29492bb7SDavid van Moolenbroek UINT32 Error; 830*29492bb7SDavid van Moolenbroek UINT32 Cancel; 831*29492bb7SDavid van Moolenbroek UINT32 Start; 832*29492bb7SDavid van Moolenbroek UINT64 InterruptControl; 833*29492bb7SDavid van Moolenbroek UINT32 CommandSize; 834*29492bb7SDavid van Moolenbroek UINT64 CommandAddress; 835*29492bb7SDavid van Moolenbroek UINT32 ResponseSize; 836*29492bb7SDavid van Moolenbroek UINT64 ResponseAddress; 837*29492bb7SDavid van Moolenbroek 838*29492bb7SDavid van Moolenbroek } ACPI_TPM2_CONTROL; 839*29492bb7SDavid van Moolenbroek 840*29492bb7SDavid van Moolenbroek 841*29492bb7SDavid van Moolenbroek /* Reset to default packing */ 842*29492bb7SDavid van Moolenbroek 843*29492bb7SDavid van Moolenbroek #pragma pack() 844*29492bb7SDavid van Moolenbroek 845*29492bb7SDavid van Moolenbroek #endif /* __ACTBL3_H__ */ 846