xref: /xnu-11215.41.3/EXTERNAL_HEADERS/acpi/Acpi_v1.h (revision 33de042d024d46de5ff4e89f2471de6608e37fa4)
1 /******************************************************************************
2  *
3  * Name: actbl1.h - Additional ACPI table definitions
4  *       $Revision: 1.6 $
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 	ACPI_TABLE_HEADER_DEF
179 } ACPI_TABLE_ASF;
180 
181 #define ACPI_ASF_HEADER_DEF \
182 UINT8                   Type; \
183 UINT8                   Reserved; \
184 UINT16                  Length;
185 
186 typedef struct acpi_asf_header {
187 	ACPI_ASF_HEADER_DEF
188 } ACPI_ASF_HEADER;
189 
190 
191 /* Values for Type field */
192 
193 #define ASF_INFO                0
194 #define ASF_ALERT               1
195 #define ASF_CONTROL             2
196 #define ASF_BOOT                3
197 #define ASF_ADDRESS             4
198 #define ASF_RESERVED            5
199 
200 /*
201  * ASF subtables
202  */
203 
204 /* 0: ASF Information */
205 
206 typedef struct acpi_asf_info {
207 	ACPI_ASF_HEADER_DEF
208 	UINT8                   MinResetValue;
209 	UINT8                   MinPollInterval;
210 	UINT16                  SystemId;
211 	UINT32                  MfgId;
212 	UINT8                   Flags;
213 	UINT8                   Reserved2[3];
214 } ACPI_ASF_INFO;
215 
216 /* 1: ASF Alerts */
217 
218 typedef struct acpi_asf_alert {
219 	ACPI_ASF_HEADER_DEF
220 	UINT8                   AssertMask;
221 	UINT8                   DeassertMask;
222 	UINT8                   Alerts;
223 	UINT8                   DataLength;
224 	UINT8                   Array[1];
225 } ACPI_ASF_ALERT;
226 
227 /* 2: ASF Remote Control */
228 
229 typedef struct acpi_asf_remote {
230 	ACPI_ASF_HEADER_DEF
231 	UINT8                   Controls;
232 	UINT8                   DataLength;
233 	UINT16                  Reserved2;
234 	UINT8                   Array[1];
235 } ACPI_ASF_REMOTE;
236 
237 /* 3: ASF RMCP Boot Options */
238 
239 typedef struct acpi_asf_rmcp {
240 	ACPI_ASF_HEADER_DEF
241 	UINT8                   Capabilities[7];
242 	UINT8                   CompletionCode;
243 	UINT32                  EnterpriseId;
244 	UINT8                   Command;
245 	UINT16                  Parameter;
246 	UINT16                  BootOptions;
247 	UINT16                  OemParameters;
248 } ACPI_ASF_RMCP;
249 
250 /* 4: ASF Address */
251 
252 typedef struct acpi_asf_address {
253 	ACPI_ASF_HEADER_DEF
254 	UINT8                   EpromAddress;
255 	UINT8                   Devices;
256 	UINT8                   SmbusAddresses[1];
257 } ACPI_ASF_ADDRESS;
258 
259 
260 /*******************************************************************************
261  *
262  * BOOT - Simple Boot Flag Table
263  *
264  ******************************************************************************/
265 
266 typedef struct acpi_table_boot {
267 	ACPI_TABLE_HEADER_DEF
268 	UINT8                   CmosIndex;      /* Index in CMOS RAM for the boot register */
269 	UINT8                   Reserved[3];
270 } ACPI_TABLE_BOOT;
271 
272 
273 /*******************************************************************************
274  *
275  * CPEP - Corrected Platform Error Polling table
276  *
277  ******************************************************************************/
278 
279 typedef struct acpi_table_cpep {
280 	ACPI_TABLE_HEADER_DEF
281 	UINT64                  Reserved;
282 } ACPI_TABLE_CPEP;
283 
284 /* Subtable */
285 
286 typedef struct acpi_cpep_polling {
287 	UINT8                   Type;
288 	UINT8                   Length;
289 	UINT8                   ProcessorId;    /* Processor ID */
290 	UINT8                   ProcessorEid;   /* Processor EID */
291 	UINT32                  PollingInterval;/* Polling interval (msec) */
292 } ACPI_CPEP_POLLING;
293 
294 
295 /*******************************************************************************
296  *
297  * DBGP - Debug Port table
298  *
299  ******************************************************************************/
300 
301 typedef struct acpi_table_dbgp {
302 	ACPI_TABLE_HEADER_DEF
303 	UINT8                   InterfaceType;  /* 0=full 16550, 1=subset of 16550 */
304 	UINT8                   Reserved[3];
305 	ACPI_GENERIC_ADDRESS    DebugPort;
306 } ACPI_TABLE_DBGP;
307 
308 
309 /*******************************************************************************
310  *
311  * ECDT - Embedded Controller Boot Resources Table
312  *
313  ******************************************************************************/
314 
315 typedef struct ec_boot_resources {
316 	ACPI_TABLE_HEADER_DEF
317 	ACPI_GENERIC_ADDRESS    EcControl;      /* Address of EC command/status register */
318 	ACPI_GENERIC_ADDRESS    EcData;         /* Address of EC data register */
319 	UINT32                  Uid;            /* Unique ID - must be same as the EC _UID method */
320 	UINT8                   GpeBit;         /* The GPE for the EC */
321 	UINT8                   EcId[1];        /* Full namepath of the EC in the ACPI namespace */
322 } EC_BOOT_RESOURCES;
323 
324 
325 /*******************************************************************************
326  *
327  * HPET - High Precision Event Timer table
328  *
329  ******************************************************************************/
330 
331 typedef struct acpi_hpet_table {
332 	ACPI_TABLE_HEADER_DEF
333 	UINT32                  HardwareId;     /* Hardware ID of event timer block */
334 	ACPI_GENERIC_ADDRESS    BaseAddress;    /* Address of event timer block */
335 	UINT8                   HpetNumber;     /* HPET sequence number */
336 	UINT16                  ClockTick;      /* Main counter min tick, periodic mode */
337 	UINT8                   Attributes;
338 } HPET_TABLE;
339 
340 #if 0 /* HPET flags to be converted to macros */
341 struct /* Flags (8 bits) */
342 {
343 	UINT8                   PageProtect     :1;/* 00:    No page protection */
344 	UINT8                   PageProtect4    :1;/* 01:    4KB page protected */
345 	UINT8                   PageProtect64   :1;/* 02:    64KB page protected */
346 	UINT8                                   :5;/* 03-07: Reserved, must be zero */
347 } Flags;
348 #endif
349 
350 
351 /*******************************************************************************
352  *
353  * MADT - Multiple APIC Description Table
354  *
355  ******************************************************************************/
356 
357 typedef struct multiple_apic_table {
358 	ACPI_TABLE_HEADER_DEF
359 	UINT32                  LocalApicAddress;/* Physical address of local APIC */
360 
361 	/* Flags (32 bits) */
362 
363 	UINT8                   PCATCompat      : 1;/* 00:    System also has dual 8259s */
364 	UINT8                                   : 7;/* 01-07: Reserved, must be zero */
365 	UINT8                   Reserved1[3];       /* 08-31: Reserved, must be zero */
366 } MULTIPLE_APIC_TABLE;
367 
368 /* Values for MADT PCATCompat */
369 
370 #define DUAL_PIC                0
371 #define MULTIPLE_APIC           1
372 
373 
374 /* Common MADT Sub-table header */
375 
376 #define APIC_HEADER_DEF \
377 UINT8                   Type; \
378 UINT8                   Length;
379 
380 typedef struct apic_header {
381 	APIC_HEADER_DEF
382 } APIC_HEADER;
383 
384 /* Values for Type in APIC_HEADER */
385 
386 #define APIC_PROCESSOR          0
387 #define APIC_IO                 1
388 #define APIC_XRUPT_OVERRIDE     2
389 #define APIC_NMI                3
390 #define APIC_LOCAL_NMI          4
391 #define APIC_ADDRESS_OVERRIDE   5
392 #define APIC_IO_SAPIC           6
393 #define APIC_LOCAL_SAPIC        7
394 #define APIC_XRUPT_SOURCE       8
395 #define APIC_RESERVED           9           /* 9 and greater are reserved */
396 
397 
398 /* Flag definitions for MADT sub-tables */
399 
400 #define ACPI_MADT_IFLAGS /* INTI flags (16 bits) */ \
401 UINT8                   Polarity        : 2;    /* 00-01: Polarity of APIC I/O input signals */ \
402 UINT8                   TriggerMode     : 2;    /* 02-03: Trigger mode of APIC input signals */ \
403 UINT8                                   : 4;    /* 04-07: Reserved, must be zero */ \
404 UINT8                   Reserved1;              /* 08-15: Reserved, must be zero */
405 
406 #define ACPI_MADT_LFLAGS /* Local Sapic flags (32 bits) */ \
407 UINT8                   ProcessorEnabled: 1;    /* 00:    Processor is usable if set */ \
408 UINT8                                   : 7;    /* 01-07: Reserved, must be zero */ \
409 UINT8                   Reserved2[3];           /* 08-31: Reserved, must be zero */
410 
411 
412 /* Values for MPS INTI flags */
413 
414 #define POLARITY_CONFORMS       0
415 #define POLARITY_ACTIVE_HIGH    1
416 #define POLARITY_RESERVED       2
417 #define POLARITY_ACTIVE_LOW     3
418 
419 #define TRIGGER_CONFORMS        0
420 #define TRIGGER_EDGE            1
421 #define TRIGGER_RESERVED        2
422 #define TRIGGER_LEVEL           3
423 
424 
425 /*
426  * MADT Sub-tables, correspond to Type in APIC_HEADER
427  */
428 
429 /* 0: processor APIC */
430 
431 typedef struct madt_processor_apic {
432 	APIC_HEADER_DEF
433 	UINT8                   ProcessorId;    /* ACPI processor id */
434 	UINT8                   LocalApicId;    /* Processor's local APIC id */
435 	ACPI_MADT_LFLAGS
436 } MADT_PROCESSOR_APIC;
437 
438 /* 1: IO APIC */
439 
440 typedef struct madt_io_apic {
441 	APIC_HEADER_DEF
442 	UINT8                   IoApicId;       /* I/O APIC ID */
443 	UINT8                   Reserved;       /* Reserved - must be zero */
444 	UINT32                  Address;        /* APIC physical address */
445 	UINT32                  Interrupt;      /* Global system interrupt where INTI lines start */
446 } MADT_IO_APIC;
447 
448 /* 2: Interrupt Override */
449 
450 typedef struct madt_interrupt_override {
451 	APIC_HEADER_DEF
452 	UINT8                   Bus;            /* 0 - ISA */
453 	UINT8                   Source;         /* Interrupt source (IRQ) */
454 	UINT32                  Interrupt;      /* Global system interrupt */
455 	ACPI_MADT_IFLAGS
456 } MADT_INTERRUPT_OVERRIDE;
457 
458 /* 3: NMI Sources */
459 
460 typedef struct madt_nmi_source {
461 	APIC_HEADER_DEF
462 	ACPI_MADT_IFLAGS
463 	UINT32                  Interrupt;      /* Global system interrupt */
464 } MADT_NMI_SOURCE;
465 
466 /* 4: Local APIC NMI */
467 
468 typedef struct madt_local_apic_nmi {
469 	APIC_HEADER_DEF
470 	UINT8                   ProcessorId;    /* ACPI processor id */
471 	ACPI_MADT_IFLAGS
472 	UINT8                   Lint;               /* LINTn to which NMI is connected */
473 } MADT_LOCAL_APIC_NMI;
474 
475 /* 5: Address Override */
476 
477 typedef struct madt_address_override {
478 	APIC_HEADER_DEF
479 	UINT16                  Reserved;       /* Reserved, must be zero */
480 	UINT64                  Address;        /* APIC physical address */
481 } MADT_ADDRESS_OVERRIDE;
482 
483 /* 6: I/O Sapic */
484 
485 typedef struct madt_io_sapic {
486 	APIC_HEADER_DEF
487 	UINT8                   IoSapicId;      /* I/O SAPIC ID */
488 	UINT8                   Reserved;       /* Reserved, must be zero */
489 	UINT32                  InterruptBase;  /* Glocal interrupt for SAPIC start */
490 	UINT64                  Address;        /* SAPIC physical address */
491 } MADT_IO_SAPIC;
492 
493 /* 7: Local Sapic */
494 
495 typedef struct madt_local_sapic {
496 	APIC_HEADER_DEF
497 	UINT8                   ProcessorId;    /* ACPI processor id */
498 	UINT8                   LocalSapicId;   /* SAPIC ID */
499 	UINT8                   LocalSapicEid;  /* SAPIC EID */
500 	UINT8                   Reserved[3];    /* Reserved, must be zero */
501 	ACPI_MADT_LFLAGS
502 	UINT32                  ProcessorUID;           /* Numeric UID - ACPI 3.0 */
503 	char                    ProcessorUIDString[1];/* String UID  - ACPI 3.0 */
504 } MADT_LOCAL_SAPIC;
505 
506 /* 8: Platform Interrupt Source */
507 
508 typedef struct madt_interrupt_source {
509 	APIC_HEADER_DEF
510 	ACPI_MADT_IFLAGS
511 	UINT8                   InterruptType;  /* 1=PMI, 2=INIT, 3=corrected */
512 	UINT8                   ProcessorId;    /* Processor ID */
513 	UINT8                   ProcessorEid;   /* Processor EID */
514 	UINT8                   IoSapicVector;  /* Vector value for PMI interrupts */
515 	UINT32                  Interrupt;      /* Global system interrupt */
516 	UINT32                  Flags;          /* Interrupt Source Flags */
517 } MADT_INTERRUPT_SOURCE;
518 
519 
520 /*******************************************************************************
521  *
522  * MCFG - PCI Memory Mapped Configuration table and sub-table
523  *
524  ******************************************************************************/
525 
526 typedef struct acpi_table_mcfg {
527 	ACPI_TABLE_HEADER_DEF
528 	UINT8                   Reserved[8];
529 } ACPI_TABLE_MCFG;
530 
531 typedef struct acpi_mcfg_allocation {
532 	UINT64                  BaseAddress;    /* Base address, processor-relative */
533 	UINT16                  PciSegment;     /* PCI segment group number */
534 	UINT8                   StartBusNumber; /* Starting PCI Bus number */
535 	UINT8                   EndBusNumber;   /* Final PCI Bus number */
536 	UINT32                  Reserved;
537 } ACPI_MCFG_ALLOCATION;
538 
539 
540 /*******************************************************************************
541  *
542  * SBST - Smart Battery Specification Table
543  *
544  ******************************************************************************/
545 
546 typedef struct smart_battery_table {
547 	ACPI_TABLE_HEADER_DEF
548 	UINT32                  WarningLevel;
549 	UINT32                  LowLevel;
550 	UINT32                  CriticalLevel;
551 } SMART_BATTERY_TABLE;
552 
553 
554 /*******************************************************************************
555  *
556  * SLIT - System Locality Distance Information Table
557  *
558  ******************************************************************************/
559 
560 typedef struct system_locality_info {
561 	ACPI_TABLE_HEADER_DEF
562 	UINT64                  LocalityCount;
563 	UINT8                   Entry[1][1];
564 } SYSTEM_LOCALITY_INFO;
565 
566 
567 /*******************************************************************************
568  *
569  * SPCR - Serial Port Console Redirection table
570  *
571  ******************************************************************************/
572 
573 typedef struct acpi_table_spcr {
574 	ACPI_TABLE_HEADER_DEF
575 	UINT8                   InterfaceType;  /* 0=full 16550, 1=subset of 16550 */
576 	UINT8                   Reserved[3];
577 	ACPI_GENERIC_ADDRESS    SerialPort;
578 	UINT8                   InterruptType;
579 	UINT8                   PcInterrupt;
580 	UINT32                  Interrupt;
581 	UINT8                   BaudRate;
582 	UINT8                   Parity;
583 	UINT8                   StopBits;
584 	UINT8                   FlowControl;
585 	UINT8                   TerminalType;
586 	UINT8                   Reserved2;
587 	UINT16                  PciDeviceId;
588 	UINT16                  PciVendorId;
589 	UINT8                   PciBus;
590 	UINT8                   PciDevice;
591 	UINT8                   PciFunction;
592 	UINT32                  PciFlags;
593 	UINT8                   PciSegment;
594 	UINT32                  Reserved3;
595 } ACPI_TABLE_SPCR;
596 
597 
598 /*******************************************************************************
599  *
600  * SPMI - Server Platform Management Interface table
601  *
602  ******************************************************************************/
603 
604 typedef struct acpi_table_spmi {
605 	ACPI_TABLE_HEADER_DEF
606 	UINT8                   Reserved;
607 	UINT8                   InterfaceType;
608 	UINT16                  SpecRevision;   /* Version of IPMI */
609 	UINT8                   InterruptType;
610 	UINT8                   GpeNumber;      /* GPE assigned */
611 	UINT8                   Reserved2;
612 	UINT8                   PciDeviceFlag;
613 	UINT32                  Interrupt;
614 	ACPI_GENERIC_ADDRESS    IpmiRegister;
615 	UINT8                   PciSegment;
616 	UINT8                   PciBus;
617 	UINT8                   PciDevice;
618 	UINT8                   PciFunction;
619 } ACPI_TABLE_SPMI;
620 
621 
622 /*******************************************************************************
623  *
624  * SRAT - System Resource Affinity Table
625  *
626  ******************************************************************************/
627 
628 typedef struct system_resource_affinity {
629 	ACPI_TABLE_HEADER_DEF
630 	UINT32                  Reserved1;      /* Must be value '1' */
631 	UINT64                  Reserved2;      /* Reserved, must be zero */
632 } SYSTEM_RESOURCE_AFFINITY;
633 
634 
635 /* SRAT common sub-table header */
636 
637 #define SRAT_SUBTABLE_HEADER \
638 UINT8                   Type; \
639 UINT8                   Length;
640 
641 /* Values for Type above */
642 
643 #define SRAT_CPU_AFFINITY       0
644 #define SRAT_MEMORY_AFFINITY    1
645 #define SRAT_RESERVED           2
646 
647 
648 /* SRAT sub-tables */
649 
650 typedef struct static_resource_alloc {
651 	SRAT_SUBTABLE_HEADER
652 	UINT8                   ProximityDomainLo;
653 	UINT8                   ApicId;
654 
655 	/* Flags (32 bits) */
656 
657 	UINT8                   Enabled         :1;/* 00:    Use affinity structure */
658 	UINT8                                   :7;/* 01-07: Reserved, must be zero */
659 	UINT8                   Reserved3[3];   /* 08-31: Reserved, must be zero */
660 
661 	UINT8                   LocalSapicEid;
662 	UINT8                   ProximityDomainHi[3];
663 	UINT32                  Reserved4;      /* Reserved, must be zero */
664 } STATIC_RESOURCE_ALLOC;
665 
666 typedef struct memory_affinity {
667 	SRAT_SUBTABLE_HEADER
668 	UINT32                  ProximityDomain;
669 	UINT16                  Reserved3;
670 	UINT64                  BaseAddress;
671 	UINT64                  AddressLength;
672 	UINT32                  Reserved4;
673 
674 	/* Flags (32 bits) */
675 
676 	UINT8                   Enabled         :1;/* 00:    Use affinity structure */
677 	UINT8                   HotPluggable    :1;/* 01:    Memory region is hot pluggable */
678 	UINT8                   NonVolatile     :1;/* 02:    Memory is non-volatile */
679 	UINT8                                   :5;/* 03-07: Reserved, must be zero */
680 	UINT8                   Reserved5[3];   /* 08-31: Reserved, must be zero */
681 
682 	UINT64                  Reserved6;      /* Reserved, must be zero */
683 } MEMORY_AFFINITY;
684 
685 
686 /*******************************************************************************
687  *
688  * TCPA - Trusted Computing Platform Alliance table
689  *
690  ******************************************************************************/
691 
692 typedef struct acpi_table_tcpa {
693 	ACPI_TABLE_HEADER_DEF
694 	UINT16                  Reserved;
695 	UINT32                  MaxLogLength;   /* Maximum length for the event log area */
696 	UINT64                  LogAddress;     /* Address of the event log area */
697 } ACPI_TABLE_TCPA;
698 
699 
700 /*******************************************************************************
701  *
702  * WDRT - Watchdog Resource Table
703  *
704  ******************************************************************************/
705 
706 typedef struct acpi_table_wdrt {
707 	ACPI_TABLE_HEADER_DEF
708 	UINT32                  HeaderLength;   /* Watchdog Header Length */
709 	UINT8                   PciSegment;     /* PCI Segment number */
710 	UINT8                   PciBus;         /* PCI Bus number */
711 	UINT8                   PciDevice;      /* PCI Device number */
712 	UINT8                   PciFunction;    /* PCI Function number */
713 	UINT32                  TimerPeriod;    /* Period of one timer count (msec) */
714 	UINT32                  MaxCount;       /* Maximum counter value supported */
715 	UINT32                  MinCount;       /* Minimum counter value */
716 	UINT8                   Flags;
717 	UINT8                   Reserved[3];
718 	UINT32                  Entries;        /* Number of watchdog entries that follow */
719 } ACPI_TABLE_WDRT;
720 
721 #if 0 /* Flags, will be converted to macros */
722 UINT8                   Enabled         :1; /* 00:    Timer enabled */
723 UINT8                                   :6; /* 01-06: Reserved */
724 UINT8                   SleepStop       :1; /* 07:    Timer stopped in sleep state */
725 #endif
726 
727 
728 /* Macros used to generate offsets to specific table fields */
729 
730 #define ACPI_ASF0_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_INFO,f)
731 #define ACPI_ASF1_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_ALERT,f)
732 #define ACPI_ASF2_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_REMOTE,f)
733 #define ACPI_ASF3_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_RMCP,f)
734 #define ACPI_ASF4_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_ASF_ADDRESS,f)
735 #define ACPI_BOOT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_BOOT,f)
736 #define ACPI_CPEP_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_CPEP,f)
737 #define ACPI_CPEP0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_CPEP_POLLING,f)
738 #define ACPI_DBGP_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_DBGP,f)
739 #define ACPI_ECDT_OFFSET(f)             (UINT8) ACPI_OFFSET (EC_BOOT_RESOURCES,f)
740 #define ACPI_HPET_OFFSET(f)             (UINT8) ACPI_OFFSET (HPET_TABLE,f)
741 #define ACPI_MADT_OFFSET(f)             (UINT8) ACPI_OFFSET (MULTIPLE_APIC_TABLE,f)
742 #define ACPI_MADT0_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_PROCESSOR_APIC,f)
743 #define ACPI_MADT1_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_IO_APIC,f)
744 #define ACPI_MADT2_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_INTERRUPT_OVERRIDE,f)
745 #define ACPI_MADT3_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_NMI_SOURCE,f)
746 #define ACPI_MADT4_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_LOCAL_APIC_NMI,f)
747 #define ACPI_MADT5_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_ADDRESS_OVERRIDE,f)
748 #define ACPI_MADT6_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_IO_SAPIC,f)
749 #define ACPI_MADT7_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_LOCAL_SAPIC,f)
750 #define ACPI_MADT8_OFFSET(f)            (UINT8) ACPI_OFFSET (MADT_INTERRUPT_SOURCE,f)
751 #define ACPI_MADTH_OFFSET(f)            (UINT8) ACPI_OFFSET (APIC_HEADER,f)
752 #define ACPI_MCFG_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_MCFG,f)
753 #define ACPI_MCFG0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f)
754 #define ACPI_SBST_OFFSET(f)             (UINT8) ACPI_OFFSET (SMART_BATTERY_TABLE,f)
755 #define ACPI_SLIT_OFFSET(f)             (UINT8) ACPI_OFFSET (SYSTEM_LOCALITY_INFO,f)
756 #define ACPI_SPCR_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_SPCR,f)
757 #define ACPI_SPMI_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_SPMI,f)
758 #define ACPI_SRAT_OFFSET(f)             (UINT8) ACPI_OFFSET (SYSTEM_RESOURCE_AFFINITY,f)
759 #define ACPI_SRAT0_OFFSET(f)            (UINT8) ACPI_OFFSET (STATIC_RESOURCE_ALLOC,f)
760 #define ACPI_SRAT1_OFFSET(f)            (UINT8) ACPI_OFFSET (MEMORY_AFFINITY,f)
761 #define ACPI_TCPA_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_TCPA,f)
762 #define ACPI_WDRT_OFFSET(f)             (UINT8) ACPI_OFFSET (ACPI_TABLE_WDRT,f)
763 
764 
765 #define ACPI_HPET_FLAG_OFFSET(f, o)      ACPI_FLAG_OFFSET (HPET_TABLE,f,o)
766 #define ACPI_SRAT0_FLAG_OFFSET(f, o)     ACPI_FLAG_OFFSET (STATIC_RESOURCE_ALLOC,f,o)
767 #define ACPI_SRAT1_FLAG_OFFSET(f, o)     ACPI_FLAG_OFFSET (MEMORY_AFFINITY,f,o)
768 #define ACPI_MADT_FLAG_OFFSET(f, o)      ACPI_FLAG_OFFSET (MULTIPLE_APIC_TABLE,f,o)
769 #define ACPI_MADT0_FLAG_OFFSET(f, o)     ACPI_FLAG_OFFSET (MADT_PROCESSOR_APIC,f,o)
770 #define ACPI_MADT2_FLAG_OFFSET(f, o)     ACPI_FLAG_OFFSET (MADT_INTERRUPT_OVERRIDE,f,o)
771 #define ACPI_MADT3_FLAG_OFFSET(f, o)     ACPI_FLAG_OFFSET (MADT_NMI_SOURCE,f,o)
772 #define ACPI_MADT4_FLAG_OFFSET(f, o)     ACPI_FLAG_OFFSET (MADT_LOCAL_APIC_NMI,f,o)
773 #define ACPI_MADT7_FLAG_OFFSET(f, o)     ACPI_FLAG_OFFSET (MADT_LOCAL_SAPIC,f,o)
774 #define ACPI_MADT8_FLAG_OFFSET(f, o)     ACPI_FLAG_OFFSET (MADT_INTERRUPT_SOURCE,f,o)
775 
776 
777 /* Reset to default packing */
778 
779 #pragma pack()
780 
781 #endif /* __ACTBL1_H__ */
782