1 /******************************************************************************
2 *
3 * Name: actbl1.h - Additional ACPI table definitions
4 *
5 *****************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2011, Intel Corp.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
65 #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */
66 #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */
67 #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */
68 #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */
69 #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */
70 #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */
71 #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */
72 #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */
73 #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
74 #define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */
75 #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */
76
77
78 /*
79 * All tables must be byte-packed to match the ACPI specification, since
80 * the tables are provided by the system BIOS.
81 */
82 #pragma pack(1)
83
84 /*
85 * Note about bitfields: The UINT8 type is used for bitfields in ACPI tables.
86 * This is the only type that is even remotely portable. Anything else is not
87 * portable, so do not use any other bitfield types.
88 */
89
90
91 /*******************************************************************************
92 *
93 * Common subtable headers
94 *
95 ******************************************************************************/
96
97 /* Generic subtable header (used in MADT, SRAT, etc.) */
98
99 typedef struct acpi_subtable_header
100 {
101 UINT8 Type;
102 UINT8 Length;
103
104 } ACPI_SUBTABLE_HEADER;
105
106
107 /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
113 UINT8 Flags;
114 UINT8 Reserved;
115 ACPI_GENERIC_ADDRESS RegisterRegion;
116 UINT64 Value; /* Value used with Read/Write register */
117 UINT64 Mask; /* Bitmask required for this register instruction */
118
119 } ACPI_WHEA_HEADER;
120
121
122 /*******************************************************************************
123 *
124 * BERT - Boot Error Record Table (ACPI 4.0)
125 * Version 1
126 *
127 ******************************************************************************/
128
129 typedef struct acpi_table_bert
130 {
131 ACPI_TABLE_HEADER Header; /* Common ACPI table header */
132 UINT32 RegionLength; /* Length of the boot error region */
133 UINT64 Address; /* Physical addresss of the error region */
134
135 } ACPI_TABLE_BERT;
136
137
138 /* Boot Error Region (not a subtable, pointed to by Address field above) */
139
140 typedef struct acpi_bert_region
141 {
142 UINT32 BlockStatus; /* Type of error information */
143 UINT32 RawDataOffset; /* Offset to raw error data */
144 UINT32 RawDataLength; /* Length of raw error data */
145 UINT32 DataLength; /* Length of generic error data */
146 UINT32 ErrorSeverity; /* Severity code */
147
148 } ACPI_BERT_REGION;
149
150 /* Values for BlockStatus flags above */
151
152 #define ACPI_BERT_UNCORRECTABLE (1)
153 #define ACPI_BERT_CORRECTABLE (1<<1)
243 ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */
244
245 } ACPI_EINJ_ENTRY;
246
247 /* Masks for Flags field above */
248
249 #define ACPI_EINJ_PRESERVE (1)
250
251 /* Values for Action field above */
252
253 enum AcpiEinjActions
254 {
255 ACPI_EINJ_BEGIN_OPERATION = 0,
256 ACPI_EINJ_GET_TRIGGER_TABLE = 1,
257 ACPI_EINJ_SET_ERROR_TYPE = 2,
258 ACPI_EINJ_GET_ERROR_TYPE = 3,
259 ACPI_EINJ_END_OPERATION = 4,
260 ACPI_EINJ_EXECUTE_OPERATION = 5,
261 ACPI_EINJ_CHECK_BUSY_STATUS = 6,
262 ACPI_EINJ_GET_COMMAND_STATUS = 7,
263 ACPI_EINJ_ACTION_RESERVED = 8, /* 8 and greater are reserved */
264 ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */
265 };
266
267 /* Values for Instruction field above */
268
269 enum AcpiEinjInstructions
270 {
271 ACPI_EINJ_READ_REGISTER = 0,
272 ACPI_EINJ_READ_REGISTER_VALUE = 1,
273 ACPI_EINJ_WRITE_REGISTER = 2,
274 ACPI_EINJ_WRITE_REGISTER_VALUE = 3,
275 ACPI_EINJ_NOOP = 4,
276 ACPI_EINJ_INSTRUCTION_RESERVED = 5 /* 5 and greater are reserved */
277 };
278
279
280 /* EINJ Trigger Error Action Table */
281
282 typedef struct acpi_einj_trigger
283 {
284 UINT32 HeaderSize;
285 UINT32 Revision;
286 UINT32 TableSize;
287 UINT32 EntryCount;
288
289 } ACPI_EINJ_TRIGGER;
290
291 /* Command status return values */
292
293 enum AcpiEinjCommandStatus
294 {
295 ACPI_EINJ_SUCCESS = 0,
296 ACPI_EINJ_FAILURE = 1,
297 ACPI_EINJ_INVALID_ACCESS = 2,
298 ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */
299 };
300
301
302 /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
303
304 #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1)
305 #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1)
306 #define ACPI_EINJ_PROCESSOR_FATAL (1<<2)
307 #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3)
308 #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4)
309 #define ACPI_EINJ_MEMORY_FATAL (1<<5)
310 #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6)
311 #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7)
312 #define ACPI_EINJ_PCIX_FATAL (1<<8)
313 #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9)
314 #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10)
315 #define ACPI_EINJ_PLATFORM_FATAL (1<<11)
316
317
318 /*******************************************************************************
319 *
320 * ERST - Error Record Serialization Table (ACPI 4.0)
321 * Version 1
322 *
323 ******************************************************************************/
324
325 typedef struct acpi_table_erst
326 {
327 ACPI_TABLE_HEADER Header; /* Common ACPI table header */
328 UINT32 HeaderLength;
329 UINT32 Reserved;
330 UINT32 Entries;
331
332 } ACPI_TABLE_ERST;
333
334
335 /* ERST Serialization Entries (actions) */
475 UINT8 StatusFormat;
476 UINT8 Reserved;
477 UINT32 ControlRegister;
478 UINT64 ControlData;
479 UINT32 StatusRegister;
480 UINT32 AddressRegister;
481 UINT32 MiscRegister;
482
483 } ACPI_HEST_IA_ERROR_BANK;
484
485
486 /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
487
488 typedef struct acpi_hest_aer_common
489 {
490 UINT16 Reserved1;
491 UINT8 Flags;
492 UINT8 Enabled;
493 UINT32 RecordsToPreallocate;
494 UINT32 MaxSectionsPerRecord;
495 UINT32 Bus;
496 UINT16 Device;
497 UINT16 Function;
498 UINT16 DeviceControl;
499 UINT16 Reserved2;
500 UINT32 UncorrectableMask;
501 UINT32 UncorrectableSeverity;
502 UINT32 CorrectableMask;
503 UINT32 AdvancedCapabilities;
504
505 } ACPI_HEST_AER_COMMON;
506
507 /* Masks for HEST Flags fields */
508
509 #define ACPI_HEST_FIRMWARE_FIRST (1)
510 #define ACPI_HEST_GLOBAL (1<<1)
511
512
513 /* Hardware Error Notification */
514
515 typedef struct acpi_hest_notify
516 {
517 UINT8 Type;
518 UINT8 Length;
519 UINT16 ConfigWriteEnable;
520 UINT32 PollInterval;
521 UINT32 Vector;
522 UINT32 PollingThresholdValue;
523 UINT32 PollingThresholdWindow;
524 UINT32 ErrorThresholdValue;
525 UINT32 ErrorThresholdWindow;
526
527 } ACPI_HEST_NOTIFY;
528
529 /* Values for Notify Type field above */
530
531 enum AcpiHestNotifyTypes
532 {
533 ACPI_HEST_NOTIFY_POLLED = 0,
534 ACPI_HEST_NOTIFY_EXTERNAL = 1,
535 ACPI_HEST_NOTIFY_LOCAL = 2,
536 ACPI_HEST_NOTIFY_SCI = 3,
537 ACPI_HEST_NOTIFY_NMI = 4,
538 ACPI_HEST_NOTIFY_RESERVED = 5 /* 5 and greater are reserved */
539 };
540
541 /* Values for ConfigWriteEnable bitfield above */
542
543 #define ACPI_HEST_TYPE (1)
544 #define ACPI_HEST_POLL_INTERVAL (1<<1)
545 #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2)
546 #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
547 #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4)
548 #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5)
549
550
551 /*
552 * HEST subtables
553 */
554
555 /* 0: IA32 Machine Check Exception */
556
557 typedef struct acpi_hest_ia_machine_check
558 {
714
715 #define ACPI_MADT_DUAL_PIC 0
716 #define ACPI_MADT_MULTIPLE_APIC 1
717
718
719 /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
720
721 enum AcpiMadtType
722 {
723 ACPI_MADT_TYPE_LOCAL_APIC = 0,
724 ACPI_MADT_TYPE_IO_APIC = 1,
725 ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
726 ACPI_MADT_TYPE_NMI_SOURCE = 3,
727 ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
728 ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
729 ACPI_MADT_TYPE_IO_SAPIC = 6,
730 ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
731 ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
732 ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
733 ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
734 ACPI_MADT_TYPE_RESERVED = 11 /* 11 and greater are reserved */
735 };
736
737
738 /*
739 * MADT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
740 */
741
742 /* 0: Processor Local APIC */
743
744 typedef struct acpi_madt_local_apic
745 {
746 ACPI_SUBTABLE_HEADER Header;
747 UINT8 ProcessorId; /* ACPI processor id */
748 UINT8 Id; /* Processor's local APIC id */
749 UINT32 LapicFlags;
750
751 } ACPI_MADT_LOCAL_APIC;
752
753
754 /* 1: IO APIC */
869 UINT32 LocalApicId; /* Processor x2APIC ID */
870 UINT32 LapicFlags;
871 UINT32 Uid; /* ACPI processor UID */
872
873 } ACPI_MADT_LOCAL_X2APIC;
874
875
876 /* 10: Local X2APIC NMI (ACPI 4.0) */
877
878 typedef struct acpi_madt_local_x2apic_nmi
879 {
880 ACPI_SUBTABLE_HEADER Header;
881 UINT16 IntiFlags;
882 UINT32 Uid; /* ACPI processor UID */
883 UINT8 Lint; /* LINTn to which NMI is connected */
884 UINT8 Reserved[3]; /* Reserved - must be zero */
885
886 } ACPI_MADT_LOCAL_X2APIC_NMI;
887
888
889 /*
890 * Common flags fields for MADT subtables
891 */
892
893 /* MADT Local APIC flags (LapicFlags) */
894
895 #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */
896
897 /* MADT MPS INTI flags (IntiFlags) */
898
899 #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */
900 #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */
901
902 /* Values for MPS INTI flags */
903
904 #define ACPI_MADT_POLARITY_CONFORMS 0
905 #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1
906 #define ACPI_MADT_POLARITY_RESERVED 2
907 #define ACPI_MADT_POLARITY_ACTIVE_LOW 3
908
909 #define ACPI_MADT_TRIGGER_CONFORMS (0)
910 #define ACPI_MADT_TRIGGER_EDGE (1<<2)
911 #define ACPI_MADT_TRIGGER_RESERVED (2<<2)
912 #define ACPI_MADT_TRIGGER_LEVEL (3<<2)
913
|
1 /******************************************************************************
2 *
3 * Name: actbl1.h - Additional ACPI table definitions
4 *
5 *****************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2013, Intel Corp.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
65 #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */
66 #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */
67 #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */
68 #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */
69 #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */
70 #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */
71 #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */
72 #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */
73 #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
74 #define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */
75 #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */
76
77
78 /*
79 * All tables must be byte-packed to match the ACPI specification, since
80 * the tables are provided by the system BIOS.
81 */
82 #pragma pack(1)
83
84 /*
85 * Note: C bitfields are not used for this reason:
86 *
87 * "Bitfields are great and easy to read, but unfortunately the C language
88 * does not specify the layout of bitfields in memory, which means they are
89 * essentially useless for dealing with packed data in on-disk formats or
90 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
91 * this decision was a design error in C. Ritchie could have picked an order
92 * and stuck with it." Norman Ramsey.
93 * See http://stackoverflow.com/a/1053662/41661
94 */
95
96
97 /*******************************************************************************
98 *
99 * Common subtable headers
100 *
101 ******************************************************************************/
102
103 /* Generic subtable header (used in MADT, SRAT, etc.) */
104
105 typedef struct acpi_subtable_header
106 {
107 UINT8 Type;
108 UINT8 Length;
109
110 } ACPI_SUBTABLE_HEADER;
111
112
113 /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
119 UINT8 Flags;
120 UINT8 Reserved;
121 ACPI_GENERIC_ADDRESS RegisterRegion;
122 UINT64 Value; /* Value used with Read/Write register */
123 UINT64 Mask; /* Bitmask required for this register instruction */
124
125 } ACPI_WHEA_HEADER;
126
127
128 /*******************************************************************************
129 *
130 * BERT - Boot Error Record Table (ACPI 4.0)
131 * Version 1
132 *
133 ******************************************************************************/
134
135 typedef struct acpi_table_bert
136 {
137 ACPI_TABLE_HEADER Header; /* Common ACPI table header */
138 UINT32 RegionLength; /* Length of the boot error region */
139 UINT64 Address; /* Physical address of the error region */
140
141 } ACPI_TABLE_BERT;
142
143
144 /* Boot Error Region (not a subtable, pointed to by Address field above) */
145
146 typedef struct acpi_bert_region
147 {
148 UINT32 BlockStatus; /* Type of error information */
149 UINT32 RawDataOffset; /* Offset to raw error data */
150 UINT32 RawDataLength; /* Length of raw error data */
151 UINT32 DataLength; /* Length of generic error data */
152 UINT32 ErrorSeverity; /* Severity code */
153
154 } ACPI_BERT_REGION;
155
156 /* Values for BlockStatus flags above */
157
158 #define ACPI_BERT_UNCORRECTABLE (1)
159 #define ACPI_BERT_CORRECTABLE (1<<1)
249 ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */
250
251 } ACPI_EINJ_ENTRY;
252
253 /* Masks for Flags field above */
254
255 #define ACPI_EINJ_PRESERVE (1)
256
257 /* Values for Action field above */
258
259 enum AcpiEinjActions
260 {
261 ACPI_EINJ_BEGIN_OPERATION = 0,
262 ACPI_EINJ_GET_TRIGGER_TABLE = 1,
263 ACPI_EINJ_SET_ERROR_TYPE = 2,
264 ACPI_EINJ_GET_ERROR_TYPE = 3,
265 ACPI_EINJ_END_OPERATION = 4,
266 ACPI_EINJ_EXECUTE_OPERATION = 5,
267 ACPI_EINJ_CHECK_BUSY_STATUS = 6,
268 ACPI_EINJ_GET_COMMAND_STATUS = 7,
269 ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8,
270 ACPI_EINJ_ACTION_RESERVED = 9, /* 9 and greater are reserved */
271 ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */
272 };
273
274 /* Values for Instruction field above */
275
276 enum AcpiEinjInstructions
277 {
278 ACPI_EINJ_READ_REGISTER = 0,
279 ACPI_EINJ_READ_REGISTER_VALUE = 1,
280 ACPI_EINJ_WRITE_REGISTER = 2,
281 ACPI_EINJ_WRITE_REGISTER_VALUE = 3,
282 ACPI_EINJ_NOOP = 4,
283 ACPI_EINJ_FLUSH_CACHELINE = 5,
284 ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */
285 };
286
287 typedef struct acpi_einj_error_type_with_addr
288 {
289 UINT32 ErrorType;
290 UINT32 VendorStructOffset;
291 UINT32 Flags;
292 UINT32 ApicId;
293 UINT64 Address;
294 UINT64 Range;
295 UINT32 PcieId;
296
297 } ACPI_EINJ_ERROR_TYPE_WITH_ADDR;
298
299 typedef struct acpi_einj_vendor
300 {
301 UINT32 Length;
302 UINT32 PcieId;
303 UINT16 VendorId;
304 UINT16 DeviceId;
305 UINT8 RevisionId;
306 UINT8 Reserved[3];
307
308 } ACPI_EINJ_VENDOR;
309
310
311 /* EINJ Trigger Error Action Table */
312
313 typedef struct acpi_einj_trigger
314 {
315 UINT32 HeaderSize;
316 UINT32 Revision;
317 UINT32 TableSize;
318 UINT32 EntryCount;
319
320 } ACPI_EINJ_TRIGGER;
321
322 /* Command status return values */
323
324 enum AcpiEinjCommandStatus
325 {
326 ACPI_EINJ_SUCCESS = 0,
327 ACPI_EINJ_FAILURE = 1,
328 ACPI_EINJ_INVALID_ACCESS = 2,
329 ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */
330 };
331
332
333 /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
334
335 #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1)
336 #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1)
337 #define ACPI_EINJ_PROCESSOR_FATAL (1<<2)
338 #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3)
339 #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4)
340 #define ACPI_EINJ_MEMORY_FATAL (1<<5)
341 #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6)
342 #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7)
343 #define ACPI_EINJ_PCIX_FATAL (1<<8)
344 #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9)
345 #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10)
346 #define ACPI_EINJ_PLATFORM_FATAL (1<<11)
347 #define ACPI_EINJ_VENDOR_DEFINED (1<<31)
348
349
350 /*******************************************************************************
351 *
352 * ERST - Error Record Serialization Table (ACPI 4.0)
353 * Version 1
354 *
355 ******************************************************************************/
356
357 typedef struct acpi_table_erst
358 {
359 ACPI_TABLE_HEADER Header; /* Common ACPI table header */
360 UINT32 HeaderLength;
361 UINT32 Reserved;
362 UINT32 Entries;
363
364 } ACPI_TABLE_ERST;
365
366
367 /* ERST Serialization Entries (actions) */
507 UINT8 StatusFormat;
508 UINT8 Reserved;
509 UINT32 ControlRegister;
510 UINT64 ControlData;
511 UINT32 StatusRegister;
512 UINT32 AddressRegister;
513 UINT32 MiscRegister;
514
515 } ACPI_HEST_IA_ERROR_BANK;
516
517
518 /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
519
520 typedef struct acpi_hest_aer_common
521 {
522 UINT16 Reserved1;
523 UINT8 Flags;
524 UINT8 Enabled;
525 UINT32 RecordsToPreallocate;
526 UINT32 MaxSectionsPerRecord;
527 UINT32 Bus; /* Bus and Segment numbers */
528 UINT16 Device;
529 UINT16 Function;
530 UINT16 DeviceControl;
531 UINT16 Reserved2;
532 UINT32 UncorrectableMask;
533 UINT32 UncorrectableSeverity;
534 UINT32 CorrectableMask;
535 UINT32 AdvancedCapabilities;
536
537 } ACPI_HEST_AER_COMMON;
538
539 /* Masks for HEST Flags fields */
540
541 #define ACPI_HEST_FIRMWARE_FIRST (1)
542 #define ACPI_HEST_GLOBAL (1<<1)
543
544 /*
545 * Macros to access the bus/segment numbers in Bus field above:
546 * Bus number is encoded in bits 7:0
547 * Segment number is encoded in bits 23:8
548 */
549 #define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF)
550 #define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF)
551
552
553 /* Hardware Error Notification */
554
555 typedef struct acpi_hest_notify
556 {
557 UINT8 Type;
558 UINT8 Length;
559 UINT16 ConfigWriteEnable;
560 UINT32 PollInterval;
561 UINT32 Vector;
562 UINT32 PollingThresholdValue;
563 UINT32 PollingThresholdWindow;
564 UINT32 ErrorThresholdValue;
565 UINT32 ErrorThresholdWindow;
566
567 } ACPI_HEST_NOTIFY;
568
569 /* Values for Notify Type field above */
570
571 enum AcpiHestNotifyTypes
572 {
573 ACPI_HEST_NOTIFY_POLLED = 0,
574 ACPI_HEST_NOTIFY_EXTERNAL = 1,
575 ACPI_HEST_NOTIFY_LOCAL = 2,
576 ACPI_HEST_NOTIFY_SCI = 3,
577 ACPI_HEST_NOTIFY_NMI = 4,
578 ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */
579 ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */
580 ACPI_HEST_NOTIFY_RESERVED = 7 /* 7 and greater are reserved */
581 };
582
583 /* Values for ConfigWriteEnable bitfield above */
584
585 #define ACPI_HEST_TYPE (1)
586 #define ACPI_HEST_POLL_INTERVAL (1<<1)
587 #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2)
588 #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
589 #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4)
590 #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5)
591
592
593 /*
594 * HEST subtables
595 */
596
597 /* 0: IA32 Machine Check Exception */
598
599 typedef struct acpi_hest_ia_machine_check
600 {
756
757 #define ACPI_MADT_DUAL_PIC 0
758 #define ACPI_MADT_MULTIPLE_APIC 1
759
760
761 /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
762
763 enum AcpiMadtType
764 {
765 ACPI_MADT_TYPE_LOCAL_APIC = 0,
766 ACPI_MADT_TYPE_IO_APIC = 1,
767 ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
768 ACPI_MADT_TYPE_NMI_SOURCE = 3,
769 ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
770 ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
771 ACPI_MADT_TYPE_IO_SAPIC = 6,
772 ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
773 ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
774 ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
775 ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
776 ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
777 ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
778 ACPI_MADT_TYPE_RESERVED = 13 /* 13 and greater are reserved */
779 };
780
781
782 /*
783 * MADT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
784 */
785
786 /* 0: Processor Local APIC */
787
788 typedef struct acpi_madt_local_apic
789 {
790 ACPI_SUBTABLE_HEADER Header;
791 UINT8 ProcessorId; /* ACPI processor id */
792 UINT8 Id; /* Processor's local APIC id */
793 UINT32 LapicFlags;
794
795 } ACPI_MADT_LOCAL_APIC;
796
797
798 /* 1: IO APIC */
913 UINT32 LocalApicId; /* Processor x2APIC ID */
914 UINT32 LapicFlags;
915 UINT32 Uid; /* ACPI processor UID */
916
917 } ACPI_MADT_LOCAL_X2APIC;
918
919
920 /* 10: Local X2APIC NMI (ACPI 4.0) */
921
922 typedef struct acpi_madt_local_x2apic_nmi
923 {
924 ACPI_SUBTABLE_HEADER Header;
925 UINT16 IntiFlags;
926 UINT32 Uid; /* ACPI processor UID */
927 UINT8 Lint; /* LINTn to which NMI is connected */
928 UINT8 Reserved[3]; /* Reserved - must be zero */
929
930 } ACPI_MADT_LOCAL_X2APIC_NMI;
931
932
933 /* 11: Generic Interrupt (ACPI 5.0) */
934
935 typedef struct acpi_madt_generic_interrupt
936 {
937 ACPI_SUBTABLE_HEADER Header;
938 UINT16 Reserved; /* Reserved - must be zero */
939 UINT32 GicId;
940 UINT32 Uid;
941 UINT32 Flags;
942 UINT32 ParkingVersion;
943 UINT32 PerformanceInterrupt;
944 UINT64 ParkedAddress;
945 UINT64 BaseAddress;
946
947 } ACPI_MADT_GENERIC_INTERRUPT;
948
949
950 /* 12: Generic Distributor (ACPI 5.0) */
951
952 typedef struct acpi_madt_generic_distributor
953 {
954 ACPI_SUBTABLE_HEADER Header;
955 UINT16 Reserved; /* Reserved - must be zero */
956 UINT32 GicId;
957 UINT64 BaseAddress;
958 UINT32 GlobalIrqBase;
959 UINT32 Reserved2; /* Reserved - must be zero */
960
961 } ACPI_MADT_GENERIC_DISTRIBUTOR;
962
963
964 /*
965 * Common flags fields for MADT subtables
966 */
967
968 /* MADT Local APIC flags (LapicFlags) and GIC flags */
969
970 #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */
971
972 /* MADT MPS INTI flags (IntiFlags) */
973
974 #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */
975 #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */
976
977 /* Values for MPS INTI flags */
978
979 #define ACPI_MADT_POLARITY_CONFORMS 0
980 #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1
981 #define ACPI_MADT_POLARITY_RESERVED 2
982 #define ACPI_MADT_POLARITY_ACTIVE_LOW 3
983
984 #define ACPI_MADT_TRIGGER_CONFORMS (0)
985 #define ACPI_MADT_TRIGGER_EDGE (1<<2)
986 #define ACPI_MADT_TRIGGER_RESERVED (2<<2)
987 #define ACPI_MADT_TRIGGER_LEVEL (3<<2)
988
|