xref: /illumos-gate/usr/src/uts/intel/sys/acpi/actbl1.h (revision 19397407)
1 /******************************************************************************
2  *
3  * Name: actbl1.h - Additional ACPI table definitions
4  *       $Revision: 1.41 $
5  *
6  *****************************************************************************/
7 
8 /******************************************************************************
9  *
10  * 1. Copyright Notice
11  *
12  * Some or all of this work - Copyright (c) 1999 - 2006, Intel Corp.
13  * All rights reserved.
14  *
15  * 2. License
16  *
17  * 2.1. This is your license from Intel Corp. under its intellectual property
18  * rights.  You may have additional license terms from the party that provided
19  * you this software, covering your right to use that party's intellectual
20  * property rights.
21  *
22  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
23  * copy of the source code appearing in this file ("Covered Code") an
24  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
25  * base code distributed originally by Intel ("Original Intel Code") to copy,
26  * make derivatives, distribute, use and display any portion of the Covered
27  * Code in any form, with the right to sublicense such rights; and
28  *
29  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
30  * license (with the right to sublicense), under only those claims of Intel
31  * patents that are infringed by the Original Intel Code, to make, use, sell,
32  * offer to sell, and import the Covered Code and derivative works thereof
33  * solely to the minimum extent necessary to exercise the above copyright
34  * license, and in no event shall the patent license extend to any additions
35  * to or modifications of the Original Intel Code.  No other license or right
36  * is granted directly or by implication, estoppel or otherwise;
37  *
38  * The above copyright and patent license is granted only if the following
39  * conditions are met:
40  *
41  * 3. Conditions
42  *
43  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
44  * Redistribution of source code of any substantial portion of the Covered
45  * Code or modification with rights to further distribute source must include
46  * the above Copyright Notice, the above License, this list of Conditions,
47  * and the following Disclaimer and Export Compliance provision.  In addition,
48  * Licensee must cause all Covered Code to which Licensee contributes to
49  * contain a file documenting the changes Licensee made to create that Covered
50  * Code and the date of any change.  Licensee must include in that file the
51  * documentation of any changes made by any predecessor Licensee.  Licensee
52  * must include a prominent statement that the modification is derived,
53  * directly or indirectly, from Original Intel Code.
54  *
55  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
56  * Redistribution of source code of any substantial portion of the Covered
57  * Code or modification without rights to further distribute source must
58  * include the following Disclaimer and Export Compliance provision in the
59  * documentation and/or other materials provided with distribution.  In
60  * addition, Licensee may not authorize further sublicense of source of any
61  * portion of the Covered Code, and must include terms to the effect that the
62  * license from Licensee to its licensee is limited to the intellectual
63  * property embodied in the software Licensee provides to its licensee, and
64  * not to intellectual property embodied in modifications its licensee may
65  * make.
66  *
67  * 3.3. Redistribution of Executable. Redistribution in executable form of any
68  * substantial portion of the Covered Code or modification must reproduce the
69  * above Copyright Notice, and the following Disclaimer and Export Compliance
70  * provision in the documentation and/or other materials provided with the
71  * distribution.
72  *
73  * 3.4. Intel retains all right, title, and interest in and to the Original
74  * Intel Code.
75  *
76  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
77  * Intel shall be used in advertising or otherwise to promote the sale, use or
78  * other dealings in products derived from or relating to the Covered Code
79  * without prior written authorization from Intel.
80  *
81  * 4. Disclaimer and Export Compliance
82  *
83  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
84  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
85  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
86  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
87  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
88  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
89  * PARTICULAR PURPOSE.
90  *
91  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
92  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
93  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
94  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
95  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
96  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
97  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
98  * LIMITED REMEDY.
99  *
100  * 4.3. Licensee shall not export, either directly or indirectly, any of this
101  * software or system incorporating such software without first obtaining any
102  * required license or other approval from the U. S. Department of Commerce or
103  * any other agency or department of the United States Government.  In the
104  * event Licensee exports any such software from the United States or
105  * re-exports any such software from a foreign destination, Licensee shall
106  * ensure that the distribution and export/re-export of the software is in
107  * compliance with all laws, regulations, orders, or other restrictions of the
108  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
109  * any of its subsidiaries will export/re-export any technical data, process,
110  * software, or service, directly or indirectly, to any country for which the
111  * United States government or any agency thereof requires an export license,
112  * other governmental approval, or letter of assurance, without first obtaining
113  * such license, approval or letter.
114  *
115  *****************************************************************************/
116 
117 #ifndef __ACTBL1_H__
118 #define __ACTBL1_H__
119 
120 
121 /*******************************************************************************
122  *
123  * Additional ACPI Tables
124  *
125  * These tables are not consumed directly by the ACPICA subsystem, but are
126  * included here to support device drivers and the AML disassembler.
127  *
128  ******************************************************************************/
129 
130 
131 /*
132  * Values for description table header signatures. Useful because they make
133  * it more difficult to inadvertently type in the wrong signature.
134  */
135 #define ACPI_SIG_ASF            "ASF!"      /* Alert Standard Format table */
136 #define ACPI_SIG_BOOT           "BOOT"      /* Simple Boot Flag Table */
137 #define ACPI_SIG_CPEP           "CPEP"      /* Corrected Platform Error Polling table */
138 #define ACPI_SIG_DBGP           "DBGP"      /* Debug Port table */
139 #define ACPI_SIG_ECDT           "ECDT"      /* Embedded Controller Boot Resources Table */
140 #define ACPI_SIG_HPET           "HPET"      /* High Precision Event Timer table */
141 #define ACPI_SIG_MADT           "APIC"      /* Multiple APIC Description Table */
142 #define ACPI_SIG_MCFG           "MCFG"      /* PCI Memory Mapped Configuration table */
143 #define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
144 #define ACPI_SIG_SLIT           "SLIT"      /* System Locality Distance Information Table */
145 #define ACPI_SIG_SPCR           "SPCR"      /* Serial Port Console Redirection table */
146 #define ACPI_SIG_SPMI           "SPMI"      /* Server Platform Management Interface table */
147 #define ACPI_SIG_SRAT           "SRAT"      /* System Resource Affinity Table */
148 #define ACPI_SIG_TCPA           "TCPA"      /* Trusted Computing Platform Alliance table */
149 #define ACPI_SIG_WDRT           "WDRT"      /* Watchdog Resource Table */
150 
151 /* Legacy names */
152 
153 #define APIC_SIG                "APIC"      /* Multiple APIC Description Table */
154 #define BOOT_SIG                "BOOT"      /* Simple Boot Flag Table */
155 #define SBST_SIG                "SBST"      /* Smart Battery Specification Table */
156 
157 
158 /*
159  * All tables must be byte-packed to match the ACPI specification, since
160  * the tables are provided by the system BIOS.
161  */
162 #pragma pack(1)
163 
164 /*
165  * Note about bitfields: The UINT8 type is used for bitfields in ACPI tables.
166  * This is the only type that is even remotely portable. Anything else is not
167  * portable, so do not use any other bitfield types.
168  */
169 
170 
171 /*******************************************************************************
172  *
173  * ASF - Alert Standard Format table (Signature "ASF!")
174  *
175  ******************************************************************************/
176 
177 typedef struct acpi_table_asf
178 {
179     ACPI_TABLE_HEADER_DEF
180 
181 } ACPI_TABLE_ASF;
182 
183 #define ACPI_ASF_HEADER_DEF \
184     UINT8                   Type; \
185     UINT8                   Reserved; \
186     UINT16                  Length;
187 
188 typedef struct acpi_asf_header
189 {
190     ACPI_ASF_HEADER_DEF
191 
192 } ACPI_ASF_HEADER;
193 
194 
195 /* Values for Type field */
196 
197 #define ASF_INFO                0
198 #define ASF_ALERT               1
199 #define ASF_CONTROL             2
200 #define ASF_BOOT                3
201 #define ASF_ADDRESS             4
202 #define ASF_RESERVED            5
203 
204 /*
205  * ASF subtables
206  */
207 
208 /* 0: ASF Information */
209 
210 typedef struct acpi_asf_info
211 {
212     ACPI_ASF_HEADER_DEF
213     UINT8                   MinResetValue;
214     UINT8                   MinPollInterval;
215     UINT16                  SystemId;
216     UINT32                  MfgId;
217     UINT8                   Flags;
218     UINT8                   Reserved2[3];
219 
220 } ACPI_ASF_INFO;
221 
222 /* 1: ASF Alerts */
223 
224 typedef struct acpi_asf_alert
225 {
226     ACPI_ASF_HEADER_DEF
227     UINT8                   AssertMask;
228     UINT8                   DeassertMask;
229     UINT8                   Alerts;
230     UINT8                   DataLength;
231     UINT8                   Array[1];
232 
233 } ACPI_ASF_ALERT;
234 
235 /* 2: ASF Remote Control */
236 
237 typedef struct acpi_asf_remote
238 {
239     ACPI_ASF_HEADER_DEF
240     UINT8                   Controls;
241     UINT8                   DataLength;
242     UINT16                  Reserved2;
243     UINT8                   Array[1];
244 
245 } ACPI_ASF_REMOTE;
246 
247 /* 3: ASF RMCP Boot Options */
248 
249 typedef struct acpi_asf_rmcp
250 {
251     ACPI_ASF_HEADER_DEF
252     UINT8                   Capabilities[7];
253     UINT8                   CompletionCode;
254     UINT32                  EnterpriseId;
255     UINT8                   Command;
256     UINT16                  Parameter;
257     UINT16                  BootOptions;
258     UINT16                  OemParameters;
259 
260 } ACPI_ASF_RMCP;
261 
262 /* 4: ASF Address */
263 
264 typedef struct acpi_asf_address
265 {
266     ACPI_ASF_HEADER_DEF
267     UINT8                   EpromAddress;
268     UINT8                   Devices;
269     UINT8                   SmbusAddresses[1];
270 
271 } ACPI_ASF_ADDRESS;
272 
273 
274 /*******************************************************************************
275  *
276  * BOOT - Simple Boot Flag Table
277  *
278  ******************************************************************************/
279 
280 typedef struct acpi_table_boot
281 {
282     ACPI_TABLE_HEADER_DEF
283     UINT8                   CmosIndex;          /* Index in CMOS RAM for the boot register */
284     UINT8                   Reserved[3];
285 
286 } ACPI_TABLE_BOOT;
287 
288 
289 /*******************************************************************************
290  *
291  * CPEP - Corrected Platform Error Polling table
292  *
293  ******************************************************************************/
294 
295 typedef struct acpi_table_cpep
296 {
297     ACPI_TABLE_HEADER_DEF
298     UINT64                  Reserved;
299 
300 } ACPI_TABLE_CPEP;
301 
302 /* Subtable */
303 
304 typedef struct acpi_cpep_polling
305 {
306     UINT8                   Type;
307     UINT8                   Length;
308     UINT8                   ProcessorId;        /* Processor ID */
309     UINT8                   ProcessorEid;       /* Processor EID */
310     UINT32                  PollingInterval;    /* Polling interval (msec) */
311 
312 } ACPI_CPEP_POLLING;
313 
314 
315 /*******************************************************************************
316  *
317  * DBGP - Debug Port table
318  *
319  ******************************************************************************/
320 
321 typedef struct acpi_table_dbgp
322 {
323     ACPI_TABLE_HEADER_DEF
324     UINT8                   InterfaceType;      /* 0=full 16550, 1=subset of 16550 */
325     UINT8                   Reserved[3];
326     ACPI_GENERIC_ADDRESS    DebugPort;
327 
328 } ACPI_TABLE_DBGP;
329 
330 
331 /*******************************************************************************
332  *
333  * ECDT - Embedded Controller Boot Resources Table
334  *
335  ******************************************************************************/
336 
337 typedef struct ec_boot_resources
338 {
339     ACPI_TABLE_HEADER_DEF
340     ACPI_GENERIC_ADDRESS    EcControl;          /* Address of EC command/status register */
341     ACPI_GENERIC_ADDRESS    EcData;             /* Address of EC data register */
342     UINT32                  Uid;                /* Unique ID - must be same as the EC _UID method */
343     UINT8                   GpeBit;             /* The GPE for the EC */
344     UINT8                   EcId[1];            /* Full namepath of the EC in the ACPI namespace */
345 
346 } EC_BOOT_RESOURCES;
347 
348 
349 /*******************************************************************************
350  *
351  * HPET - High Precision Event Timer table
352  *
353  ******************************************************************************/
354 
355 typedef struct acpi_hpet_table
356 {
357     ACPI_TABLE_HEADER_DEF
358     UINT32                  HardwareId;         /* Hardware ID of event timer block */
359     ACPI_GENERIC_ADDRESS    BaseAddress;        /* Address of event timer block */
360     UINT8                   HpetNumber;         /* HPET sequence number */
361     UINT16                  ClockTick;          /* Main counter min tick, periodic mode */
362     UINT8                   Attributes;
363 
364 } HPET_TABLE;
365 
366 #if 0 /* HPET flags to be converted to macros */
367     struct /* Flags (8 bits) */
368     {
369         UINT8                   PageProtect     :1; /* 00:    No page protection */
370         UINT8                   PageProtect4    :1; /* 01:    4KB page protected */
371         UINT8                   PageProtect64   :1; /* 02:    64KB page protected */
372         UINT8                                   :5; /* 03-07: Reserved, must be zero */
373     } Flags;
374 #endif
375 
376 
377 /*******************************************************************************
378  *
379  * MADT - Multiple APIC Description Table
380  *
381  ******************************************************************************/
382 
383 typedef struct multiple_apic_table
384 {
385     ACPI_TABLE_HEADER_DEF
386     UINT32                  LocalApicAddress;   /* Physical address of local APIC */
387 
388     /* Flags (32 bits) */
389 
390     UINT8                   PCATCompat      : 1;    /* 00:    System also has dual 8259s */
391     UINT8                                   : 7;    /* 01-07: Reserved, must be zero */
392     UINT8                   Reserved1[3];           /* 08-31: Reserved, must be zero */
393 
394 } MULTIPLE_APIC_TABLE;
395 
396 /* Values for MADT PCATCompat */
397 
398 #define DUAL_PIC                0
399 #define MULTIPLE_APIC           1
400 
401 
402 /* Common MADT Sub-table header */
403 
404 #define APIC_HEADER_DEF \
405     UINT8                   Type; \
406     UINT8                   Length;
407 
408 typedef struct apic_header
409 {
410     APIC_HEADER_DEF
411 
412 } APIC_HEADER;
413 
414 /* Values for Type in APIC_HEADER */
415 
416 #define APIC_PROCESSOR          0
417 #define APIC_IO                 1
418 #define APIC_XRUPT_OVERRIDE     2
419 #define APIC_NMI                3
420 #define APIC_LOCAL_NMI          4
421 #define APIC_ADDRESS_OVERRIDE   5
422 #define APIC_IO_SAPIC           6
423 #define APIC_LOCAL_SAPIC        7
424 #define APIC_XRUPT_SOURCE       8
425 #define	X2APIC_PROCESSOR	9
426 #define	X2APIC_LOCAL_NMI	10
427 #define	APIC_RESERVED		11	/* 11 and greater are reserved */
428 
429 
430 /* Flag definitions for MADT sub-tables */
431 
432 #define ACPI_MADT_IFLAGS /* INTI flags (16 bits) */ \
433     UINT8                   Polarity        : 2;    /* 00-01: Polarity of APIC I/O input signals */\
434     UINT8                   TriggerMode     : 2;    /* 02-03: Trigger mode of APIC input signals */\
435     UINT8                                   : 4;    /* 04-07: Reserved, must be zero */\
436     UINT8                   Reserved1;              /* 08-15: Reserved, must be zero */
437 
438 #define ACPI_MADT_LFLAGS /* Local Sapic flags (32 bits) */ \
439     UINT8                   ProcessorEnabled: 1;    /* 00:    Processor is usable if set */\
440     UINT8                                   : 7;    /* 01-07: Reserved, must be zero */\
441     UINT8                   Reserved2[3];           /* 08-31: Reserved, must be zero */
442 
443 
444 /* Values for MPS INTI flags */
445 
446 #define POLARITY_CONFORMS       0
447 #define POLARITY_ACTIVE_HIGH    1
448 #define POLARITY_RESERVED       2
449 #define POLARITY_ACTIVE_LOW     3
450 
451 #define TRIGGER_CONFORMS        0
452 #define TRIGGER_EDGE            1
453 #define TRIGGER_RESERVED        2
454 #define TRIGGER_LEVEL           3
455 
456 
457 /*
458  * MADT Sub-tables, correspond to Type in APIC_HEADER
459  */
460 
461 /* 0: processor APIC */
462 
463 typedef struct madt_processor_apic
464 {
465     APIC_HEADER_DEF
466     UINT8                   ProcessorId;        /* ACPI processor id */
467     UINT8                   LocalApicId;        /* Processor's local APIC id */
468     ACPI_MADT_LFLAGS
469 
470 } MADT_PROCESSOR_APIC;
471 
472 /* 1: IO APIC */
473 
474 typedef struct madt_io_apic
475 {
476     APIC_HEADER_DEF
477     UINT8                   IoApicId;           /* I/O APIC ID */
478     UINT8                   Reserved;           /* Reserved - must be zero */
479     UINT32                  Address;            /* APIC physical address */
480     UINT32                  Interrupt;          /* Global system interrupt where INTI lines start */
481 
482 } MADT_IO_APIC;
483 
484 /* 2: Interrupt Override */
485 
486 typedef struct madt_interrupt_override
487 {
488     APIC_HEADER_DEF
489     UINT8                   Bus;                /* 0 - ISA */
490     UINT8                   Source;             /* Interrupt source (IRQ) */
491     UINT32                  Interrupt;          /* Global system interrupt */
492     ACPI_MADT_IFLAGS
493 
494 } MADT_INTERRUPT_OVERRIDE;
495 
496 /* 3: NMI Sources */
497 
498 typedef struct madt_nmi_source
499 {
500     APIC_HEADER_DEF
501     ACPI_MADT_IFLAGS
502     UINT32                  Interrupt;          /* Global system interrupt */
503 
504 } MADT_NMI_SOURCE;
505 
506 /* 4: Local APIC NMI */
507 
508 typedef struct madt_local_apic_nmi
509 {
510     APIC_HEADER_DEF
511     UINT8                   ProcessorId;        /* ACPI processor id */
512     ACPI_MADT_IFLAGS
513     UINT8                   Lint;               /* LINTn to which NMI is connected */
514 
515 } MADT_LOCAL_APIC_NMI;
516 
517 /* 5: Address Override */
518 
519 typedef struct madt_address_override
520 {
521     APIC_HEADER_DEF
522     UINT16                  Reserved;           /* Reserved, must be zero */
523     UINT64                  Address;            /* APIC physical address */
524 
525 } MADT_ADDRESS_OVERRIDE;
526 
527 /* 6: I/O Sapic */
528 
529 typedef struct madt_io_sapic
530 {
531     APIC_HEADER_DEF
532     UINT8                   IoSapicId;          /* I/O SAPIC ID */
533     UINT8                   Reserved;           /* Reserved, must be zero */
534     UINT32                  InterruptBase;      /* Glocal interrupt for SAPIC start */
535     UINT64                  Address;            /* SAPIC physical address */
536 
537 } MADT_IO_SAPIC;
538 
539 /* 7: Local Sapic */
540 
541 typedef struct madt_local_sapic
542 {
543     APIC_HEADER_DEF
544     UINT8                   ProcessorId;        /* ACPI processor id */
545     UINT8                   LocalSapicId;       /* SAPIC ID */
546     UINT8                   LocalSapicEid;      /* SAPIC EID */
547     UINT8                   Reserved[3];        /* Reserved, must be zero */
548     ACPI_MADT_LFLAGS
549     UINT32                  ProcessorUID;           /* Numeric UID - ACPI 3.0 */
550     char                    ProcessorUIDString[1];  /* String UID  - ACPI 3.0 */
551 
552 } MADT_LOCAL_SAPIC;
553 
554 /* 8: Platform Interrupt Source */
555 
556 typedef struct madt_interrupt_source
557 {
558     APIC_HEADER_DEF
559     ACPI_MADT_IFLAGS
560     UINT8                   InterruptType;      /* 1=PMI, 2=INIT, 3=corrected */
561     UINT8                   ProcessorId;        /* Processor ID */
562     UINT8                   ProcessorEid;       /* Processor EID */
563     UINT8                   IoSapicVector;      /* Vector value for PMI interrupts */
564     UINT32                  Interrupt;          /* Global system interrupt */
565     UINT32                  Flags;              /* Interrupt Source Flags */
566 
567 } MADT_INTERRUPT_SOURCE;
568 
569 /* 9: Processor x2APIC */
570 
571 typedef	struct	madt_processor_ext_apic
572 {
573     APIC_HEADER_DEF
574     UINT16                  Reserved;		/* Reserved - must be zero */
575     UINT32                  X2LocalApicId;     /* Processor's  x2APIC ID  */
576     ACPI_MADT_LFLAGS
577     UINT32                  ProcessorUID;     /* Extended x2APIC processor ID */
578 } MADT_PROCESSOR_X2APIC;
579 
580 /* 10: Extended X2APIC NMI Structure */
581 
582 typedef struct madt_local_x2apic_nmi
583 {
584     APIC_HEADER_DEF
585     ACPI_MADT_IFLAGS
586     UINT32                  ProcessorUID;     /* Processor's x2APIC ID */
587     UINT8                   Lint;    /* LINTn to which NMI is connected */
588     UINT8                   Reserved[3];
589 } MADT_LOCAL_X2APIC_NMI;
590 
591 
592 /*******************************************************************************
593  *
594  * MCFG - PCI Memory Mapped Configuration table and sub-table
595  *
596  ******************************************************************************/
597 
598 typedef struct acpi_table_mcfg
599 {
600     ACPI_TABLE_HEADER_DEF
601     UINT8                   Reserved[8];
602 
603 } ACPI_TABLE_MCFG;
604 
605 typedef struct acpi_mcfg_allocation
606 {
607     UINT64                  BaseAddress;        /* Base address, processor-relative */
608     UINT16                  PciSegment;         /* PCI segment group number */
609     UINT8                   StartBusNumber;     /* Starting PCI Bus number */
610     UINT8                   EndBusNumber;       /* Final PCI Bus number */
611     UINT32                  Reserved;
612 
613 } ACPI_MCFG_ALLOCATION;
614 
615 
616 /*******************************************************************************
617  *
618  * SBST - Smart Battery Specification Table
619  *
620  ******************************************************************************/
621 
622 typedef struct smart_battery_table
623 {
624     ACPI_TABLE_HEADER_DEF
625     UINT32                  WarningLevel;
626     UINT32                  LowLevel;
627     UINT32                  CriticalLevel;
628 
629 } SMART_BATTERY_TABLE;
630 
631 
632 /*******************************************************************************
633  *
634  * SLIT - System Locality Distance Information Table
635  *
636  ******************************************************************************/
637 
638 typedef struct system_locality_info
639 {
640     ACPI_TABLE_HEADER_DEF
641     UINT64                  LocalityCount;
642     UINT8                   Entry[1][1];
643 
644 } SYSTEM_LOCALITY_INFO;
645 
646 
647 /*******************************************************************************
648  *
649  * SPCR - Serial Port Console Redirection table
650  *
651  ******************************************************************************/
652 
653 typedef struct acpi_table_spcr
654 {
655     ACPI_TABLE_HEADER_DEF
656     UINT8                   InterfaceType;      /* 0=full 16550, 1=subset of 16550 */
657     UINT8                   Reserved[3];
658     ACPI_GENERIC_ADDRESS    SerialPort;
659     UINT8                   InterruptType;
660     UINT8                   PcInterrupt;
661     UINT32                  Interrupt;
662     UINT8                   BaudRate;
663     UINT8                   Parity;
664     UINT8                   StopBits;
665     UINT8                   FlowControl;
666     UINT8                   TerminalType;
667     UINT8                   Reserved2;
668     UINT16                  PciDeviceId;
669     UINT16                  PciVendorId;
670     UINT8                   PciBus;
671     UINT8                   PciDevice;
672     UINT8                   PciFunction;
673     UINT32                  PciFlags;
674     UINT8                   PciSegment;
675     UINT32                  Reserved3;
676 
677 } ACPI_TABLE_SPCR;
678 
679 
680 /*******************************************************************************
681  *
682  * SPMI - Server Platform Management Interface table
683  *
684  ******************************************************************************/
685 
686 typedef struct acpi_table_spmi
687 {
688     ACPI_TABLE_HEADER_DEF
689     UINT8                   Reserved;
690     UINT8                   InterfaceType;
691     UINT16                  SpecRevision;       /* Version of IPMI */
692     UINT8                   InterruptType;
693     UINT8                   GpeNumber;          /* GPE assigned */
694     UINT8                   Reserved2;
695     UINT8                   PciDeviceFlag;
696     UINT32                  Interrupt;
697     ACPI_GENERIC_ADDRESS    IpmiRegister;
698     UINT8                   PciSegment;
699     UINT8                   PciBus;
700     UINT8                   PciDevice;
701     UINT8                   PciFunction;
702 
703 } ACPI_TABLE_SPMI;
704 
705 
706 /*******************************************************************************
707  *
708  * SRAT - System Resource Affinity Table
709  *
710  ******************************************************************************/
711 
712 typedef struct system_resource_affinity
713 {
714     ACPI_TABLE_HEADER_DEF
715     UINT32                  Reserved1;          /* Must be value '1' */
716     UINT64                  Reserved2;          /* Reserved, must be zero */
717 
718 } SYSTEM_RESOURCE_AFFINITY;
719 
720 
721 /* SRAT common sub-table header */
722 
723 #define SRAT_SUBTABLE_HEADER \
724     UINT8                   Type; \
725     UINT8                   Length;
726 
727 /* Values for Type above */
728 
729 #define SRAT_CPU_AFFINITY       0
730 #define SRAT_MEMORY_AFFINITY    1
731 #define SRAT_RESERVED           2
732 
733 
734 /* SRAT sub-tables */
735 
736 typedef struct static_resource_alloc
737 {
738     SRAT_SUBTABLE_HEADER
739     UINT8                   ProximityDomainLo;
740     UINT8                   ApicId;
741 
742     /* Flags (32 bits) */
743 
744     UINT8                   Enabled         :1; /* 00:    Use affinity structure */
745     UINT8                                   :7; /* 01-07: Reserved, must be zero */
746     UINT8                   Reserved3[3];       /* 08-31: Reserved, must be zero */
747 
748     UINT8                   LocalSapicEid;
749     UINT8                   ProximityDomainHi[3];
750     UINT32                  Reserved4;          /* Reserved, must be zero */
751 
752 } STATIC_RESOURCE_ALLOC;
753 
754 typedef struct memory_affinity
755 {
756     SRAT_SUBTABLE_HEADER
757     UINT32                  ProximityDomain;
758     UINT16                  Reserved3;
759     UINT64                  BaseAddress;
760     UINT64                  AddressLength;
761     UINT32                  Reserved4;
762 
763     /* Flags (32 bits) */
764 
765     UINT8                   Enabled         :1; /* 00:    Use affinity structure */
766     UINT8                   HotPluggable    :1; /* 01:    Memory region is hot pluggable */
767     UINT8                   NonVolatile     :1; /* 02:    Memory is non-volatile */
768     UINT8                                   :5; /* 03-07: Reserved, must be zero */
769     UINT8                   Reserved5[3];       /* 08-31: Reserved, must be zero */
770 
771     UINT64                  Reserved6;          /* Reserved, must be zero */
772 
773 } MEMORY_AFFINITY;
774 
775 
776 /*******************************************************************************
777  *
778  * TCPA - Trusted Computing Platform Alliance table
779  *
780  ******************************************************************************/
781 
782 typedef struct acpi_table_tcpa
783 {
784     ACPI_TABLE_HEADER_DEF
785     UINT16                  Reserved;
786     UINT32                  MaxLogLength;       /* Maximum length for the event log area */
787     UINT64                  LogAddress;         /* Address of the event log area */
788 
789 } ACPI_TABLE_TCPA;
790 
791 
792 /*******************************************************************************
793  *
794  * WDRT - Watchdog Resource Table
795  *
796  ******************************************************************************/
797 
798 typedef struct acpi_table_wdrt
799 {
800     ACPI_TABLE_HEADER_DEF
801     UINT32                  HeaderLength;       /* Watchdog Header Length */
802     UINT8                   PciSegment;         /* PCI Segment number */
803     UINT8                   PciBus;             /* PCI Bus number */
804     UINT8                   PciDevice;          /* PCI Device number */
805     UINT8                   PciFunction;        /* PCI Function number */
806     UINT32                  TimerPeriod;        /* Period of one timer count (msec) */
807     UINT32                  MaxCount;           /* Maximum counter value supported */
808     UINT32                  MinCount;           /* Minimum counter value */
809     UINT8                   Flags;
810     UINT8                   Reserved[3];
811     UINT32                  Entries;            /* Number of watchdog entries that follow */
812 
813 } ACPI_TABLE_WDRT;
814 
815 #if 0 /* Flags, will be converted to macros */
816     UINT8                   Enabled         :1; /* 00:    Timer enabled */
817     UINT8                                   :6; /* 01-06: Reserved */
818     UINT8                   SleepStop       :1; /* 07:    Timer stopped in sleep state */
819 #endif
820 
821 
822 /* Macros used to generate offsets to specific table fields */
823 
824 #define ACPI_ASF0_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_INFO,f)
825 #define ACPI_ASF1_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_ALERT,f)
826 #define ACPI_ASF2_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_REMOTE,f)
827 #define ACPI_ASF3_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_RMCP,f)
828 #define ACPI_ASF4_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_ADDRESS,f)
829 #define ACPI_BOOT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_BOOT,f)
830 #define ACPI_CPEP_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_CPEP,f)
831 #define ACPI_CPEP0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_CPEP_POLLING,f)
832 #define ACPI_DBGP_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_DBGP,f)
833 #define ACPI_ECDT_OFFSET(f)             (UINT8) ACPI_OFFSET (EC_BOOT_RESOURCES,f)
834 #define ACPI_HPET_OFFSET(f)             (UINT8) ACPI_OFFSET (HPET_TABLE,f)
835 #define ACPI_MADT_OFFSET(f)             (UINT8) ACPI_OFFSET (MULTIPLE_APIC_TABLE,f)
836 #define ACPI_MADT0_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_PROCESSOR_APIC,f)
837 #define ACPI_MADT1_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_IO_APIC,f)
838 #define ACPI_MADT2_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_INTERRUPT_OVERRIDE,f)
839 #define ACPI_MADT3_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_NMI_SOURCE,f)
840 #define ACPI_MADT4_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_LOCAL_APIC_NMI,f)
841 #define ACPI_MADT5_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_ADDRESS_OVERRIDE,f)
842 #define ACPI_MADT6_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_IO_SAPIC,f)
843 #define ACPI_MADT7_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_LOCAL_SAPIC,f)
844 #define ACPI_MADT8_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_INTERRUPT_SOURCE,f)
845 #define ACPI_MADTH_OFFSET(f)            (UINT8) ACPI_OFFSET (APIC_HEADER,f)
846 #define ACPI_MCFG_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_MCFG,f)
847 #define ACPI_MCFG0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f)
848 #define ACPI_SBST_OFFSET(f)             (UINT8) ACPI_OFFSET (SMART_BATTERY_TABLE,f)
849 #define ACPI_SLIT_OFFSET(f)             (UINT8) ACPI_OFFSET (SYSTEM_LOCALITY_INFO,f)
850 #define ACPI_SPCR_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_SPCR,f)
851 #define ACPI_SPMI_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_SPMI,f)
852 #define ACPI_SRAT_OFFSET(f)             (UINT8) ACPI_OFFSET (SYSTEM_RESOURCE_AFFINITY,f)
853 #define ACPI_SRAT0_OFFSET(f)            (UINT8) ACPI_OFFSET (STATIC_RESOURCE_ALLOC,f)
854 #define ACPI_SRAT1_OFFSET(f)            (UINT8) ACPI_OFFSET (MEMORY_AFFINITY,f)
855 #define ACPI_TCPA_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_TCPA,f)
856 #define ACPI_WDRT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_WDRT,f)
857 
858 
859 #define ACPI_HPET_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (HPET_TABLE,f,o)
860 #define ACPI_SRAT0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (STATIC_RESOURCE_ALLOC,f,o)
861 #define ACPI_SRAT1_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (MEMORY_AFFINITY,f,o)
862 #define ACPI_MADT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (MULTIPLE_APIC_TABLE,f,o)
863 #define ACPI_MADT0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (MADT_PROCESSOR_APIC,f,o)
864 #define ACPI_MADT2_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (MADT_INTERRUPT_OVERRIDE,f,o)
865 #define ACPI_MADT3_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (MADT_NMI_SOURCE,f,o)
866 #define ACPI_MADT4_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (MADT_LOCAL_APIC_NMI,f,o)
867 #define ACPI_MADT7_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (MADT_LOCAL_SAPIC,f,o)
868 #define ACPI_MADT8_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (MADT_INTERRUPT_SOURCE,f,o)
869 
870 
871 /* Reset to default packing */
872 
873 #pragma pack()
874 
875 #endif /* __ACTBL1_H__ */
876 
877 
878