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 - 2022, 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[1];		/* 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  struct acpi_srat_generic_affinity {
283  	struct acpi_subtable_header header;
284  	u8 reserved;
285  	u8 device_handle_type;
286  	u32 proximity_domain;
287  	u8 device_handle[16];
288  	u32 flags;
289  	u32 reserved1;
290  };
291  
292  /* Flags for struct acpi_srat_generic_affinity */
293  
294  #define ACPI_SRAT_GENERIC_AFFINITY_ENABLED     (1)	/* 00: Use affinity structure */
295  #define ACPI_SRAT_ARCHITECTURAL_TRANSACTIONS   (1<<1)	/* ACPI 6.4 */
296  
297  /*******************************************************************************
298   *
299   * STAO - Status Override Table (_STA override) - ACPI 6.0
300   *        Version 1
301   *
302   * Conforms to "ACPI Specification for Status Override Table"
303   * 6 January 2015
304   *
305   ******************************************************************************/
306  
307  struct acpi_table_stao {
308  	struct acpi_table_header header;	/* Common ACPI table header */
309  	u8 ignore_uart;
310  };
311  
312  /*******************************************************************************
313   *
314   * TCPA - Trusted Computing Platform Alliance table
315   *        Version 2
316   *
317   * TCG Hardware Interface Table for TPM 1.2 Clients and Servers
318   *
319   * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
320   * Version 1.2, Revision 8
321   * February 27, 2017
322   *
323   * NOTE: There are two versions of the table with the same signature --
324   * the client version and the server version. The common platform_class
325   * field is used to differentiate the two types of tables.
326   *
327   ******************************************************************************/
328  
329  struct acpi_table_tcpa_hdr {
330  	struct acpi_table_header header;	/* Common ACPI table header */
331  	u16 platform_class;
332  };
333  
334  /*
335   * Values for platform_class above.
336   * This is how the client and server subtables are differentiated
337   */
338  #define ACPI_TCPA_CLIENT_TABLE          0
339  #define ACPI_TCPA_SERVER_TABLE          1
340  
341  struct acpi_table_tcpa_client {
342  	u32 minimum_log_length;	/* Minimum length for the event log area */
343  	u64 log_address;	/* Address of the event log area */
344  };
345  
346  struct acpi_table_tcpa_server {
347  	u16 reserved;
348  	u64 minimum_log_length;	/* Minimum length for the event log area */
349  	u64 log_address;	/* Address of the event log area */
350  	u16 spec_revision;
351  	u8 device_flags;
352  	u8 interrupt_flags;
353  	u8 gpe_number;
354  	u8 reserved2[3];
355  	u32 global_interrupt;
356  	struct acpi_generic_address address;
357  	u32 reserved3;
358  	struct acpi_generic_address config_address;
359  	u8 group;
360  	u8 bus;			/* PCI Bus/Segment/Function numbers */
361  	u8 device;
362  	u8 function;
363  };
364  
365  /* Values for device_flags above */
366  
367  #define ACPI_TCPA_PCI_DEVICE            (1)
368  #define ACPI_TCPA_BUS_PNP               (1<<1)
369  #define ACPI_TCPA_ADDRESS_VALID         (1<<2)
370  
371  /* Values for interrupt_flags above */
372  
373  #define ACPI_TCPA_INTERRUPT_MODE        (1)
374  #define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
375  #define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
376  #define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
377  
378  /*******************************************************************************
379   *
380   * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
381   *        Version 4
382   *
383   * TCG Hardware Interface Table for TPM 2.0 Clients and Servers
384   *
385   * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
386   * Version 1.2, Revision 8
387   * February 27, 2017
388   *
389   ******************************************************************************/
390  
391  /* Revision 3 */
392  
393  struct acpi_table_tpm23 {
394  	struct acpi_table_header header;	/* Common ACPI table header */
395  	u32 reserved;
396  	u64 control_address;
397  	u32 start_method;
398  };
399  
400  /* Value for start_method above */
401  
402  #define ACPI_TPM23_ACPI_START_METHOD                 2
403  
404  /*
405   * Optional trailer for revision 3. If start method is 2, there is a 4 byte
406   * reserved area of all zeros.
407   */
408  struct acpi_tmp23_trailer {
409  	u32 reserved;
410  };
411  
412  /* Revision 4 */
413  
414  struct acpi_table_tpm2 {
415  	struct acpi_table_header header;	/* Common ACPI table header */
416  	u16 platform_class;
417  	u16 reserved;
418  	u64 control_address;
419  	u32 start_method;
420  
421  	/* Platform-specific data follows */
422  };
423  
424  /* Optional trailer for revision 4 holding platform-specific data */
425  struct acpi_tpm2_phy {
426  	u8  start_method_specific[12];
427  	u32 log_area_minimum_length;
428  	u64 log_area_start_address;
429  };
430  
431  /* Values for start_method above */
432  
433  #define ACPI_TPM2_NOT_ALLOWED                       0
434  #define ACPI_TPM2_RESERVED1                         1
435  #define ACPI_TPM2_START_METHOD                      2
436  #define ACPI_TPM2_RESERVED3                         3
437  #define ACPI_TPM2_RESERVED4                         4
438  #define ACPI_TPM2_RESERVED5                         5
439  #define ACPI_TPM2_MEMORY_MAPPED                     6
440  #define ACPI_TPM2_COMMAND_BUFFER                    7
441  #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
442  #define ACPI_TPM2_RESERVED9                         9
443  #define ACPI_TPM2_RESERVED10                        10
444  #define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC       11	/* V1.2 Rev 8 */
445  #define ACPI_TPM2_RESERVED                          12
446  
447  /* Optional trailer appears after any start_method subtables */
448  
449  struct acpi_tpm2_trailer {
450  	u8 method_parameters[12];
451  	u32 minimum_log_length;	/* Minimum length for the event log area */
452  	u64 log_address;	/* Address of the event log area */
453  };
454  
455  /*
456   * Subtables (start_method-specific)
457   */
458  
459  /* 11: Start Method for ARM SMC (V1.2 Rev 8) */
460  
461  struct acpi_tpm2_arm_smc {
462  	u32 global_interrupt;
463  	u8 interrupt_flags;
464  	u8 operation_flags;
465  	u16 reserved;
466  	u32 function_id;
467  };
468  
469  /* Values for interrupt_flags above */
470  
471  #define ACPI_TPM2_INTERRUPT_SUPPORT     (1)
472  
473  /* Values for operation_flags above */
474  
475  #define ACPI_TPM2_IDLE_SUPPORT          (1)
476  
477  /*******************************************************************************
478   *
479   * UEFI - UEFI Boot optimization Table
480   *        Version 1
481   *
482   * Conforms to "Unified Extensible Firmware Interface Specification",
483   * Version 2.3, May 8, 2009
484   *
485   ******************************************************************************/
486  
487  struct acpi_table_uefi {
488  	struct acpi_table_header header;	/* Common ACPI table header */
489  	u8 identifier[16];	/* UUID identifier */
490  	u16 data_offset;	/* Offset of remaining data in table */
491  };
492  
493  /*******************************************************************************
494   *
495   * VIOT - Virtual I/O Translation Table
496   *        Version 1
497   *
498   ******************************************************************************/
499  
500  struct acpi_table_viot {
501  	struct acpi_table_header header;	/* Common ACPI table header */
502  	u16 node_count;
503  	u16 node_offset;
504  	u8 reserved[8];
505  };
506  
507  /* VIOT subtable header */
508  
509  struct acpi_viot_header {
510  	u8 type;
511  	u8 reserved;
512  	u16 length;
513  };
514  
515  /* Values for Type field above */
516  
517  enum acpi_viot_node_type {
518  	ACPI_VIOT_NODE_PCI_RANGE = 0x01,
519  	ACPI_VIOT_NODE_MMIO = 0x02,
520  	ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI = 0x03,
521  	ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO = 0x04,
522  	ACPI_VIOT_RESERVED = 0x05
523  };
524  
525  /* VIOT subtables */
526  
527  struct acpi_viot_pci_range {
528  	struct acpi_viot_header header;
529  	u32 endpoint_start;
530  	u16 segment_start;
531  	u16 segment_end;
532  	u16 bdf_start;
533  	u16 bdf_end;
534  	u16 output_node;
535  	u8 reserved[6];
536  };
537  
538  struct acpi_viot_mmio {
539  	struct acpi_viot_header header;
540  	u32 endpoint;
541  	u64 base_address;
542  	u16 output_node;
543  	u8 reserved[6];
544  };
545  
546  struct acpi_viot_virtio_iommu_pci {
547  	struct acpi_viot_header header;
548  	u16 segment;
549  	u16 bdf;
550  	u8 reserved[8];
551  };
552  
553  struct acpi_viot_virtio_iommu_mmio {
554  	struct acpi_viot_header header;
555  	u8 reserved[4];
556  	u64 base_address;
557  };
558  
559  /*******************************************************************************
560   *
561   * WAET - Windows ACPI Emulated devices Table
562   *        Version 1
563   *
564   * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
565   *
566   ******************************************************************************/
567  
568  struct acpi_table_waet {
569  	struct acpi_table_header header;	/* Common ACPI table header */
570  	u32 flags;
571  };
572  
573  /* Masks for Flags field above */
574  
575  #define ACPI_WAET_RTC_NO_ACK        (1)	/* RTC requires no int acknowledge */
576  #define ACPI_WAET_TIMER_ONE_READ    (1<<1)	/* PM timer requires only one read */
577  
578  /*******************************************************************************
579   *
580   * WDAT - Watchdog Action Table
581   *        Version 1
582   *
583   * Conforms to "Hardware Watchdog Timers Design Specification",
584   * Copyright 2006 Microsoft Corporation.
585   *
586   ******************************************************************************/
587  
588  struct acpi_table_wdat {
589  	struct acpi_table_header header;	/* Common ACPI table header */
590  	u32 header_length;	/* Watchdog Header Length */
591  	u16 pci_segment;	/* PCI Segment number */
592  	u8 pci_bus;		/* PCI Bus number */
593  	u8 pci_device;		/* PCI Device number */
594  	u8 pci_function;	/* PCI Function number */
595  	u8 reserved[3];
596  	u32 timer_period;	/* Period of one timer count (msec) */
597  	u32 max_count;		/* Maximum counter value supported */
598  	u32 min_count;		/* Minimum counter value */
599  	u8 flags;
600  	u8 reserved2[3];
601  	u32 entries;		/* Number of watchdog entries that follow */
602  };
603  
604  /* Masks for Flags field above */
605  
606  #define ACPI_WDAT_ENABLED           (1)
607  #define ACPI_WDAT_STOPPED           0x80
608  
609  /* WDAT Instruction Entries (actions) */
610  
611  struct acpi_wdat_entry {
612  	u8 action;
613  	u8 instruction;
614  	u16 reserved;
615  	struct acpi_generic_address register_region;
616  	u32 value;		/* Value used with Read/Write register */
617  	u32 mask;		/* Bitmask required for this register instruction */
618  };
619  
620  /* Values for Action field above */
621  
622  enum acpi_wdat_actions {
623  	ACPI_WDAT_RESET = 1,
624  	ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
625  	ACPI_WDAT_GET_COUNTDOWN = 5,
626  	ACPI_WDAT_SET_COUNTDOWN = 6,
627  	ACPI_WDAT_GET_RUNNING_STATE = 8,
628  	ACPI_WDAT_SET_RUNNING_STATE = 9,
629  	ACPI_WDAT_GET_STOPPED_STATE = 10,
630  	ACPI_WDAT_SET_STOPPED_STATE = 11,
631  	ACPI_WDAT_GET_REBOOT = 16,
632  	ACPI_WDAT_SET_REBOOT = 17,
633  	ACPI_WDAT_GET_SHUTDOWN = 18,
634  	ACPI_WDAT_SET_SHUTDOWN = 19,
635  	ACPI_WDAT_GET_STATUS = 32,
636  	ACPI_WDAT_SET_STATUS = 33,
637  	ACPI_WDAT_ACTION_RESERVED = 34	/* 34 and greater are reserved */
638  };
639  
640  /* Values for Instruction field above */
641  
642  enum acpi_wdat_instructions {
643  	ACPI_WDAT_READ_VALUE = 0,
644  	ACPI_WDAT_READ_COUNTDOWN = 1,
645  	ACPI_WDAT_WRITE_VALUE = 2,
646  	ACPI_WDAT_WRITE_COUNTDOWN = 3,
647  	ACPI_WDAT_INSTRUCTION_RESERVED = 4,	/* 4 and greater are reserved */
648  	ACPI_WDAT_PRESERVE_REGISTER = 0x80	/* Except for this value */
649  };
650  
651  /*******************************************************************************
652   *
653   * WDDT - Watchdog Descriptor Table
654   *        Version 1
655   *
656   * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
657   * Version 001, September 2002
658   *
659   ******************************************************************************/
660  
661  struct acpi_table_wddt {
662  	struct acpi_table_header header;	/* Common ACPI table header */
663  	u16 spec_version;
664  	u16 table_version;
665  	u16 pci_vendor_id;
666  	struct acpi_generic_address address;
667  	u16 max_count;		/* Maximum counter value supported */
668  	u16 min_count;		/* Minimum counter value supported */
669  	u16 period;
670  	u16 status;
671  	u16 capability;
672  };
673  
674  /* Flags for Status field above */
675  
676  #define ACPI_WDDT_AVAILABLE     (1)
677  #define ACPI_WDDT_ACTIVE        (1<<1)
678  #define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
679  #define ACPI_WDDT_USER_RESET    (1<<11)
680  #define ACPI_WDDT_WDT_RESET     (1<<12)
681  #define ACPI_WDDT_POWER_FAIL    (1<<13)
682  #define ACPI_WDDT_UNKNOWN_RESET (1<<14)
683  
684  /* Flags for Capability field above */
685  
686  #define ACPI_WDDT_AUTO_RESET    (1)
687  #define ACPI_WDDT_ALERT_SUPPORT (1<<1)
688  
689  /*******************************************************************************
690   *
691   * WDRT - Watchdog Resource Table
692   *        Version 1
693   *
694   * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
695   * Version 1.01, August 28, 2006
696   *
697   ******************************************************************************/
698  
699  struct acpi_table_wdrt {
700  	struct acpi_table_header header;	/* Common ACPI table header */
701  	struct acpi_generic_address control_register;
702  	struct acpi_generic_address count_register;
703  	u16 pci_device_id;
704  	u16 pci_vendor_id;
705  	u8 pci_bus;		/* PCI Bus number */
706  	u8 pci_device;		/* PCI Device number */
707  	u8 pci_function;	/* PCI Function number */
708  	u8 pci_segment;		/* PCI Segment number */
709  	u16 max_count;		/* Maximum counter value supported */
710  	u8 units;
711  };
712  
713  /*******************************************************************************
714   *
715   * WPBT - Windows Platform Environment Table (ACPI 6.0)
716   *        Version 1
717   *
718   * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011
719   *
720   ******************************************************************************/
721  
722  struct acpi_table_wpbt {
723  	struct acpi_table_header header;	/* Common ACPI table header */
724  	u32 handoff_size;
725  	u64 handoff_address;
726  	u8 layout;
727  	u8 type;
728  	u16 arguments_length;
729  };
730  
731  struct acpi_wpbt_unicode {
732  	u16 *unicode_string;
733  };
734  
735  /*******************************************************************************
736   *
737   * WSMT - Windows SMM Security Mitigations Table
738   *        Version 1
739   *
740   * Conforms to "Windows SMM Security Mitigations Table",
741   * Version 1.0, April 18, 2016
742   *
743   ******************************************************************************/
744  
745  struct acpi_table_wsmt {
746  	struct acpi_table_header header;	/* Common ACPI table header */
747  	u32 protection_flags;
748  };
749  
750  /* Flags for protection_flags field above */
751  
752  #define ACPI_WSMT_FIXED_COMM_BUFFERS                (1)
753  #define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
754  #define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION        (4)
755  
756  /*******************************************************************************
757   *
758   * XENV - Xen Environment Table (ACPI 6.0)
759   *        Version 1
760   *
761   * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015
762   *
763   ******************************************************************************/
764  
765  struct acpi_table_xenv {
766  	struct acpi_table_header header;	/* Common ACPI table header */
767  	u64 grant_table_address;
768  	u64 grant_table_size;
769  	u32 event_interrupt;
770  	u8 event_flags;
771  };
772  
773  /* Reset to default packing */
774  
775  #pragma pack()
776  
777  #endif				/* __ACTBL3_H__ */
778