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#define ACPI_SIG_NFIT "NFIT"
75
76
77
78
79
80#pragma pack(1)
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102struct acpi_subtable_header {
103 u8 type;
104 u8 length;
105};
106
107
108
109struct acpi_whea_header {
110 u8 action;
111 u8 instruction;
112 u8 flags;
113 u8 reserved;
114 struct acpi_generic_address register_region;
115 u64 value;
116 u64 mask;
117};
118
119
120
121
122
123
124
125
126struct acpi_table_bert {
127 struct acpi_table_header header;
128 u32 region_length;
129 u64 address;
130};
131
132
133
134struct acpi_bert_region {
135 u32 block_status;
136 u32 raw_data_offset;
137 u32 raw_data_length;
138 u32 data_length;
139 u32 error_severity;
140};
141
142
143
144#define ACPI_BERT_UNCORRECTABLE (1)
145#define ACPI_BERT_CORRECTABLE (1<<1)
146#define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2)
147#define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3)
148#define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4)
149
150
151
152enum acpi_bert_error_severity {
153 ACPI_BERT_ERROR_CORRECTABLE = 0,
154 ACPI_BERT_ERROR_FATAL = 1,
155 ACPI_BERT_ERROR_CORRECTED = 2,
156 ACPI_BERT_ERROR_NONE = 3,
157 ACPI_BERT_ERROR_RESERVED = 4
158};
159
160
161
162
163
164
165
166
167
168
169
170
171
172struct acpi_table_cpep {
173 struct acpi_table_header header;
174 u64 reserved;
175};
176
177
178
179struct acpi_cpep_polling {
180 struct acpi_subtable_header header;
181 u8 id;
182 u8 eid;
183 u32 interval;
184};
185
186
187
188
189
190
191
192
193struct acpi_table_ecdt {
194 struct acpi_table_header header;
195 struct acpi_generic_address control;
196 struct acpi_generic_address data;
197 u32 uid;
198 u8 gpe;
199 u8 id[1];
200};
201
202
203
204
205
206
207
208
209struct acpi_table_einj {
210 struct acpi_table_header header;
211 u32 header_length;
212 u8 flags;
213 u8 reserved[3];
214 u32 entries;
215};
216
217
218
219struct acpi_einj_entry {
220 struct acpi_whea_header whea_header;
221};
222
223
224
225#define ACPI_EINJ_PRESERVE (1)
226
227
228
229enum acpi_einj_actions {
230 ACPI_EINJ_BEGIN_OPERATION = 0,
231 ACPI_EINJ_GET_TRIGGER_TABLE = 1,
232 ACPI_EINJ_SET_ERROR_TYPE = 2,
233 ACPI_EINJ_GET_ERROR_TYPE = 3,
234 ACPI_EINJ_END_OPERATION = 4,
235 ACPI_EINJ_EXECUTE_OPERATION = 5,
236 ACPI_EINJ_CHECK_BUSY_STATUS = 6,
237 ACPI_EINJ_GET_COMMAND_STATUS = 7,
238 ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8,
239 ACPI_EINJ_ACTION_RESERVED = 9,
240 ACPI_EINJ_TRIGGER_ERROR = 0xFF
241};
242
243
244
245enum acpi_einj_instructions {
246 ACPI_EINJ_READ_REGISTER = 0,
247 ACPI_EINJ_READ_REGISTER_VALUE = 1,
248 ACPI_EINJ_WRITE_REGISTER = 2,
249 ACPI_EINJ_WRITE_REGISTER_VALUE = 3,
250 ACPI_EINJ_NOOP = 4,
251 ACPI_EINJ_FLUSH_CACHELINE = 5,
252 ACPI_EINJ_INSTRUCTION_RESERVED = 6
253};
254
255struct acpi_einj_error_type_with_addr {
256 u32 error_type;
257 u32 vendor_struct_offset;
258 u32 flags;
259 u32 apic_id;
260 u64 address;
261 u64 range;
262 u32 pcie_id;
263};
264
265struct acpi_einj_vendor {
266 u32 length;
267 u32 pcie_id;
268 u16 vendor_id;
269 u16 device_id;
270 u8 revision_id;
271 u8 reserved[3];
272};
273
274
275
276struct acpi_einj_trigger {
277 u32 header_size;
278 u32 revision;
279 u32 table_size;
280 u32 entry_count;
281};
282
283
284
285enum acpi_einj_command_status {
286 ACPI_EINJ_SUCCESS = 0,
287 ACPI_EINJ_FAILURE = 1,
288 ACPI_EINJ_INVALID_ACCESS = 2,
289 ACPI_EINJ_STATUS_RESERVED = 3
290};
291
292
293
294#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1)
295#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1)
296#define ACPI_EINJ_PROCESSOR_FATAL (1<<2)
297#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3)
298#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4)
299#define ACPI_EINJ_MEMORY_FATAL (1<<5)
300#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6)
301#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7)
302#define ACPI_EINJ_PCIX_FATAL (1<<8)
303#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9)
304#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10)
305#define ACPI_EINJ_PLATFORM_FATAL (1<<11)
306#define ACPI_EINJ_VENDOR_DEFINED (1<<31)
307
308
309
310
311
312
313
314
315struct acpi_table_erst {
316 struct acpi_table_header header;
317 u32 header_length;
318 u32 reserved;
319 u32 entries;
320};
321
322
323
324struct acpi_erst_entry {
325 struct acpi_whea_header whea_header;
326};
327
328
329
330#define ACPI_ERST_PRESERVE (1)
331
332
333
334enum acpi_erst_actions {
335 ACPI_ERST_BEGIN_WRITE = 0,
336 ACPI_ERST_BEGIN_READ = 1,
337 ACPI_ERST_BEGIN_CLEAR = 2,
338 ACPI_ERST_END = 3,
339 ACPI_ERST_SET_RECORD_OFFSET = 4,
340 ACPI_ERST_EXECUTE_OPERATION = 5,
341 ACPI_ERST_CHECK_BUSY_STATUS = 6,
342 ACPI_ERST_GET_COMMAND_STATUS = 7,
343 ACPI_ERST_GET_RECORD_ID = 8,
344 ACPI_ERST_SET_RECORD_ID = 9,
345 ACPI_ERST_GET_RECORD_COUNT = 10,
346 ACPI_ERST_BEGIN_DUMMY_WRIITE = 11,
347 ACPI_ERST_NOT_USED = 12,
348 ACPI_ERST_GET_ERROR_RANGE = 13,
349 ACPI_ERST_GET_ERROR_LENGTH = 14,
350 ACPI_ERST_GET_ERROR_ATTRIBUTES = 15,
351 ACPI_ERST_ACTION_RESERVED = 16
352};
353
354
355
356enum acpi_erst_instructions {
357 ACPI_ERST_READ_REGISTER = 0,
358 ACPI_ERST_READ_REGISTER_VALUE = 1,
359 ACPI_ERST_WRITE_REGISTER = 2,
360 ACPI_ERST_WRITE_REGISTER_VALUE = 3,
361 ACPI_ERST_NOOP = 4,
362 ACPI_ERST_LOAD_VAR1 = 5,
363 ACPI_ERST_LOAD_VAR2 = 6,
364 ACPI_ERST_STORE_VAR1 = 7,
365 ACPI_ERST_ADD = 8,
366 ACPI_ERST_SUBTRACT = 9,
367 ACPI_ERST_ADD_VALUE = 10,
368 ACPI_ERST_SUBTRACT_VALUE = 11,
369 ACPI_ERST_STALL = 12,
370 ACPI_ERST_STALL_WHILE_TRUE = 13,
371 ACPI_ERST_SKIP_NEXT_IF_TRUE = 14,
372 ACPI_ERST_GOTO = 15,
373 ACPI_ERST_SET_SRC_ADDRESS_BASE = 16,
374 ACPI_ERST_SET_DST_ADDRESS_BASE = 17,
375 ACPI_ERST_MOVE_DATA = 18,
376 ACPI_ERST_INSTRUCTION_RESERVED = 19
377};
378
379
380
381enum acpi_erst_command_status {
382 ACPI_ERST_SUCESS = 0,
383 ACPI_ERST_NO_SPACE = 1,
384 ACPI_ERST_NOT_AVAILABLE = 2,
385 ACPI_ERST_FAILURE = 3,
386 ACPI_ERST_RECORD_EMPTY = 4,
387 ACPI_ERST_NOT_FOUND = 5,
388 ACPI_ERST_STATUS_RESERVED = 6
389};
390
391
392
393struct acpi_erst_info {
394 u16 signature;
395 u8 data[48];
396};
397
398
399
400
401
402
403
404
405struct acpi_table_hest {
406 struct acpi_table_header header;
407 u32 error_source_count;
408};
409
410
411
412struct acpi_hest_header {
413 u16 type;
414 u16 source_id;
415};
416
417
418
419enum acpi_hest_types {
420 ACPI_HEST_TYPE_IA32_CHECK = 0,
421 ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
422 ACPI_HEST_TYPE_IA32_NMI = 2,
423 ACPI_HEST_TYPE_NOT_USED3 = 3,
424 ACPI_HEST_TYPE_NOT_USED4 = 4,
425 ACPI_HEST_TYPE_NOT_USED5 = 5,
426 ACPI_HEST_TYPE_AER_ROOT_PORT = 6,
427 ACPI_HEST_TYPE_AER_ENDPOINT = 7,
428 ACPI_HEST_TYPE_AER_BRIDGE = 8,
429 ACPI_HEST_TYPE_GENERIC_ERROR = 9,
430 ACPI_HEST_TYPE_RESERVED = 10
431};
432
433
434
435
436
437
438
439
440
441struct acpi_hest_ia_error_bank {
442 u8 bank_number;
443 u8 clear_status_on_init;
444 u8 status_format;
445 u8 reserved;
446 u32 control_register;
447 u64 control_data;
448 u32 status_register;
449 u32 address_register;
450 u32 misc_register;
451};
452
453
454
455struct acpi_hest_aer_common {
456 u16 reserved1;
457 u8 flags;
458 u8 enabled;
459 u32 records_to_preallocate;
460 u32 max_sections_per_record;
461 u32 bus;
462 u16 device;
463 u16 function;
464 u16 device_control;
465 u16 reserved2;
466 u32 uncorrectable_mask;
467 u32 uncorrectable_severity;
468 u32 correctable_mask;
469 u32 advanced_capabilities;
470};
471
472
473
474#define ACPI_HEST_FIRMWARE_FIRST (1)
475#define ACPI_HEST_GLOBAL (1<<1)
476
477
478
479
480
481
482#define ACPI_HEST_BUS(bus) ((bus) & 0xFF)
483#define ACPI_HEST_SEGMENT(bus) (((bus) >> 8) & 0xFFFF)
484
485
486
487struct acpi_hest_notify {
488 u8 type;
489 u8 length;
490 u16 config_write_enable;
491 u32 poll_interval;
492 u32 vector;
493 u32 polling_threshold_value;
494 u32 polling_threshold_window;
495 u32 error_threshold_value;
496 u32 error_threshold_window;
497};
498
499
500
501enum acpi_hest_notify_types {
502 ACPI_HEST_NOTIFY_POLLED = 0,
503 ACPI_HEST_NOTIFY_EXTERNAL = 1,
504 ACPI_HEST_NOTIFY_LOCAL = 2,
505 ACPI_HEST_NOTIFY_SCI = 3,
506 ACPI_HEST_NOTIFY_NMI = 4,
507 ACPI_HEST_NOTIFY_CMCI = 5,
508 ACPI_HEST_NOTIFY_MCE = 6,
509 ACPI_HEST_NOTIFY_RESERVED = 7
510};
511
512
513
514#define ACPI_HEST_TYPE (1)
515#define ACPI_HEST_POLL_INTERVAL (1<<1)
516#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2)
517#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
518#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4)
519#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5)
520
521
522
523
524
525
526
527struct acpi_hest_ia_machine_check {
528 struct acpi_hest_header header;
529 u16 reserved1;
530 u8 flags;
531 u8 enabled;
532 u32 records_to_preallocate;
533 u32 max_sections_per_record;
534 u64 global_capability_data;
535 u64 global_control_data;
536 u8 num_hardware_banks;
537 u8 reserved3[7];
538};
539
540
541
542struct acpi_hest_ia_corrected {
543 struct acpi_hest_header header;
544 u16 reserved1;
545 u8 flags;
546 u8 enabled;
547 u32 records_to_preallocate;
548 u32 max_sections_per_record;
549 struct acpi_hest_notify notify;
550 u8 num_hardware_banks;
551 u8 reserved2[3];
552};
553
554
555
556struct acpi_hest_ia_nmi {
557 struct acpi_hest_header header;
558 u32 reserved;
559 u32 records_to_preallocate;
560 u32 max_sections_per_record;
561 u32 max_raw_data_length;
562};
563
564
565
566
567
568struct acpi_hest_aer_root {
569 struct acpi_hest_header header;
570 struct acpi_hest_aer_common aer;
571 u32 root_error_command;
572};
573
574
575
576struct acpi_hest_aer {
577 struct acpi_hest_header header;
578 struct acpi_hest_aer_common aer;
579};
580
581
582
583struct acpi_hest_aer_bridge {
584 struct acpi_hest_header header;
585 struct acpi_hest_aer_common aer;
586 u32 uncorrectable_mask2;
587 u32 uncorrectable_severity2;
588 u32 advanced_capabilities2;
589};
590
591
592
593struct acpi_hest_generic {
594 struct acpi_hest_header header;
595 u16 related_source_id;
596 u8 reserved;
597 u8 enabled;
598 u32 records_to_preallocate;
599 u32 max_sections_per_record;
600 u32 max_raw_data_length;
601 struct acpi_generic_address error_status_address;
602 struct acpi_hest_notify notify;
603 u32 error_block_length;
604};
605
606
607
608struct acpi_hest_generic_status {
609 u32 block_status;
610 u32 raw_data_offset;
611 u32 raw_data_length;
612 u32 data_length;
613 u32 error_severity;
614};
615
616
617
618#define ACPI_HEST_UNCORRECTABLE (1)
619#define ACPI_HEST_CORRECTABLE (1<<1)
620#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2)
621#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3)
622#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4)
623
624
625
626struct acpi_hest_generic_data {
627 u8 section_type[16];
628 u32 error_severity;
629 u16 revision;
630 u8 validation_bits;
631 u8 flags;
632 u32 error_data_length;
633 u8 fru_id[16];
634 u8 fru_text[20];
635};
636
637
638
639
640
641
642
643
644struct acpi_table_madt {
645 struct acpi_table_header header;
646 u32 address;
647 u32 flags;
648};
649
650
651
652#define ACPI_MADT_PCAT_COMPAT (1)
653
654
655
656#define ACPI_MADT_DUAL_PIC 0
657#define ACPI_MADT_MULTIPLE_APIC 1
658
659
660
661enum acpi_madt_type {
662 ACPI_MADT_TYPE_LOCAL_APIC = 0,
663 ACPI_MADT_TYPE_IO_APIC = 1,
664 ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
665 ACPI_MADT_TYPE_NMI_SOURCE = 3,
666 ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
667 ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
668 ACPI_MADT_TYPE_IO_SAPIC = 6,
669 ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
670 ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
671 ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
672 ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
673 ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
674 ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
675 ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
676 ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
677 ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
678 ACPI_MADT_TYPE_RESERVED = 16
679};
680
681
682
683
684
685
686
687struct acpi_madt_local_apic {
688 struct acpi_subtable_header header;
689 u8 processor_id;
690 u8 id;
691 u32 lapic_flags;
692};
693
694
695
696struct acpi_madt_io_apic {
697 struct acpi_subtable_header header;
698 u8 id;
699 u8 reserved;
700 u32 address;
701 u32 global_irq_base;
702};
703
704
705
706struct acpi_madt_interrupt_override {
707 struct acpi_subtable_header header;
708 u8 bus;
709 u8 source_irq;
710 u32 global_irq;
711 u16 inti_flags;
712};
713
714
715
716struct acpi_madt_nmi_source {
717 struct acpi_subtable_header header;
718 u16 inti_flags;
719 u32 global_irq;
720};
721
722
723
724struct acpi_madt_local_apic_nmi {
725 struct acpi_subtable_header header;
726 u8 processor_id;
727 u16 inti_flags;
728 u8 lint;
729};
730
731
732
733struct acpi_madt_local_apic_override {
734 struct acpi_subtable_header header;
735 u16 reserved;
736 u64 address;
737};
738
739
740
741struct acpi_madt_io_sapic {
742 struct acpi_subtable_header header;
743 u8 id;
744 u8 reserved;
745 u32 global_irq_base;
746 u64 address;
747};
748
749
750
751struct acpi_madt_local_sapic {
752 struct acpi_subtable_header header;
753 u8 processor_id;
754 u8 id;
755 u8 eid;
756 u8 reserved[3];
757 u32 lapic_flags;
758 u32 uid;
759 char uid_string[1];
760};
761
762
763
764struct acpi_madt_interrupt_source {
765 struct acpi_subtable_header header;
766 u16 inti_flags;
767 u8 type;
768 u8 id;
769 u8 eid;
770 u8 io_sapic_vector;
771 u32 global_irq;
772 u32 flags;
773};
774
775
776
777#define ACPI_MADT_CPEI_OVERRIDE (1)
778
779
780
781struct acpi_madt_local_x2apic {
782 struct acpi_subtable_header header;
783 u16 reserved;
784 u32 local_apic_id;
785 u32 lapic_flags;
786 u32 uid;
787};
788
789
790
791struct acpi_madt_local_x2apic_nmi {
792 struct acpi_subtable_header header;
793 u16 inti_flags;
794 u32 uid;
795 u8 lint;
796 u8 reserved[3];
797};
798
799
800
801struct acpi_madt_generic_interrupt {
802 struct acpi_subtable_header header;
803 u16 reserved;
804 u32 cpu_interface_number;
805 u32 uid;
806 u32 flags;
807 u32 parking_version;
808 u32 performance_interrupt;
809 u64 parked_address;
810 u64 base_address;
811 u64 gicv_base_address;
812 u64 gich_base_address;
813 u32 vgic_interrupt;
814 u64 gicr_base_address;
815 u64 arm_mpidr;
816 u8 efficiency_class;
817 u8 reserved2[3];
818};
819
820
821
822
823#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1)
824#define ACPI_MADT_VGIC_IRQ_MODE (1<<2)
825
826
827
828struct acpi_madt_generic_distributor {
829 struct acpi_subtable_header header;
830 u16 reserved;
831 u32 gic_id;
832 u64 base_address;
833 u32 global_irq_base;
834 u8 version;
835 u8 reserved2[3];
836};
837
838
839
840enum acpi_madt_gic_version {
841 ACPI_MADT_GIC_VERSION_NONE = 0,
842 ACPI_MADT_GIC_VERSION_V1 = 1,
843 ACPI_MADT_GIC_VERSION_V2 = 2,
844 ACPI_MADT_GIC_VERSION_V3 = 3,
845 ACPI_MADT_GIC_VERSION_V4 = 4,
846 ACPI_MADT_GIC_VERSION_RESERVED = 5
847};
848
849
850
851struct acpi_madt_generic_msi_frame {
852 struct acpi_subtable_header header;
853 u16 reserved;
854 u32 msi_frame_id;
855 u64 base_address;
856 u32 flags;
857 u16 spi_count;
858 u16 spi_base;
859};
860
861
862
863#define ACPI_MADT_OVERRIDE_SPI_VALUES (1)
864
865
866
867struct acpi_madt_generic_redistributor {
868 struct acpi_subtable_header header;
869 u16 reserved;
870 u64 base_address;
871 u32 length;
872};
873
874
875
876struct acpi_madt_generic_translator {
877 struct acpi_subtable_header header;
878 u16 reserved;
879 u32 translation_id;
880 u64 base_address;
881 u32 reserved2;
882};
883
884
885
886
887
888
889
890#define ACPI_MADT_ENABLED (1)
891
892
893
894#define ACPI_MADT_POLARITY_MASK (3)
895#define ACPI_MADT_TRIGGER_MASK (3<<2)
896
897
898
899#define ACPI_MADT_POLARITY_CONFORMS 0
900#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1
901#define ACPI_MADT_POLARITY_RESERVED 2
902#define ACPI_MADT_POLARITY_ACTIVE_LOW 3
903
904#define ACPI_MADT_TRIGGER_CONFORMS (0)
905#define ACPI_MADT_TRIGGER_EDGE (1<<2)
906#define ACPI_MADT_TRIGGER_RESERVED (2<<2)
907#define ACPI_MADT_TRIGGER_LEVEL (3<<2)
908
909
910
911
912
913
914
915
916struct acpi_table_msct {
917 struct acpi_table_header header;
918 u32 proximity_offset;
919 u32 max_proximity_domains;
920 u32 max_clock_domains;
921 u64 max_address;
922};
923
924
925
926struct acpi_msct_proximity {
927 u8 revision;
928 u8 length;
929 u32 range_start;
930 u32 range_end;
931 u32 processor_capacity;
932 u64 memory_capacity;
933};
934
935
936
937
938
939
940
941
942struct acpi_table_nfit {
943 struct acpi_table_header header;
944 u32 reserved;
945};
946
947
948
949struct acpi_nfit_header {
950 u16 type;
951 u16 length;
952};
953
954
955
956enum acpi_nfit_type {
957 ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,
958 ACPI_NFIT_TYPE_MEMORY_MAP = 1,
959 ACPI_NFIT_TYPE_INTERLEAVE = 2,
960 ACPI_NFIT_TYPE_SMBIOS = 3,
961 ACPI_NFIT_TYPE_CONTROL_REGION = 4,
962 ACPI_NFIT_TYPE_DATA_REGION = 5,
963 ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,
964 ACPI_NFIT_TYPE_RESERVED = 7
965};
966
967
968
969
970
971
972
973struct acpi_nfit_system_address {
974 struct acpi_nfit_header header;
975 u16 range_index;
976 u16 flags;
977 u32 reserved;
978 u32 proximity_domain;
979 u8 range_guid[16];
980 u64 address;
981 u64 length;
982 u64 memory_mapping;
983};
984
985
986
987#define ACPI_NFIT_ADD_ONLINE_ONLY (1)
988#define ACPI_NFIT_PROXIMITY_VALID (1<<1)
989
990
991
992
993
994struct acpi_nfit_memory_map {
995 struct acpi_nfit_header header;
996 u32 device_handle;
997 u16 physical_id;
998 u16 region_id;
999 u16 range_index;
1000 u16 region_index;
1001 u64 region_size;
1002 u64 region_offset;
1003 u64 address;
1004 u16 interleave_index;
1005 u16 interleave_ways;
1006 u16 flags;
1007 u16 reserved;
1008};
1009
1010
1011
1012#define ACPI_NFIT_MEM_SAVE_FAILED (1)
1013#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1)
1014#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2)
1015#define ACPI_NFIT_MEM_NOT_ARMED (1<<3)
1016#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4)
1017#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5)
1018
1019
1020
1021struct acpi_nfit_interleave {
1022 struct acpi_nfit_header header;
1023 u16 interleave_index;
1024 u16 reserved;
1025 u32 line_count;
1026 u32 line_size;
1027 u32 line_offset[1];
1028};
1029
1030
1031
1032struct acpi_nfit_smbios {
1033 struct acpi_nfit_header header;
1034 u32 reserved;
1035 u8 data[1];
1036};
1037
1038
1039
1040struct acpi_nfit_control_region {
1041 struct acpi_nfit_header header;
1042 u16 region_index;
1043 u16 vendor_id;
1044 u16 device_id;
1045 u16 revision_id;
1046 u16 subsystem_vendor_id;
1047 u16 subsystem_device_id;
1048 u16 subsystem_revision_id;
1049 u8 reserved[6];
1050 u32 serial_number;
1051 u16 code;
1052 u16 windows;
1053 u64 window_size;
1054 u64 command_offset;
1055 u64 command_size;
1056 u64 status_offset;
1057 u64 status_size;
1058 u16 flags;
1059 u8 reserved1[6];
1060};
1061
1062
1063
1064#define ACPI_NFIT_CONTROL_BUFFERED (1)
1065
1066
1067
1068struct acpi_nfit_data_region {
1069 struct acpi_nfit_header header;
1070 u16 region_index;
1071 u16 windows;
1072 u64 offset;
1073 u64 size;
1074 u64 capacity;
1075 u64 start_address;
1076};
1077
1078
1079
1080struct acpi_nfit_flush_address {
1081 struct acpi_nfit_header header;
1082 u32 device_handle;
1083 u16 hint_count;
1084 u8 reserved[6];
1085 u64 hint_address[1];
1086};
1087
1088
1089
1090
1091
1092
1093
1094
1095struct acpi_table_sbst {
1096 struct acpi_table_header header;
1097 u32 warning_level;
1098 u32 low_level;
1099 u32 critical_level;
1100};
1101
1102
1103
1104
1105
1106
1107
1108
1109struct acpi_table_slit {
1110 struct acpi_table_header header;
1111 u64 locality_count;
1112 u8 entry[1];
1113};
1114
1115
1116
1117
1118
1119
1120
1121
1122struct acpi_table_srat {
1123 struct acpi_table_header header;
1124 u32 table_revision;
1125 u64 reserved;
1126};
1127
1128
1129
1130enum acpi_srat_type {
1131 ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
1132 ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
1133 ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
1134 ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
1135 ACPI_SRAT_TYPE_RESERVED = 4
1136};
1137
1138
1139
1140
1141
1142
1143
1144struct acpi_srat_cpu_affinity {
1145 struct acpi_subtable_header header;
1146 u8 proximity_domain_lo;
1147 u8 apic_id;
1148 u32 flags;
1149 u8 local_sapic_eid;
1150 u8 proximity_domain_hi[3];
1151 u32 clock_domain;
1152};
1153
1154
1155
1156#define ACPI_SRAT_CPU_USE_AFFINITY (1)
1157
1158
1159
1160struct acpi_srat_mem_affinity {
1161 struct acpi_subtable_header header;
1162 u32 proximity_domain;
1163 u16 reserved;
1164 u64 base_address;
1165 u64 length;
1166 u32 reserved1;
1167 u32 flags;
1168 u64 reserved2;
1169};
1170
1171
1172
1173#define ACPI_SRAT_MEM_ENABLED (1)
1174#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)
1175#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2)
1176
1177
1178
1179struct acpi_srat_x2apic_cpu_affinity {
1180 struct acpi_subtable_header header;
1181 u16 reserved;
1182 u32 proximity_domain;
1183 u32 apic_id;
1184 u32 flags;
1185 u32 clock_domain;
1186 u32 reserved2;
1187};
1188
1189
1190
1191#define ACPI_SRAT_CPU_ENABLED (1)
1192
1193
1194
1195struct acpi_srat_gicc_affinity {
1196 struct acpi_subtable_header header;
1197 u32 proximity_domain;
1198 u32 acpi_processor_uid;
1199 u32 flags;
1200 u32 clock_domain;
1201};
1202
1203
1204
1205#define ACPI_SRAT_GICC_ENABLED (1)
1206
1207
1208
1209#pragma pack()
1210
1211#endif
1212