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