1
2
3
4
5
6
7
8
9
10#ifndef __ACTBL3_H__
11#define __ACTBL3_H__
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27#define ACPI_SIG_SLIC "SLIC"
28#define ACPI_SIG_SLIT "SLIT"
29#define ACPI_SIG_SPCR "SPCR"
30#define ACPI_SIG_SPMI "SPMI"
31#define ACPI_SIG_SRAT "SRAT"
32#define ACPI_SIG_STAO "STAO"
33#define ACPI_SIG_TCPA "TCPA"
34#define ACPI_SIG_TPM2 "TPM2"
35#define ACPI_SIG_UEFI "UEFI"
36#define ACPI_SIG_VIOT "VIOT"
37#define ACPI_SIG_WAET "WAET"
38#define ACPI_SIG_WDAT "WDAT"
39#define ACPI_SIG_WDDT "WDDT"
40#define ACPI_SIG_WDRT "WDRT"
41#define ACPI_SIG_WPBT "WPBT"
42#define ACPI_SIG_WSMT "WSMT"
43#define ACPI_SIG_XENV "XENV"
44#define ACPI_SIG_XXXX "XXXX"
45
46
47
48
49
50#pragma pack(1)
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75struct acpi_table_slic {
76 struct acpi_table_header header;
77};
78
79
80
81
82
83
84
85
86struct acpi_table_slit {
87 struct acpi_table_header header;
88 u64 locality_count;
89 u8 entry[1];
90};
91
92
93
94
95
96
97
98
99
100
101
102struct acpi_table_spcr {
103 struct acpi_table_header header;
104 u8 interface_type;
105 u8 reserved[3];
106 struct acpi_generic_address serial_port;
107 u8 interrupt_type;
108 u8 pc_interrupt;
109 u32 interrupt;
110 u8 baud_rate;
111 u8 parity;
112 u8 stop_bits;
113 u8 flow_control;
114 u8 terminal_type;
115 u8 reserved1;
116 u16 pci_device_id;
117 u16 pci_vendor_id;
118 u8 pci_bus;
119 u8 pci_device;
120 u8 pci_function;
121 u32 pci_flags;
122 u8 pci_segment;
123 u32 reserved2;
124};
125
126
127
128#define ACPI_SPCR_DO_NOT_DISABLE (1)
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143struct acpi_table_spmi {
144 struct acpi_table_header header;
145 u8 interface_type;
146 u8 reserved;
147 u16 spec_revision;
148 u8 interrupt_type;
149 u8 gpe_number;
150 u8 reserved1;
151 u8 pci_device_flag;
152 u32 interrupt;
153 struct acpi_generic_address ipmi_register;
154 u8 pci_segment;
155 u8 pci_bus;
156 u8 pci_device;
157 u8 pci_function;
158 u8 reserved2;
159};
160
161
162
163enum acpi_spmi_interface_types {
164 ACPI_SPMI_NOT_USED = 0,
165 ACPI_SPMI_KEYBOARD = 1,
166 ACPI_SPMI_SMI = 2,
167 ACPI_SPMI_BLOCK_TRANSFER = 3,
168 ACPI_SPMI_SMBUS = 4,
169 ACPI_SPMI_RESERVED = 5
170};
171
172
173
174
175
176
177
178
179struct acpi_table_srat {
180 struct acpi_table_header header;
181 u32 table_revision;
182 u64 reserved;
183};
184
185
186
187enum acpi_srat_type {
188 ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
189 ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
190 ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
191 ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
192 ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4,
193 ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5,
194 ACPI_SRAT_TYPE_RESERVED = 6
195};
196
197
198
199
200
201
202
203struct acpi_srat_cpu_affinity {
204 struct acpi_subtable_header header;
205 u8 proximity_domain_lo;
206 u8 apic_id;
207 u32 flags;
208 u8 local_sapic_eid;
209 u8 proximity_domain_hi[3];
210 u32 clock_domain;
211};
212
213
214
215#define ACPI_SRAT_CPU_USE_AFFINITY (1)
216
217
218
219struct acpi_srat_mem_affinity {
220 struct acpi_subtable_header header;
221 u32 proximity_domain;
222 u16 reserved;
223 u64 base_address;
224 u64 length;
225 u32 reserved1;
226 u32 flags;
227 u64 reserved2;
228};
229
230
231
232#define ACPI_SRAT_MEM_ENABLED (1)
233#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)
234#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2)
235
236
237
238struct acpi_srat_x2apic_cpu_affinity {
239 struct acpi_subtable_header header;
240 u16 reserved;
241 u32 proximity_domain;
242 u32 apic_id;
243 u32 flags;
244 u32 clock_domain;
245 u32 reserved2;
246};
247
248
249
250#define ACPI_SRAT_CPU_ENABLED (1)
251
252
253
254struct acpi_srat_gicc_affinity {
255 struct acpi_subtable_header header;
256 u32 proximity_domain;
257 u32 acpi_processor_uid;
258 u32 flags;
259 u32 clock_domain;
260};
261
262
263
264#define ACPI_SRAT_GICC_ENABLED (1)
265
266
267
268struct acpi_srat_gic_its_affinity {
269 struct acpi_subtable_header header;
270 u32 proximity_domain;
271 u16 reserved;
272 u32 its_id;
273};
274
275
276
277struct acpi_srat_generic_affinity {
278 struct acpi_subtable_header header;
279 u8 reserved;
280 u8 device_handle_type;
281 u32 proximity_domain;
282 u8 device_handle[16];
283 u32 flags;
284 u32 reserved1;
285};
286
287
288
289#define ACPI_SRAT_GENERIC_AFFINITY_ENABLED (1)
290#define ACPI_SRAT_ARCHITECTURAL_TRANSACTIONS (1<<1)
291
292
293
294
295
296
297
298
299
300
301
302struct acpi_table_stao {
303 struct acpi_table_header header;
304 u8 ignore_uart;
305};
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324struct acpi_table_tcpa_hdr {
325 struct acpi_table_header header;
326 u16 platform_class;
327};
328
329
330
331
332
333#define ACPI_TCPA_CLIENT_TABLE 0
334#define ACPI_TCPA_SERVER_TABLE 1
335
336struct acpi_table_tcpa_client {
337 u32 minimum_log_length;
338 u64 log_address;
339};
340
341struct acpi_table_tcpa_server {
342 u16 reserved;
343 u64 minimum_log_length;
344 u64 log_address;
345 u16 spec_revision;
346 u8 device_flags;
347 u8 interrupt_flags;
348 u8 gpe_number;
349 u8 reserved2[3];
350 u32 global_interrupt;
351 struct acpi_generic_address address;
352 u32 reserved3;
353 struct acpi_generic_address config_address;
354 u8 group;
355 u8 bus;
356 u8 device;
357 u8 function;
358};
359
360
361
362#define ACPI_TCPA_PCI_DEVICE (1)
363#define ACPI_TCPA_BUS_PNP (1<<1)
364#define ACPI_TCPA_ADDRESS_VALID (1<<2)
365
366
367
368#define ACPI_TCPA_INTERRUPT_MODE (1)
369#define ACPI_TCPA_INTERRUPT_POLARITY (1<<1)
370#define ACPI_TCPA_SCI_VIA_GPE (1<<2)
371#define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3)
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388struct acpi_table_tpm23 {
389 struct acpi_table_header header;
390 u32 reserved;
391 u64 control_address;
392 u32 start_method;
393};
394
395
396
397#define ACPI_TPM23_ACPI_START_METHOD 2
398
399
400
401
402
403struct acpi_tmp23_trailer {
404 u32 reserved;
405};
406
407
408
409struct acpi_table_tpm2 {
410 struct acpi_table_header header;
411 u16 platform_class;
412 u16 reserved;
413 u64 control_address;
414 u32 start_method;
415
416
417};
418
419
420struct acpi_tpm2_phy {
421 u8 start_method_specific[12];
422 u32 log_area_minimum_length;
423 u64 log_area_start_address;
424};
425
426
427
428#define ACPI_TPM2_NOT_ALLOWED 0
429#define ACPI_TPM2_RESERVED1 1
430#define ACPI_TPM2_START_METHOD 2
431#define ACPI_TPM2_RESERVED3 3
432#define ACPI_TPM2_RESERVED4 4
433#define ACPI_TPM2_RESERVED5 5
434#define ACPI_TPM2_MEMORY_MAPPED 6
435#define ACPI_TPM2_COMMAND_BUFFER 7
436#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8
437#define ACPI_TPM2_RESERVED9 9
438#define ACPI_TPM2_RESERVED10 10
439#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11
440#define ACPI_TPM2_RESERVED 12
441
442
443
444struct acpi_tpm2_trailer {
445 u8 method_parameters[12];
446 u32 minimum_log_length;
447 u64 log_address;
448};
449
450
451
452
453
454
455
456struct acpi_tpm2_arm_smc {
457 u32 global_interrupt;
458 u8 interrupt_flags;
459 u8 operation_flags;
460 u16 reserved;
461 u32 function_id;
462};
463
464
465
466#define ACPI_TPM2_INTERRUPT_SUPPORT (1)
467
468
469
470#define ACPI_TPM2_IDLE_SUPPORT (1)
471
472
473
474
475
476
477
478
479
480
481
482struct acpi_table_uefi {
483 struct acpi_table_header header;
484 u8 identifier[16];
485 u16 data_offset;
486};
487
488
489
490
491
492
493
494
495struct acpi_table_viot {
496 struct acpi_table_header header;
497 u16 node_count;
498 u16 node_offset;
499 u8 reserved[8];
500};
501
502
503
504struct acpi_viot_header {
505 u8 type;
506 u8 reserved;
507 u16 length;
508};
509
510
511
512enum acpi_viot_node_type {
513 ACPI_VIOT_NODE_PCI_RANGE = 0x01,
514 ACPI_VIOT_NODE_MMIO = 0x02,
515 ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI = 0x03,
516 ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO = 0x04,
517 ACPI_VIOT_RESERVED = 0x05
518};
519
520
521
522struct acpi_viot_pci_range {
523 struct acpi_viot_header header;
524 u32 endpoint_start;
525 u16 segment_start;
526 u16 segment_end;
527 u16 bdf_start;
528 u16 bdf_end;
529 u16 output_node;
530 u8 reserved[6];
531};
532
533struct acpi_viot_mmio {
534 struct acpi_viot_header header;
535 u32 endpoint;
536 u64 base_address;
537 u16 output_node;
538 u8 reserved[6];
539};
540
541struct acpi_viot_virtio_iommu_pci {
542 struct acpi_viot_header header;
543 u16 segment;
544 u16 bdf;
545 u8 reserved[8];
546};
547
548struct acpi_viot_virtio_iommu_mmio {
549 struct acpi_viot_header header;
550 u8 reserved[4];
551 u64 base_address;
552};
553
554
555
556
557
558
559
560
561
562
563struct acpi_table_waet {
564 struct acpi_table_header header;
565 u32 flags;
566};
567
568
569
570#define ACPI_WAET_RTC_NO_ACK (1)
571#define ACPI_WAET_TIMER_ONE_READ (1<<1)
572
573
574
575
576
577
578
579
580
581
582
583struct acpi_table_wdat {
584 struct acpi_table_header header;
585 u32 header_length;
586 u16 pci_segment;
587 u8 pci_bus;
588 u8 pci_device;
589 u8 pci_function;
590 u8 reserved[3];
591 u32 timer_period;
592 u32 max_count;
593 u32 min_count;
594 u8 flags;
595 u8 reserved2[3];
596 u32 entries;
597};
598
599
600
601#define ACPI_WDAT_ENABLED (1)
602#define ACPI_WDAT_STOPPED 0x80
603
604
605
606struct acpi_wdat_entry {
607 u8 action;
608 u8 instruction;
609 u16 reserved;
610 struct acpi_generic_address register_region;
611 u32 value;
612 u32 mask;
613};
614
615
616
617enum acpi_wdat_actions {
618 ACPI_WDAT_RESET = 1,
619 ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
620 ACPI_WDAT_GET_COUNTDOWN = 5,
621 ACPI_WDAT_SET_COUNTDOWN = 6,
622 ACPI_WDAT_GET_RUNNING_STATE = 8,
623 ACPI_WDAT_SET_RUNNING_STATE = 9,
624 ACPI_WDAT_GET_STOPPED_STATE = 10,
625 ACPI_WDAT_SET_STOPPED_STATE = 11,
626 ACPI_WDAT_GET_REBOOT = 16,
627 ACPI_WDAT_SET_REBOOT = 17,
628 ACPI_WDAT_GET_SHUTDOWN = 18,
629 ACPI_WDAT_SET_SHUTDOWN = 19,
630 ACPI_WDAT_GET_STATUS = 32,
631 ACPI_WDAT_SET_STATUS = 33,
632 ACPI_WDAT_ACTION_RESERVED = 34
633};
634
635
636
637enum acpi_wdat_instructions {
638 ACPI_WDAT_READ_VALUE = 0,
639 ACPI_WDAT_READ_COUNTDOWN = 1,
640 ACPI_WDAT_WRITE_VALUE = 2,
641 ACPI_WDAT_WRITE_COUNTDOWN = 3,
642 ACPI_WDAT_INSTRUCTION_RESERVED = 4,
643 ACPI_WDAT_PRESERVE_REGISTER = 0x80
644};
645
646
647
648
649
650
651
652
653
654
655
656struct acpi_table_wddt {
657 struct acpi_table_header header;
658 u16 spec_version;
659 u16 table_version;
660 u16 pci_vendor_id;
661 struct acpi_generic_address address;
662 u16 max_count;
663 u16 min_count;
664 u16 period;
665 u16 status;
666 u16 capability;
667};
668
669
670
671#define ACPI_WDDT_AVAILABLE (1)
672#define ACPI_WDDT_ACTIVE (1<<1)
673#define ACPI_WDDT_TCO_OS_OWNED (1<<2)
674#define ACPI_WDDT_USER_RESET (1<<11)
675#define ACPI_WDDT_WDT_RESET (1<<12)
676#define ACPI_WDDT_POWER_FAIL (1<<13)
677#define ACPI_WDDT_UNKNOWN_RESET (1<<14)
678
679
680
681#define ACPI_WDDT_AUTO_RESET (1)
682#define ACPI_WDDT_ALERT_SUPPORT (1<<1)
683
684
685
686
687
688
689
690
691
692
693
694struct acpi_table_wdrt {
695 struct acpi_table_header header;
696 struct acpi_generic_address control_register;
697 struct acpi_generic_address count_register;
698 u16 pci_device_id;
699 u16 pci_vendor_id;
700 u8 pci_bus;
701 u8 pci_device;
702 u8 pci_function;
703 u8 pci_segment;
704 u16 max_count;
705 u8 units;
706};
707
708
709
710
711
712
713
714
715
716
717struct acpi_table_wpbt {
718 struct acpi_table_header header;
719 u32 handoff_size;
720 u64 handoff_address;
721 u8 layout;
722 u8 type;
723 u16 arguments_length;
724};
725
726struct acpi_wpbt_unicode {
727 u16 *unicode_string;
728};
729
730
731
732
733
734
735
736
737
738
739
740struct acpi_table_wsmt {
741 struct acpi_table_header header;
742 u32 protection_flags;
743};
744
745
746
747#define ACPI_WSMT_FIXED_COMM_BUFFERS (1)
748#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
749#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4)
750
751
752
753
754
755
756
757
758
759
760struct acpi_table_xenv {
761 struct acpi_table_header header;
762 u64 grant_table_address;
763 u64 grant_table_size;
764 u32 event_interrupt;
765 u8 event_flags;
766};
767
768
769
770#pragma pack()
771
772#endif
773