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