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 4
96   *
97   * Conforms to "Serial Port Console Redirection Table",
98   * Version 1.10, Jan 5, 2023
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 language;
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 uart_clk_freq;
124  	u32 precise_baudrate;
125  	u16 name_space_string_length;
126  	u16 name_space_string_offset;
127  	char name_space_string[];
128  };
129  
130  /* Masks for pci_flags field above */
131  
132  #define ACPI_SPCR_DO_NOT_DISABLE    (1)
133  
134  /* Values for Interface Type: See the definition of the DBG2 table */
135  
136  /*******************************************************************************
137   *
138   * SPMI - Server Platform Management Interface table
139   *        Version 5
140   *
141   * Conforms to "Intelligent Platform Management Interface Specification
142   * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
143   * June 12, 2009 markup.
144   *
145   ******************************************************************************/
146  
147  struct acpi_table_spmi {
148  	struct acpi_table_header header;	/* Common ACPI table header */
149  	u8 interface_type;
150  	u8 reserved;		/* Must be 1 */
151  	u16 spec_revision;	/* Version of IPMI */
152  	u8 interrupt_type;
153  	u8 gpe_number;		/* GPE assigned */
154  	u8 reserved1;
155  	u8 pci_device_flag;
156  	u32 interrupt;
157  	struct acpi_generic_address ipmi_register;
158  	u8 pci_segment;
159  	u8 pci_bus;
160  	u8 pci_device;
161  	u8 pci_function;
162  	u8 reserved2;
163  };
164  
165  /* Values for interface_type above */
166  
167  enum acpi_spmi_interface_types {
168  	ACPI_SPMI_NOT_USED = 0,
169  	ACPI_SPMI_KEYBOARD = 1,
170  	ACPI_SPMI_SMI = 2,
171  	ACPI_SPMI_BLOCK_TRANSFER = 3,
172  	ACPI_SPMI_SMBUS = 4,
173  	ACPI_SPMI_RESERVED = 5	/* 5 and above are reserved */
174  };
175  
176  /*******************************************************************************
177   *
178   * SRAT - System Resource Affinity Table
179   *        Version 3
180   *
181   ******************************************************************************/
182  
183  struct acpi_table_srat {
184  	struct acpi_table_header header;	/* Common ACPI table header */
185  	u32 table_revision;	/* Must be value '1' */
186  	u64 reserved;		/* Reserved, must be zero */
187  };
188  
189  /* Values for subtable type in struct acpi_subtable_header */
190  
191  enum acpi_srat_type {
192  	ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
193  	ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
194  	ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
195  	ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
196  	ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4,	/* ACPI 6.2 */
197  	ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5,	/* ACPI 6.3 */
198  	ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY = 6,	/* ACPI 6.4 */
199  	ACPI_SRAT_TYPE_RINTC_AFFINITY = 7,	/* ACPI 6.6 */
200  	ACPI_SRAT_TYPE_RESERVED = 8	/* 8 and greater are reserved */
201  };
202  
203  /*
204   * SRAT Subtables, correspond to Type in struct acpi_subtable_header
205   */
206  
207  /* 0: Processor Local APIC/SAPIC Affinity */
208  
209  struct acpi_srat_cpu_affinity {
210  	struct acpi_subtable_header header;
211  	u8 proximity_domain_lo;
212  	u8 apic_id;
213  	u32 flags;
214  	u8 local_sapic_eid;
215  	u8 proximity_domain_hi[3];
216  	u32 clock_domain;
217  };
218  
219  /* Flags */
220  
221  #define ACPI_SRAT_CPU_USE_AFFINITY  (1)	/* 00: Use affinity structure */
222  
223  /* 1: Memory Affinity */
224  
225  struct acpi_srat_mem_affinity {
226  	struct acpi_subtable_header header;
227  	u32 proximity_domain;
228  	u16 reserved;		/* Reserved, must be zero */
229  	u64 base_address;
230  	u64 length;
231  	u32 reserved1;
232  	u32 flags;
233  	u64 reserved2;		/* Reserved, must be zero */
234  };
235  
236  /* Flags */
237  
238  #define ACPI_SRAT_MEM_ENABLED       (1)	/* 00: Use affinity structure */
239  #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)	/* 01: Memory region is hot pluggable */
240  #define ACPI_SRAT_MEM_NON_VOLATILE  (1<<2)	/* 02: Memory region is non-volatile */
241  
242  /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
243  
244  struct acpi_srat_x2apic_cpu_affinity {
245  	struct acpi_subtable_header header;
246  	u16 reserved;		/* Reserved, must be zero */
247  	u32 proximity_domain;
248  	u32 apic_id;
249  	u32 flags;
250  	u32 clock_domain;
251  	u32 reserved2;
252  };
253  
254  /* Flags for struct acpi_srat_cpu_affinity and struct acpi_srat_x2apic_cpu_affinity */
255  
256  #define ACPI_SRAT_CPU_ENABLED       (1)	/* 00: Use affinity structure */
257  
258  /* 3: GICC Affinity (ACPI 5.1) */
259  
260  struct acpi_srat_gicc_affinity {
261  	struct acpi_subtable_header header;
262  	u32 proximity_domain;
263  	u32 acpi_processor_uid;
264  	u32 flags;
265  	u32 clock_domain;
266  };
267  
268  /* Flags for struct acpi_srat_gicc_affinity */
269  
270  #define ACPI_SRAT_GICC_ENABLED     (1)	/* 00: Use affinity structure */
271  
272  /* 4: GCC ITS Affinity (ACPI 6.2) */
273  
274  struct acpi_srat_gic_its_affinity {
275  	struct acpi_subtable_header header;
276  	u32 proximity_domain;
277  	u16 reserved;
278  	u32 its_id;
279  };
280  
281  /*
282   * Common structure for SRAT subtable types:
283   * 5: ACPI_SRAT_TYPE_GENERIC_AFFINITY
284   * 6: ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY
285   */
286  
287  #define ACPI_SRAT_DEVICE_HANDLE_SIZE	16
288  
289  struct acpi_srat_generic_affinity {
290  	struct acpi_subtable_header header;
291  	u8 reserved;
292  	u8 device_handle_type;
293  	u32 proximity_domain;
294  	u8 device_handle[ACPI_SRAT_DEVICE_HANDLE_SIZE];
295  	u32 flags;
296  	u32 reserved1;
297  };
298  
299  /* Flags for struct acpi_srat_generic_affinity */
300  
301  #define ACPI_SRAT_GENERIC_AFFINITY_ENABLED     (1)	/* 00: Use affinity structure */
302  #define ACPI_SRAT_ARCHITECTURAL_TRANSACTIONS   (1<<1)	/* ACPI 6.4 */
303  
304  /* 7: RINTC Affinity Structure(ACPI 6.6) */
305  
306  struct acpi_srat_rintc_affinity {
307  	struct acpi_subtable_header header;
308  	u16 reserved;
309  	u32 proximity_domain;
310  	u32 acpi_processor_uid;
311  	u32 flags;
312  	u32 clock_domain;
313  };
314  
315  /* Flags for struct acpi_srat_rintc_affinity */
316  
317  #define ACPI_SRAT_RINTC_ENABLED     (1)	/* 00: Use affinity structure */
318  
319  /*******************************************************************************
320   *
321   * STAO - Status Override Table (_STA override) - ACPI 6.0
322   *        Version 1
323   *
324   * Conforms to "ACPI Specification for Status Override Table"
325   * 6 January 2015
326   *
327   ******************************************************************************/
328  
329  struct acpi_table_stao {
330  	struct acpi_table_header header;	/* Common ACPI table header */
331  	u8 ignore_uart;
332  };
333  
334  /*******************************************************************************
335   *
336   * TCPA - Trusted Computing Platform Alliance table
337   *        Version 2
338   *
339   * TCG Hardware Interface Table for TPM 1.2 Clients and Servers
340   *
341   * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
342   * Version 1.2, Revision 8
343   * February 27, 2017
344   *
345   * NOTE: There are two versions of the table with the same signature --
346   * the client version and the server version. The common platform_class
347   * field is used to differentiate the two types of tables.
348   *
349   ******************************************************************************/
350  
351  struct acpi_table_tcpa_hdr {
352  	struct acpi_table_header header;	/* Common ACPI table header */
353  	u16 platform_class;
354  };
355  
356  /*
357   * Values for platform_class above.
358   * This is how the client and server subtables are differentiated
359   */
360  #define ACPI_TCPA_CLIENT_TABLE          0
361  #define ACPI_TCPA_SERVER_TABLE          1
362  
363  struct acpi_table_tcpa_client {
364  	u32 minimum_log_length;	/* Minimum length for the event log area */
365  	u64 log_address;	/* Address of the event log area */
366  };
367  
368  struct acpi_table_tcpa_server {
369  	u16 reserved;
370  	u64 minimum_log_length;	/* Minimum length for the event log area */
371  	u64 log_address;	/* Address of the event log area */
372  	u16 spec_revision;
373  	u8 device_flags;
374  	u8 interrupt_flags;
375  	u8 gpe_number;
376  	u8 reserved2[3];
377  	u32 global_interrupt;
378  	struct acpi_generic_address address;
379  	u32 reserved3;
380  	struct acpi_generic_address config_address;
381  	u8 group;
382  	u8 bus;			/* PCI Bus/Segment/Function numbers */
383  	u8 device;
384  	u8 function;
385  };
386  
387  /* Values for device_flags above */
388  
389  #define ACPI_TCPA_PCI_DEVICE            (1)
390  #define ACPI_TCPA_BUS_PNP               (1<<1)
391  #define ACPI_TCPA_ADDRESS_VALID         (1<<2)
392  
393  /* Values for interrupt_flags above */
394  
395  #define ACPI_TCPA_INTERRUPT_MODE        (1)
396  #define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
397  #define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
398  #define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
399  
400  /*******************************************************************************
401   *
402   * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
403   *        Version 4
404   *
405   * TCG Hardware Interface Table for TPM 2.0 Clients and Servers
406   *
407   * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
408   * Version 1.2, Revision 8
409   * February 27, 2017
410   *
411   ******************************************************************************/
412  
413  /* Revision 3 */
414  
415  struct acpi_table_tpm23 {
416  	struct acpi_table_header header;	/* Common ACPI table header */
417  	u32 reserved;
418  	u64 control_address;
419  	u32 start_method;
420  };
421  
422  /* Value for start_method above */
423  
424  #define ACPI_TPM23_ACPI_START_METHOD                 2
425  
426  /*
427   * Optional trailer for revision 3. If start method is 2, there is a 4 byte
428   * reserved area of all zeros.
429   */
430  struct acpi_tmp23_trailer {
431  	u32 reserved;
432  };
433  
434  /* Revision 4 */
435  
436  struct acpi_table_tpm2 {
437  	struct acpi_table_header header;	/* Common ACPI table header */
438  	u16 platform_class;
439  	u16 reserved;
440  	u64 control_address;
441  	u32 start_method;
442  
443  	/* Platform-specific data follows */
444  };
445  
446  /* Optional trailer for revision 4 holding platform-specific data */
447  struct acpi_tpm2_phy {
448  	u8  start_method_specific[12];
449  	u32 log_area_minimum_length;
450  	u64 log_area_start_address;
451  };
452  
453  /* Values for start_method above */
454  
455  #define ACPI_TPM2_NOT_ALLOWED                       0
456  #define ACPI_TPM2_RESERVED1                         1
457  #define ACPI_TPM2_START_METHOD                      2
458  #define ACPI_TPM2_RESERVED3                         3
459  #define ACPI_TPM2_RESERVED4                         4
460  #define ACPI_TPM2_RESERVED5                         5
461  #define ACPI_TPM2_MEMORY_MAPPED                     6
462  #define ACPI_TPM2_COMMAND_BUFFER                    7
463  #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
464  #define ACPI_TPM2_RESERVED9                         9
465  #define ACPI_TPM2_RESERVED10                        10
466  #define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC       11	/* V1.2 Rev 8 */
467  #define ACPI_TPM2_RESERVED                          12
468  #define ACPI_TPM2_COMMAND_BUFFER_WITH_PLUTON        13
469  
470  /* Optional trailer appears after any start_method subtables */
471  
472  struct acpi_tpm2_trailer {
473  	u8 method_parameters[12];
474  	u32 minimum_log_length;	/* Minimum length for the event log area */
475  	u64 log_address;	/* Address of the event log area */
476  };
477  
478  /*
479   * Subtables (start_method-specific)
480   */
481  
482  /* 11: Start Method for ARM SMC (V1.2 Rev 8) */
483  
484  struct acpi_tpm2_arm_smc {
485  	u32 global_interrupt;
486  	u8 interrupt_flags;
487  	u8 operation_flags;
488  	u16 reserved;
489  	u32 function_id;
490  };
491  
492  /* Values for interrupt_flags above */
493  
494  #define ACPI_TPM2_INTERRUPT_SUPPORT     (1)
495  
496  /* Values for operation_flags above */
497  
498  #define ACPI_TPM2_IDLE_SUPPORT          (1)
499  
500  /*******************************************************************************
501   *
502   * UEFI - UEFI Boot optimization Table
503   *        Version 1
504   *
505   * Conforms to "Unified Extensible Firmware Interface Specification",
506   * Version 2.3, May 8, 2009
507   *
508   ******************************************************************************/
509  
510  struct acpi_table_uefi {
511  	struct acpi_table_header header;	/* Common ACPI table header */
512  	u8 identifier[16];	/* UUID identifier */
513  	u16 data_offset;	/* Offset of remaining data in table */
514  };
515  
516  /*******************************************************************************
517   *
518   * VIOT - Virtual I/O Translation Table
519   *        Version 1
520   *
521   ******************************************************************************/
522  
523  struct acpi_table_viot {
524  	struct acpi_table_header header;	/* Common ACPI table header */
525  	u16 node_count;
526  	u16 node_offset;
527  	u8 reserved[8];
528  };
529  
530  /* VIOT subtable header */
531  
532  struct acpi_viot_header {
533  	u8 type;
534  	u8 reserved;
535  	u16 length;
536  };
537  
538  /* Values for Type field above */
539  
540  enum acpi_viot_node_type {
541  	ACPI_VIOT_NODE_PCI_RANGE = 0x01,
542  	ACPI_VIOT_NODE_MMIO = 0x02,
543  	ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI = 0x03,
544  	ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO = 0x04,
545  	ACPI_VIOT_RESERVED = 0x05
546  };
547  
548  /* VIOT subtables */
549  
550  struct acpi_viot_pci_range {
551  	struct acpi_viot_header header;
552  	u32 endpoint_start;
553  	u16 segment_start;
554  	u16 segment_end;
555  	u16 bdf_start;
556  	u16 bdf_end;
557  	u16 output_node;
558  	u8 reserved[6];
559  };
560  
561  struct acpi_viot_mmio {
562  	struct acpi_viot_header header;
563  	u32 endpoint;
564  	u64 base_address;
565  	u16 output_node;
566  	u8 reserved[6];
567  };
568  
569  struct acpi_viot_virtio_iommu_pci {
570  	struct acpi_viot_header header;
571  	u16 segment;
572  	u16 bdf;
573  	u8 reserved[8];
574  };
575  
576  struct acpi_viot_virtio_iommu_mmio {
577  	struct acpi_viot_header header;
578  	u8 reserved[4];
579  	u64 base_address;
580  };
581  
582  /*******************************************************************************
583   *
584   * WAET - Windows ACPI Emulated devices Table
585   *        Version 1
586   *
587   * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
588   *
589   ******************************************************************************/
590  
591  struct acpi_table_waet {
592  	struct acpi_table_header header;	/* Common ACPI table header */
593  	u32 flags;
594  };
595  
596  /* Masks for Flags field above */
597  
598  #define ACPI_WAET_RTC_NO_ACK        (1)	/* RTC requires no int acknowledge */
599  #define ACPI_WAET_TIMER_ONE_READ    (1<<1)	/* PM timer requires only one read */
600  
601  /*******************************************************************************
602   *
603   * WDAT - Watchdog Action Table
604   *        Version 1
605   *
606   * Conforms to "Hardware Watchdog Timers Design Specification",
607   * Copyright 2006 Microsoft Corporation.
608   *
609   ******************************************************************************/
610  
611  struct acpi_table_wdat {
612  	struct acpi_table_header header;	/* Common ACPI table header */
613  	u32 header_length;	/* Watchdog Header Length */
614  	u16 pci_segment;	/* PCI Segment number */
615  	u8 pci_bus;		/* PCI Bus number */
616  	u8 pci_device;		/* PCI Device number */
617  	u8 pci_function;	/* PCI Function number */
618  	u8 reserved[3];
619  	u32 timer_period;	/* Period of one timer count (msec) */
620  	u32 max_count;		/* Maximum counter value supported */
621  	u32 min_count;		/* Minimum counter value */
622  	u8 flags;
623  	u8 reserved2[3];
624  	u32 entries;		/* Number of watchdog entries that follow */
625  };
626  
627  /* Masks for Flags field above */
628  
629  #define ACPI_WDAT_ENABLED           (1)
630  #define ACPI_WDAT_STOPPED           0x80
631  
632  /* WDAT Instruction Entries (actions) */
633  
634  struct acpi_wdat_entry {
635  	u8 action;
636  	u8 instruction;
637  	u16 reserved;
638  	struct acpi_generic_address register_region;
639  	u32 value;		/* Value used with Read/Write register */
640  	u32 mask;		/* Bitmask required for this register instruction */
641  };
642  
643  /* Values for Action field above */
644  
645  enum acpi_wdat_actions {
646  	ACPI_WDAT_RESET = 1,
647  	ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
648  	ACPI_WDAT_GET_COUNTDOWN = 5,
649  	ACPI_WDAT_SET_COUNTDOWN = 6,
650  	ACPI_WDAT_GET_RUNNING_STATE = 8,
651  	ACPI_WDAT_SET_RUNNING_STATE = 9,
652  	ACPI_WDAT_GET_STOPPED_STATE = 10,
653  	ACPI_WDAT_SET_STOPPED_STATE = 11,
654  	ACPI_WDAT_GET_REBOOT = 16,
655  	ACPI_WDAT_SET_REBOOT = 17,
656  	ACPI_WDAT_GET_SHUTDOWN = 18,
657  	ACPI_WDAT_SET_SHUTDOWN = 19,
658  	ACPI_WDAT_GET_STATUS = 32,
659  	ACPI_WDAT_SET_STATUS = 33,
660  	ACPI_WDAT_ACTION_RESERVED = 34	/* 34 and greater are reserved */
661  };
662  
663  /* Values for Instruction field above */
664  
665  enum acpi_wdat_instructions {
666  	ACPI_WDAT_READ_VALUE = 0,
667  	ACPI_WDAT_READ_COUNTDOWN = 1,
668  	ACPI_WDAT_WRITE_VALUE = 2,
669  	ACPI_WDAT_WRITE_COUNTDOWN = 3,
670  	ACPI_WDAT_INSTRUCTION_RESERVED = 4,	/* 4 and greater are reserved */
671  	ACPI_WDAT_PRESERVE_REGISTER = 0x80	/* Except for this value */
672  };
673  
674  /*******************************************************************************
675   *
676   * WDDT - Watchdog Descriptor Table
677   *        Version 1
678   *
679   * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
680   * Version 001, September 2002
681   *
682   ******************************************************************************/
683  
684  struct acpi_table_wddt {
685  	struct acpi_table_header header;	/* Common ACPI table header */
686  	u16 spec_version;
687  	u16 table_version;
688  	u16 pci_vendor_id;
689  	struct acpi_generic_address address;
690  	u16 max_count;		/* Maximum counter value supported */
691  	u16 min_count;		/* Minimum counter value supported */
692  	u16 period;
693  	u16 status;
694  	u16 capability;
695  };
696  
697  /* Flags for Status field above */
698  
699  #define ACPI_WDDT_AVAILABLE     (1)
700  #define ACPI_WDDT_ACTIVE        (1<<1)
701  #define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
702  #define ACPI_WDDT_USER_RESET    (1<<11)
703  #define ACPI_WDDT_WDT_RESET     (1<<12)
704  #define ACPI_WDDT_POWER_FAIL    (1<<13)
705  #define ACPI_WDDT_UNKNOWN_RESET (1<<14)
706  
707  /* Flags for Capability field above */
708  
709  #define ACPI_WDDT_AUTO_RESET    (1)
710  #define ACPI_WDDT_ALERT_SUPPORT (1<<1)
711  
712  /*******************************************************************************
713   *
714   * WDRT - Watchdog Resource Table
715   *        Version 1
716   *
717   * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
718   * Version 1.01, August 28, 2006
719   *
720   ******************************************************************************/
721  
722  struct acpi_table_wdrt {
723  	struct acpi_table_header header;	/* Common ACPI table header */
724  	struct acpi_generic_address control_register;
725  	struct acpi_generic_address count_register;
726  	u16 pci_device_id;
727  	u16 pci_vendor_id;
728  	u8 pci_bus;		/* PCI Bus number */
729  	u8 pci_device;		/* PCI Device number */
730  	u8 pci_function;	/* PCI Function number */
731  	u8 pci_segment;		/* PCI Segment number */
732  	u16 max_count;		/* Maximum counter value supported */
733  	u8 units;
734  };
735  
736  /*******************************************************************************
737   *
738   * WPBT - Windows Platform Environment Table (ACPI 6.0)
739   *        Version 1
740   *
741   * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011
742   *
743   ******************************************************************************/
744  
745  struct acpi_table_wpbt {
746  	struct acpi_table_header header;	/* Common ACPI table header */
747  	u32 handoff_size;
748  	u64 handoff_address;
749  	u8 layout;
750  	u8 type;
751  	u16 arguments_length;
752  };
753  
754  struct acpi_wpbt_unicode {
755  	u16 *unicode_string;
756  };
757  
758  /*******************************************************************************
759   *
760   * WSMT - Windows SMM Security Mitigations Table
761   *        Version 1
762   *
763   * Conforms to "Windows SMM Security Mitigations Table",
764   * Version 1.0, April 18, 2016
765   *
766   ******************************************************************************/
767  
768  struct acpi_table_wsmt {
769  	struct acpi_table_header header;	/* Common ACPI table header */
770  	u32 protection_flags;
771  };
772  
773  /* Flags for protection_flags field above */
774  
775  #define ACPI_WSMT_FIXED_COMM_BUFFERS                (1)
776  #define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
777  #define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION        (4)
778  
779  /*******************************************************************************
780   *
781   * XENV - Xen Environment Table (ACPI 6.0)
782   *        Version 1
783   *
784   * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015
785   *
786   ******************************************************************************/
787  
788  struct acpi_table_xenv {
789  	struct acpi_table_header header;	/* Common ACPI table header */
790  	u64 grant_table_address;
791  	u64 grant_table_size;
792  	u32 event_interrupt;
793  	u8 event_flags;
794  };
795  
796  /* Reset to default packing */
797  
798  #pragma pack()
799  
800  #endif				/* __ACTBL3_H__ */
801