actbl3.h revision 283092
1227896Sjkim/******************************************************************************
2227896Sjkim *
3227896Sjkim * Name: actbl3.h - ACPI Table Definitions
4227896Sjkim *
5227896Sjkim *****************************************************************************/
6227896Sjkim
7227896Sjkim/*
8278970Sjkim * Copyright (C) 2000 - 2015, Intel Corp.
9227896Sjkim * All rights reserved.
10227896Sjkim *
11227896Sjkim * Redistribution and use in source and binary forms, with or without
12227896Sjkim * modification, are permitted provided that the following conditions
13227896Sjkim * are met:
14227896Sjkim * 1. Redistributions of source code must retain the above copyright
15227896Sjkim *    notice, this list of conditions, and the following disclaimer,
16227896Sjkim *    without modification.
17227896Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18227896Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19227896Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20227896Sjkim *    including a substantially similar Disclaimer requirement for further
21227896Sjkim *    binary redistribution.
22227896Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23227896Sjkim *    of any contributors may be used to endorse or promote products derived
24227896Sjkim *    from this software without specific prior written permission.
25227896Sjkim *
26227896Sjkim * Alternatively, this software may be distributed under the terms of the
27227896Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28227896Sjkim * Software Foundation.
29227896Sjkim *
30227896Sjkim * NO WARRANTY
31227896Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32227896Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33227896Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34227896Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35227896Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36227896Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37227896Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38227896Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39227896Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40227896Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41227896Sjkim * POSSIBILITY OF SUCH DAMAGES.
42227896Sjkim */
43227896Sjkim
44227896Sjkim#ifndef __ACTBL3_H__
45227896Sjkim#define __ACTBL3_H__
46227896Sjkim
47227896Sjkim
48227896Sjkim/*******************************************************************************
49227896Sjkim *
50227896Sjkim * Additional ACPI Tables (3)
51227896Sjkim *
52227896Sjkim * These tables are not consumed directly by the ACPICA subsystem, but are
53227896Sjkim * included here to support device drivers and the AML disassembler.
54227896Sjkim *
55227896Sjkim * The tables in this file are fully defined within the ACPI specification.
56227896Sjkim *
57227896Sjkim ******************************************************************************/
58227896Sjkim
59227896Sjkim
60227896Sjkim/*
61227896Sjkim * Values for description table header signatures for tables defined in this
62227896Sjkim * file. Useful because they make it more difficult to inadvertently type in
63227896Sjkim * the wrong signature.
64227896Sjkim */
65227896Sjkim#define ACPI_SIG_BGRT           "BGRT"      /* Boot Graphics Resource Table */
66227896Sjkim#define ACPI_SIG_DRTM           "DRTM"      /* Dynamic Root of Trust for Measurement table */
67227896Sjkim#define ACPI_SIG_FPDT           "FPDT"      /* Firmware Performance Data Table */
68227896Sjkim#define ACPI_SIG_GTDT           "GTDT"      /* Generic Timer Description Table */
69227896Sjkim#define ACPI_SIG_MPST           "MPST"      /* Memory Power State Table */
70227896Sjkim#define ACPI_SIG_PCCT           "PCCT"      /* Platform Communications Channel Table */
71227896Sjkim#define ACPI_SIG_PMTT           "PMTT"      /* Platform Memory Topology Table */
72227896Sjkim#define ACPI_SIG_RASF           "RASF"      /* RAS Feature table */
73283092Sjkim#define ACPI_SIG_STAO           "STAO"      /* Status Override table */
74245582Sjkim#define ACPI_SIG_TPM2           "TPM2"      /* Trusted Platform Module 2.0 H/W interface table */
75283092Sjkim#define ACPI_SIG_WPBT           "WPBT"      /* Windows Platform Binary Table */
76283092Sjkim#define ACPI_SIG_XENV           "XENV"      /* Xen Environment table */
77227896Sjkim
78227896Sjkim#define ACPI_SIG_S3PT           "S3PT"      /* S3 Performance (sub)Table */
79227896Sjkim#define ACPI_SIG_PCCS           "PCC"       /* PCC Shared Memory Region */
80227896Sjkim
81227896Sjkim/* Reserved table signatures */
82227896Sjkim
83227896Sjkim#define ACPI_SIG_MATR           "MATR"      /* Memory Address Translation Table */
84227896Sjkim#define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
85227896Sjkim
86227896Sjkim/*
87227896Sjkim * All tables must be byte-packed to match the ACPI specification, since
88227896Sjkim * the tables are provided by the system BIOS.
89227896Sjkim */
90227896Sjkim#pragma pack(1)
91227896Sjkim
92227896Sjkim/*
93239340Sjkim * Note: C bitfields are not used for this reason:
94239340Sjkim *
95239340Sjkim * "Bitfields are great and easy to read, but unfortunately the C language
96239340Sjkim * does not specify the layout of bitfields in memory, which means they are
97239340Sjkim * essentially useless for dealing with packed data in on-disk formats or
98239340Sjkim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
99239340Sjkim * this decision was a design error in C. Ritchie could have picked an order
100239340Sjkim * and stuck with it." Norman Ramsey.
101239340Sjkim * See http://stackoverflow.com/a/1053662/41661
102227896Sjkim */
103227896Sjkim
104227896Sjkim
105227896Sjkim/*******************************************************************************
106227896Sjkim *
107227896Sjkim * BGRT - Boot Graphics Resource Table (ACPI 5.0)
108227896Sjkim *        Version 1
109227896Sjkim *
110227896Sjkim ******************************************************************************/
111227896Sjkim
112227896Sjkimtypedef struct acpi_table_bgrt
113227896Sjkim{
114227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
115227896Sjkim    UINT16                  Version;
116227896Sjkim    UINT8                   Status;
117227896Sjkim    UINT8                   ImageType;
118227896Sjkim    UINT64                  ImageAddress;
119227896Sjkim    UINT32                  ImageOffsetX;
120227896Sjkim    UINT32                  ImageOffsetY;
121227896Sjkim
122227896Sjkim} ACPI_TABLE_BGRT;
123227896Sjkim
124227896Sjkim
125227896Sjkim/*******************************************************************************
126227896Sjkim *
127227896Sjkim * DRTM - Dynamic Root of Trust for Measurement table
128283092Sjkim * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0
129283092Sjkim * Table version 1
130227896Sjkim *
131227896Sjkim ******************************************************************************/
132227896Sjkim
133227896Sjkimtypedef struct acpi_table_drtm
134227896Sjkim{
135227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
136227896Sjkim    UINT64                  EntryBaseAddress;
137227896Sjkim    UINT64                  EntryLength;
138227896Sjkim    UINT32                  EntryAddress32;
139227896Sjkim    UINT64                  EntryAddress64;
140227896Sjkim    UINT64                  ExitAddress;
141227896Sjkim    UINT64                  LogAreaAddress;
142227896Sjkim    UINT32                  LogAreaLength;
143227896Sjkim    UINT64                  ArchDependentAddress;
144227896Sjkim    UINT32                  Flags;
145227896Sjkim
146227896Sjkim} ACPI_TABLE_DRTM;
147227896Sjkim
148283092Sjkim/* Flag Definitions for above */
149227896Sjkim
150283092Sjkim#define ACPI_DRTM_ACCESS_ALLOWED            (1)
151283092Sjkim#define ACPI_DRTM_ENABLE_GAP_CODE           (1<<1)
152283092Sjkim#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS   (1<<2)
153283092Sjkim#define ACPI_DRTM_AUTHORITY_ORDER           (1<<3)
154283092Sjkim
155283092Sjkim
156283092Sjkim/* 1) Validated Tables List (64-bit addresses) */
157283092Sjkim
158283092Sjkimtypedef struct acpi_drtm_vtable_list
159227896Sjkim{
160283092Sjkim    UINT32                  ValidatedTableCount;
161283092Sjkim    UINT64                  ValidatedTables[1];
162227896Sjkim
163283092Sjkim} ACPI_DRTM_VTABLE_LIST;
164227896Sjkim
165283092Sjkim/* 2) Resources List (of Resource Descriptors) */
166227896Sjkim
167283092Sjkim/* Resource Descriptor */
168283092Sjkim
169283092Sjkimtypedef struct acpi_drtm_resource
170283092Sjkim{
171283092Sjkim    UINT8                   Size[7];
172283092Sjkim    UINT8                   Type;
173283092Sjkim    UINT64                  Address;
174283092Sjkim
175283092Sjkim} ACPI_DRTM_RESOURCE;
176283092Sjkim
177227896Sjkimtypedef struct acpi_drtm_resource_list
178227896Sjkim{
179283092Sjkim    UINT32                  ResourceCount;
180283092Sjkim    ACPI_DRTM_RESOURCE      Resources[1];
181227896Sjkim
182227896Sjkim} ACPI_DRTM_RESOURCE_LIST;
183227896Sjkim
184227896Sjkim/* 3) Platform-specific Identifiers List */
185227896Sjkim
186283092Sjkimtypedef struct acpi_drtm_dps_id
187227896Sjkim{
188283092Sjkim    UINT32                  DpsIdLength;
189283092Sjkim    UINT8                   DpsId[16];
190227896Sjkim
191283092Sjkim} ACPI_DRTM_DPS_ID;
192227896Sjkim
193227896Sjkim
194227896Sjkim/*******************************************************************************
195227896Sjkim *
196227896Sjkim * FPDT - Firmware Performance Data Table (ACPI 5.0)
197227896Sjkim *        Version 1
198227896Sjkim *
199227896Sjkim ******************************************************************************/
200227896Sjkim
201227896Sjkimtypedef struct acpi_table_fpdt
202227896Sjkim{
203227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
204227896Sjkim
205227896Sjkim} ACPI_TABLE_FPDT;
206227896Sjkim
207227896Sjkim
208227896Sjkim/* FPDT subtable header */
209227896Sjkim
210227896Sjkimtypedef struct acpi_fpdt_header
211227896Sjkim{
212227896Sjkim    UINT16                  Type;
213227896Sjkim    UINT8                   Length;
214227896Sjkim    UINT8                   Revision;
215227896Sjkim
216227896Sjkim} ACPI_FPDT_HEADER;
217227896Sjkim
218227896Sjkim/* Values for Type field above */
219227896Sjkim
220227896Sjkimenum AcpiFpdtType
221227896Sjkim{
222227896Sjkim    ACPI_FPDT_TYPE_BOOT                 = 0,
223246849Sjkim    ACPI_FPDT_TYPE_S3PERF               = 1
224227896Sjkim};
225227896Sjkim
226227896Sjkim
227227896Sjkim/*
228227896Sjkim * FPDT subtables
229227896Sjkim */
230227896Sjkim
231227896Sjkim/* 0: Firmware Basic Boot Performance Record */
232227896Sjkim
233227896Sjkimtypedef struct acpi_fpdt_boot
234227896Sjkim{
235227896Sjkim    ACPI_FPDT_HEADER        Header;
236227896Sjkim    UINT8                   Reserved[4];
237227896Sjkim    UINT64                  ResetEnd;
238227896Sjkim    UINT64                  LoadStart;
239227896Sjkim    UINT64                  StartupStart;
240227896Sjkim    UINT64                  ExitServicesEntry;
241227896Sjkim    UINT64                  ExitServicesExit;
242227896Sjkim
243227896Sjkim} ACPI_FPDT_BOOT;
244227896Sjkim
245227896Sjkim
246227896Sjkim/* 1: S3 Performance Table Pointer Record */
247227896Sjkim
248227896Sjkimtypedef struct acpi_fpdt_s3pt_ptr
249227896Sjkim{
250227896Sjkim    ACPI_FPDT_HEADER        Header;
251227896Sjkim    UINT8                   Reserved[4];
252227896Sjkim    UINT64                  Address;
253227896Sjkim
254227896Sjkim} ACPI_FPDT_S3PT_PTR;
255227896Sjkim
256227896Sjkim
257227896Sjkim/*
258227896Sjkim * S3PT - S3 Performance Table. This table is pointed to by the
259227896Sjkim * FPDT S3 Pointer Record above.
260227896Sjkim */
261227896Sjkimtypedef struct acpi_table_s3pt
262227896Sjkim{
263227896Sjkim    UINT8                   Signature[4]; /* "S3PT" */
264227896Sjkim    UINT32                  Length;
265227896Sjkim
266227896Sjkim} ACPI_TABLE_S3PT;
267227896Sjkim
268227896Sjkim
269227896Sjkim/*
270227896Sjkim * S3PT Subtables
271227896Sjkim */
272227896Sjkimtypedef struct acpi_s3pt_header
273227896Sjkim{
274227896Sjkim    UINT16                  Type;
275227896Sjkim    UINT8                   Length;
276227896Sjkim    UINT8                   Revision;
277227896Sjkim
278227896Sjkim} ACPI_S3PT_HEADER;
279227896Sjkim
280227896Sjkim/* Values for Type field above */
281227896Sjkim
282227896Sjkimenum AcpiS3ptType
283227896Sjkim{
284227896Sjkim    ACPI_S3PT_TYPE_RESUME               = 0,
285246849Sjkim    ACPI_S3PT_TYPE_SUSPEND              = 1
286227896Sjkim};
287227896Sjkim
288227896Sjkimtypedef struct acpi_s3pt_resume
289227896Sjkim{
290227896Sjkim    ACPI_S3PT_HEADER        Header;
291227896Sjkim    UINT32                  ResumeCount;
292227896Sjkim    UINT64                  FullResume;
293227896Sjkim    UINT64                  AverageResume;
294227896Sjkim
295227896Sjkim} ACPI_S3PT_RESUME;
296227896Sjkim
297227896Sjkimtypedef struct acpi_s3pt_suspend
298227896Sjkim{
299227896Sjkim    ACPI_S3PT_HEADER        Header;
300227896Sjkim    UINT64                  SuspendStart;
301227896Sjkim    UINT64                  SuspendEnd;
302227896Sjkim
303227896Sjkim} ACPI_S3PT_SUSPEND;
304227896Sjkim
305227896Sjkim
306227896Sjkim/*******************************************************************************
307227896Sjkim *
308272444Sjkim * GTDT - Generic Timer Description Table (ACPI 5.1)
309272444Sjkim *        Version 2
310227896Sjkim *
311227896Sjkim ******************************************************************************/
312227896Sjkim
313227896Sjkimtypedef struct acpi_table_gtdt
314227896Sjkim{
315227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
316272444Sjkim    UINT64                  CounterBlockAddresss;
317272444Sjkim    UINT32                  Reserved;
318272444Sjkim    UINT32                  SecureEl1Interrupt;
319272444Sjkim    UINT32                  SecureEl1Flags;
320272444Sjkim    UINT32                  NonSecureEl1Interrupt;
321272444Sjkim    UINT32                  NonSecureEl1Flags;
322227896Sjkim    UINT32                  VirtualTimerInterrupt;
323227896Sjkim    UINT32                  VirtualTimerFlags;
324272444Sjkim    UINT32                  NonSecureEl2Interrupt;
325272444Sjkim    UINT32                  NonSecureEl2Flags;
326272444Sjkim    UINT64                  CounterReadBlockAddress;
327272444Sjkim    UINT32                  PlatformTimerCount;
328272444Sjkim    UINT32                  PlatformTimerOffset;
329227896Sjkim
330227896Sjkim} ACPI_TABLE_GTDT;
331227896Sjkim
332272444Sjkim/* Flag Definitions: Timer Block Physical Timers and Virtual timers */
333227896Sjkim
334272444Sjkim#define ACPI_GTDT_INTERRUPT_MODE        (1)
335272444Sjkim#define ACPI_GTDT_INTERRUPT_POLARITY    (1<<1)
336272444Sjkim#define ACPI_GTDT_ALWAYS_ON             (1<<2)
337227896Sjkim
338227896Sjkim
339272444Sjkim/* Common GTDT subtable header */
340227896Sjkim
341272444Sjkimtypedef struct acpi_gtdt_header
342272444Sjkim{
343272444Sjkim    UINT8                   Type;
344272444Sjkim    UINT16                  Length;
345227896Sjkim
346272444Sjkim} ACPI_GTDT_HEADER;
347272444Sjkim
348272444Sjkim/* Values for GTDT subtable type above */
349272444Sjkim
350272444Sjkimenum AcpiGtdtType
351272444Sjkim{
352272444Sjkim    ACPI_GTDT_TYPE_TIMER_BLOCK      = 0,
353272444Sjkim    ACPI_GTDT_TYPE_WATCHDOG         = 1,
354272444Sjkim    ACPI_GTDT_TYPE_RESERVED         = 2    /* 2 and greater are reserved */
355272444Sjkim};
356272444Sjkim
357272444Sjkim
358272444Sjkim/* GTDT Subtables, correspond to Type in acpi_gtdt_header */
359272444Sjkim
360272444Sjkim/* 0: Generic Timer Block */
361272444Sjkim
362272444Sjkimtypedef struct acpi_gtdt_timer_block
363272444Sjkim{
364272444Sjkim    ACPI_GTDT_HEADER        Header;
365272444Sjkim    UINT8                   Reserved;
366272444Sjkim    UINT64                  BlockAddress;
367272444Sjkim    UINT32                  TimerCount;
368272444Sjkim    UINT32                  TimerOffset;
369272444Sjkim
370272444Sjkim} ACPI_GTDT_TIMER_BLOCK;
371272444Sjkim
372272444Sjkim/* Timer Sub-Structure, one per timer */
373272444Sjkim
374272444Sjkimtypedef struct acpi_gtdt_timer_entry
375272444Sjkim{
376272444Sjkim    UINT8                   FrameNumber;
377272444Sjkim    UINT8                   Reserved[3];
378272444Sjkim    UINT64                  BaseAddress;
379272444Sjkim    UINT64                  El0BaseAddress;
380272444Sjkim    UINT32                  TimerInterrupt;
381272444Sjkim    UINT32                  TimerFlags;
382272444Sjkim    UINT32                  VirtualTimerInterrupt;
383272444Sjkim    UINT32                  VirtualTimerFlags;
384272444Sjkim    UINT32                  CommonFlags;
385272444Sjkim
386272444Sjkim} ACPI_GTDT_TIMER_ENTRY;
387272444Sjkim
388272444Sjkim/* Flag Definitions: TimerFlags and VirtualTimerFlags above */
389272444Sjkim
390272444Sjkim#define ACPI_GTDT_GT_IRQ_MODE               (1)
391272444Sjkim#define ACPI_GTDT_GT_IRQ_POLARITY           (1<<1)
392272444Sjkim
393272444Sjkim/* Flag Definitions: CommonFlags above */
394272444Sjkim
395272444Sjkim#define ACPI_GTDT_GT_IS_SECURE_TIMER        (1)
396272444Sjkim#define ACPI_GTDT_GT_ALWAYS_ON              (1<<1)
397272444Sjkim
398272444Sjkim
399272444Sjkim/* 1: SBSA Generic Watchdog Structure */
400272444Sjkim
401272444Sjkimtypedef struct acpi_gtdt_watchdog
402272444Sjkim{
403272444Sjkim    ACPI_GTDT_HEADER        Header;
404272444Sjkim    UINT8                   Reserved;
405272444Sjkim    UINT64                  RefreshFrameAddress;
406272444Sjkim    UINT64                  ControlFrameAddress;
407272444Sjkim    UINT32                  TimerInterrupt;
408272444Sjkim    UINT32                  TimerFlags;
409272444Sjkim
410272444Sjkim} ACPI_GTDT_WATCHDOG;
411272444Sjkim
412272444Sjkim/* Flag Definitions: TimerFlags above */
413272444Sjkim
414272444Sjkim#define ACPI_GTDT_WATCHDOG_IRQ_MODE         (1)
415272444Sjkim#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY     (1<<1)
416272444Sjkim#define ACPI_GTDT_WATCHDOG_SECURE           (1<<2)
417272444Sjkim
418272444Sjkim
419227896Sjkim/*******************************************************************************
420227896Sjkim *
421227896Sjkim * MPST - Memory Power State Table (ACPI 5.0)
422227896Sjkim *        Version 1
423227896Sjkim *
424227896Sjkim ******************************************************************************/
425227896Sjkim
426227896Sjkim#define ACPI_MPST_CHANNEL_INFO \
427227896Sjkim    UINT8                   ChannelId; \
428241973Sjkim    UINT8                   Reserved1[3]; \
429241973Sjkim    UINT16                  PowerNodeCount; \
430241973Sjkim    UINT16                  Reserved2;
431227896Sjkim
432227896Sjkim/* Main table */
433227896Sjkim
434227896Sjkimtypedef struct acpi_table_mpst
435227896Sjkim{
436227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
437227896Sjkim    ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
438227896Sjkim
439227896Sjkim} ACPI_TABLE_MPST;
440227896Sjkim
441227896Sjkim
442227896Sjkim/* Memory Platform Communication Channel Info */
443227896Sjkim
444227896Sjkimtypedef struct acpi_mpst_channel
445227896Sjkim{
446227896Sjkim    ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
447227896Sjkim
448227896Sjkim} ACPI_MPST_CHANNEL;
449227896Sjkim
450227896Sjkim
451227896Sjkim/* Memory Power Node Structure */
452227896Sjkim
453227896Sjkimtypedef struct acpi_mpst_power_node
454227896Sjkim{
455227896Sjkim    UINT8                   Flags;
456227896Sjkim    UINT8                   Reserved1;
457227896Sjkim    UINT16                  NodeId;
458227896Sjkim    UINT32                  Length;
459227896Sjkim    UINT64                  RangeAddress;
460227896Sjkim    UINT64                  RangeLength;
461241973Sjkim    UINT32                  NumPowerStates;
462241973Sjkim    UINT32                  NumPhysicalComponents;
463227896Sjkim
464227896Sjkim} ACPI_MPST_POWER_NODE;
465227896Sjkim
466227896Sjkim/* Values for Flags field above */
467227896Sjkim
468227896Sjkim#define ACPI_MPST_ENABLED               1
469227896Sjkim#define ACPI_MPST_POWER_MANAGED         2
470227896Sjkim#define ACPI_MPST_HOT_PLUG_CAPABLE      4
471227896Sjkim
472227896Sjkim
473227896Sjkim/* Memory Power State Structure (follows POWER_NODE above) */
474227896Sjkim
475227896Sjkimtypedef struct acpi_mpst_power_state
476227896Sjkim{
477227896Sjkim    UINT8                   PowerState;
478227896Sjkim    UINT8                   InfoIndex;
479227896Sjkim
480227896Sjkim} ACPI_MPST_POWER_STATE;
481227896Sjkim
482227896Sjkim
483227896Sjkim/* Physical Component ID Structure (follows POWER_STATE above) */
484227896Sjkim
485227896Sjkimtypedef struct acpi_mpst_component
486227896Sjkim{
487227896Sjkim    UINT16                  ComponentId;
488227896Sjkim
489227896Sjkim} ACPI_MPST_COMPONENT;
490227896Sjkim
491227896Sjkim
492227896Sjkim/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
493227896Sjkim
494227896Sjkimtypedef struct acpi_mpst_data_hdr
495227896Sjkim{
496227896Sjkim    UINT16                  CharacteristicsCount;
497241973Sjkim    UINT16                  Reserved;
498227896Sjkim
499227896Sjkim} ACPI_MPST_DATA_HDR;
500227896Sjkim
501227896Sjkimtypedef struct acpi_mpst_power_data
502227896Sjkim{
503241973Sjkim    UINT8                   StructureId;
504227896Sjkim    UINT8                   Flags;
505227896Sjkim    UINT16                  Reserved1;
506227896Sjkim    UINT32                  AveragePower;
507227896Sjkim    UINT32                  PowerSaving;
508227896Sjkim    UINT64                  ExitLatency;
509227896Sjkim    UINT64                  Reserved2;
510227896Sjkim
511227896Sjkim} ACPI_MPST_POWER_DATA;
512227896Sjkim
513227896Sjkim/* Values for Flags field above */
514227896Sjkim
515227896Sjkim#define ACPI_MPST_PRESERVE              1
516227896Sjkim#define ACPI_MPST_AUTOENTRY             2
517227896Sjkim#define ACPI_MPST_AUTOEXIT              4
518227896Sjkim
519227896Sjkim
520227896Sjkim/* Shared Memory Region (not part of an ACPI table) */
521227896Sjkim
522227896Sjkimtypedef struct acpi_mpst_shared
523227896Sjkim{
524227896Sjkim    UINT32                  Signature;
525227896Sjkim    UINT16                  PccCommand;
526227896Sjkim    UINT16                  PccStatus;
527241973Sjkim    UINT32                  CommandRegister;
528241973Sjkim    UINT32                  StatusRegister;
529241973Sjkim    UINT32                  PowerStateId;
530241973Sjkim    UINT32                  PowerNodeId;
531227896Sjkim    UINT64                  EnergyConsumed;
532227896Sjkim    UINT64                  AveragePower;
533227896Sjkim
534227896Sjkim} ACPI_MPST_SHARED;
535227896Sjkim
536227896Sjkim
537227896Sjkim/*******************************************************************************
538227896Sjkim *
539227896Sjkim * PCCT - Platform Communications Channel Table (ACPI 5.0)
540227896Sjkim *        Version 1
541227896Sjkim *
542227896Sjkim ******************************************************************************/
543227896Sjkim
544227896Sjkimtypedef struct acpi_table_pcct
545227896Sjkim{
546227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
547227896Sjkim    UINT32                  Flags;
548272444Sjkim    UINT64                  Reserved;
549227896Sjkim
550227896Sjkim} ACPI_TABLE_PCCT;
551227896Sjkim
552227896Sjkim/* Values for Flags field above */
553227896Sjkim
554227896Sjkim#define ACPI_PCCT_DOORBELL              1
555227896Sjkim
556272444Sjkim/* Values for subtable type in ACPI_SUBTABLE_HEADER */
557272444Sjkim
558272444Sjkimenum AcpiPcctType
559272444Sjkim{
560272444Sjkim    ACPI_PCCT_TYPE_GENERIC_SUBSPACE     = 0,
561272444Sjkim    ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE  = 1,
562272444Sjkim    ACPI_PCCT_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
563272444Sjkim};
564272444Sjkim
565227896Sjkim/*
566272444Sjkim * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
567227896Sjkim */
568227896Sjkim
569227896Sjkim/* 0: Generic Communications Subspace */
570227896Sjkim
571227896Sjkimtypedef struct acpi_pcct_subspace
572227896Sjkim{
573227896Sjkim    ACPI_SUBTABLE_HEADER    Header;
574227896Sjkim    UINT8                   Reserved[6];
575227896Sjkim    UINT64                  BaseAddress;
576227896Sjkim    UINT64                  Length;
577227896Sjkim    ACPI_GENERIC_ADDRESS    DoorbellRegister;
578227896Sjkim    UINT64                  PreserveMask;
579227896Sjkim    UINT64                  WriteMask;
580272444Sjkim    UINT32                  Latency;
581272444Sjkim    UINT32                  MaxAccessRate;
582272444Sjkim    UINT16                  MinTurnaroundTime;
583227896Sjkim
584227896Sjkim} ACPI_PCCT_SUBSPACE;
585227896Sjkim
586227896Sjkim
587272444Sjkim/* 1: HW-reduced Communications Subspace (ACPI 5.1) */
588272444Sjkim
589272444Sjkimtypedef struct acpi_pcct_hw_reduced
590272444Sjkim{
591272444Sjkim    ACPI_SUBTABLE_HEADER    Header;
592272444Sjkim    UINT32                  DoorbellInterrupt;
593272444Sjkim    UINT8                   Flags;
594272444Sjkim    UINT8                   Reserved;
595272444Sjkim    UINT64                  BaseAddress;
596272444Sjkim    UINT64                  Length;
597272444Sjkim    ACPI_GENERIC_ADDRESS    DoorbellRegister;
598272444Sjkim    UINT64                  PreserveMask;
599272444Sjkim    UINT64                  WriteMask;
600272444Sjkim    UINT32                  Latency;
601272444Sjkim    UINT32                  MaxAccessRate;
602272444Sjkim    UINT16                  MinTurnaroundTime;
603272444Sjkim
604272444Sjkim} ACPI_PCCT_HW_REDUCED;
605272444Sjkim
606272444Sjkim/* Values for doorbell flags above */
607272444Sjkim
608272444Sjkim#define ACPI_PCCT_INTERRUPT_POLARITY    (1)
609272444Sjkim#define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
610272444Sjkim
611272444Sjkim
612227896Sjkim/*
613227896Sjkim * PCC memory structures (not part of the ACPI table)
614227896Sjkim */
615227896Sjkim
616227896Sjkim/* Shared Memory Region */
617227896Sjkim
618227896Sjkimtypedef struct acpi_pcct_shared_memory
619227896Sjkim{
620227896Sjkim    UINT32                  Signature;
621227896Sjkim    UINT16                  Command;
622227896Sjkim    UINT16                  Status;
623227896Sjkim
624227896Sjkim} ACPI_PCCT_SHARED_MEMORY;
625227896Sjkim
626227896Sjkim
627227896Sjkim/*******************************************************************************
628227896Sjkim *
629227896Sjkim * PMTT - Platform Memory Topology Table (ACPI 5.0)
630227896Sjkim *        Version 1
631227896Sjkim *
632227896Sjkim ******************************************************************************/
633227896Sjkim
634227896Sjkimtypedef struct acpi_table_pmtt
635227896Sjkim{
636227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
637227896Sjkim    UINT32                  Reserved;
638227896Sjkim
639227896Sjkim} ACPI_TABLE_PMTT;
640227896Sjkim
641227896Sjkim
642227896Sjkim/* Common header for PMTT subtables that follow main table */
643227896Sjkim
644227896Sjkimtypedef struct acpi_pmtt_header
645227896Sjkim{
646227896Sjkim    UINT8                   Type;
647227896Sjkim    UINT8                   Reserved1;
648227896Sjkim    UINT16                  Length;
649227896Sjkim    UINT16                  Flags;
650227896Sjkim    UINT16                  Reserved2;
651227896Sjkim
652227896Sjkim} ACPI_PMTT_HEADER;
653227896Sjkim
654227896Sjkim/* Values for Type field above */
655227896Sjkim
656227896Sjkim#define ACPI_PMTT_TYPE_SOCKET           0
657227896Sjkim#define ACPI_PMTT_TYPE_CONTROLLER       1
658227896Sjkim#define ACPI_PMTT_TYPE_DIMM             2
659227896Sjkim#define ACPI_PMTT_TYPE_RESERVED         3 /* 0x03-0xFF are reserved */
660227896Sjkim
661227896Sjkim/* Values for Flags field above */
662227896Sjkim
663227896Sjkim#define ACPI_PMTT_TOP_LEVEL             0x0001
664227896Sjkim#define ACPI_PMTT_PHYSICAL              0x0002
665227896Sjkim#define ACPI_PMTT_MEMORY_TYPE           0x000C
666227896Sjkim
667227896Sjkim
668227896Sjkim/*
669227896Sjkim * PMTT subtables, correspond to Type in acpi_pmtt_header
670227896Sjkim */
671227896Sjkim
672227896Sjkim
673227896Sjkim/* 0: Socket Structure */
674227896Sjkim
675227896Sjkimtypedef struct acpi_pmtt_socket
676227896Sjkim{
677227896Sjkim    ACPI_PMTT_HEADER        Header;
678227896Sjkim    UINT16                  SocketId;
679227896Sjkim    UINT16                  Reserved;
680227896Sjkim
681227896Sjkim} ACPI_PMTT_SOCKET;
682227896Sjkim
683227896Sjkim
684227896Sjkim/* 1: Memory Controller subtable */
685227896Sjkim
686227896Sjkimtypedef struct acpi_pmtt_controller
687227896Sjkim{
688227896Sjkim    ACPI_PMTT_HEADER        Header;
689227896Sjkim    UINT32                  ReadLatency;
690227896Sjkim    UINT32                  WriteLatency;
691227896Sjkim    UINT32                  ReadBandwidth;
692227896Sjkim    UINT32                  WriteBandwidth;
693227896Sjkim    UINT16                  AccessWidth;
694227896Sjkim    UINT16                  Alignment;
695227896Sjkim    UINT16                  Reserved;
696227896Sjkim    UINT16                  DomainCount;
697227896Sjkim
698227896Sjkim} ACPI_PMTT_CONTROLLER;
699227896Sjkim
700227896Sjkim/* 1a: Proximity Domain substructure */
701227896Sjkim
702227896Sjkimtypedef struct acpi_pmtt_domain
703227896Sjkim{
704227896Sjkim    UINT32                  ProximityDomain;
705227896Sjkim
706227896Sjkim} ACPI_PMTT_DOMAIN;
707227896Sjkim
708227896Sjkim
709227896Sjkim/* 2: Physical Component Identifier (DIMM) */
710227896Sjkim
711227896Sjkimtypedef struct acpi_pmtt_physical_component
712227896Sjkim{
713227896Sjkim    ACPI_PMTT_HEADER        Header;
714227896Sjkim    UINT16                  ComponentId;
715227896Sjkim    UINT16                  Reserved;
716227896Sjkim    UINT32                  MemorySize;
717227896Sjkim    UINT32                  BiosHandle;
718227896Sjkim
719227896Sjkim} ACPI_PMTT_PHYSICAL_COMPONENT;
720227896Sjkim
721227896Sjkim
722227896Sjkim/*******************************************************************************
723227896Sjkim *
724227896Sjkim * RASF - RAS Feature Table (ACPI 5.0)
725227896Sjkim *        Version 1
726227896Sjkim *
727227896Sjkim ******************************************************************************/
728227896Sjkim
729227896Sjkimtypedef struct acpi_table_rasf
730227896Sjkim{
731227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
732227896Sjkim    UINT8                   ChannelId[12];
733227896Sjkim
734227896Sjkim} ACPI_TABLE_RASF;
735227896Sjkim
736227896Sjkim/* RASF Platform Communication Channel Shared Memory Region */
737227896Sjkim
738227896Sjkimtypedef struct acpi_rasf_shared_memory
739227896Sjkim{
740227896Sjkim    UINT32                  Signature;
741227896Sjkim    UINT16                  Command;
742227896Sjkim    UINT16                  Status;
743246849Sjkim    UINT16                  Version;
744246849Sjkim    UINT8                   Capabilities[16];
745246849Sjkim    UINT8                   SetCapabilities[16];
746246849Sjkim    UINT16                  NumParameterBlocks;
747246849Sjkim    UINT32                  SetCapabilitiesStatus;
748227896Sjkim
749227896Sjkim} ACPI_RASF_SHARED_MEMORY;
750227896Sjkim
751246849Sjkim/* RASF Parameter Block Structure Header */
752246849Sjkim
753246849Sjkimtypedef struct acpi_rasf_parameter_block
754246849Sjkim{
755246849Sjkim    UINT16                  Type;
756246849Sjkim    UINT16                  Version;
757246849Sjkim    UINT16                  Length;
758246849Sjkim
759246849Sjkim} ACPI_RASF_PARAMETER_BLOCK;
760246849Sjkim
761246849Sjkim/* RASF Parameter Block Structure for PATROL_SCRUB */
762246849Sjkim
763246849Sjkimtypedef struct acpi_rasf_patrol_scrub_parameter
764246849Sjkim{
765246849Sjkim    ACPI_RASF_PARAMETER_BLOCK   Header;
766246849Sjkim    UINT16                      PatrolScrubCommand;
767246849Sjkim    UINT64                      RequestedAddressRange[2];
768246849Sjkim    UINT64                      ActualAddressRange[2];
769246849Sjkim    UINT16                      Flags;
770246849Sjkim    UINT8                       RequestedSpeed;
771246849Sjkim
772246849Sjkim} ACPI_RASF_PATROL_SCRUB_PARAMETER;
773246849Sjkim
774227896Sjkim/* Masks for Flags and Speed fields above */
775227896Sjkim
776227896Sjkim#define ACPI_RASF_SCRUBBER_RUNNING      1
777227896Sjkim#define ACPI_RASF_SPEED                 (7<<1)
778246849Sjkim#define ACPI_RASF_SPEED_SLOW            (0<<1)
779246849Sjkim#define ACPI_RASF_SPEED_MEDIUM          (4<<1)
780246849Sjkim#define ACPI_RASF_SPEED_FAST            (7<<1)
781227896Sjkim
782227896Sjkim/* Channel Commands */
783227896Sjkim
784227896Sjkimenum AcpiRasfCommands
785227896Sjkim{
786246849Sjkim    ACPI_RASF_EXECUTE_RASF_COMMAND      = 1
787227896Sjkim};
788227896Sjkim
789246849Sjkim/* Platform RAS Capabilities */
790246849Sjkim
791246849Sjkimenum AcpiRasfCapabiliities
792246849Sjkim{
793246849Sjkim    ACPI_HW_PATROL_SCRUB_SUPPORTED      = 0,
794246849Sjkim    ACPI_SW_PATROL_SCRUB_EXPOSED        = 1
795246849Sjkim};
796246849Sjkim
797246849Sjkim/* Patrol Scrub Commands */
798246849Sjkim
799246849Sjkimenum AcpiRasfPatrolScrubCommands
800246849Sjkim{
801246849Sjkim    ACPI_RASF_GET_PATROL_PARAMETERS     = 1,
802246849Sjkim    ACPI_RASF_START_PATROL_SCRUBBER     = 2,
803246849Sjkim    ACPI_RASF_STOP_PATROL_SCRUBBER      = 3
804246849Sjkim};
805246849Sjkim
806227896Sjkim/* Channel Command flags */
807227896Sjkim
808227896Sjkim#define ACPI_RASF_GENERATE_SCI          (1<<15)
809227896Sjkim
810227896Sjkim/* Status values */
811227896Sjkim
812227896Sjkimenum AcpiRasfStatus
813227896Sjkim{
814227896Sjkim    ACPI_RASF_SUCCESS                   = 0,
815227896Sjkim    ACPI_RASF_NOT_VALID                 = 1,
816227896Sjkim    ACPI_RASF_NOT_SUPPORTED             = 2,
817227896Sjkim    ACPI_RASF_BUSY                      = 3,
818227896Sjkim    ACPI_RASF_FAILED                    = 4,
819227896Sjkim    ACPI_RASF_ABORTED                   = 5,
820227896Sjkim    ACPI_RASF_INVALID_DATA              = 6
821227896Sjkim};
822227896Sjkim
823227896Sjkim/* Status flags */
824227896Sjkim
825227896Sjkim#define ACPI_RASF_COMMAND_COMPLETE      (1)
826227896Sjkim#define ACPI_RASF_SCI_DOORBELL          (1<<1)
827227896Sjkim#define ACPI_RASF_ERROR                 (1<<2)
828227896Sjkim#define ACPI_RASF_STATUS                (0x1F<<3)
829227896Sjkim
830227896Sjkim
831245582Sjkim/*******************************************************************************
832245582Sjkim *
833283092Sjkim * STAO - Status Override Table (_STA override) - ACPI 6.0
834283092Sjkim *        Version 1
835283092Sjkim *
836283092Sjkim * Conforms to "ACPI Specification for Status Override Table"
837283092Sjkim * 6 January 2015
838283092Sjkim *
839283092Sjkim ******************************************************************************/
840283092Sjkim
841283092Sjkimtypedef struct acpi_table_stao
842283092Sjkim{
843283092Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
844283092Sjkim    UINT8                   IgnoreUart;
845283092Sjkim
846283092Sjkim} ACPI_TABLE_STAO;
847283092Sjkim
848283092Sjkim
849283092Sjkim/*******************************************************************************
850283092Sjkim *
851245582Sjkim * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
852245582Sjkim *        Version 3
853245582Sjkim *
854245582Sjkim * Conforms to "TPM 2.0 Hardware Interface Table (TPM2)" 29 November 2011
855245582Sjkim *
856245582Sjkim ******************************************************************************/
857245582Sjkim
858245582Sjkimtypedef struct acpi_table_tpm2
859245582Sjkim{
860245582Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
861245582Sjkim    UINT32                  Flags;
862245582Sjkim    UINT64                  ControlAddress;
863245582Sjkim    UINT32                  StartMethod;
864245582Sjkim
865245582Sjkim} ACPI_TABLE_TPM2;
866245582Sjkim
867245582Sjkim/* Control area structure (not part of table, pointed to by ControlAddress) */
868245582Sjkim
869245582Sjkimtypedef struct acpi_tpm2_control
870245582Sjkim{
871245582Sjkim    UINT32                  Reserved;
872245582Sjkim    UINT32                  Error;
873245582Sjkim    UINT32                  Cancel;
874245582Sjkim    UINT32                  Start;
875245582Sjkim    UINT64                  InterruptControl;
876245582Sjkim    UINT32                  CommandSize;
877245582Sjkim    UINT64                  CommandAddress;
878245582Sjkim    UINT32                  ResponseSize;
879245582Sjkim    UINT64                  ResponseAddress;
880245582Sjkim
881245582Sjkim} ACPI_TPM2_CONTROL;
882245582Sjkim
883245582Sjkim
884283092Sjkim/*******************************************************************************
885283092Sjkim *
886283092Sjkim * WPBT - Windows Platform Environment Table (ACPI 6.0)
887283092Sjkim *        Version 1
888283092Sjkim *
889283092Sjkim * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011
890283092Sjkim *
891283092Sjkim ******************************************************************************/
892283092Sjkim
893283092Sjkimtypedef struct acpi_table_wpbt
894283092Sjkim{
895283092Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
896283092Sjkim    UINT32                  HandoffSize;
897283092Sjkim    UINT64                  HandoffAddress;
898283092Sjkim    UINT8                   Layout;
899283092Sjkim    UINT8                   Type;
900283092Sjkim    UINT16                  ArgumentsLength;
901283092Sjkim
902283092Sjkim} ACPI_TABLE_WPBT;
903283092Sjkim
904283092Sjkim
905283092Sjkim/*******************************************************************************
906283092Sjkim *
907283092Sjkim * XENV - Xen Environment Table (ACPI 6.0)
908283092Sjkim *        Version 1
909283092Sjkim *
910283092Sjkim * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015
911283092Sjkim *
912283092Sjkim ******************************************************************************/
913283092Sjkim
914283092Sjkimtypedef struct acpi_table_xenv
915283092Sjkim{
916283092Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
917283092Sjkim    UINT64                  GrantTableAddress;
918283092Sjkim    UINT64                  GrantTableSize;
919283092Sjkim    UINT32                  EventInterrupt;
920283092Sjkim    UINT8                   EventFlags;
921283092Sjkim
922283092Sjkim} ACPI_TABLE_XENV;
923283092Sjkim
924283092Sjkim
925227896Sjkim/* Reset to default packing */
926227896Sjkim
927227896Sjkim#pragma pack()
928227896Sjkim
929227896Sjkim#endif /* __ACTBL3_H__ */
930