1227896Sjkim/******************************************************************************
2227896Sjkim *
3227896Sjkim * Name: actbl3.h - ACPI Table Definitions
4227896Sjkim *
5227896Sjkim *****************************************************************************/
6227896Sjkim
7316303Sjkim/******************************************************************************
8316303Sjkim *
9316303Sjkim * 1. Copyright Notice
10316303Sjkim *
11316303Sjkim * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
12227896Sjkim * All rights reserved.
13227896Sjkim *
14316303Sjkim * 2. License
15316303Sjkim *
16316303Sjkim * 2.1. This is your license from Intel Corp. under its intellectual property
17316303Sjkim * rights. You may have additional license terms from the party that provided
18316303Sjkim * you this software, covering your right to use that party's intellectual
19316303Sjkim * property rights.
20316303Sjkim *
21316303Sjkim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22316303Sjkim * copy of the source code appearing in this file ("Covered Code") an
23316303Sjkim * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24316303Sjkim * base code distributed originally by Intel ("Original Intel Code") to copy,
25316303Sjkim * make derivatives, distribute, use and display any portion of the Covered
26316303Sjkim * Code in any form, with the right to sublicense such rights; and
27316303Sjkim *
28316303Sjkim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29316303Sjkim * license (with the right to sublicense), under only those claims of Intel
30316303Sjkim * patents that are infringed by the Original Intel Code, to make, use, sell,
31316303Sjkim * offer to sell, and import the Covered Code and derivative works thereof
32316303Sjkim * solely to the minimum extent necessary to exercise the above copyright
33316303Sjkim * license, and in no event shall the patent license extend to any additions
34316303Sjkim * to or modifications of the Original Intel Code. No other license or right
35316303Sjkim * is granted directly or by implication, estoppel or otherwise;
36316303Sjkim *
37316303Sjkim * The above copyright and patent license is granted only if the following
38316303Sjkim * conditions are met:
39316303Sjkim *
40316303Sjkim * 3. Conditions
41316303Sjkim *
42316303Sjkim * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43316303Sjkim * Redistribution of source code of any substantial portion of the Covered
44316303Sjkim * Code or modification with rights to further distribute source must include
45316303Sjkim * the above Copyright Notice, the above License, this list of Conditions,
46316303Sjkim * and the following Disclaimer and Export Compliance provision. In addition,
47316303Sjkim * Licensee must cause all Covered Code to which Licensee contributes to
48316303Sjkim * contain a file documenting the changes Licensee made to create that Covered
49316303Sjkim * Code and the date of any change. Licensee must include in that file the
50316303Sjkim * documentation of any changes made by any predecessor Licensee. Licensee
51316303Sjkim * must include a prominent statement that the modification is derived,
52316303Sjkim * directly or indirectly, from Original Intel Code.
53316303Sjkim *
54316303Sjkim * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55316303Sjkim * Redistribution of source code of any substantial portion of the Covered
56316303Sjkim * Code or modification without rights to further distribute source must
57316303Sjkim * include the following Disclaimer and Export Compliance provision in the
58316303Sjkim * documentation and/or other materials provided with distribution. In
59316303Sjkim * addition, Licensee may not authorize further sublicense of source of any
60316303Sjkim * portion of the Covered Code, and must include terms to the effect that the
61316303Sjkim * license from Licensee to its licensee is limited to the intellectual
62316303Sjkim * property embodied in the software Licensee provides to its licensee, and
63316303Sjkim * not to intellectual property embodied in modifications its licensee may
64316303Sjkim * make.
65316303Sjkim *
66316303Sjkim * 3.3. Redistribution of Executable. Redistribution in executable form of any
67316303Sjkim * substantial portion of the Covered Code or modification must reproduce the
68316303Sjkim * above Copyright Notice, and the following Disclaimer and Export Compliance
69316303Sjkim * provision in the documentation and/or other materials provided with the
70316303Sjkim * distribution.
71316303Sjkim *
72316303Sjkim * 3.4. Intel retains all right, title, and interest in and to the Original
73316303Sjkim * Intel Code.
74316303Sjkim *
75316303Sjkim * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76316303Sjkim * Intel shall be used in advertising or otherwise to promote the sale, use or
77316303Sjkim * other dealings in products derived from or relating to the Covered Code
78316303Sjkim * without prior written authorization from Intel.
79316303Sjkim *
80316303Sjkim * 4. Disclaimer and Export Compliance
81316303Sjkim *
82316303Sjkim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83316303Sjkim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84316303Sjkim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85316303Sjkim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86316303Sjkim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87316303Sjkim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88316303Sjkim * PARTICULAR PURPOSE.
89316303Sjkim *
90316303Sjkim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91316303Sjkim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92316303Sjkim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93316303Sjkim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94316303Sjkim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95316303Sjkim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96316303Sjkim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97316303Sjkim * LIMITED REMEDY.
98316303Sjkim *
99316303Sjkim * 4.3. Licensee shall not export, either directly or indirectly, any of this
100316303Sjkim * software or system incorporating such software without first obtaining any
101316303Sjkim * required license or other approval from the U. S. Department of Commerce or
102316303Sjkim * any other agency or department of the United States Government. In the
103316303Sjkim * event Licensee exports any such software from the United States or
104316303Sjkim * re-exports any such software from a foreign destination, Licensee shall
105316303Sjkim * ensure that the distribution and export/re-export of the software is in
106316303Sjkim * compliance with all laws, regulations, orders, or other restrictions of the
107316303Sjkim * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108316303Sjkim * any of its subsidiaries will export/re-export any technical data, process,
109316303Sjkim * software, or service, directly or indirectly, to any country for which the
110316303Sjkim * United States government or any agency thereof requires an export license,
111316303Sjkim * other governmental approval, or letter of assurance, without first obtaining
112316303Sjkim * such license, approval or letter.
113316303Sjkim *
114316303Sjkim *****************************************************************************
115316303Sjkim *
116316303Sjkim * Alternatively, you may choose to be licensed under the terms of the
117316303Sjkim * following license:
118316303Sjkim *
119227896Sjkim * Redistribution and use in source and binary forms, with or without
120227896Sjkim * modification, are permitted provided that the following conditions
121227896Sjkim * are met:
122227896Sjkim * 1. Redistributions of source code must retain the above copyright
123227896Sjkim *    notice, this list of conditions, and the following disclaimer,
124227896Sjkim *    without modification.
125227896Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126227896Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
127227896Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
128227896Sjkim *    including a substantially similar Disclaimer requirement for further
129227896Sjkim *    binary redistribution.
130227896Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
131227896Sjkim *    of any contributors may be used to endorse or promote products derived
132227896Sjkim *    from this software without specific prior written permission.
133227896Sjkim *
134316303Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135316303Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136316303Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137316303Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138316303Sjkim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139316303Sjkim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140316303Sjkim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141316303Sjkim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142316303Sjkim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143316303Sjkim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144316303Sjkim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145316303Sjkim *
146316303Sjkim * Alternatively, you may choose to be licensed under the terms of the
147227896Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
148227896Sjkim * Software Foundation.
149227896Sjkim *
150316303Sjkim *****************************************************************************/
151227896Sjkim
152227896Sjkim#ifndef __ACTBL3_H__
153227896Sjkim#define __ACTBL3_H__
154227896Sjkim
155227896Sjkim
156227896Sjkim/*******************************************************************************
157227896Sjkim *
158227896Sjkim * Additional ACPI Tables (3)
159227896Sjkim *
160227896Sjkim * These tables are not consumed directly by the ACPICA subsystem, but are
161227896Sjkim * included here to support device drivers and the AML disassembler.
162227896Sjkim *
163284583Sjkim * In general, the tables in this file are fully defined within the ACPI
164284583Sjkim * specification.
165227896Sjkim *
166227896Sjkim ******************************************************************************/
167227896Sjkim
168227896Sjkim
169227896Sjkim/*
170227896Sjkim * Values for description table header signatures for tables defined in this
171227896Sjkim * file. Useful because they make it more difficult to inadvertently type in
172227896Sjkim * the wrong signature.
173227896Sjkim */
174227896Sjkim#define ACPI_SIG_BGRT           "BGRT"      /* Boot Graphics Resource Table */
175227896Sjkim#define ACPI_SIG_DRTM           "DRTM"      /* Dynamic Root of Trust for Measurement table */
176227896Sjkim#define ACPI_SIG_FPDT           "FPDT"      /* Firmware Performance Data Table */
177227896Sjkim#define ACPI_SIG_GTDT           "GTDT"      /* Generic Timer Description Table */
178227896Sjkim#define ACPI_SIG_MPST           "MPST"      /* Memory Power State Table */
179227896Sjkim#define ACPI_SIG_PCCT           "PCCT"      /* Platform Communications Channel Table */
180227896Sjkim#define ACPI_SIG_PMTT           "PMTT"      /* Platform Memory Topology Table */
181227896Sjkim#define ACPI_SIG_RASF           "RASF"      /* RAS Feature table */
182283092Sjkim#define ACPI_SIG_STAO           "STAO"      /* Status Override table */
183283092Sjkim#define ACPI_SIG_WPBT           "WPBT"      /* Windows Platform Binary Table */
184283092Sjkim#define ACPI_SIG_XENV           "XENV"      /* Xen Environment table */
185227896Sjkim
186227896Sjkim#define ACPI_SIG_S3PT           "S3PT"      /* S3 Performance (sub)Table */
187227896Sjkim#define ACPI_SIG_PCCS           "PCC"       /* PCC Shared Memory Region */
188227896Sjkim
189227896Sjkim/* Reserved table signatures */
190227896Sjkim
191227896Sjkim#define ACPI_SIG_MATR           "MATR"      /* Memory Address Translation Table */
192227896Sjkim#define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
193227896Sjkim
194227896Sjkim/*
195227896Sjkim * All tables must be byte-packed to match the ACPI specification, since
196227896Sjkim * the tables are provided by the system BIOS.
197227896Sjkim */
198227896Sjkim#pragma pack(1)
199227896Sjkim
200227896Sjkim/*
201239340Sjkim * Note: C bitfields are not used for this reason:
202239340Sjkim *
203239340Sjkim * "Bitfields are great and easy to read, but unfortunately the C language
204239340Sjkim * does not specify the layout of bitfields in memory, which means they are
205239340Sjkim * essentially useless for dealing with packed data in on-disk formats or
206239340Sjkim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
207239340Sjkim * this decision was a design error in C. Ritchie could have picked an order
208239340Sjkim * and stuck with it." Norman Ramsey.
209239340Sjkim * See http://stackoverflow.com/a/1053662/41661
210227896Sjkim */
211227896Sjkim
212227896Sjkim
213227896Sjkim/*******************************************************************************
214227896Sjkim *
215227896Sjkim * BGRT - Boot Graphics Resource Table (ACPI 5.0)
216227896Sjkim *        Version 1
217227896Sjkim *
218227896Sjkim ******************************************************************************/
219227896Sjkim
220227896Sjkimtypedef struct acpi_table_bgrt
221227896Sjkim{
222227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
223227896Sjkim    UINT16                  Version;
224227896Sjkim    UINT8                   Status;
225227896Sjkim    UINT8                   ImageType;
226227896Sjkim    UINT64                  ImageAddress;
227227896Sjkim    UINT32                  ImageOffsetX;
228227896Sjkim    UINT32                  ImageOffsetY;
229227896Sjkim
230227896Sjkim} ACPI_TABLE_BGRT;
231227896Sjkim
232322877Sjkim/* Flags for Status field above */
233227896Sjkim
234322877Sjkim#define ACPI_BGRT_DISPLAYED                 (1)
235322877Sjkim#define ACPI_BGRT_ORIENTATION_OFFSET        (3 << 1)
236322877Sjkim
237322877Sjkim
238227896Sjkim/*******************************************************************************
239227896Sjkim *
240227896Sjkim * DRTM - Dynamic Root of Trust for Measurement table
241283092Sjkim * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0
242283092Sjkim * Table version 1
243227896Sjkim *
244227896Sjkim ******************************************************************************/
245227896Sjkim
246227896Sjkimtypedef struct acpi_table_drtm
247227896Sjkim{
248227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
249227896Sjkim    UINT64                  EntryBaseAddress;
250227896Sjkim    UINT64                  EntryLength;
251227896Sjkim    UINT32                  EntryAddress32;
252227896Sjkim    UINT64                  EntryAddress64;
253227896Sjkim    UINT64                  ExitAddress;
254227896Sjkim    UINT64                  LogAreaAddress;
255227896Sjkim    UINT32                  LogAreaLength;
256227896Sjkim    UINT64                  ArchDependentAddress;
257227896Sjkim    UINT32                  Flags;
258227896Sjkim
259227896Sjkim} ACPI_TABLE_DRTM;
260227896Sjkim
261283092Sjkim/* Flag Definitions for above */
262227896Sjkim
263283092Sjkim#define ACPI_DRTM_ACCESS_ALLOWED            (1)
264283092Sjkim#define ACPI_DRTM_ENABLE_GAP_CODE           (1<<1)
265283092Sjkim#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS   (1<<2)
266283092Sjkim#define ACPI_DRTM_AUTHORITY_ORDER           (1<<3)
267283092Sjkim
268283092Sjkim
269283092Sjkim/* 1) Validated Tables List (64-bit addresses) */
270283092Sjkim
271283092Sjkimtypedef struct acpi_drtm_vtable_list
272227896Sjkim{
273283092Sjkim    UINT32                  ValidatedTableCount;
274283092Sjkim    UINT64                  ValidatedTables[1];
275227896Sjkim
276283092Sjkim} ACPI_DRTM_VTABLE_LIST;
277227896Sjkim
278283092Sjkim/* 2) Resources List (of Resource Descriptors) */
279227896Sjkim
280283092Sjkim/* Resource Descriptor */
281283092Sjkim
282283092Sjkimtypedef struct acpi_drtm_resource
283283092Sjkim{
284283092Sjkim    UINT8                   Size[7];
285283092Sjkim    UINT8                   Type;
286283092Sjkim    UINT64                  Address;
287283092Sjkim
288283092Sjkim} ACPI_DRTM_RESOURCE;
289283092Sjkim
290227896Sjkimtypedef struct acpi_drtm_resource_list
291227896Sjkim{
292283092Sjkim    UINT32                  ResourceCount;
293283092Sjkim    ACPI_DRTM_RESOURCE      Resources[1];
294227896Sjkim
295227896Sjkim} ACPI_DRTM_RESOURCE_LIST;
296227896Sjkim
297227896Sjkim/* 3) Platform-specific Identifiers List */
298227896Sjkim
299283092Sjkimtypedef struct acpi_drtm_dps_id
300227896Sjkim{
301283092Sjkim    UINT32                  DpsIdLength;
302283092Sjkim    UINT8                   DpsId[16];
303227896Sjkim
304283092Sjkim} ACPI_DRTM_DPS_ID;
305227896Sjkim
306227896Sjkim
307227896Sjkim/*******************************************************************************
308227896Sjkim *
309227896Sjkim * FPDT - Firmware Performance Data Table (ACPI 5.0)
310227896Sjkim *        Version 1
311227896Sjkim *
312227896Sjkim ******************************************************************************/
313227896Sjkim
314227896Sjkimtypedef struct acpi_table_fpdt
315227896Sjkim{
316227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
317227896Sjkim
318227896Sjkim} ACPI_TABLE_FPDT;
319227896Sjkim
320227896Sjkim
321298714Sjkim/* FPDT subtable header (Performance Record Structure) */
322227896Sjkim
323227896Sjkimtypedef struct acpi_fpdt_header
324227896Sjkim{
325227896Sjkim    UINT16                  Type;
326227896Sjkim    UINT8                   Length;
327227896Sjkim    UINT8                   Revision;
328227896Sjkim
329227896Sjkim} ACPI_FPDT_HEADER;
330227896Sjkim
331227896Sjkim/* Values for Type field above */
332227896Sjkim
333227896Sjkimenum AcpiFpdtType
334227896Sjkim{
335227896Sjkim    ACPI_FPDT_TYPE_BOOT                 = 0,
336246849Sjkim    ACPI_FPDT_TYPE_S3PERF               = 1
337227896Sjkim};
338227896Sjkim
339227896Sjkim
340227896Sjkim/*
341227896Sjkim * FPDT subtables
342227896Sjkim */
343227896Sjkim
344227896Sjkim/* 0: Firmware Basic Boot Performance Record */
345227896Sjkim
346298714Sjkimtypedef struct acpi_fpdt_boot_pointer
347227896Sjkim{
348227896Sjkim    ACPI_FPDT_HEADER        Header;
349227896Sjkim    UINT8                   Reserved[4];
350298714Sjkim    UINT64                  Address;
351227896Sjkim
352298714Sjkim} ACPI_FPDT_BOOT_POINTER;
353227896Sjkim
354227896Sjkim
355227896Sjkim/* 1: S3 Performance Table Pointer Record */
356227896Sjkim
357298714Sjkimtypedef struct acpi_fpdt_s3pt_pointer
358227896Sjkim{
359227896Sjkim    ACPI_FPDT_HEADER        Header;
360227896Sjkim    UINT8                   Reserved[4];
361227896Sjkim    UINT64                  Address;
362227896Sjkim
363298714Sjkim} ACPI_FPDT_S3PT_POINTER;
364227896Sjkim
365227896Sjkim
366227896Sjkim/*
367227896Sjkim * S3PT - S3 Performance Table. This table is pointed to by the
368298714Sjkim * S3 Pointer Record above.
369227896Sjkim */
370227896Sjkimtypedef struct acpi_table_s3pt
371227896Sjkim{
372227896Sjkim    UINT8                   Signature[4]; /* "S3PT" */
373227896Sjkim    UINT32                  Length;
374227896Sjkim
375227896Sjkim} ACPI_TABLE_S3PT;
376227896Sjkim
377227896Sjkim
378227896Sjkim/*
379298714Sjkim * S3PT Subtables (Not part of the actual FPDT)
380227896Sjkim */
381227896Sjkim
382298714Sjkim/* Values for Type field in S3PT header */
383227896Sjkim
384227896Sjkimenum AcpiS3ptType
385227896Sjkim{
386227896Sjkim    ACPI_S3PT_TYPE_RESUME               = 0,
387298714Sjkim    ACPI_S3PT_TYPE_SUSPEND              = 1,
388298714Sjkim    ACPI_FPDT_BOOT_PERFORMANCE          = 2
389227896Sjkim};
390227896Sjkim
391227896Sjkimtypedef struct acpi_s3pt_resume
392227896Sjkim{
393298714Sjkim    ACPI_FPDT_HEADER        Header;
394227896Sjkim    UINT32                  ResumeCount;
395227896Sjkim    UINT64                  FullResume;
396227896Sjkim    UINT64                  AverageResume;
397227896Sjkim
398227896Sjkim} ACPI_S3PT_RESUME;
399227896Sjkim
400227896Sjkimtypedef struct acpi_s3pt_suspend
401227896Sjkim{
402298714Sjkim    ACPI_FPDT_HEADER        Header;
403227896Sjkim    UINT64                  SuspendStart;
404227896Sjkim    UINT64                  SuspendEnd;
405227896Sjkim
406227896Sjkim} ACPI_S3PT_SUSPEND;
407227896Sjkim
408227896Sjkim
409298714Sjkim/*
410298714Sjkim * FPDT Boot Performance Record (Not part of the actual FPDT)
411298714Sjkim */
412298714Sjkimtypedef struct acpi_fpdt_boot
413298714Sjkim{
414298714Sjkim    ACPI_FPDT_HEADER        Header;
415298714Sjkim    UINT8                   Reserved[4];
416298714Sjkim    UINT64                  ResetEnd;
417298714Sjkim    UINT64                  LoadStart;
418298714Sjkim    UINT64                  StartupStart;
419298714Sjkim    UINT64                  ExitServicesEntry;
420298714Sjkim    UINT64                  ExitServicesExit;
421298714Sjkim
422298714Sjkim} ACPI_FPDT_BOOT;
423298714Sjkim
424298714Sjkim
425227896Sjkim/*******************************************************************************
426227896Sjkim *
427272444Sjkim * GTDT - Generic Timer Description Table (ACPI 5.1)
428272444Sjkim *        Version 2
429227896Sjkim *
430227896Sjkim ******************************************************************************/
431227896Sjkim
432227896Sjkimtypedef struct acpi_table_gtdt
433227896Sjkim{
434227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
435272444Sjkim    UINT64                  CounterBlockAddresss;
436272444Sjkim    UINT32                  Reserved;
437272444Sjkim    UINT32                  SecureEl1Interrupt;
438272444Sjkim    UINT32                  SecureEl1Flags;
439272444Sjkim    UINT32                  NonSecureEl1Interrupt;
440272444Sjkim    UINT32                  NonSecureEl1Flags;
441227896Sjkim    UINT32                  VirtualTimerInterrupt;
442227896Sjkim    UINT32                  VirtualTimerFlags;
443272444Sjkim    UINT32                  NonSecureEl2Interrupt;
444272444Sjkim    UINT32                  NonSecureEl2Flags;
445272444Sjkim    UINT64                  CounterReadBlockAddress;
446272444Sjkim    UINT32                  PlatformTimerCount;
447272444Sjkim    UINT32                  PlatformTimerOffset;
448227896Sjkim
449227896Sjkim} ACPI_TABLE_GTDT;
450227896Sjkim
451272444Sjkim/* Flag Definitions: Timer Block Physical Timers and Virtual timers */
452227896Sjkim
453272444Sjkim#define ACPI_GTDT_INTERRUPT_MODE        (1)
454272444Sjkim#define ACPI_GTDT_INTERRUPT_POLARITY    (1<<1)
455272444Sjkim#define ACPI_GTDT_ALWAYS_ON             (1<<2)
456227896Sjkim
457227896Sjkim
458272444Sjkim/* Common GTDT subtable header */
459227896Sjkim
460272444Sjkimtypedef struct acpi_gtdt_header
461272444Sjkim{
462272444Sjkim    UINT8                   Type;
463272444Sjkim    UINT16                  Length;
464227896Sjkim
465272444Sjkim} ACPI_GTDT_HEADER;
466272444Sjkim
467272444Sjkim/* Values for GTDT subtable type above */
468272444Sjkim
469272444Sjkimenum AcpiGtdtType
470272444Sjkim{
471272444Sjkim    ACPI_GTDT_TYPE_TIMER_BLOCK      = 0,
472272444Sjkim    ACPI_GTDT_TYPE_WATCHDOG         = 1,
473272444Sjkim    ACPI_GTDT_TYPE_RESERVED         = 2    /* 2 and greater are reserved */
474272444Sjkim};
475272444Sjkim
476272444Sjkim
477272444Sjkim/* GTDT Subtables, correspond to Type in acpi_gtdt_header */
478272444Sjkim
479272444Sjkim/* 0: Generic Timer Block */
480272444Sjkim
481272444Sjkimtypedef struct acpi_gtdt_timer_block
482272444Sjkim{
483272444Sjkim    ACPI_GTDT_HEADER        Header;
484272444Sjkim    UINT8                   Reserved;
485272444Sjkim    UINT64                  BlockAddress;
486272444Sjkim    UINT32                  TimerCount;
487272444Sjkim    UINT32                  TimerOffset;
488272444Sjkim
489272444Sjkim} ACPI_GTDT_TIMER_BLOCK;
490272444Sjkim
491272444Sjkim/* Timer Sub-Structure, one per timer */
492272444Sjkim
493272444Sjkimtypedef struct acpi_gtdt_timer_entry
494272444Sjkim{
495272444Sjkim    UINT8                   FrameNumber;
496272444Sjkim    UINT8                   Reserved[3];
497272444Sjkim    UINT64                  BaseAddress;
498272444Sjkim    UINT64                  El0BaseAddress;
499272444Sjkim    UINT32                  TimerInterrupt;
500272444Sjkim    UINT32                  TimerFlags;
501272444Sjkim    UINT32                  VirtualTimerInterrupt;
502272444Sjkim    UINT32                  VirtualTimerFlags;
503272444Sjkim    UINT32                  CommonFlags;
504272444Sjkim
505272444Sjkim} ACPI_GTDT_TIMER_ENTRY;
506272444Sjkim
507272444Sjkim/* Flag Definitions: TimerFlags and VirtualTimerFlags above */
508272444Sjkim
509272444Sjkim#define ACPI_GTDT_GT_IRQ_MODE               (1)
510272444Sjkim#define ACPI_GTDT_GT_IRQ_POLARITY           (1<<1)
511272444Sjkim
512272444Sjkim/* Flag Definitions: CommonFlags above */
513272444Sjkim
514272444Sjkim#define ACPI_GTDT_GT_IS_SECURE_TIMER        (1)
515272444Sjkim#define ACPI_GTDT_GT_ALWAYS_ON              (1<<1)
516272444Sjkim
517272444Sjkim
518272444Sjkim/* 1: SBSA Generic Watchdog Structure */
519272444Sjkim
520272444Sjkimtypedef struct acpi_gtdt_watchdog
521272444Sjkim{
522272444Sjkim    ACPI_GTDT_HEADER        Header;
523272444Sjkim    UINT8                   Reserved;
524272444Sjkim    UINT64                  RefreshFrameAddress;
525272444Sjkim    UINT64                  ControlFrameAddress;
526272444Sjkim    UINT32                  TimerInterrupt;
527272444Sjkim    UINT32                  TimerFlags;
528272444Sjkim
529272444Sjkim} ACPI_GTDT_WATCHDOG;
530272444Sjkim
531272444Sjkim/* Flag Definitions: TimerFlags above */
532272444Sjkim
533272444Sjkim#define ACPI_GTDT_WATCHDOG_IRQ_MODE         (1)
534272444Sjkim#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY     (1<<1)
535272444Sjkim#define ACPI_GTDT_WATCHDOG_SECURE           (1<<2)
536272444Sjkim
537272444Sjkim
538227896Sjkim/*******************************************************************************
539227896Sjkim *
540227896Sjkim * MPST - Memory Power State Table (ACPI 5.0)
541227896Sjkim *        Version 1
542227896Sjkim *
543227896Sjkim ******************************************************************************/
544227896Sjkim
545227896Sjkim#define ACPI_MPST_CHANNEL_INFO \
546227896Sjkim    UINT8                   ChannelId; \
547241973Sjkim    UINT8                   Reserved1[3]; \
548241973Sjkim    UINT16                  PowerNodeCount; \
549241973Sjkim    UINT16                  Reserved2;
550227896Sjkim
551227896Sjkim/* Main table */
552227896Sjkim
553227896Sjkimtypedef struct acpi_table_mpst
554227896Sjkim{
555227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
556227896Sjkim    ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
557227896Sjkim
558227896Sjkim} ACPI_TABLE_MPST;
559227896Sjkim
560227896Sjkim
561227896Sjkim/* Memory Platform Communication Channel Info */
562227896Sjkim
563227896Sjkimtypedef struct acpi_mpst_channel
564227896Sjkim{
565227896Sjkim    ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
566227896Sjkim
567227896Sjkim} ACPI_MPST_CHANNEL;
568227896Sjkim
569227896Sjkim
570227896Sjkim/* Memory Power Node Structure */
571227896Sjkim
572227896Sjkimtypedef struct acpi_mpst_power_node
573227896Sjkim{
574227896Sjkim    UINT8                   Flags;
575227896Sjkim    UINT8                   Reserved1;
576227896Sjkim    UINT16                  NodeId;
577227896Sjkim    UINT32                  Length;
578227896Sjkim    UINT64                  RangeAddress;
579227896Sjkim    UINT64                  RangeLength;
580241973Sjkim    UINT32                  NumPowerStates;
581241973Sjkim    UINT32                  NumPhysicalComponents;
582227896Sjkim
583227896Sjkim} ACPI_MPST_POWER_NODE;
584227896Sjkim
585227896Sjkim/* Values for Flags field above */
586227896Sjkim
587227896Sjkim#define ACPI_MPST_ENABLED               1
588227896Sjkim#define ACPI_MPST_POWER_MANAGED         2
589227896Sjkim#define ACPI_MPST_HOT_PLUG_CAPABLE      4
590227896Sjkim
591227896Sjkim
592227896Sjkim/* Memory Power State Structure (follows POWER_NODE above) */
593227896Sjkim
594227896Sjkimtypedef struct acpi_mpst_power_state
595227896Sjkim{
596227896Sjkim    UINT8                   PowerState;
597227896Sjkim    UINT8                   InfoIndex;
598227896Sjkim
599227896Sjkim} ACPI_MPST_POWER_STATE;
600227896Sjkim
601227896Sjkim
602227896Sjkim/* Physical Component ID Structure (follows POWER_STATE above) */
603227896Sjkim
604227896Sjkimtypedef struct acpi_mpst_component
605227896Sjkim{
606227896Sjkim    UINT16                  ComponentId;
607227896Sjkim
608227896Sjkim} ACPI_MPST_COMPONENT;
609227896Sjkim
610227896Sjkim
611227896Sjkim/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
612227896Sjkim
613227896Sjkimtypedef struct acpi_mpst_data_hdr
614227896Sjkim{
615227896Sjkim    UINT16                  CharacteristicsCount;
616241973Sjkim    UINT16                  Reserved;
617227896Sjkim
618227896Sjkim} ACPI_MPST_DATA_HDR;
619227896Sjkim
620227896Sjkimtypedef struct acpi_mpst_power_data
621227896Sjkim{
622241973Sjkim    UINT8                   StructureId;
623227896Sjkim    UINT8                   Flags;
624227896Sjkim    UINT16                  Reserved1;
625227896Sjkim    UINT32                  AveragePower;
626227896Sjkim    UINT32                  PowerSaving;
627227896Sjkim    UINT64                  ExitLatency;
628227896Sjkim    UINT64                  Reserved2;
629227896Sjkim
630227896Sjkim} ACPI_MPST_POWER_DATA;
631227896Sjkim
632227896Sjkim/* Values for Flags field above */
633227896Sjkim
634227896Sjkim#define ACPI_MPST_PRESERVE              1
635227896Sjkim#define ACPI_MPST_AUTOENTRY             2
636227896Sjkim#define ACPI_MPST_AUTOEXIT              4
637227896Sjkim
638227896Sjkim
639227896Sjkim/* Shared Memory Region (not part of an ACPI table) */
640227896Sjkim
641227896Sjkimtypedef struct acpi_mpst_shared
642227896Sjkim{
643227896Sjkim    UINT32                  Signature;
644227896Sjkim    UINT16                  PccCommand;
645227896Sjkim    UINT16                  PccStatus;
646241973Sjkim    UINT32                  CommandRegister;
647241973Sjkim    UINT32                  StatusRegister;
648241973Sjkim    UINT32                  PowerStateId;
649241973Sjkim    UINT32                  PowerNodeId;
650227896Sjkim    UINT64                  EnergyConsumed;
651227896Sjkim    UINT64                  AveragePower;
652227896Sjkim
653227896Sjkim} ACPI_MPST_SHARED;
654227896Sjkim
655227896Sjkim
656227896Sjkim/*******************************************************************************
657227896Sjkim *
658227896Sjkim * PCCT - Platform Communications Channel Table (ACPI 5.0)
659322877Sjkim *        Version 2 (ACPI 6.2)
660227896Sjkim *
661227896Sjkim ******************************************************************************/
662227896Sjkim
663227896Sjkimtypedef struct acpi_table_pcct
664227896Sjkim{
665227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
666227896Sjkim    UINT32                  Flags;
667272444Sjkim    UINT64                  Reserved;
668227896Sjkim
669227896Sjkim} ACPI_TABLE_PCCT;
670227896Sjkim
671227896Sjkim/* Values for Flags field above */
672227896Sjkim
673227896Sjkim#define ACPI_PCCT_DOORBELL              1
674227896Sjkim
675272444Sjkim/* Values for subtable type in ACPI_SUBTABLE_HEADER */
676272444Sjkim
677272444Sjkimenum AcpiPcctType
678272444Sjkim{
679298714Sjkim    ACPI_PCCT_TYPE_GENERIC_SUBSPACE             = 0,
680298714Sjkim    ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE          = 1,
681298714Sjkim    ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2    = 2,    /* ACPI 6.1 */
682322877Sjkim    ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE      = 3,    /* ACPI 6.2 */
683322877Sjkim    ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE       = 4,    /* ACPI 6.2 */
684322877Sjkim    ACPI_PCCT_TYPE_RESERVED                     = 5     /* 5 and greater are reserved */
685272444Sjkim};
686272444Sjkim
687227896Sjkim/*
688272444Sjkim * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
689227896Sjkim */
690227896Sjkim
691227896Sjkim/* 0: Generic Communications Subspace */
692227896Sjkim
693227896Sjkimtypedef struct acpi_pcct_subspace
694227896Sjkim{
695227896Sjkim    ACPI_SUBTABLE_HEADER    Header;
696227896Sjkim    UINT8                   Reserved[6];
697227896Sjkim    UINT64                  BaseAddress;
698227896Sjkim    UINT64                  Length;
699227896Sjkim    ACPI_GENERIC_ADDRESS    DoorbellRegister;
700227896Sjkim    UINT64                  PreserveMask;
701227896Sjkim    UINT64                  WriteMask;
702272444Sjkim    UINT32                  Latency;
703272444Sjkim    UINT32                  MaxAccessRate;
704272444Sjkim    UINT16                  MinTurnaroundTime;
705227896Sjkim
706227896Sjkim} ACPI_PCCT_SUBSPACE;
707227896Sjkim
708227896Sjkim
709272444Sjkim/* 1: HW-reduced Communications Subspace (ACPI 5.1) */
710272444Sjkim
711272444Sjkimtypedef struct acpi_pcct_hw_reduced
712272444Sjkim{
713272444Sjkim    ACPI_SUBTABLE_HEADER    Header;
714322877Sjkim    UINT32                  PlatformInterrupt;
715272444Sjkim    UINT8                   Flags;
716272444Sjkim    UINT8                   Reserved;
717272444Sjkim    UINT64                  BaseAddress;
718272444Sjkim    UINT64                  Length;
719272444Sjkim    ACPI_GENERIC_ADDRESS    DoorbellRegister;
720272444Sjkim    UINT64                  PreserveMask;
721272444Sjkim    UINT64                  WriteMask;
722272444Sjkim    UINT32                  Latency;
723272444Sjkim    UINT32                  MaxAccessRate;
724272444Sjkim    UINT16                  MinTurnaroundTime;
725272444Sjkim
726272444Sjkim} ACPI_PCCT_HW_REDUCED;
727272444Sjkim
728298714Sjkim
729298714Sjkim/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */
730298714Sjkim
731298714Sjkimtypedef struct acpi_pcct_hw_reduced_type2
732298714Sjkim{
733298714Sjkim    ACPI_SUBTABLE_HEADER    Header;
734322877Sjkim    UINT32                  PlatformInterrupt;
735298714Sjkim    UINT8                   Flags;
736298714Sjkim    UINT8                   Reserved;
737298714Sjkim    UINT64                  BaseAddress;
738298714Sjkim    UINT64                  Length;
739298714Sjkim    ACPI_GENERIC_ADDRESS    DoorbellRegister;
740298714Sjkim    UINT64                  PreserveMask;
741298714Sjkim    UINT64                  WriteMask;
742298714Sjkim    UINT32                  Latency;
743298714Sjkim    UINT32                  MaxAccessRate;
744298714Sjkim    UINT16                  MinTurnaroundTime;
745322877Sjkim    ACPI_GENERIC_ADDRESS    PlatformAckRegister;
746298714Sjkim    UINT64                  AckPreserveMask;
747298714Sjkim    UINT64                  AckWriteMask;
748298714Sjkim
749298714Sjkim} ACPI_PCCT_HW_REDUCED_TYPE2;
750298714Sjkim
751298714Sjkim
752322877Sjkim/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
753322877Sjkim
754322877Sjkimtypedef struct acpi_pcct_ext_pcc_master
755322877Sjkim{
756322877Sjkim    ACPI_SUBTABLE_HEADER    Header;
757322877Sjkim    UINT32                  PlatformInterrupt;
758322877Sjkim    UINT8                   Flags;
759322877Sjkim    UINT8                   Reserved1;
760322877Sjkim    UINT64                  BaseAddress;
761322877Sjkim    UINT32                  Length;
762322877Sjkim    ACPI_GENERIC_ADDRESS    DoorbellRegister;
763322877Sjkim    UINT64                  PreserveMask;
764322877Sjkim    UINT64                  WriteMask;
765322877Sjkim    UINT32                  Latency;
766322877Sjkim    UINT32                  MaxAccessRate;
767322877Sjkim    UINT32                  MinTurnaroundTime;
768322877Sjkim    ACPI_GENERIC_ADDRESS    PlatformAckRegister;
769322877Sjkim    UINT64                  AckPreserveMask;
770322877Sjkim    UINT64                  AckSetMask;
771322877Sjkim    UINT64                  Reserved2;
772322877Sjkim    ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
773322877Sjkim    UINT64                  CmdCompleteMask;
774322877Sjkim    ACPI_GENERIC_ADDRESS    CmdUpdateRegister;
775322877Sjkim    UINT64                  CmdUpdatePreserveMask;
776322877Sjkim    UINT64                  CmdUpdateSetMask;
777322877Sjkim    ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
778322877Sjkim    UINT64                  ErrorStatusMask;
779322877Sjkim
780322877Sjkim} ACPI_PCCT_EXT_PCC_MASTER;
781322877Sjkim
782322877Sjkim
783322877Sjkim/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
784322877Sjkim
785322877Sjkimtypedef struct acpi_pcct_ext_pcc_slave
786322877Sjkim{
787322877Sjkim    ACPI_SUBTABLE_HEADER    Header;
788322877Sjkim    UINT32                  PlatformInterrupt;
789322877Sjkim    UINT8                   Flags;
790322877Sjkim    UINT8                   Reserved1;
791322877Sjkim    UINT64                  BaseAddress;
792322877Sjkim    UINT32                  Length;
793322877Sjkim    ACPI_GENERIC_ADDRESS    DoorbellRegister;
794322877Sjkim    UINT64                  PreserveMask;
795322877Sjkim    UINT64                  WriteMask;
796322877Sjkim    UINT32                  Latency;
797322877Sjkim    UINT32                  MaxAccessRate;
798322877Sjkim    UINT32                  MinTurnaroundTime;
799322877Sjkim    ACPI_GENERIC_ADDRESS    PlatformAckRegister;
800322877Sjkim    UINT64                  AckPreserveMask;
801322877Sjkim    UINT64                  AckSetMask;
802322877Sjkim    UINT64                  Reserved2;
803322877Sjkim    ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
804322877Sjkim    UINT64                  CmdCompleteMask;
805322877Sjkim    ACPI_GENERIC_ADDRESS    CmdUpdateRegister;
806322877Sjkim    UINT64                  CmdUpdatePreserveMask;
807322877Sjkim    UINT64                  CmdUpdateSetMask;
808322877Sjkim    ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
809322877Sjkim    UINT64                  ErrorStatusMask;
810322877Sjkim
811322877Sjkim} ACPI_PCCT_EXT_PCC_SLAVE;
812322877Sjkim
813322877Sjkim
814272444Sjkim/* Values for doorbell flags above */
815272444Sjkim
816272444Sjkim#define ACPI_PCCT_INTERRUPT_POLARITY    (1)
817272444Sjkim#define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
818272444Sjkim
819272444Sjkim
820227896Sjkim/*
821227896Sjkim * PCC memory structures (not part of the ACPI table)
822227896Sjkim */
823227896Sjkim
824227896Sjkim/* Shared Memory Region */
825227896Sjkim
826227896Sjkimtypedef struct acpi_pcct_shared_memory
827227896Sjkim{
828227896Sjkim    UINT32                  Signature;
829227896Sjkim    UINT16                  Command;
830227896Sjkim    UINT16                  Status;
831227896Sjkim
832227896Sjkim} ACPI_PCCT_SHARED_MEMORY;
833227896Sjkim
834227896Sjkim
835322877Sjkim/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */
836322877Sjkim
837322877Sjkimtypedef struct acpi_pcct_ext_pcc_shared_memory
838322877Sjkim{
839322877Sjkim    UINT32                  Signature;
840322877Sjkim    UINT32                  Flags;
841322877Sjkim    UINT32                  Length;
842322877Sjkim    UINT32                  Command;
843322877Sjkim
844322877Sjkim} ACPI_PCCT_EXT_PCC_SHARED_MEMORY;
845322877Sjkim
846322877Sjkim
847227896Sjkim/*******************************************************************************
848227896Sjkim *
849227896Sjkim * PMTT - Platform Memory Topology Table (ACPI 5.0)
850227896Sjkim *        Version 1
851227896Sjkim *
852227896Sjkim ******************************************************************************/
853227896Sjkim
854227896Sjkimtypedef struct acpi_table_pmtt
855227896Sjkim{
856227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
857227896Sjkim    UINT32                  Reserved;
858227896Sjkim
859227896Sjkim} ACPI_TABLE_PMTT;
860227896Sjkim
861227896Sjkim
862227896Sjkim/* Common header for PMTT subtables that follow main table */
863227896Sjkim
864227896Sjkimtypedef struct acpi_pmtt_header
865227896Sjkim{
866227896Sjkim    UINT8                   Type;
867227896Sjkim    UINT8                   Reserved1;
868227896Sjkim    UINT16                  Length;
869227896Sjkim    UINT16                  Flags;
870227896Sjkim    UINT16                  Reserved2;
871227896Sjkim
872227896Sjkim} ACPI_PMTT_HEADER;
873227896Sjkim
874227896Sjkim/* Values for Type field above */
875227896Sjkim
876227896Sjkim#define ACPI_PMTT_TYPE_SOCKET           0
877227896Sjkim#define ACPI_PMTT_TYPE_CONTROLLER       1
878227896Sjkim#define ACPI_PMTT_TYPE_DIMM             2
879227896Sjkim#define ACPI_PMTT_TYPE_RESERVED         3 /* 0x03-0xFF are reserved */
880227896Sjkim
881227896Sjkim/* Values for Flags field above */
882227896Sjkim
883227896Sjkim#define ACPI_PMTT_TOP_LEVEL             0x0001
884227896Sjkim#define ACPI_PMTT_PHYSICAL              0x0002
885227896Sjkim#define ACPI_PMTT_MEMORY_TYPE           0x000C
886227896Sjkim
887227896Sjkim
888227896Sjkim/*
889227896Sjkim * PMTT subtables, correspond to Type in acpi_pmtt_header
890227896Sjkim */
891227896Sjkim
892227896Sjkim
893227896Sjkim/* 0: Socket Structure */
894227896Sjkim
895227896Sjkimtypedef struct acpi_pmtt_socket
896227896Sjkim{
897227896Sjkim    ACPI_PMTT_HEADER        Header;
898227896Sjkim    UINT16                  SocketId;
899227896Sjkim    UINT16                  Reserved;
900227896Sjkim
901227896Sjkim} ACPI_PMTT_SOCKET;
902227896Sjkim
903227896Sjkim
904227896Sjkim/* 1: Memory Controller subtable */
905227896Sjkim
906227896Sjkimtypedef struct acpi_pmtt_controller
907227896Sjkim{
908227896Sjkim    ACPI_PMTT_HEADER        Header;
909227896Sjkim    UINT32                  ReadLatency;
910227896Sjkim    UINT32                  WriteLatency;
911227896Sjkim    UINT32                  ReadBandwidth;
912227896Sjkim    UINT32                  WriteBandwidth;
913227896Sjkim    UINT16                  AccessWidth;
914227896Sjkim    UINT16                  Alignment;
915227896Sjkim    UINT16                  Reserved;
916227896Sjkim    UINT16                  DomainCount;
917227896Sjkim
918227896Sjkim} ACPI_PMTT_CONTROLLER;
919227896Sjkim
920227896Sjkim/* 1a: Proximity Domain substructure */
921227896Sjkim
922227896Sjkimtypedef struct acpi_pmtt_domain
923227896Sjkim{
924227896Sjkim    UINT32                  ProximityDomain;
925227896Sjkim
926227896Sjkim} ACPI_PMTT_DOMAIN;
927227896Sjkim
928227896Sjkim
929227896Sjkim/* 2: Physical Component Identifier (DIMM) */
930227896Sjkim
931227896Sjkimtypedef struct acpi_pmtt_physical_component
932227896Sjkim{
933227896Sjkim    ACPI_PMTT_HEADER        Header;
934227896Sjkim    UINT16                  ComponentId;
935227896Sjkim    UINT16                  Reserved;
936227896Sjkim    UINT32                  MemorySize;
937227896Sjkim    UINT32                  BiosHandle;
938227896Sjkim
939227896Sjkim} ACPI_PMTT_PHYSICAL_COMPONENT;
940227896Sjkim
941227896Sjkim
942227896Sjkim/*******************************************************************************
943227896Sjkim *
944227896Sjkim * RASF - RAS Feature Table (ACPI 5.0)
945227896Sjkim *        Version 1
946227896Sjkim *
947227896Sjkim ******************************************************************************/
948227896Sjkim
949227896Sjkimtypedef struct acpi_table_rasf
950227896Sjkim{
951227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
952227896Sjkim    UINT8                   ChannelId[12];
953227896Sjkim
954227896Sjkim} ACPI_TABLE_RASF;
955227896Sjkim
956227896Sjkim/* RASF Platform Communication Channel Shared Memory Region */
957227896Sjkim
958227896Sjkimtypedef struct acpi_rasf_shared_memory
959227896Sjkim{
960227896Sjkim    UINT32                  Signature;
961227896Sjkim    UINT16                  Command;
962227896Sjkim    UINT16                  Status;
963246849Sjkim    UINT16                  Version;
964246849Sjkim    UINT8                   Capabilities[16];
965246849Sjkim    UINT8                   SetCapabilities[16];
966246849Sjkim    UINT16                  NumParameterBlocks;
967246849Sjkim    UINT32                  SetCapabilitiesStatus;
968227896Sjkim
969227896Sjkim} ACPI_RASF_SHARED_MEMORY;
970227896Sjkim
971246849Sjkim/* RASF Parameter Block Structure Header */
972246849Sjkim
973246849Sjkimtypedef struct acpi_rasf_parameter_block
974246849Sjkim{
975246849Sjkim    UINT16                  Type;
976246849Sjkim    UINT16                  Version;
977246849Sjkim    UINT16                  Length;
978246849Sjkim
979246849Sjkim} ACPI_RASF_PARAMETER_BLOCK;
980246849Sjkim
981246849Sjkim/* RASF Parameter Block Structure for PATROL_SCRUB */
982246849Sjkim
983246849Sjkimtypedef struct acpi_rasf_patrol_scrub_parameter
984246849Sjkim{
985246849Sjkim    ACPI_RASF_PARAMETER_BLOCK   Header;
986246849Sjkim    UINT16                      PatrolScrubCommand;
987246849Sjkim    UINT64                      RequestedAddressRange[2];
988246849Sjkim    UINT64                      ActualAddressRange[2];
989246849Sjkim    UINT16                      Flags;
990246849Sjkim    UINT8                       RequestedSpeed;
991246849Sjkim
992246849Sjkim} ACPI_RASF_PATROL_SCRUB_PARAMETER;
993246849Sjkim
994227896Sjkim/* Masks for Flags and Speed fields above */
995227896Sjkim
996227896Sjkim#define ACPI_RASF_SCRUBBER_RUNNING      1
997227896Sjkim#define ACPI_RASF_SPEED                 (7<<1)
998246849Sjkim#define ACPI_RASF_SPEED_SLOW            (0<<1)
999246849Sjkim#define ACPI_RASF_SPEED_MEDIUM          (4<<1)
1000246849Sjkim#define ACPI_RASF_SPEED_FAST            (7<<1)
1001227896Sjkim
1002227896Sjkim/* Channel Commands */
1003227896Sjkim
1004227896Sjkimenum AcpiRasfCommands
1005227896Sjkim{
1006246849Sjkim    ACPI_RASF_EXECUTE_RASF_COMMAND      = 1
1007227896Sjkim};
1008227896Sjkim
1009246849Sjkim/* Platform RAS Capabilities */
1010246849Sjkim
1011246849Sjkimenum AcpiRasfCapabiliities
1012246849Sjkim{
1013246849Sjkim    ACPI_HW_PATROL_SCRUB_SUPPORTED      = 0,
1014246849Sjkim    ACPI_SW_PATROL_SCRUB_EXPOSED        = 1
1015246849Sjkim};
1016246849Sjkim
1017246849Sjkim/* Patrol Scrub Commands */
1018246849Sjkim
1019246849Sjkimenum AcpiRasfPatrolScrubCommands
1020246849Sjkim{
1021246849Sjkim    ACPI_RASF_GET_PATROL_PARAMETERS     = 1,
1022246849Sjkim    ACPI_RASF_START_PATROL_SCRUBBER     = 2,
1023246849Sjkim    ACPI_RASF_STOP_PATROL_SCRUBBER      = 3
1024246849Sjkim};
1025246849Sjkim
1026227896Sjkim/* Channel Command flags */
1027227896Sjkim
1028227896Sjkim#define ACPI_RASF_GENERATE_SCI          (1<<15)
1029227896Sjkim
1030227896Sjkim/* Status values */
1031227896Sjkim
1032227896Sjkimenum AcpiRasfStatus
1033227896Sjkim{
1034227896Sjkim    ACPI_RASF_SUCCESS                   = 0,
1035227896Sjkim    ACPI_RASF_NOT_VALID                 = 1,
1036227896Sjkim    ACPI_RASF_NOT_SUPPORTED             = 2,
1037227896Sjkim    ACPI_RASF_BUSY                      = 3,
1038227896Sjkim    ACPI_RASF_FAILED                    = 4,
1039227896Sjkim    ACPI_RASF_ABORTED                   = 5,
1040227896Sjkim    ACPI_RASF_INVALID_DATA              = 6
1041227896Sjkim};
1042227896Sjkim
1043227896Sjkim/* Status flags */
1044227896Sjkim
1045227896Sjkim#define ACPI_RASF_COMMAND_COMPLETE      (1)
1046227896Sjkim#define ACPI_RASF_SCI_DOORBELL          (1<<1)
1047227896Sjkim#define ACPI_RASF_ERROR                 (1<<2)
1048227896Sjkim#define ACPI_RASF_STATUS                (0x1F<<3)
1049227896Sjkim
1050227896Sjkim
1051245582Sjkim/*******************************************************************************
1052245582Sjkim *
1053283092Sjkim * STAO - Status Override Table (_STA override) - ACPI 6.0
1054283092Sjkim *        Version 1
1055283092Sjkim *
1056283092Sjkim * Conforms to "ACPI Specification for Status Override Table"
1057283092Sjkim * 6 January 2015
1058283092Sjkim *
1059283092Sjkim ******************************************************************************/
1060283092Sjkim
1061283092Sjkimtypedef struct acpi_table_stao
1062283092Sjkim{
1063283092Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1064283092Sjkim    UINT8                   IgnoreUart;
1065283092Sjkim
1066283092Sjkim} ACPI_TABLE_STAO;
1067283092Sjkim
1068283092Sjkim
1069283092Sjkim/*******************************************************************************
1070283092Sjkim *
1071283092Sjkim * WPBT - Windows Platform Environment Table (ACPI 6.0)
1072283092Sjkim *        Version 1
1073283092Sjkim *
1074283092Sjkim * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011
1075283092Sjkim *
1076283092Sjkim ******************************************************************************/
1077283092Sjkim
1078283092Sjkimtypedef struct acpi_table_wpbt
1079283092Sjkim{
1080283092Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1081283092Sjkim    UINT32                  HandoffSize;
1082283092Sjkim    UINT64                  HandoffAddress;
1083283092Sjkim    UINT8                   Layout;
1084283092Sjkim    UINT8                   Type;
1085283092Sjkim    UINT16                  ArgumentsLength;
1086283092Sjkim
1087283092Sjkim} ACPI_TABLE_WPBT;
1088283092Sjkim
1089283092Sjkim
1090283092Sjkim/*******************************************************************************
1091283092Sjkim *
1092283092Sjkim * XENV - Xen Environment Table (ACPI 6.0)
1093283092Sjkim *        Version 1
1094283092Sjkim *
1095283092Sjkim * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015
1096283092Sjkim *
1097283092Sjkim ******************************************************************************/
1098283092Sjkim
1099283092Sjkimtypedef struct acpi_table_xenv
1100283092Sjkim{
1101283092Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1102283092Sjkim    UINT64                  GrantTableAddress;
1103283092Sjkim    UINT64                  GrantTableSize;
1104283092Sjkim    UINT32                  EventInterrupt;
1105283092Sjkim    UINT8                   EventFlags;
1106283092Sjkim
1107283092Sjkim} ACPI_TABLE_XENV;
1108283092Sjkim
1109283092Sjkim
1110227896Sjkim/* Reset to default packing */
1111227896Sjkim
1112227896Sjkim#pragma pack()
1113227896Sjkim
1114227896Sjkim#endif /* __ACTBL3_H__ */
1115