xref: /openbmc/linux/include/acpi/actbl3.h (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
1  /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
2  /******************************************************************************
3   *
4   * Name: actbl3.h - ACPI Table Definitions
5   *
6   * Copyright (C) 2000 - 2023, Intel Corp.
7   *
8   *****************************************************************************/
9  
10  #ifndef __ACTBL3_H__
11  #define __ACTBL3_H__
12  
13  /*******************************************************************************
14   *
15   * Additional ACPI Tables
16   *
17   * These tables are not consumed directly by the ACPICA subsystem, but are
18   * included here to support device drivers and the AML disassembler.
19   *
20   ******************************************************************************/
21  
22  /*
23   * Values for description table header signatures for tables defined in this
24   * file. Useful because they make it more difficult to inadvertently type in
25   * the wrong signature.
26   */
27  #define ACPI_SIG_SLIC           "SLIC"	/* Software Licensing Description Table */
28  #define ACPI_SIG_SLIT           "SLIT"	/* System Locality Distance Information Table */
29  #define ACPI_SIG_SPCR           "SPCR"	/* Serial Port Console Redirection table */
30  #define ACPI_SIG_SPMI           "SPMI"	/* Server Platform Management Interface table */
31  #define ACPI_SIG_SRAT           "SRAT"	/* System Resource Affinity Table */
32  #define ACPI_SIG_STAO           "STAO"	/* Status Override table */
33  #define ACPI_SIG_TCPA           "TCPA"	/* Trusted Computing Platform Alliance table */
34  #define ACPI_SIG_TPM2           "TPM2"	/* Trusted Platform Module 2.0 H/W interface table */
35  #define ACPI_SIG_UEFI           "UEFI"	/* Uefi Boot Optimization Table */
36  #define ACPI_SIG_VIOT           "VIOT"	/* Virtual I/O Translation Table */
37  #define ACPI_SIG_WAET           "WAET"	/* Windows ACPI Emulated devices Table */
38  #define ACPI_SIG_WDAT           "WDAT"	/* Watchdog Action Table */
39  #define ACPI_SIG_WDDT           "WDDT"	/* Watchdog Timer Description Table */
40  #define ACPI_SIG_WDRT           "WDRT"	/* Watchdog Resource Table */
41  #define ACPI_SIG_WPBT           "WPBT"	/* Windows Platform Binary Table */
42  #define ACPI_SIG_WSMT           "WSMT"	/* Windows SMM Security Mitigations Table */
43  #define ACPI_SIG_XENV           "XENV"	/* Xen Environment table */
44  #define ACPI_SIG_XXXX           "XXXX"	/* Intermediate AML header for ASL/ASL+ converter */
45  
46  /*
47   * All tables must be byte-packed to match the ACPI specification, since
48   * the tables are provided by the system BIOS.
49   */
50  #pragma pack(1)
51  
52  /*
53   * Note: C bitfields are not used for this reason:
54   *
55   * "Bitfields are great and easy to read, but unfortunately the C language
56   * does not specify the layout of bitfields in memory, which means they are
57   * essentially useless for dealing with packed data in on-disk formats or
58   * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
59   * this decision was a design error in C. Ritchie could have picked an order
60   * and stuck with it." Norman Ramsey.
61   * See http://stackoverflow.com/a/1053662/41661
62   */
63  
64  /*******************************************************************************
65   *
66   * SLIC - Software Licensing Description Table
67   *
68   * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
69   * November 29, 2011. Copyright 2011 Microsoft
70   *
71   ******************************************************************************/
72  
73  /* Basic SLIC table is only the common ACPI header */
74  
75  struct acpi_table_slic {
76  	struct acpi_table_header header;	/* Common ACPI table header */
77  };
78  
79  /*******************************************************************************
80   *
81   * SLIT - System Locality Distance Information Table
82   *        Version 1
83   *
84   ******************************************************************************/
85  
86  struct acpi_table_slit {
87  	struct acpi_table_header header;	/* Common ACPI table header */
88  	u64 locality_count;
89  	u8 entry[];				/* Real size = localities^2 */
90  };
91  
92  /*******************************************************************************
93   *
94   * SPCR - Serial Port Console Redirection table
95   *        Version 2
96   *
97   * Conforms to "Serial Port Console Redirection Table",
98   * Version 1.03, August 10, 2015
99   *
100   ******************************************************************************/
101  
102  struct acpi_table_spcr {
103  	struct acpi_table_header header;	/* Common ACPI table header */
104  	u8 interface_type;	/* 0=full 16550, 1=subset of 16550 */
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  /* Masks for pci_flags field above */
127  
128  #define ACPI_SPCR_DO_NOT_DISABLE    (1)
129  
130  /* Values for Interface Type: See the definition of the DBG2 table */
131  
132  /*******************************************************************************
133   *
134   * SPMI - Server Platform Management Interface table
135   *        Version 5
136   *
137   * Conforms to "Intelligent Platform Management Interface Specification
138   * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
139   * June 12, 2009 markup.
140   *
141   ******************************************************************************/
142  
143  struct acpi_table_spmi {
144  	struct acpi_table_header header;	/* Common ACPI table header */
145  	u8 interface_type;
146  	u8 reserved;		/* Must be 1 */
147  	u16 spec_revision;	/* Version of IPMI */
148  	u8 interrupt_type;
149  	u8 gpe_number;		/* GPE assigned */
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  /* Values for interface_type above */
162  
163  enum 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	/* 5 and above are reserved */
170  };
171  
172  /*******************************************************************************
173   *
174   * SRAT - System Resource Affinity Table
175   *        Version 3
176   *
177   ******************************************************************************/
178  
179  struct acpi_table_srat {
180  	struct acpi_table_header header;	/* Common ACPI table header */
181  	u32 table_revision;	/* Must be value '1' */
182  	u64 reserved;		/* Reserved, must be zero */
183  };
184  
185  /* Values for subtable type in struct acpi_subtable_header */
186  
187  enum 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,	/* ACPI 6.2 */
193  	ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5,	/* ACPI 6.3 */
194  	ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY = 6,	/* ACPI 6.4 */
195  	ACPI_SRAT_TYPE_RESERVED = 7	/* 7 and greater are reserved */
196  };
197  
198  /*
199   * SRAT Subtables, correspond to Type in struct acpi_subtable_header
200   */
201  
202  /* 0: Processor Local APIC/SAPIC Affinity */
203  
204  struct acpi_srat_cpu_affinity {
205  	struct acpi_subtable_header header;
206  	u8 proximity_domain_lo;
207  	u8 apic_id;
208  	u32 flags;
209  	u8 local_sapic_eid;
210  	u8 proximity_domain_hi[3];
211  	u32 clock_domain;
212  };
213  
214  /* Flags */
215  
216  #define ACPI_SRAT_CPU_USE_AFFINITY  (1)	/* 00: Use affinity structure */
217  
218  /* 1: Memory Affinity */
219  
220  struct acpi_srat_mem_affinity {
221  	struct acpi_subtable_header header;
222  	u32 proximity_domain;
223  	u16 reserved;		/* Reserved, must be zero */
224  	u64 base_address;
225  	u64 length;
226  	u32 reserved1;
227  	u32 flags;
228  	u64 reserved2;		/* Reserved, must be zero */
229  };
230  
231  /* Flags */
232  
233  #define ACPI_SRAT_MEM_ENABLED       (1)	/* 00: Use affinity structure */
234  #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)	/* 01: Memory region is hot pluggable */
235  #define ACPI_SRAT_MEM_NON_VOLATILE  (1<<2)	/* 02: Memory region is non-volatile */
236  
237  /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
238  
239  struct acpi_srat_x2apic_cpu_affinity {
240  	struct acpi_subtable_header header;
241  	u16 reserved;		/* Reserved, must be zero */
242  	u32 proximity_domain;
243  	u32 apic_id;
244  	u32 flags;
245  	u32 clock_domain;
246  	u32 reserved2;
247  };
248  
249  /* Flags for struct acpi_srat_cpu_affinity and struct acpi_srat_x2apic_cpu_affinity */
250  
251  #define ACPI_SRAT_CPU_ENABLED       (1)	/* 00: Use affinity structure */
252  
253  /* 3: GICC Affinity (ACPI 5.1) */
254  
255  struct acpi_srat_gicc_affinity {
256  	struct acpi_subtable_header header;
257  	u32 proximity_domain;
258  	u32 acpi_processor_uid;
259  	u32 flags;
260  	u32 clock_domain;
261  };
262  
263  /* Flags for struct acpi_srat_gicc_affinity */
264  
265  #define ACPI_SRAT_GICC_ENABLED     (1)	/* 00: Use affinity structure */
266  
267  /* 4: GCC ITS Affinity (ACPI 6.2) */
268  
269  struct acpi_srat_gic_its_affinity {
270  	struct acpi_subtable_header header;
271  	u32 proximity_domain;
272  	u16 reserved;
273  	u32 its_id;
274  };
275  
276  /*
277   * Common structure for SRAT subtable types:
278   * 5: ACPI_SRAT_TYPE_GENERIC_AFFINITY
279   * 6: ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY
280   */
281  
282  #define ACPI_SRAT_DEVICE_HANDLE_SIZE	16
283  
284  struct acpi_srat_generic_affinity {
285  	struct acpi_subtable_header header;
286  	u8 reserved;
287  	u8 device_handle_type;
288  	u32 proximity_domain;
289  	u8 device_handle[ACPI_SRAT_DEVICE_HANDLE_SIZE];
290  	u32 flags;
291  	u32 reserved1;
292  };
293  
294  /* Flags for struct acpi_srat_generic_affinity */
295  
296  #define ACPI_SRAT_GENERIC_AFFINITY_ENABLED     (1)	/* 00: Use affinity structure */
297  #define ACPI_SRAT_ARCHITECTURAL_TRANSACTIONS   (1<<1)	/* ACPI 6.4 */
298  
299  /*******************************************************************************
300   *
301   * STAO - Status Override Table (_STA override) - ACPI 6.0
302   *        Version 1
303   *
304   * Conforms to "ACPI Specification for Status Override Table"
305   * 6 January 2015
306   *
307   ******************************************************************************/
308  
309  struct acpi_table_stao {
310  	struct acpi_table_header header;	/* Common ACPI table header */
311  	u8 ignore_uart;
312  };
313  
314  /*******************************************************************************
315   *
316   * TCPA - Trusted Computing Platform Alliance table
317   *        Version 2
318   *
319   * TCG Hardware Interface Table for TPM 1.2 Clients and Servers
320   *
321   * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
322   * Version 1.2, Revision 8
323   * February 27, 2017
324   *
325   * NOTE: There are two versions of the table with the same signature --
326   * the client version and the server version. The common platform_class
327   * field is used to differentiate the two types of tables.
328   *
329   ******************************************************************************/
330  
331  struct acpi_table_tcpa_hdr {
332  	struct acpi_table_header header;	/* Common ACPI table header */
333  	u16 platform_class;
334  };
335  
336  /*
337   * Values for platform_class above.
338   * This is how the client and server subtables are differentiated
339   */
340  #define ACPI_TCPA_CLIENT_TABLE          0
341  #define ACPI_TCPA_SERVER_TABLE          1
342  
343  struct acpi_table_tcpa_client {
344  	u32 minimum_log_length;	/* Minimum length for the event log area */
345  	u64 log_address;	/* Address of the event log area */
346  };
347  
348  struct acpi_table_tcpa_server {
349  	u16 reserved;
350  	u64 minimum_log_length;	/* Minimum length for the event log area */
351  	u64 log_address;	/* Address of the event log area */
352  	u16 spec_revision;
353  	u8 device_flags;
354  	u8 interrupt_flags;
355  	u8 gpe_number;
356  	u8 reserved2[3];
357  	u32 global_interrupt;
358  	struct acpi_generic_address address;
359  	u32 reserved3;
360  	struct acpi_generic_address config_address;
361  	u8 group;
362  	u8 bus;			/* PCI Bus/Segment/Function numbers */
363  	u8 device;
364  	u8 function;
365  };
366  
367  /* Values for device_flags above */
368  
369  #define ACPI_TCPA_PCI_DEVICE            (1)
370  #define ACPI_TCPA_BUS_PNP               (1<<1)
371  #define ACPI_TCPA_ADDRESS_VALID         (1<<2)
372  
373  /* Values for interrupt_flags above */
374  
375  #define ACPI_TCPA_INTERRUPT_MODE        (1)
376  #define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
377  #define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
378  #define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
379  
380  /*******************************************************************************
381   *
382   * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
383   *        Version 4
384   *
385   * TCG Hardware Interface Table for TPM 2.0 Clients and Servers
386   *
387   * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
388   * Version 1.2, Revision 8
389   * February 27, 2017
390   *
391   ******************************************************************************/
392  
393  /* Revision 3 */
394  
395  struct acpi_table_tpm23 {
396  	struct acpi_table_header header;	/* Common ACPI table header */
397  	u32 reserved;
398  	u64 control_address;
399  	u32 start_method;
400  };
401  
402  /* Value for start_method above */
403  
404  #define ACPI_TPM23_ACPI_START_METHOD                 2
405  
406  /*
407   * Optional trailer for revision 3. If start method is 2, there is a 4 byte
408   * reserved area of all zeros.
409   */
410  struct acpi_tmp23_trailer {
411  	u32 reserved;
412  };
413  
414  /* Revision 4 */
415  
416  struct acpi_table_tpm2 {
417  	struct acpi_table_header header;	/* Common ACPI table header */
418  	u16 platform_class;
419  	u16 reserved;
420  	u64 control_address;
421  	u32 start_method;
422  
423  	/* Platform-specific data follows */
424  };
425  
426  /* Optional trailer for revision 4 holding platform-specific data */
427  struct acpi_tpm2_phy {
428  	u8  start_method_specific[12];
429  	u32 log_area_minimum_length;
430  	u64 log_area_start_address;
431  };
432  
433  /* Values for start_method above */
434  
435  #define ACPI_TPM2_NOT_ALLOWED                       0
436  #define ACPI_TPM2_RESERVED1                         1
437  #define ACPI_TPM2_START_METHOD                      2
438  #define ACPI_TPM2_RESERVED3                         3
439  #define ACPI_TPM2_RESERVED4                         4
440  #define ACPI_TPM2_RESERVED5                         5
441  #define ACPI_TPM2_MEMORY_MAPPED                     6
442  #define ACPI_TPM2_COMMAND_BUFFER                    7
443  #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
444  #define ACPI_TPM2_RESERVED9                         9
445  #define ACPI_TPM2_RESERVED10                        10
446  #define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC       11	/* V1.2 Rev 8 */
447  #define ACPI_TPM2_RESERVED                          12
448  #define ACPI_TPM2_COMMAND_BUFFER_WITH_PLUTON        13
449  
450  /* Optional trailer appears after any start_method subtables */
451  
452  struct acpi_tpm2_trailer {
453  	u8 method_parameters[12];
454  	u32 minimum_log_length;	/* Minimum length for the event log area */
455  	u64 log_address;	/* Address of the event log area */
456  };
457  
458  /*
459   * Subtables (start_method-specific)
460   */
461  
462  /* 11: Start Method for ARM SMC (V1.2 Rev 8) */
463  
464  struct acpi_tpm2_arm_smc {
465  	u32 global_interrupt;
466  	u8 interrupt_flags;
467  	u8 operation_flags;
468  	u16 reserved;
469  	u32 function_id;
470  };
471  
472  /* Values for interrupt_flags above */
473  
474  #define ACPI_TPM2_INTERRUPT_SUPPORT     (1)
475  
476  /* Values for operation_flags above */
477  
478  #define ACPI_TPM2_IDLE_SUPPORT          (1)
479  
480  /*******************************************************************************
481   *
482   * UEFI - UEFI Boot optimization Table
483   *        Version 1
484   *
485   * Conforms to "Unified Extensible Firmware Interface Specification",
486   * Version 2.3, May 8, 2009
487   *
488   ******************************************************************************/
489  
490  struct acpi_table_uefi {
491  	struct acpi_table_header header;	/* Common ACPI table header */
492  	u8 identifier[16];	/* UUID identifier */
493  	u16 data_offset;	/* Offset of remaining data in table */
494  };
495  
496  /*******************************************************************************
497   *
498   * VIOT - Virtual I/O Translation Table
499   *        Version 1
500   *
501   ******************************************************************************/
502  
503  struct acpi_table_viot {
504  	struct acpi_table_header header;	/* Common ACPI table header */
505  	u16 node_count;
506  	u16 node_offset;
507  	u8 reserved[8];
508  };
509  
510  /* VIOT subtable header */
511  
512  struct acpi_viot_header {
513  	u8 type;
514  	u8 reserved;
515  	u16 length;
516  };
517  
518  /* Values for Type field above */
519  
520  enum acpi_viot_node_type {
521  	ACPI_VIOT_NODE_PCI_RANGE = 0x01,
522  	ACPI_VIOT_NODE_MMIO = 0x02,
523  	ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI = 0x03,
524  	ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO = 0x04,
525  	ACPI_VIOT_RESERVED = 0x05
526  };
527  
528  /* VIOT subtables */
529  
530  struct acpi_viot_pci_range {
531  	struct acpi_viot_header header;
532  	u32 endpoint_start;
533  	u16 segment_start;
534  	u16 segment_end;
535  	u16 bdf_start;
536  	u16 bdf_end;
537  	u16 output_node;
538  	u8 reserved[6];
539  };
540  
541  struct acpi_viot_mmio {
542  	struct acpi_viot_header header;
543  	u32 endpoint;
544  	u64 base_address;
545  	u16 output_node;
546  	u8 reserved[6];
547  };
548  
549  struct acpi_viot_virtio_iommu_pci {
550  	struct acpi_viot_header header;
551  	u16 segment;
552  	u16 bdf;
553  	u8 reserved[8];
554  };
555  
556  struct acpi_viot_virtio_iommu_mmio {
557  	struct acpi_viot_header header;
558  	u8 reserved[4];
559  	u64 base_address;
560  };
561  
562  /*******************************************************************************
563   *
564   * WAET - Windows ACPI Emulated devices Table
565   *        Version 1
566   *
567   * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
568   *
569   ******************************************************************************/
570  
571  struct acpi_table_waet {
572  	struct acpi_table_header header;	/* Common ACPI table header */
573  	u32 flags;
574  };
575  
576  /* Masks for Flags field above */
577  
578  #define ACPI_WAET_RTC_NO_ACK        (1)	/* RTC requires no int acknowledge */
579  #define ACPI_WAET_TIMER_ONE_READ    (1<<1)	/* PM timer requires only one read */
580  
581  /*******************************************************************************
582   *
583   * WDAT - Watchdog Action Table
584   *        Version 1
585   *
586   * Conforms to "Hardware Watchdog Timers Design Specification",
587   * Copyright 2006 Microsoft Corporation.
588   *
589   ******************************************************************************/
590  
591  struct acpi_table_wdat {
592  	struct acpi_table_header header;	/* Common ACPI table header */
593  	u32 header_length;	/* Watchdog Header Length */
594  	u16 pci_segment;	/* PCI Segment number */
595  	u8 pci_bus;		/* PCI Bus number */
596  	u8 pci_device;		/* PCI Device number */
597  	u8 pci_function;	/* PCI Function number */
598  	u8 reserved[3];
599  	u32 timer_period;	/* Period of one timer count (msec) */
600  	u32 max_count;		/* Maximum counter value supported */
601  	u32 min_count;		/* Minimum counter value */
602  	u8 flags;
603  	u8 reserved2[3];
604  	u32 entries;		/* Number of watchdog entries that follow */
605  };
606  
607  /* Masks for Flags field above */
608  
609  #define ACPI_WDAT_ENABLED           (1)
610  #define ACPI_WDAT_STOPPED           0x80
611  
612  /* WDAT Instruction Entries (actions) */
613  
614  struct acpi_wdat_entry {
615  	u8 action;
616  	u8 instruction;
617  	u16 reserved;
618  	struct acpi_generic_address register_region;
619  	u32 value;		/* Value used with Read/Write register */
620  	u32 mask;		/* Bitmask required for this register instruction */
621  };
622  
623  /* Values for Action field above */
624  
625  enum acpi_wdat_actions {
626  	ACPI_WDAT_RESET = 1,
627  	ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
628  	ACPI_WDAT_GET_COUNTDOWN = 5,
629  	ACPI_WDAT_SET_COUNTDOWN = 6,
630  	ACPI_WDAT_GET_RUNNING_STATE = 8,
631  	ACPI_WDAT_SET_RUNNING_STATE = 9,
632  	ACPI_WDAT_GET_STOPPED_STATE = 10,
633  	ACPI_WDAT_SET_STOPPED_STATE = 11,
634  	ACPI_WDAT_GET_REBOOT = 16,
635  	ACPI_WDAT_SET_REBOOT = 17,
636  	ACPI_WDAT_GET_SHUTDOWN = 18,
637  	ACPI_WDAT_SET_SHUTDOWN = 19,
638  	ACPI_WDAT_GET_STATUS = 32,
639  	ACPI_WDAT_SET_STATUS = 33,
640  	ACPI_WDAT_ACTION_RESERVED = 34	/* 34 and greater are reserved */
641  };
642  
643  /* Values for Instruction field above */
644  
645  enum acpi_wdat_instructions {
646  	ACPI_WDAT_READ_VALUE = 0,
647  	ACPI_WDAT_READ_COUNTDOWN = 1,
648  	ACPI_WDAT_WRITE_VALUE = 2,
649  	ACPI_WDAT_WRITE_COUNTDOWN = 3,
650  	ACPI_WDAT_INSTRUCTION_RESERVED = 4,	/* 4 and greater are reserved */
651  	ACPI_WDAT_PRESERVE_REGISTER = 0x80	/* Except for this value */
652  };
653  
654  /*******************************************************************************
655   *
656   * WDDT - Watchdog Descriptor Table
657   *        Version 1
658   *
659   * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
660   * Version 001, September 2002
661   *
662   ******************************************************************************/
663  
664  struct acpi_table_wddt {
665  	struct acpi_table_header header;	/* Common ACPI table header */
666  	u16 spec_version;
667  	u16 table_version;
668  	u16 pci_vendor_id;
669  	struct acpi_generic_address address;
670  	u16 max_count;		/* Maximum counter value supported */
671  	u16 min_count;		/* Minimum counter value supported */
672  	u16 period;
673  	u16 status;
674  	u16 capability;
675  };
676  
677  /* Flags for Status field above */
678  
679  #define ACPI_WDDT_AVAILABLE     (1)
680  #define ACPI_WDDT_ACTIVE        (1<<1)
681  #define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
682  #define ACPI_WDDT_USER_RESET    (1<<11)
683  #define ACPI_WDDT_WDT_RESET     (1<<12)
684  #define ACPI_WDDT_POWER_FAIL    (1<<13)
685  #define ACPI_WDDT_UNKNOWN_RESET (1<<14)
686  
687  /* Flags for Capability field above */
688  
689  #define ACPI_WDDT_AUTO_RESET    (1)
690  #define ACPI_WDDT_ALERT_SUPPORT (1<<1)
691  
692  /*******************************************************************************
693   *
694   * WDRT - Watchdog Resource Table
695   *        Version 1
696   *
697   * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
698   * Version 1.01, August 28, 2006
699   *
700   ******************************************************************************/
701  
702  struct acpi_table_wdrt {
703  	struct acpi_table_header header;	/* Common ACPI table header */
704  	struct acpi_generic_address control_register;
705  	struct acpi_generic_address count_register;
706  	u16 pci_device_id;
707  	u16 pci_vendor_id;
708  	u8 pci_bus;		/* PCI Bus number */
709  	u8 pci_device;		/* PCI Device number */
710  	u8 pci_function;	/* PCI Function number */
711  	u8 pci_segment;		/* PCI Segment number */
712  	u16 max_count;		/* Maximum counter value supported */
713  	u8 units;
714  };
715  
716  /*******************************************************************************
717   *
718   * WPBT - Windows Platform Environment Table (ACPI 6.0)
719   *        Version 1
720   *
721   * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011
722   *
723   ******************************************************************************/
724  
725  struct acpi_table_wpbt {
726  	struct acpi_table_header header;	/* Common ACPI table header */
727  	u32 handoff_size;
728  	u64 handoff_address;
729  	u8 layout;
730  	u8 type;
731  	u16 arguments_length;
732  };
733  
734  struct acpi_wpbt_unicode {
735  	u16 *unicode_string;
736  };
737  
738  /*******************************************************************************
739   *
740   * WSMT - Windows SMM Security Mitigations Table
741   *        Version 1
742   *
743   * Conforms to "Windows SMM Security Mitigations Table",
744   * Version 1.0, April 18, 2016
745   *
746   ******************************************************************************/
747  
748  struct acpi_table_wsmt {
749  	struct acpi_table_header header;	/* Common ACPI table header */
750  	u32 protection_flags;
751  };
752  
753  /* Flags for protection_flags field above */
754  
755  #define ACPI_WSMT_FIXED_COMM_BUFFERS                (1)
756  #define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
757  #define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION        (4)
758  
759  /*******************************************************************************
760   *
761   * XENV - Xen Environment Table (ACPI 6.0)
762   *        Version 1
763   *
764   * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015
765   *
766   ******************************************************************************/
767  
768  struct acpi_table_xenv {
769  	struct acpi_table_header header;	/* Common ACPI table header */
770  	u64 grant_table_address;
771  	u64 grant_table_size;
772  	u32 event_interrupt;
773  	u8 event_flags;
774  };
775  
776  /* Reset to default packing */
777  
778  #pragma pack()
779  
780  #endif				/* __ACTBL3_H__ */
781