actbl3.h revision 241973
1227896Sjkim/******************************************************************************
2227896Sjkim *
3227896Sjkim * Name: actbl3.h - ACPI Table Definitions
4227896Sjkim *
5227896Sjkim *****************************************************************************/
6227896Sjkim
7227896Sjkim/*
8229989Sjkim * Copyright (C) 2000 - 2012, 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 */
73227896Sjkim
74227896Sjkim#define ACPI_SIG_S3PT           "S3PT"      /* S3 Performance (sub)Table */
75227896Sjkim#define ACPI_SIG_PCCS           "PCC"       /* PCC Shared Memory Region */
76227896Sjkim
77227896Sjkim/* Reserved table signatures */
78227896Sjkim
79227896Sjkim#define ACPI_SIG_CSRT           "CSRT"      /* Core System Resources Table */
80227896Sjkim#define ACPI_SIG_MATR           "MATR"      /* Memory Address Translation Table */
81227896Sjkim#define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
82227896Sjkim#define ACPI_SIG_WPBT           "WPBT"      /* Windows Platform Binary Table */
83227896Sjkim
84227896Sjkim/*
85227896Sjkim * All tables must be byte-packed to match the ACPI specification, since
86227896Sjkim * the tables are provided by the system BIOS.
87227896Sjkim */
88227896Sjkim#pragma pack(1)
89227896Sjkim
90227896Sjkim/*
91239340Sjkim * Note: C bitfields are not used for this reason:
92239340Sjkim *
93239340Sjkim * "Bitfields are great and easy to read, but unfortunately the C language
94239340Sjkim * does not specify the layout of bitfields in memory, which means they are
95239340Sjkim * essentially useless for dealing with packed data in on-disk formats or
96239340Sjkim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
97239340Sjkim * this decision was a design error in C. Ritchie could have picked an order
98239340Sjkim * and stuck with it." Norman Ramsey.
99239340Sjkim * See http://stackoverflow.com/a/1053662/41661
100227896Sjkim */
101227896Sjkim
102227896Sjkim
103227896Sjkim/*******************************************************************************
104227896Sjkim *
105227896Sjkim * BGRT - Boot Graphics Resource Table (ACPI 5.0)
106227896Sjkim *        Version 1
107227896Sjkim *
108227896Sjkim ******************************************************************************/
109227896Sjkim
110227896Sjkimtypedef struct acpi_table_bgrt
111227896Sjkim{
112227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
113227896Sjkim    UINT16                  Version;
114227896Sjkim    UINT8                   Status;
115227896Sjkim    UINT8                   ImageType;
116227896Sjkim    UINT64                  ImageAddress;
117227896Sjkim    UINT32                  ImageOffsetX;
118227896Sjkim    UINT32                  ImageOffsetY;
119227896Sjkim
120227896Sjkim} ACPI_TABLE_BGRT;
121227896Sjkim
122227896Sjkim
123227896Sjkim/*******************************************************************************
124227896Sjkim *
125227896Sjkim * DRTM - Dynamic Root of Trust for Measurement table
126227896Sjkim *
127227896Sjkim ******************************************************************************/
128227896Sjkim
129227896Sjkimtypedef struct acpi_table_drtm
130227896Sjkim{
131227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
132227896Sjkim    UINT64                  EntryBaseAddress;
133227896Sjkim    UINT64                  EntryLength;
134227896Sjkim    UINT32                  EntryAddress32;
135227896Sjkim    UINT64                  EntryAddress64;
136227896Sjkim    UINT64                  ExitAddress;
137227896Sjkim    UINT64                  LogAreaAddress;
138227896Sjkim    UINT32                  LogAreaLength;
139227896Sjkim    UINT64                  ArchDependentAddress;
140227896Sjkim    UINT32                  Flags;
141227896Sjkim
142227896Sjkim} ACPI_TABLE_DRTM;
143227896Sjkim
144227896Sjkim/* 1) Validated Tables List */
145227896Sjkim
146227896Sjkimtypedef struct acpi_drtm_vtl_list
147227896Sjkim{
148227896Sjkim    UINT32                  ValidatedTableListCount;
149227896Sjkim
150227896Sjkim} ACPI_DRTM_VTL_LIST;
151227896Sjkim
152227896Sjkim/* 2) Resources List */
153227896Sjkim
154227896Sjkimtypedef struct acpi_drtm_resource_list
155227896Sjkim{
156227896Sjkim    UINT32                  ResourceListCount;
157227896Sjkim
158227896Sjkim} ACPI_DRTM_RESOURCE_LIST;
159227896Sjkim
160227896Sjkim/* 3) Platform-specific Identifiers List */
161227896Sjkim
162227896Sjkimtypedef struct acpi_drtm_id_list
163227896Sjkim{
164227896Sjkim    UINT32                  IdListCount;
165227896Sjkim
166227896Sjkim} ACPI_DRTM_ID_LIST;
167227896Sjkim
168227896Sjkim
169227896Sjkim/*******************************************************************************
170227896Sjkim *
171227896Sjkim * FPDT - Firmware Performance Data Table (ACPI 5.0)
172227896Sjkim *        Version 1
173227896Sjkim *
174227896Sjkim ******************************************************************************/
175227896Sjkim
176227896Sjkimtypedef struct acpi_table_fpdt
177227896Sjkim{
178227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
179227896Sjkim
180227896Sjkim} ACPI_TABLE_FPDT;
181227896Sjkim
182227896Sjkim
183227896Sjkim/* FPDT subtable header */
184227896Sjkim
185227896Sjkimtypedef struct acpi_fpdt_header
186227896Sjkim{
187227896Sjkim    UINT16                  Type;
188227896Sjkim    UINT8                   Length;
189227896Sjkim    UINT8                   Revision;
190227896Sjkim
191227896Sjkim} ACPI_FPDT_HEADER;
192227896Sjkim
193227896Sjkim/* Values for Type field above */
194227896Sjkim
195227896Sjkimenum AcpiFpdtType
196227896Sjkim{
197227896Sjkim    ACPI_FPDT_TYPE_BOOT                 = 0,
198227896Sjkim    ACPI_FPDT_TYPE_S3PERF               = 1,
199227896Sjkim};
200227896Sjkim
201227896Sjkim
202227896Sjkim/*
203227896Sjkim * FPDT subtables
204227896Sjkim */
205227896Sjkim
206227896Sjkim/* 0: Firmware Basic Boot Performance Record */
207227896Sjkim
208227896Sjkimtypedef struct acpi_fpdt_boot
209227896Sjkim{
210227896Sjkim    ACPI_FPDT_HEADER        Header;
211227896Sjkim    UINT8                   Reserved[4];
212227896Sjkim    UINT64                  ResetEnd;
213227896Sjkim    UINT64                  LoadStart;
214227896Sjkim    UINT64                  StartupStart;
215227896Sjkim    UINT64                  ExitServicesEntry;
216227896Sjkim    UINT64                  ExitServicesExit;
217227896Sjkim
218227896Sjkim} ACPI_FPDT_BOOT;
219227896Sjkim
220227896Sjkim
221227896Sjkim/* 1: S3 Performance Table Pointer Record */
222227896Sjkim
223227896Sjkimtypedef struct acpi_fpdt_s3pt_ptr
224227896Sjkim{
225227896Sjkim    ACPI_FPDT_HEADER        Header;
226227896Sjkim    UINT8                   Reserved[4];
227227896Sjkim    UINT64                  Address;
228227896Sjkim
229227896Sjkim} ACPI_FPDT_S3PT_PTR;
230227896Sjkim
231227896Sjkim
232227896Sjkim/*
233227896Sjkim * S3PT - S3 Performance Table. This table is pointed to by the
234227896Sjkim * FPDT S3 Pointer Record above.
235227896Sjkim */
236227896Sjkimtypedef struct acpi_table_s3pt
237227896Sjkim{
238227896Sjkim    UINT8                   Signature[4]; /* "S3PT" */
239227896Sjkim    UINT32                  Length;
240227896Sjkim
241227896Sjkim} ACPI_TABLE_S3PT;
242227896Sjkim
243227896Sjkim
244227896Sjkim/*
245227896Sjkim * S3PT Subtables
246227896Sjkim */
247227896Sjkimtypedef struct acpi_s3pt_header
248227896Sjkim{
249227896Sjkim    UINT16                  Type;
250227896Sjkim    UINT8                   Length;
251227896Sjkim    UINT8                   Revision;
252227896Sjkim
253227896Sjkim} ACPI_S3PT_HEADER;
254227896Sjkim
255227896Sjkim/* Values for Type field above */
256227896Sjkim
257227896Sjkimenum AcpiS3ptType
258227896Sjkim{
259227896Sjkim    ACPI_S3PT_TYPE_RESUME               = 0,
260227896Sjkim    ACPI_S3PT_TYPE_SUSPEND              = 1,
261227896Sjkim};
262227896Sjkim
263227896Sjkimtypedef struct acpi_s3pt_resume
264227896Sjkim{
265227896Sjkim    ACPI_S3PT_HEADER        Header;
266227896Sjkim    UINT32                  ResumeCount;
267227896Sjkim    UINT64                  FullResume;
268227896Sjkim    UINT64                  AverageResume;
269227896Sjkim
270227896Sjkim} ACPI_S3PT_RESUME;
271227896Sjkim
272227896Sjkimtypedef struct acpi_s3pt_suspend
273227896Sjkim{
274227896Sjkim    ACPI_S3PT_HEADER        Header;
275227896Sjkim    UINT64                  SuspendStart;
276227896Sjkim    UINT64                  SuspendEnd;
277227896Sjkim
278227896Sjkim} ACPI_S3PT_SUSPEND;
279227896Sjkim
280227896Sjkim
281227896Sjkim/*******************************************************************************
282227896Sjkim *
283227896Sjkim * GTDT - Generic Timer Description Table (ACPI 5.0)
284227896Sjkim *        Version 1
285227896Sjkim *
286227896Sjkim ******************************************************************************/
287227896Sjkim
288227896Sjkimtypedef struct acpi_table_gtdt
289227896Sjkim{
290227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
291227896Sjkim    UINT64                  Address;
292227896Sjkim    UINT32                  Flags;
293227896Sjkim    UINT32                  SecurePl1Interrupt;
294227896Sjkim    UINT32                  SecurePl1Flags;
295227896Sjkim    UINT32                  NonSecurePl1Interrupt;
296227896Sjkim    UINT32                  NonSecurePl1Flags;
297227896Sjkim    UINT32                  VirtualTimerInterrupt;
298227896Sjkim    UINT32                  VirtualTimerFlags;
299227896Sjkim    UINT32                  NonSecurePl2Interrupt;
300227896Sjkim    UINT32                  NonSecurePl2Flags;
301227896Sjkim
302227896Sjkim} ACPI_TABLE_GTDT;
303227896Sjkim
304227896Sjkim/* Values for Flags field above */
305227896Sjkim
306227896Sjkim#define ACPI_GTDT_MAPPED_BLOCK_PRESENT      1
307227896Sjkim
308227896Sjkim/* Values for all "TimerFlags" fields above */
309227896Sjkim
310227896Sjkim#define ACPI_GTDT_INTERRUPT_MODE            1
311227896Sjkim#define ACPI_GTDT_INTERRUPT_POLARITY        2
312227896Sjkim
313227896Sjkim
314227896Sjkim/*******************************************************************************
315227896Sjkim *
316227896Sjkim * MPST - Memory Power State Table (ACPI 5.0)
317227896Sjkim *        Version 1
318227896Sjkim *
319227896Sjkim ******************************************************************************/
320227896Sjkim
321227896Sjkim#define ACPI_MPST_CHANNEL_INFO \
322227896Sjkim    UINT8                   ChannelId; \
323241973Sjkim    UINT8                   Reserved1[3]; \
324241973Sjkim    UINT16                  PowerNodeCount; \
325241973Sjkim    UINT16                  Reserved2;
326227896Sjkim
327227896Sjkim/* Main table */
328227896Sjkim
329227896Sjkimtypedef struct acpi_table_mpst
330227896Sjkim{
331227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
332227896Sjkim    ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
333227896Sjkim
334227896Sjkim} ACPI_TABLE_MPST;
335227896Sjkim
336227896Sjkim
337227896Sjkim/* Memory Platform Communication Channel Info */
338227896Sjkim
339227896Sjkimtypedef struct acpi_mpst_channel
340227896Sjkim{
341227896Sjkim    ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
342227896Sjkim
343227896Sjkim} ACPI_MPST_CHANNEL;
344227896Sjkim
345227896Sjkim
346227896Sjkim/* Memory Power Node Structure */
347227896Sjkim
348227896Sjkimtypedef struct acpi_mpst_power_node
349227896Sjkim{
350227896Sjkim    UINT8                   Flags;
351227896Sjkim    UINT8                   Reserved1;
352227896Sjkim    UINT16                  NodeId;
353227896Sjkim    UINT32                  Length;
354227896Sjkim    UINT64                  RangeAddress;
355227896Sjkim    UINT64                  RangeLength;
356241973Sjkim    UINT32                  NumPowerStates;
357241973Sjkim    UINT32                  NumPhysicalComponents;
358227896Sjkim
359227896Sjkim} ACPI_MPST_POWER_NODE;
360227896Sjkim
361227896Sjkim/* Values for Flags field above */
362227896Sjkim
363227896Sjkim#define ACPI_MPST_ENABLED               1
364227896Sjkim#define ACPI_MPST_POWER_MANAGED         2
365227896Sjkim#define ACPI_MPST_HOT_PLUG_CAPABLE      4
366227896Sjkim
367227896Sjkim
368227896Sjkim/* Memory Power State Structure (follows POWER_NODE above) */
369227896Sjkim
370227896Sjkimtypedef struct acpi_mpst_power_state
371227896Sjkim{
372227896Sjkim    UINT8                   PowerState;
373227896Sjkim    UINT8                   InfoIndex;
374227896Sjkim
375227896Sjkim} ACPI_MPST_POWER_STATE;
376227896Sjkim
377227896Sjkim
378227896Sjkim/* Physical Component ID Structure (follows POWER_STATE above) */
379227896Sjkim
380227896Sjkimtypedef struct acpi_mpst_component
381227896Sjkim{
382227896Sjkim    UINT16                  ComponentId;
383227896Sjkim
384227896Sjkim} ACPI_MPST_COMPONENT;
385227896Sjkim
386227896Sjkim
387227896Sjkim/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
388227896Sjkim
389227896Sjkimtypedef struct acpi_mpst_data_hdr
390227896Sjkim{
391227896Sjkim    UINT16                  CharacteristicsCount;
392241973Sjkim    UINT16                  Reserved;
393227896Sjkim
394227896Sjkim} ACPI_MPST_DATA_HDR;
395227896Sjkim
396227896Sjkimtypedef struct acpi_mpst_power_data
397227896Sjkim{
398241973Sjkim    UINT8                   StructureId;
399227896Sjkim    UINT8                   Flags;
400227896Sjkim    UINT16                  Reserved1;
401227896Sjkim    UINT32                  AveragePower;
402227896Sjkim    UINT32                  PowerSaving;
403227896Sjkim    UINT64                  ExitLatency;
404227896Sjkim    UINT64                  Reserved2;
405227896Sjkim
406227896Sjkim} ACPI_MPST_POWER_DATA;
407227896Sjkim
408227896Sjkim/* Values for Flags field above */
409227896Sjkim
410227896Sjkim#define ACPI_MPST_PRESERVE              1
411227896Sjkim#define ACPI_MPST_AUTOENTRY             2
412227896Sjkim#define ACPI_MPST_AUTOEXIT              4
413227896Sjkim
414227896Sjkim
415227896Sjkim/* Shared Memory Region (not part of an ACPI table) */
416227896Sjkim
417227896Sjkimtypedef struct acpi_mpst_shared
418227896Sjkim{
419227896Sjkim    UINT32                  Signature;
420227896Sjkim    UINT16                  PccCommand;
421227896Sjkim    UINT16                  PccStatus;
422241973Sjkim    UINT32                  CommandRegister;
423241973Sjkim    UINT32                  StatusRegister;
424241973Sjkim    UINT32                  PowerStateId;
425241973Sjkim    UINT32                  PowerNodeId;
426227896Sjkim    UINT64                  EnergyConsumed;
427227896Sjkim    UINT64                  AveragePower;
428227896Sjkim
429227896Sjkim} ACPI_MPST_SHARED;
430227896Sjkim
431227896Sjkim
432227896Sjkim/*******************************************************************************
433227896Sjkim *
434227896Sjkim * PCCT - Platform Communications Channel Table (ACPI 5.0)
435227896Sjkim *        Version 1
436227896Sjkim *
437227896Sjkim ******************************************************************************/
438227896Sjkim
439227896Sjkimtypedef struct acpi_table_pcct
440227896Sjkim{
441227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
442227896Sjkim    UINT32                  Flags;
443227896Sjkim    UINT32                  Latency;
444227896Sjkim    UINT32                  Reserved;
445227896Sjkim
446227896Sjkim} ACPI_TABLE_PCCT;
447227896Sjkim
448227896Sjkim/* Values for Flags field above */
449227896Sjkim
450227896Sjkim#define ACPI_PCCT_DOORBELL              1
451227896Sjkim
452227896Sjkim/*
453227896Sjkim * PCCT subtables
454227896Sjkim */
455227896Sjkim
456227896Sjkim/* 0: Generic Communications Subspace */
457227896Sjkim
458227896Sjkimtypedef struct acpi_pcct_subspace
459227896Sjkim{
460227896Sjkim    ACPI_SUBTABLE_HEADER    Header;
461227896Sjkim    UINT8                   Reserved[6];
462227896Sjkim    UINT64                  BaseAddress;
463227896Sjkim    UINT64                  Length;
464227896Sjkim    ACPI_GENERIC_ADDRESS    DoorbellRegister;
465227896Sjkim    UINT64                  PreserveMask;
466227896Sjkim    UINT64                  WriteMask;
467227896Sjkim
468227896Sjkim} ACPI_PCCT_SUBSPACE;
469227896Sjkim
470227896Sjkim
471227896Sjkim/*
472227896Sjkim * PCC memory structures (not part of the ACPI table)
473227896Sjkim */
474227896Sjkim
475227896Sjkim/* Shared Memory Region */
476227896Sjkim
477227896Sjkimtypedef struct acpi_pcct_shared_memory
478227896Sjkim{
479227896Sjkim    UINT32                  Signature;
480227896Sjkim    UINT16                  Command;
481227896Sjkim    UINT16                  Status;
482227896Sjkim
483227896Sjkim} ACPI_PCCT_SHARED_MEMORY;
484227896Sjkim
485227896Sjkim
486227896Sjkim/*******************************************************************************
487227896Sjkim *
488227896Sjkim * PMTT - Platform Memory Topology Table (ACPI 5.0)
489227896Sjkim *        Version 1
490227896Sjkim *
491227896Sjkim ******************************************************************************/
492227896Sjkim
493227896Sjkimtypedef struct acpi_table_pmtt
494227896Sjkim{
495227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
496227896Sjkim    UINT32                  Reserved;
497227896Sjkim
498227896Sjkim} ACPI_TABLE_PMTT;
499227896Sjkim
500227896Sjkim
501227896Sjkim/* Common header for PMTT subtables that follow main table */
502227896Sjkim
503227896Sjkimtypedef struct acpi_pmtt_header
504227896Sjkim{
505227896Sjkim    UINT8                   Type;
506227896Sjkim    UINT8                   Reserved1;
507227896Sjkim    UINT16                  Length;
508227896Sjkim    UINT16                  Flags;
509227896Sjkim    UINT16                  Reserved2;
510227896Sjkim
511227896Sjkim} ACPI_PMTT_HEADER;
512227896Sjkim
513227896Sjkim/* Values for Type field above */
514227896Sjkim
515227896Sjkim#define ACPI_PMTT_TYPE_SOCKET           0
516227896Sjkim#define ACPI_PMTT_TYPE_CONTROLLER       1
517227896Sjkim#define ACPI_PMTT_TYPE_DIMM             2
518227896Sjkim#define ACPI_PMTT_TYPE_RESERVED         3 /* 0x03-0xFF are reserved */
519227896Sjkim
520227896Sjkim/* Values for Flags field above */
521227896Sjkim
522227896Sjkim#define ACPI_PMTT_TOP_LEVEL             0x0001
523227896Sjkim#define ACPI_PMTT_PHYSICAL              0x0002
524227896Sjkim#define ACPI_PMTT_MEMORY_TYPE           0x000C
525227896Sjkim
526227896Sjkim
527227896Sjkim/*
528227896Sjkim * PMTT subtables, correspond to Type in acpi_pmtt_header
529227896Sjkim */
530227896Sjkim
531227896Sjkim
532227896Sjkim/* 0: Socket Structure */
533227896Sjkim
534227896Sjkimtypedef struct acpi_pmtt_socket
535227896Sjkim{
536227896Sjkim    ACPI_PMTT_HEADER        Header;
537227896Sjkim    UINT16                  SocketId;
538227896Sjkim    UINT16                  Reserved;
539227896Sjkim
540227896Sjkim} ACPI_PMTT_SOCKET;
541227896Sjkim
542227896Sjkim
543227896Sjkim/* 1: Memory Controller subtable */
544227896Sjkim
545227896Sjkimtypedef struct acpi_pmtt_controller
546227896Sjkim{
547227896Sjkim    ACPI_PMTT_HEADER        Header;
548227896Sjkim    UINT32                  ReadLatency;
549227896Sjkim    UINT32                  WriteLatency;
550227896Sjkim    UINT32                  ReadBandwidth;
551227896Sjkim    UINT32                  WriteBandwidth;
552227896Sjkim    UINT16                  AccessWidth;
553227896Sjkim    UINT16                  Alignment;
554227896Sjkim    UINT16                  Reserved;
555227896Sjkim    UINT16                  DomainCount;
556227896Sjkim
557227896Sjkim} ACPI_PMTT_CONTROLLER;
558227896Sjkim
559227896Sjkim/* 1a: Proximity Domain substructure */
560227896Sjkim
561227896Sjkimtypedef struct acpi_pmtt_domain
562227896Sjkim{
563227896Sjkim    UINT32                  ProximityDomain;
564227896Sjkim
565227896Sjkim} ACPI_PMTT_DOMAIN;
566227896Sjkim
567227896Sjkim
568227896Sjkim/* 2: Physical Component Identifier (DIMM) */
569227896Sjkim
570227896Sjkimtypedef struct acpi_pmtt_physical_component
571227896Sjkim{
572227896Sjkim    ACPI_PMTT_HEADER        Header;
573227896Sjkim    UINT16                  ComponentId;
574227896Sjkim    UINT16                  Reserved;
575227896Sjkim    UINT32                  MemorySize;
576227896Sjkim    UINT32                  BiosHandle;
577227896Sjkim
578227896Sjkim} ACPI_PMTT_PHYSICAL_COMPONENT;
579227896Sjkim
580227896Sjkim
581227896Sjkim/*******************************************************************************
582227896Sjkim *
583227896Sjkim * RASF - RAS Feature Table (ACPI 5.0)
584227896Sjkim *        Version 1
585227896Sjkim *
586227896Sjkim ******************************************************************************/
587227896Sjkim
588227896Sjkimtypedef struct acpi_table_rasf
589227896Sjkim{
590227896Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
591227896Sjkim    UINT8                   ChannelId[12];
592227896Sjkim
593227896Sjkim} ACPI_TABLE_RASF;
594227896Sjkim
595227896Sjkim/* RASF Platform Communication Channel Shared Memory Region */
596227896Sjkim
597227896Sjkimtypedef struct acpi_rasf_shared_memory
598227896Sjkim{
599227896Sjkim    UINT32                  Signature;
600227896Sjkim    UINT16                  Command;
601227896Sjkim    UINT16                  Status;
602227896Sjkim    UINT64                  RequestedAddress;
603227896Sjkim    UINT64                  RequestedLength;
604227896Sjkim    UINT64                  ActualAddress;
605227896Sjkim    UINT64                  ActualLength;
606227896Sjkim    UINT16                  Flags;
607227896Sjkim    UINT8                   Speed;
608227896Sjkim
609227896Sjkim} ACPI_RASF_SHARED_MEMORY;
610227896Sjkim
611227896Sjkim/* Masks for Flags and Speed fields above */
612227896Sjkim
613227896Sjkim#define ACPI_RASF_SCRUBBER_RUNNING      1
614227896Sjkim#define ACPI_RASF_SPEED                 (7<<1)
615227896Sjkim
616227896Sjkim/* Channel Commands */
617227896Sjkim
618227896Sjkimenum AcpiRasfCommands
619227896Sjkim{
620227896Sjkim    ACPI_RASF_GET_RAS_CAPABILITIES      = 1,
621227896Sjkim    ACPI_RASF_GET_PATROL_PARAMETERS     = 2,
622227896Sjkim    ACPI_RASF_START_PATROL_SCRUBBER     = 3,
623227896Sjkim    ACPI_RASF_STOP_PATROL_SCRUBBER      = 4
624227896Sjkim};
625227896Sjkim
626227896Sjkim/* Channel Command flags */
627227896Sjkim
628227896Sjkim#define ACPI_RASF_GENERATE_SCI          (1<<15)
629227896Sjkim
630227896Sjkim/* Status values */
631227896Sjkim
632227896Sjkimenum AcpiRasfStatus
633227896Sjkim{
634227896Sjkim    ACPI_RASF_SUCCESS                   = 0,
635227896Sjkim    ACPI_RASF_NOT_VALID                 = 1,
636227896Sjkim    ACPI_RASF_NOT_SUPPORTED             = 2,
637227896Sjkim    ACPI_RASF_BUSY                      = 3,
638227896Sjkim    ACPI_RASF_FAILED                    = 4,
639227896Sjkim    ACPI_RASF_ABORTED                   = 5,
640227896Sjkim    ACPI_RASF_INVALID_DATA              = 6
641227896Sjkim};
642227896Sjkim
643227896Sjkim/* Status flags */
644227896Sjkim
645227896Sjkim#define ACPI_RASF_COMMAND_COMPLETE      (1)
646227896Sjkim#define ACPI_RASF_SCI_DOORBELL          (1<<1)
647227896Sjkim#define ACPI_RASF_ERROR                 (1<<2)
648227896Sjkim#define ACPI_RASF_STATUS                (0x1F<<3)
649227896Sjkim
650227896Sjkim
651227896Sjkim/* Reset to default packing */
652227896Sjkim
653227896Sjkim#pragma pack()
654227896Sjkim
655227896Sjkim#endif /* __ACTBL3_H__ */
656