1 /** @file
2   ACPI 3.0 definitions from the ACPI Specification Revision 3.0b October 10, 2006
3 
4   Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
5   This program and the accompanying materials
6   are licensed and made available under the terms and conditions of the BSD License
7   which accompanies this distribution.  The full text of the license may be found at
8   http://opensource.org/licenses/bsd-license.php
9 
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 **/
13 
14 #ifndef _ACPI_3_0_H_
15 #define _ACPI_3_0_H_
16 
17 FILE_LICENCE ( BSD3 );
18 
19 #include <ipxe/efi/IndustryStandard/Acpi20.h>
20 
21 //
22 // Define for Desriptor
23 //
24 #define ACPI_LARGE_EXTENDED_ADDRESS_SPACE_DESCRIPTOR_NAME    0x0B
25 
26 #define ACPI_EXTENDED_ADDRESS_SPACE_DESCRIPTOR    0x8B
27 
28 //
29 // Ensure proper structure formats
30 //
31 #pragma pack(1)
32 
33 ///
34 /// Extended Address Space Descriptor
35 ///
36 typedef PACKED struct {
37   ACPI_LARGE_RESOURCE_HEADER    Header;
38   UINT8                         ResType;
39   UINT8                         GenFlag;
40   UINT8                         SpecificFlag;
41   UINT8                         RevisionId;
42   UINT8                         Reserved;
43   UINT64                        AddrSpaceGranularity;
44   UINT64                        AddrRangeMin;
45   UINT64                        AddrRangeMax;
46   UINT64                        AddrTranslationOffset;
47   UINT64                        AddrLen;
48   UINT64                        TypeSpecificAttribute;
49 } EFI_ACPI_EXTENDED_ADDRESS_SPACE_DESCRIPTOR;
50 
51 #pragma pack()
52 
53 //
54 // Memory Type Specific Flags
55 //
56 #define EFI_ACPI_MEMORY_TYPE_SPECIFIC_ATTRIBUTES_UC  0x0000000000000001
57 #define EFI_ACPI_MEMORY_TYPE_SPECIFIC_ATTRIBUTES_WC  0x0000000000000002
58 #define EFI_ACPI_MEMORY_TYPE_SPECIFIC_ATTRIBUTES_WT  0x0000000000000004
59 #define EFI_ACPI_MEMORY_TYPE_SPECIFIC_ATTRIBUTES_WB  0x0000000000000008
60 #define EFI_ACPI_MEMORY_TYPE_SPECIFIC_ATTRIBUTES_UCE 0x0000000000000010
61 #define EFI_ACPI_MEMORY_TYPE_SPECIFIC_ATTRIBUTES_NV  0x0000000000008000
62 
63 //
64 // Ensure proper structure formats
65 //
66 #pragma pack(1)
67 
68 ///
69 /// ACPI 3.0 Generic Address Space definition
70 ///
71 typedef struct {
72   UINT8   AddressSpaceId;
73   UINT8   RegisterBitWidth;
74   UINT8   RegisterBitOffset;
75   UINT8   AccessSize;
76   UINT64  Address;
77 } EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE;
78 
79 //
80 // Generic Address Space Address IDs
81 //
82 #define EFI_ACPI_3_0_SYSTEM_MEMORY              0
83 #define EFI_ACPI_3_0_SYSTEM_IO                  1
84 #define EFI_ACPI_3_0_PCI_CONFIGURATION_SPACE    2
85 #define EFI_ACPI_3_0_EMBEDDED_CONTROLLER        3
86 #define EFI_ACPI_3_0_SMBUS                      4
87 #define EFI_ACPI_3_0_FUNCTIONAL_FIXED_HARDWARE  0x7F
88 
89 //
90 // Generic Address Space Access Sizes
91 //
92 #define EFI_ACPI_3_0_UNDEFINED  0
93 #define EFI_ACPI_3_0_BYTE       1
94 #define EFI_ACPI_3_0_WORD       2
95 #define EFI_ACPI_3_0_DWORD      3
96 #define EFI_ACPI_3_0_QWORD      4
97 
98 //
99 // ACPI 3.0 table structures
100 //
101 
102 ///
103 /// Root System Description Pointer Structure
104 ///
105 typedef struct {
106   UINT64  Signature;
107   UINT8   Checksum;
108   UINT8   OemId[6];
109   UINT8   Revision;
110   UINT32  RsdtAddress;
111   UINT32  Length;
112   UINT64  XsdtAddress;
113   UINT8   ExtendedChecksum;
114   UINT8   Reserved[3];
115 } EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER;
116 
117 ///
118 /// RSD_PTR Revision (as defined in ACPI 3.0b spec.)
119 ///
120 #define EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION 0x02  ///< ACPISpec (Revision 3.0b) says current value is 2
121 
122 ///
123 /// Common table header, this prefaces all ACPI tables, including FACS, but
124 /// excluding the RSD PTR structure
125 ///
126 typedef struct {
127   UINT32  Signature;
128   UINT32  Length;
129 } EFI_ACPI_3_0_COMMON_HEADER;
130 
131 //
132 // Root System Description Table
133 // No definition needed as it is a common description table header, the same with
134 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
135 //
136 
137 ///
138 /// RSDT Revision (as defined in ACPI 3.0 spec.)
139 ///
140 #define EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
141 
142 //
143 // Extended System Description Table
144 // No definition needed as it is a common description table header, the same with
145 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers.
146 //
147 
148 ///
149 /// XSDT Revision (as defined in ACPI 3.0 spec.)
150 ///
151 #define EFI_ACPI_3_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
152 
153 ///
154 /// Fixed ACPI Description Table Structure (FADT)
155 ///
156 typedef struct {
157   EFI_ACPI_DESCRIPTION_HEADER             Header;
158   UINT32                                  FirmwareCtrl;
159   UINT32                                  Dsdt;
160   UINT8                                   Reserved0;
161   UINT8                                   PreferredPmProfile;
162   UINT16                                  SciInt;
163   UINT32                                  SmiCmd;
164   UINT8                                   AcpiEnable;
165   UINT8                                   AcpiDisable;
166   UINT8                                   S4BiosReq;
167   UINT8                                   PstateCnt;
168   UINT32                                  Pm1aEvtBlk;
169   UINT32                                  Pm1bEvtBlk;
170   UINT32                                  Pm1aCntBlk;
171   UINT32                                  Pm1bCntBlk;
172   UINT32                                  Pm2CntBlk;
173   UINT32                                  PmTmrBlk;
174   UINT32                                  Gpe0Blk;
175   UINT32                                  Gpe1Blk;
176   UINT8                                   Pm1EvtLen;
177   UINT8                                   Pm1CntLen;
178   UINT8                                   Pm2CntLen;
179   UINT8                                   PmTmrLen;
180   UINT8                                   Gpe0BlkLen;
181   UINT8                                   Gpe1BlkLen;
182   UINT8                                   Gpe1Base;
183   UINT8                                   CstCnt;
184   UINT16                                  PLvl2Lat;
185   UINT16                                  PLvl3Lat;
186   UINT16                                  FlushSize;
187   UINT16                                  FlushStride;
188   UINT8                                   DutyOffset;
189   UINT8                                   DutyWidth;
190   UINT8                                   DayAlrm;
191   UINT8                                   MonAlrm;
192   UINT8                                   Century;
193   UINT16                                  IaPcBootArch;
194   UINT8                                   Reserved1;
195   UINT32                                  Flags;
196   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  ResetReg;
197   UINT8                                   ResetValue;
198   UINT8                                   Reserved2[3];
199   UINT64                                  XFirmwareCtrl;
200   UINT64                                  XDsdt;
201   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XPm1aEvtBlk;
202   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XPm1bEvtBlk;
203   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XPm1aCntBlk;
204   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XPm1bCntBlk;
205   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XPm2CntBlk;
206   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XPmTmrBlk;
207   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XGpe0Blk;
208   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XGpe1Blk;
209 } EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE;
210 
211 ///
212 /// FADT Version (as defined in ACPI 3.0 spec.)
213 ///
214 #define EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x04
215 
216 //
217 // Fixed ACPI Description Table Preferred Power Management Profile
218 //
219 #define EFI_ACPI_3_0_PM_PROFILE_UNSPECIFIED         0
220 #define EFI_ACPI_3_0_PM_PROFILE_DESKTOP             1
221 #define EFI_ACPI_3_0_PM_PROFILE_MOBILE              2
222 #define EFI_ACPI_3_0_PM_PROFILE_WORKSTATION         3
223 #define EFI_ACPI_3_0_PM_PROFILE_ENTERPRISE_SERVER   4
224 #define EFI_ACPI_3_0_PM_PROFILE_SOHO_SERVER         5
225 #define EFI_ACPI_3_0_PM_PROFILE_APPLIANCE_PC        6
226 #define EFI_ACPI_3_0_PM_PROFILE_PERFORMANCE_SERVER  7
227 
228 //
229 // Fixed ACPI Description Table Boot Architecture Flags
230 // All other bits are reserved and must be set to 0.
231 //
232 #define EFI_ACPI_3_0_LEGACY_DEVICES              BIT0
233 #define EFI_ACPI_3_0_8042                        BIT1
234 #define EFI_ACPI_3_0_VGA_NOT_PRESENT             BIT2
235 #define EFI_ACPI_3_0_MSI_NOT_SUPPORTED           BIT3
236 #define EFI_ACPI_3_0_PCIE_ASPM_CONTROLS          BIT4
237 
238 //
239 // Fixed ACPI Description Table Fixed Feature Flags
240 // All other bits are reserved and must be set to 0.
241 //
242 #define EFI_ACPI_3_0_WBINVD                                 BIT0
243 #define EFI_ACPI_3_0_WBINVD_FLUSH                           BIT1
244 #define EFI_ACPI_3_0_PROC_C1                                BIT2
245 #define EFI_ACPI_3_0_P_LVL2_UP                              BIT3
246 #define EFI_ACPI_3_0_PWR_BUTTON                             BIT4
247 #define EFI_ACPI_3_0_SLP_BUTTON                             BIT5
248 #define EFI_ACPI_3_0_FIX_RTC                                BIT6
249 #define EFI_ACPI_3_0_RTC_S4                                 BIT7
250 #define EFI_ACPI_3_0_TMR_VAL_EXT                            BIT8
251 #define EFI_ACPI_3_0_DCK_CAP                                BIT9
252 #define EFI_ACPI_3_0_RESET_REG_SUP                          BIT10
253 #define EFI_ACPI_3_0_SEALED_CASE                            BIT11
254 #define EFI_ACPI_3_0_HEADLESS                               BIT12
255 #define EFI_ACPI_3_0_CPU_SW_SLP                             BIT13
256 #define EFI_ACPI_3_0_PCI_EXP_WAK                            BIT14
257 #define EFI_ACPI_3_0_USE_PLATFORM_CLOCK                     BIT15
258 #define EFI_ACPI_3_0_S4_RTC_STS_VALID                       BIT16
259 #define EFI_ACPI_3_0_REMOTE_POWER_ON_CAPABLE                BIT17
260 #define EFI_ACPI_3_0_FORCE_APIC_CLUSTER_MODEL               BIT18
261 #define EFI_ACPI_3_0_FORCE_APIC_PHYSICAL_DESTINATION_MODE   BIT19
262 
263 ///
264 /// Firmware ACPI Control Structure
265 ///
266 typedef struct {
267   UINT32  Signature;
268   UINT32  Length;
269   UINT32  HardwareSignature;
270   UINT32  FirmwareWakingVector;
271   UINT32  GlobalLock;
272   UINT32  Flags;
273   UINT64  XFirmwareWakingVector;
274   UINT8   Version;
275   UINT8   Reserved[31];
276 } EFI_ACPI_3_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;
277 
278 ///
279 /// FACS Version (as defined in ACPI 3.0 spec.)
280 ///
281 #define EFI_ACPI_3_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION  0x01
282 
283 ///
284 /// Firmware Control Structure Feature Flags
285 /// All other bits are reserved and must be set to 0.
286 ///
287 #define EFI_ACPI_3_0_S4BIOS_F       BIT0
288 
289 //
290 // Differentiated System Description Table,
291 // Secondary System Description Table
292 // and Persistent System Description Table,
293 // no definition needed as they are common description table header, the same with
294 // EFI_ACPI_DESCRIPTION_HEADER, followed by a definition block.
295 //
296 #define EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION   0x02
297 #define EFI_ACPI_3_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION        0x02
298 
299 ///
300 /// Multiple APIC Description Table header definition.  The rest of the table
301 /// must be defined in a platform specific manner.
302 ///
303 typedef struct {
304   EFI_ACPI_DESCRIPTION_HEADER Header;
305   UINT32                      LocalApicAddress;
306   UINT32                      Flags;
307 } EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
308 
309 ///
310 /// MADT Revision (as defined in ACPI 3.0 spec.)
311 ///
312 #define EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x02
313 
314 ///
315 /// Multiple APIC Flags
316 /// All other bits are reserved and must be set to 0.
317 ///
318 #define EFI_ACPI_3_0_PCAT_COMPAT         BIT0
319 
320 //
321 // Multiple APIC Description Table APIC structure types
322 // All other values between 0x09 an 0xFF are reserved and
323 // will be ignored by OSPM.
324 //
325 #define EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC           0x00
326 #define EFI_ACPI_3_0_IO_APIC                        0x01
327 #define EFI_ACPI_3_0_INTERRUPT_SOURCE_OVERRIDE      0x02
328 #define EFI_ACPI_3_0_NON_MASKABLE_INTERRUPT_SOURCE  0x03
329 #define EFI_ACPI_3_0_LOCAL_APIC_NMI                 0x04
330 #define EFI_ACPI_3_0_LOCAL_APIC_ADDRESS_OVERRIDE    0x05
331 #define EFI_ACPI_3_0_IO_SAPIC                       0x06
332 #define EFI_ACPI_3_0_LOCAL_SAPIC                    0x07
333 #define EFI_ACPI_3_0_PLATFORM_INTERRUPT_SOURCES     0x08
334 
335 //
336 // APIC Structure Definitions
337 //
338 
339 ///
340 /// Processor Local APIC Structure Definition
341 ///
342 typedef struct {
343   UINT8   Type;
344   UINT8   Length;
345   UINT8   AcpiProcessorId;
346   UINT8   ApicId;
347   UINT32  Flags;
348 } EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_STRUCTURE;
349 
350 ///
351 /// Local APIC Flags.  All other bits are reserved and must be 0.
352 ///
353 #define EFI_ACPI_3_0_LOCAL_APIC_ENABLED        BIT0
354 
355 ///
356 /// IO APIC Structure
357 ///
358 typedef struct {
359   UINT8   Type;
360   UINT8   Length;
361   UINT8   IoApicId;
362   UINT8   Reserved;
363   UINT32  IoApicAddress;
364   UINT32  GlobalSystemInterruptBase;
365 } EFI_ACPI_3_0_IO_APIC_STRUCTURE;
366 
367 ///
368 /// Interrupt Source Override Structure
369 ///
370 typedef struct {
371   UINT8   Type;
372   UINT8   Length;
373   UINT8   Bus;
374   UINT8   Source;
375   UINT32  GlobalSystemInterrupt;
376   UINT16  Flags;
377 } EFI_ACPI_3_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
378 
379 ///
380 /// Platform Interrupt Sources Structure Definition
381 ///
382 typedef struct {
383   UINT8   Type;
384   UINT8   Length;
385   UINT16  Flags;
386   UINT8   InterruptType;
387   UINT8   ProcessorId;
388   UINT8   ProcessorEid;
389   UINT8   IoSapicVector;
390   UINT32  GlobalSystemInterrupt;
391   UINT32  PlatformInterruptSourceFlags;
392   UINT8   CpeiProcessorOverride;
393   UINT8   Reserved[31];
394 } EFI_ACPI_3_0_PLATFORM_INTERRUPT_APIC_STRUCTURE;
395 
396 //
397 // MPS INTI flags.
398 // All other bits are reserved and must be set to 0.
399 //
400 #define EFI_ACPI_3_0_POLARITY      (3 << 0)
401 #define EFI_ACPI_3_0_TRIGGER_MODE  (3 << 2)
402 
403 ///
404 /// Non-Maskable Interrupt Source Structure
405 ///
406 typedef struct {
407   UINT8   Type;
408   UINT8   Length;
409   UINT16  Flags;
410   UINT32  GlobalSystemInterrupt;
411 } EFI_ACPI_3_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
412 
413 ///
414 /// Local APIC NMI Structure
415 ///
416 typedef struct {
417   UINT8   Type;
418   UINT8   Length;
419   UINT8   AcpiProcessorId;
420   UINT16  Flags;
421   UINT8   LocalApicLint;
422 } EFI_ACPI_3_0_LOCAL_APIC_NMI_STRUCTURE;
423 
424 ///
425 /// Local APIC Address Override Structure
426 ///
427 typedef struct {
428   UINT8   Type;
429   UINT8   Length;
430   UINT16  Reserved;
431   UINT64  LocalApicAddress;
432 } EFI_ACPI_3_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
433 
434 ///
435 /// IO SAPIC Structure
436 ///
437 typedef struct {
438   UINT8   Type;
439   UINT8   Length;
440   UINT8   IoApicId;
441   UINT8   Reserved;
442   UINT32  GlobalSystemInterruptBase;
443   UINT64  IoSapicAddress;
444 } EFI_ACPI_3_0_IO_SAPIC_STRUCTURE;
445 
446 ///
447 /// Local SAPIC Structure
448 /// This struct followed by a null-terminated ASCII string - ACPI Processor UID String
449 ///
450 typedef struct {
451   UINT8   Type;
452   UINT8   Length;
453   UINT8   AcpiProcessorId;
454   UINT8   LocalSapicId;
455   UINT8   LocalSapicEid;
456   UINT8   Reserved[3];
457   UINT32  Flags;
458   UINT32  ACPIProcessorUIDValue;
459 } EFI_ACPI_3_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
460 
461 ///
462 /// Platform Interrupt Sources Structure
463 ///
464 typedef struct {
465   UINT8   Type;
466   UINT8   Length;
467   UINT16  Flags;
468   UINT8   InterruptType;
469   UINT8   ProcessorId;
470   UINT8   ProcessorEid;
471   UINT8   IoSapicVector;
472   UINT32  GlobalSystemInterrupt;
473   UINT32  PlatformInterruptSourceFlags;
474 } EFI_ACPI_3_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
475 
476 ///
477 /// Platform Interrupt Source Flags.
478 /// All other bits are reserved and must be set to 0.
479 ///
480 #define EFI_ACPI_3_0_CPEI_PROCESSOR_OVERRIDE          BIT0
481 
482 ///
483 /// Smart Battery Description Table (SBST)
484 ///
485 typedef struct {
486   EFI_ACPI_DESCRIPTION_HEADER Header;
487   UINT32                      WarningEnergyLevel;
488   UINT32                      LowEnergyLevel;
489   UINT32                      CriticalEnergyLevel;
490 } EFI_ACPI_3_0_SMART_BATTERY_DESCRIPTION_TABLE;
491 
492 ///
493 /// SBST Version (as defined in ACPI 3.0 spec.)
494 ///
495 #define EFI_ACPI_3_0_SMART_BATTERY_DESCRIPTION_TABLE_REVISION 0x01
496 
497 ///
498 /// Embedded Controller Boot Resources Table (ECDT)
499 /// The table is followed by a null terminated ASCII string that contains
500 /// a fully qualified reference to the name space object.
501 ///
502 typedef struct {
503   EFI_ACPI_DESCRIPTION_HEADER             Header;
504   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  EcControl;
505   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  EcData;
506   UINT32                                  Uid;
507   UINT8                                   GpeBit;
508 } EFI_ACPI_3_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
509 
510 ///
511 /// ECDT Version (as defined in ACPI 3.0 spec.)
512 ///
513 #define EFI_ACPI_3_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION  0x01
514 
515 ///
516 /// System Resource Affinity Table (SRAT.  The rest of the table
517 /// must be defined in a platform specific manner.
518 ///
519 typedef struct {
520   EFI_ACPI_DESCRIPTION_HEADER Header;
521   UINT32                      Reserved1;  ///< Must be set to 1
522   UINT64                      Reserved2;
523 } EFI_ACPI_3_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER;
524 
525 ///
526 /// SRAT Version (as defined in ACPI 3.0 spec.)
527 ///
528 #define EFI_ACPI_3_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION  0x02
529 
530 //
531 // SRAT structure types.
532 // All other values between 0x02 an 0xFF are reserved and
533 // will be ignored by OSPM.
534 //
535 #define EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY  0x00
536 #define EFI_ACPI_3_0_MEMORY_AFFINITY                      0x01
537 
538 ///
539 /// Processor Local APIC/SAPIC Affinity Structure Definition
540 ///
541 typedef struct {
542   UINT8   Type;
543   UINT8   Length;
544   UINT8   ProximityDomain7To0;
545   UINT8   ApicId;
546   UINT32  Flags;
547   UINT8   LocalSapicEid;
548   UINT8   ProximityDomain31To8[3];
549   UINT8   Reserved[4];
550 } EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE;
551 
552 ///
553 /// Local APIC/SAPIC Flags.  All other bits are reserved and must be 0.
554 ///
555 #define EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED (1 << 0)
556 
557 ///
558 /// Memory Affinity Structure Definition
559 ///
560 typedef struct {
561   UINT8   Type;
562   UINT8   Length;
563   UINT32  ProximityDomain;
564   UINT16  Reserved1;
565   UINT32  AddressBaseLow;
566   UINT32  AddressBaseHigh;
567   UINT32  LengthLow;
568   UINT32  LengthHigh;
569   UINT32  Reserved2;
570   UINT32  Flags;
571   UINT64  Reserved3;
572 } EFI_ACPI_3_0_MEMORY_AFFINITY_STRUCTURE;
573 
574 //
575 // Memory Flags.  All other bits are reserved and must be 0.
576 //
577 #define EFI_ACPI_3_0_MEMORY_ENABLED       (1 << 0)
578 #define EFI_ACPI_3_0_MEMORY_HOT_PLUGGABLE (1 << 1)
579 #define EFI_ACPI_3_0_MEMORY_NONVOLATILE   (1 << 2)
580 
581 ///
582 /// System Locality Distance Information Table (SLIT).
583 /// The rest of the table is a matrix.
584 ///
585 typedef struct {
586   EFI_ACPI_DESCRIPTION_HEADER Header;
587   UINT64                      NumberOfSystemLocalities;
588 } EFI_ACPI_3_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER;
589 
590 ///
591 /// SLIT Version (as defined in ACPI 3.0 spec.)
592 ///
593 #define EFI_ACPI_3_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION  0x01
594 
595 //
596 // Known table signatures
597 //
598 
599 ///
600 /// "RSD PTR " Root System Description Pointer
601 ///
602 #define EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
603 
604 ///
605 /// "APIC" Multiple APIC Description Table
606 ///
607 #define EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
608 
609 ///
610 /// "DSDT" Differentiated System Description Table
611 ///
612 #define EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
613 
614 ///
615 /// "ECDT" Embedded Controller Boot Resources Table
616 ///
617 #define EFI_ACPI_3_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE  SIGNATURE_32('E', 'C', 'D', 'T')
618 
619 ///
620 /// "FACP" Fixed ACPI Description Table
621 ///
622 #define EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
623 
624 ///
625 /// "FACS" Firmware ACPI Control Structure
626 ///
627 #define EFI_ACPI_3_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
628 
629 ///
630 /// "PSDT" Persistent System Description Table
631 ///
632 #define EFI_ACPI_3_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
633 
634 ///
635 /// "RSDT" Root System Description Table
636 ///
637 #define EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
638 
639 ///
640 /// "SBST" Smart Battery Specification Table
641 ///
642 #define EFI_ACPI_3_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
643 
644 ///
645 /// "SLIT" System Locality Information Table
646 ///
647 #define EFI_ACPI_3_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'T')
648 
649 ///
650 /// "SRAT" System Resource Affinity Table
651 ///
652 #define EFI_ACPI_3_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE  SIGNATURE_32('S', 'R', 'A', 'T')
653 
654 ///
655 /// "SSDT" Secondary System Description Table
656 ///
657 #define EFI_ACPI_3_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
658 
659 ///
660 /// "XSDT" Extended System Description Table
661 ///
662 #define EFI_ACPI_3_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('X', 'S', 'D', 'T')
663 
664 ///
665 /// "BOOT" MS Simple Boot Spec
666 ///
667 #define EFI_ACPI_3_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE  SIGNATURE_32('B', 'O', 'O', 'T')
668 
669 ///
670 /// "CPEP" Corrected Platform Error Polling Table
671 ///
672 #define EFI_ACPI_3_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE  SIGNATURE_32('C', 'P', 'E', 'P')
673 
674 ///
675 /// "DBGP" MS Debug Port Spec
676 ///
677 #define EFI_ACPI_3_0_DEBUG_PORT_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', 'P')
678 
679 ///
680 /// "ETDT" Event Timer Description Table
681 ///
682 #define EFI_ACPI_3_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'T', 'D', 'T')
683 
684 ///
685 /// "HPET" IA-PC High Precision Event Timer Table
686 ///
687 #define EFI_ACPI_3_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE  SIGNATURE_32('H', 'P', 'E', 'T')
688 
689 ///
690 /// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
691 ///
692 #define EFI_ACPI_3_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'F', 'G')
693 
694 ///
695 /// "SPCR" Serial Port Concole Redirection Table
696 ///
697 #define EFI_ACPI_3_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'C', 'R')
698 
699 ///
700 /// "SPMI" Server Platform Management Interface Table
701 ///
702 #define EFI_ACPI_3_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'M', 'I')
703 
704 ///
705 /// "TCPA" Trusted Computing Platform Alliance Capabilities Table
706 ///
707 #define EFI_ACPI_3_0_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE  SIGNATURE_32('T', 'C', 'P', 'A')
708 
709 ///
710 /// "WDRT" Watchdog Resource Table
711 ///
712 #define EFI_ACPI_3_0_WATCHDOG_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'R', 'T')
713 
714 ///
715 /// "WDAT" Watchdog Action Table
716 ///
717 #define EFI_ACPI_3_0_WATCHDOG_ACTION_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'A', 'T')
718 
719 ///
720 /// "WSPT" Windows Specific Properties Table
721 ///
722 #define EFI_ACPI_3_0_WINDOWS_SPECIFIC_PROPERTIES_TABLE_SIGNATURE  SIGNATURE_32('W', 'S', 'P', 'T')
723 
724 ///
725 /// "iBFT" iSCSI Boot Firmware Table
726 ///
727 #define EFI_ACPI_3_0_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE  SIGNATURE_32('i', 'B', 'F', 'T')
728 
729 #pragma pack()
730 
731 #endif
732