1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44#ifndef __ACTBL1_H__
45#define __ACTBL1_H__
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63#define ACPI_SIG_BERT "BERT"
64#define ACPI_SIG_CPEP "CPEP"
65#define ACPI_SIG_ECDT "ECDT"
66#define ACPI_SIG_EINJ "EINJ"
67#define ACPI_SIG_ERST "ERST"
68#define ACPI_SIG_HEST "HEST"
69#define ACPI_SIG_MADT "APIC"
70#define ACPI_SIG_MSCT "MSCT"
71#define ACPI_SIG_SBST "SBST"
72#define ACPI_SIG_SLIT "SLIT"
73#define ACPI_SIG_SRAT "SRAT"
74
75
76
77
78
79#pragma pack(1)
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95struct acpi_subtable_header {
96 u8 type;
97 u8 length;
98};
99
100
101
102struct acpi_whea_header {
103 u8 action;
104 u8 instruction;
105 u8 flags;
106 u8 reserved;
107 struct acpi_generic_address register_region;
108 u64 value;
109 u64 mask;
110};
111
112
113
114
115
116
117
118
119struct acpi_table_bert {
120 struct acpi_table_header header;
121 u32 region_length;
122 u64 address;
123};
124
125
126
127struct acpi_bert_region {
128 u32 block_status;
129 u32 raw_data_offset;
130 u32 raw_data_length;
131 u32 data_length;
132 u32 error_severity;
133};
134
135
136
137#define ACPI_BERT_UNCORRECTABLE (1)
138#define ACPI_BERT_CORRECTABLE (1<<1)
139#define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2)
140#define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3)
141#define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4)
142
143
144
145enum acpi_bert_error_severity {
146 ACPI_BERT_ERROR_CORRECTABLE = 0,
147 ACPI_BERT_ERROR_FATAL = 1,
148 ACPI_BERT_ERROR_CORRECTED = 2,
149 ACPI_BERT_ERROR_NONE = 3,
150 ACPI_BERT_ERROR_RESERVED = 4
151};
152
153
154
155
156
157
158
159
160
161
162
163
164
165struct acpi_table_cpep {
166 struct acpi_table_header header;
167 u64 reserved;
168};
169
170
171
172struct acpi_cpep_polling {
173 struct acpi_subtable_header header;
174 u8 id;
175 u8 eid;
176 u32 interval;
177};
178
179
180
181
182
183
184
185
186struct acpi_table_ecdt {
187 struct acpi_table_header header;
188 struct acpi_generic_address control;
189 struct acpi_generic_address data;
190 u32 uid;
191 u8 gpe;
192 u8 id[1];
193};
194
195
196
197
198
199
200
201
202struct acpi_table_einj {
203 struct acpi_table_header header;
204 u32 header_length;
205 u8 flags;
206 u8 reserved[3];
207 u32 entries;
208};
209
210
211
212struct acpi_einj_entry {
213 struct acpi_whea_header whea_header;
214};
215
216
217
218#define ACPI_EINJ_PRESERVE (1)
219
220
221
222enum acpi_einj_actions {
223 ACPI_EINJ_BEGIN_OPERATION = 0,
224 ACPI_EINJ_GET_TRIGGER_TABLE = 1,
225 ACPI_EINJ_SET_ERROR_TYPE = 2,
226 ACPI_EINJ_GET_ERROR_TYPE = 3,
227 ACPI_EINJ_END_OPERATION = 4,
228 ACPI_EINJ_EXECUTE_OPERATION = 5,
229 ACPI_EINJ_CHECK_BUSY_STATUS = 6,
230 ACPI_EINJ_GET_COMMAND_STATUS = 7,
231 ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8,
232 ACPI_EINJ_ACTION_RESERVED = 9,
233 ACPI_EINJ_TRIGGER_ERROR = 0xFF
234};
235
236
237
238enum acpi_einj_instructions {
239 ACPI_EINJ_READ_REGISTER = 0,
240 ACPI_EINJ_READ_REGISTER_VALUE = 1,
241 ACPI_EINJ_WRITE_REGISTER = 2,
242 ACPI_EINJ_WRITE_REGISTER_VALUE = 3,
243 ACPI_EINJ_NOOP = 4,
244 ACPI_EINJ_FLUSH_CACHELINE = 5,
245 ACPI_EINJ_INSTRUCTION_RESERVED = 6
246};
247
248struct acpi_einj_error_type_with_addr {
249 u32 error_type;
250 u32 vendor_struct_offset;
251 u32 flags;
252 u32 apic_id;
253 u64 address;
254 u64 range;
255 u32 pcie_id;
256};
257
258struct acpi_einj_vendor {
259 u32 length;
260 u32 pcie_id;
261 u16 vendor_id;
262 u16 device_id;
263 u8 revision_id;
264 u8 reserved[3];
265};
266
267
268
269struct acpi_einj_trigger {
270 u32 header_size;
271 u32 revision;
272 u32 table_size;
273 u32 entry_count;
274};
275
276
277
278enum acpi_einj_command_status {
279 ACPI_EINJ_SUCCESS = 0,
280 ACPI_EINJ_FAILURE = 1,
281 ACPI_EINJ_INVALID_ACCESS = 2,
282 ACPI_EINJ_STATUS_RESERVED = 3
283};
284
285
286
287#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1)
288#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1)
289#define ACPI_EINJ_PROCESSOR_FATAL (1<<2)
290#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3)
291#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4)
292#define ACPI_EINJ_MEMORY_FATAL (1<<5)
293#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6)
294#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7)
295#define ACPI_EINJ_PCIX_FATAL (1<<8)
296#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9)
297#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10)
298#define ACPI_EINJ_PLATFORM_FATAL (1<<11)
299#define ACPI_EINJ_VENDOR_DEFINED (1<<31)
300
301
302
303
304
305
306
307
308struct acpi_table_erst {
309 struct acpi_table_header header;
310 u32 header_length;
311 u32 reserved;
312 u32 entries;
313};
314
315
316
317struct acpi_erst_entry {
318 struct acpi_whea_header whea_header;
319};
320
321
322
323#define ACPI_ERST_PRESERVE (1)
324
325
326
327enum acpi_erst_actions {
328 ACPI_ERST_BEGIN_WRITE = 0,
329 ACPI_ERST_BEGIN_READ = 1,
330 ACPI_ERST_BEGIN_CLEAR = 2,
331 ACPI_ERST_END = 3,
332 ACPI_ERST_SET_RECORD_OFFSET = 4,
333 ACPI_ERST_EXECUTE_OPERATION = 5,
334 ACPI_ERST_CHECK_BUSY_STATUS = 6,
335 ACPI_ERST_GET_COMMAND_STATUS = 7,
336 ACPI_ERST_GET_RECORD_ID = 8,
337 ACPI_ERST_SET_RECORD_ID = 9,
338 ACPI_ERST_GET_RECORD_COUNT = 10,
339 ACPI_ERST_BEGIN_DUMMY_WRIITE = 11,
340 ACPI_ERST_NOT_USED = 12,
341 ACPI_ERST_GET_ERROR_RANGE = 13,
342 ACPI_ERST_GET_ERROR_LENGTH = 14,
343 ACPI_ERST_GET_ERROR_ATTRIBUTES = 15,
344 ACPI_ERST_ACTION_RESERVED = 16
345};
346
347
348
349enum acpi_erst_instructions {
350 ACPI_ERST_READ_REGISTER = 0,
351 ACPI_ERST_READ_REGISTER_VALUE = 1,
352 ACPI_ERST_WRITE_REGISTER = 2,
353 ACPI_ERST_WRITE_REGISTER_VALUE = 3,
354 ACPI_ERST_NOOP = 4,
355 ACPI_ERST_LOAD_VAR1 = 5,
356 ACPI_ERST_LOAD_VAR2 = 6,
357 ACPI_ERST_STORE_VAR1 = 7,
358 ACPI_ERST_ADD = 8,
359 ACPI_ERST_SUBTRACT = 9,
360 ACPI_ERST_ADD_VALUE = 10,
361 ACPI_ERST_SUBTRACT_VALUE = 11,
362 ACPI_ERST_STALL = 12,
363 ACPI_ERST_STALL_WHILE_TRUE = 13,
364 ACPI_ERST_SKIP_NEXT_IF_TRUE = 14,
365 ACPI_ERST_GOTO = 15,
366 ACPI_ERST_SET_SRC_ADDRESS_BASE = 16,
367 ACPI_ERST_SET_DST_ADDRESS_BASE = 17,
368 ACPI_ERST_MOVE_DATA = 18,
369 ACPI_ERST_INSTRUCTION_RESERVED = 19
370};
371
372
373
374enum acpi_erst_command_status {
375 ACPI_ERST_SUCESS = 0,
376 ACPI_ERST_NO_SPACE = 1,
377 ACPI_ERST_NOT_AVAILABLE = 2,
378 ACPI_ERST_FAILURE = 3,
379 ACPI_ERST_RECORD_EMPTY = 4,
380 ACPI_ERST_NOT_FOUND = 5,
381 ACPI_ERST_STATUS_RESERVED = 6
382};
383
384
385
386struct acpi_erst_info {
387 u16 signature;
388 u8 data[48];
389};
390
391
392
393
394
395
396
397
398struct acpi_table_hest {
399 struct acpi_table_header header;
400 u32 error_source_count;
401};
402
403
404
405struct acpi_hest_header {
406 u16 type;
407 u16 source_id;
408};
409
410
411
412enum acpi_hest_types {
413 ACPI_HEST_TYPE_IA32_CHECK = 0,
414 ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
415 ACPI_HEST_TYPE_IA32_NMI = 2,
416 ACPI_HEST_TYPE_NOT_USED3 = 3,
417 ACPI_HEST_TYPE_NOT_USED4 = 4,
418 ACPI_HEST_TYPE_NOT_USED5 = 5,
419 ACPI_HEST_TYPE_AER_ROOT_PORT = 6,
420 ACPI_HEST_TYPE_AER_ENDPOINT = 7,
421 ACPI_HEST_TYPE_AER_BRIDGE = 8,
422 ACPI_HEST_TYPE_GENERIC_ERROR = 9,
423 ACPI_HEST_TYPE_RESERVED = 10
424};
425
426
427
428
429
430
431
432
433
434struct acpi_hest_ia_error_bank {
435 u8 bank_number;
436 u8 clear_status_on_init;
437 u8 status_format;
438 u8 reserved;
439 u32 control_register;
440 u64 control_data;
441 u32 status_register;
442 u32 address_register;
443 u32 misc_register;
444};
445
446
447
448struct acpi_hest_aer_common {
449 u16 reserved1;
450 u8 flags;
451 u8 enabled;
452 u32 records_to_preallocate;
453 u32 max_sections_per_record;
454 u32 bus;
455 u16 device;
456 u16 function;
457 u16 device_control;
458 u16 reserved2;
459 u32 uncorrectable_mask;
460 u32 uncorrectable_severity;
461 u32 correctable_mask;
462 u32 advanced_capabilities;
463};
464
465
466
467#define ACPI_HEST_FIRMWARE_FIRST (1)
468#define ACPI_HEST_GLOBAL (1<<1)
469
470
471
472struct acpi_hest_notify {
473 u8 type;
474 u8 length;
475 u16 config_write_enable;
476 u32 poll_interval;
477 u32 vector;
478 u32 polling_threshold_value;
479 u32 polling_threshold_window;
480 u32 error_threshold_value;
481 u32 error_threshold_window;
482};
483
484
485
486enum acpi_hest_notify_types {
487 ACPI_HEST_NOTIFY_POLLED = 0,
488 ACPI_HEST_NOTIFY_EXTERNAL = 1,
489 ACPI_HEST_NOTIFY_LOCAL = 2,
490 ACPI_HEST_NOTIFY_SCI = 3,
491 ACPI_HEST_NOTIFY_NMI = 4,
492 ACPI_HEST_NOTIFY_RESERVED = 5
493};
494
495
496
497#define ACPI_HEST_TYPE (1)
498#define ACPI_HEST_POLL_INTERVAL (1<<1)
499#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2)
500#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
501#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4)
502#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5)
503
504
505
506
507
508
509
510struct acpi_hest_ia_machine_check {
511 struct acpi_hest_header header;
512 u16 reserved1;
513 u8 flags;
514 u8 enabled;
515 u32 records_to_preallocate;
516 u32 max_sections_per_record;
517 u64 global_capability_data;
518 u64 global_control_data;
519 u8 num_hardware_banks;
520 u8 reserved3[7];
521};
522
523
524
525struct acpi_hest_ia_corrected {
526 struct acpi_hest_header header;
527 u16 reserved1;
528 u8 flags;
529 u8 enabled;
530 u32 records_to_preallocate;
531 u32 max_sections_per_record;
532 struct acpi_hest_notify notify;
533 u8 num_hardware_banks;
534 u8 reserved2[3];
535};
536
537
538
539struct acpi_hest_ia_nmi {
540 struct acpi_hest_header header;
541 u32 reserved;
542 u32 records_to_preallocate;
543 u32 max_sections_per_record;
544 u32 max_raw_data_length;
545};
546
547
548
549
550
551struct acpi_hest_aer_root {
552 struct acpi_hest_header header;
553 struct acpi_hest_aer_common aer;
554 u32 root_error_command;
555};
556
557
558
559struct acpi_hest_aer {
560 struct acpi_hest_header header;
561 struct acpi_hest_aer_common aer;
562};
563
564
565
566struct acpi_hest_aer_bridge {
567 struct acpi_hest_header header;
568 struct acpi_hest_aer_common aer;
569 u32 uncorrectable_mask2;
570 u32 uncorrectable_severity2;
571 u32 advanced_capabilities2;
572};
573
574
575
576struct acpi_hest_generic {
577 struct acpi_hest_header header;
578 u16 related_source_id;
579 u8 reserved;
580 u8 enabled;
581 u32 records_to_preallocate;
582 u32 max_sections_per_record;
583 u32 max_raw_data_length;
584 struct acpi_generic_address error_status_address;
585 struct acpi_hest_notify notify;
586 u32 error_block_length;
587};
588
589
590
591struct acpi_hest_generic_status {
592 u32 block_status;
593 u32 raw_data_offset;
594 u32 raw_data_length;
595 u32 data_length;
596 u32 error_severity;
597};
598
599
600
601#define ACPI_HEST_UNCORRECTABLE (1)
602#define ACPI_HEST_CORRECTABLE (1<<1)
603#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2)
604#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3)
605#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4)
606
607
608
609struct acpi_hest_generic_data {
610 u8 section_type[16];
611 u32 error_severity;
612 u16 revision;
613 u8 validation_bits;
614 u8 flags;
615 u32 error_data_length;
616 u8 fru_id[16];
617 u8 fru_text[20];
618};
619
620
621
622
623
624
625
626
627struct acpi_table_madt {
628 struct acpi_table_header header;
629 u32 address;
630 u32 flags;
631};
632
633
634
635#define ACPI_MADT_PCAT_COMPAT (1)
636
637
638
639#define ACPI_MADT_DUAL_PIC 0
640#define ACPI_MADT_MULTIPLE_APIC 1
641
642
643
644enum acpi_madt_type {
645 ACPI_MADT_TYPE_LOCAL_APIC = 0,
646 ACPI_MADT_TYPE_IO_APIC = 1,
647 ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
648 ACPI_MADT_TYPE_NMI_SOURCE = 3,
649 ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
650 ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
651 ACPI_MADT_TYPE_IO_SAPIC = 6,
652 ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
653 ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
654 ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
655 ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
656 ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
657 ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
658 ACPI_MADT_TYPE_RESERVED = 13
659};
660
661
662
663
664
665
666
667struct acpi_madt_local_apic {
668 struct acpi_subtable_header header;
669 u8 processor_id;
670 u8 id;
671 u32 lapic_flags;
672};
673
674
675
676struct acpi_madt_io_apic {
677 struct acpi_subtable_header header;
678 u8 id;
679 u8 reserved;
680 u32 address;
681 u32 global_irq_base;
682};
683
684
685
686struct acpi_madt_interrupt_override {
687 struct acpi_subtable_header header;
688 u8 bus;
689 u8 source_irq;
690 u32 global_irq;
691 u16 inti_flags;
692};
693
694
695
696struct acpi_madt_nmi_source {
697 struct acpi_subtable_header header;
698 u16 inti_flags;
699 u32 global_irq;
700};
701
702
703
704struct acpi_madt_local_apic_nmi {
705 struct acpi_subtable_header header;
706 u8 processor_id;
707 u16 inti_flags;
708 u8 lint;
709};
710
711
712
713struct acpi_madt_local_apic_override {
714 struct acpi_subtable_header header;
715 u16 reserved;
716 u64 address;
717};
718
719
720
721struct acpi_madt_io_sapic {
722 struct acpi_subtable_header header;
723 u8 id;
724 u8 reserved;
725 u32 global_irq_base;
726 u64 address;
727};
728
729
730
731struct acpi_madt_local_sapic {
732 struct acpi_subtable_header header;
733 u8 processor_id;
734 u8 id;
735 u8 eid;
736 u8 reserved[3];
737 u32 lapic_flags;
738 u32 uid;
739 char uid_string[1];
740};
741
742
743
744struct acpi_madt_interrupt_source {
745 struct acpi_subtable_header header;
746 u16 inti_flags;
747 u8 type;
748 u8 id;
749 u8 eid;
750 u8 io_sapic_vector;
751 u32 global_irq;
752 u32 flags;
753};
754
755
756
757#define ACPI_MADT_CPEI_OVERRIDE (1)
758
759
760
761struct acpi_madt_local_x2apic {
762 struct acpi_subtable_header header;
763 u16 reserved;
764 u32 local_apic_id;
765 u32 lapic_flags;
766 u32 uid;
767};
768
769
770
771struct acpi_madt_local_x2apic_nmi {
772 struct acpi_subtable_header header;
773 u16 inti_flags;
774 u32 uid;
775 u8 lint;
776 u8 reserved[3];
777};
778
779
780
781struct acpi_madt_generic_interrupt {
782 struct acpi_subtable_header header;
783 u16 reserved;
784 u32 gic_id;
785 u32 uid;
786 u32 flags;
787 u32 parking_version;
788 u32 performance_interrupt;
789 u64 parked_address;
790 u64 base_address;
791};
792
793
794
795struct acpi_madt_generic_distributor {
796 struct acpi_subtable_header header;
797 u16 reserved;
798 u32 gic_id;
799 u64 base_address;
800 u32 global_irq_base;
801 u32 reserved2;
802};
803
804
805
806
807
808
809
810#define ACPI_MADT_ENABLED (1)
811
812
813
814#define ACPI_MADT_POLARITY_MASK (3)
815#define ACPI_MADT_TRIGGER_MASK (3<<2)
816
817
818
819#define ACPI_MADT_POLARITY_CONFORMS 0
820#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1
821#define ACPI_MADT_POLARITY_RESERVED 2
822#define ACPI_MADT_POLARITY_ACTIVE_LOW 3
823
824#define ACPI_MADT_TRIGGER_CONFORMS (0)
825#define ACPI_MADT_TRIGGER_EDGE (1<<2)
826#define ACPI_MADT_TRIGGER_RESERVED (2<<2)
827#define ACPI_MADT_TRIGGER_LEVEL (3<<2)
828
829
830
831
832
833
834
835
836struct acpi_table_msct {
837 struct acpi_table_header header;
838 u32 proximity_offset;
839 u32 max_proximity_domains;
840 u32 max_clock_domains;
841 u64 max_address;
842};
843
844
845
846struct acpi_msct_proximity {
847 u8 revision;
848 u8 length;
849 u32 range_start;
850 u32 range_end;
851 u32 processor_capacity;
852 u64 memory_capacity;
853};
854
855
856
857
858
859
860
861
862struct acpi_table_sbst {
863 struct acpi_table_header header;
864 u32 warning_level;
865 u32 low_level;
866 u32 critical_level;
867};
868
869
870
871
872
873
874
875
876struct acpi_table_slit {
877 struct acpi_table_header header;
878 u64 locality_count;
879 u8 entry[1];
880};
881
882
883
884
885
886
887
888
889struct acpi_table_srat {
890 struct acpi_table_header header;
891 u32 table_revision;
892 u64 reserved;
893};
894
895
896
897enum acpi_srat_type {
898 ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
899 ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
900 ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
901 ACPI_SRAT_TYPE_RESERVED = 3
902};
903
904
905
906
907
908
909
910struct acpi_srat_cpu_affinity {
911 struct acpi_subtable_header header;
912 u8 proximity_domain_lo;
913 u8 apic_id;
914 u32 flags;
915 u8 local_sapic_eid;
916 u8 proximity_domain_hi[3];
917 u32 reserved;
918};
919
920
921
922#define ACPI_SRAT_CPU_USE_AFFINITY (1)
923
924
925
926struct acpi_srat_mem_affinity {
927 struct acpi_subtable_header header;
928 u32 proximity_domain;
929 u16 reserved;
930 u64 base_address;
931 u64 length;
932 u32 reserved1;
933 u32 flags;
934 u64 reserved2;
935};
936
937
938
939#define ACPI_SRAT_MEM_ENABLED (1)
940#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)
941#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2)
942
943
944
945struct acpi_srat_x2apic_cpu_affinity {
946 struct acpi_subtable_header header;
947 u16 reserved;
948 u32 proximity_domain;
949 u32 apic_id;
950 u32 flags;
951 u32 clock_domain;
952 u32 reserved2;
953};
954
955
956
957#define ACPI_SRAT_CPU_ENABLED (1)
958
959
960
961#pragma pack()
962
963#endif
964