Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/acpica/include/actbl3.h
105377 views
1
/******************************************************************************
2
*
3
* Name: actbl3.h - ACPI Table Definitions
4
*
5
*****************************************************************************/
6
7
/******************************************************************************
8
*
9
* 1. Copyright Notice
10
*
11
* Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.
12
* All rights reserved.
13
*
14
* 2. License
15
*
16
* 2.1. This is your license from Intel Corp. under its intellectual property
17
* rights. You may have additional license terms from the party that provided
18
* you this software, covering your right to use that party's intellectual
19
* property rights.
20
*
21
* 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22
* copy of the source code appearing in this file ("Covered Code") an
23
* irrevocable, perpetual, worldwide license under Intel's copyrights in the
24
* base code distributed originally by Intel ("Original Intel Code") to copy,
25
* make derivatives, distribute, use and display any portion of the Covered
26
* Code in any form, with the right to sublicense such rights; and
27
*
28
* 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29
* license (with the right to sublicense), under only those claims of Intel
30
* patents that are infringed by the Original Intel Code, to make, use, sell,
31
* offer to sell, and import the Covered Code and derivative works thereof
32
* solely to the minimum extent necessary to exercise the above copyright
33
* license, and in no event shall the patent license extend to any additions
34
* to or modifications of the Original Intel Code. No other license or right
35
* is granted directly or by implication, estoppel or otherwise;
36
*
37
* The above copyright and patent license is granted only if the following
38
* conditions are met:
39
*
40
* 3. Conditions
41
*
42
* 3.1. Redistribution of Source with Rights to Further Distribute Source.
43
* Redistribution of source code of any substantial portion of the Covered
44
* Code or modification with rights to further distribute source must include
45
* the above Copyright Notice, the above License, this list of Conditions,
46
* and the following Disclaimer and Export Compliance provision. In addition,
47
* Licensee must cause all Covered Code to which Licensee contributes to
48
* contain a file documenting the changes Licensee made to create that Covered
49
* Code and the date of any change. Licensee must include in that file the
50
* documentation of any changes made by any predecessor Licensee. Licensee
51
* must include a prominent statement that the modification is derived,
52
* directly or indirectly, from Original Intel Code.
53
*
54
* 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55
* Redistribution of source code of any substantial portion of the Covered
56
* Code or modification without rights to further distribute source must
57
* include the following Disclaimer and Export Compliance provision in the
58
* documentation and/or other materials provided with distribution. In
59
* addition, Licensee may not authorize further sublicense of source of any
60
* portion of the Covered Code, and must include terms to the effect that the
61
* license from Licensee to its licensee is limited to the intellectual
62
* property embodied in the software Licensee provides to its licensee, and
63
* not to intellectual property embodied in modifications its licensee may
64
* make.
65
*
66
* 3.3. Redistribution of Executable. Redistribution in executable form of any
67
* substantial portion of the Covered Code or modification must reproduce the
68
* above Copyright Notice, and the following Disclaimer and Export Compliance
69
* provision in the documentation and/or other materials provided with the
70
* distribution.
71
*
72
* 3.4. Intel retains all right, title, and interest in and to the Original
73
* Intel Code.
74
*
75
* 3.5. Neither the name Intel nor any other trademark owned or controlled by
76
* Intel shall be used in advertising or otherwise to promote the sale, use or
77
* other dealings in products derived from or relating to the Covered Code
78
* without prior written authorization from Intel.
79
*
80
* 4. Disclaimer and Export Compliance
81
*
82
* 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83
* HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84
* IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85
* INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86
* UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87
* IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88
* PARTICULAR PURPOSE.
89
*
90
* 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91
* OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92
* COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93
* SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94
* CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95
* HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96
* SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97
* LIMITED REMEDY.
98
*
99
* 4.3. Licensee shall not export, either directly or indirectly, any of this
100
* software or system incorporating such software without first obtaining any
101
* required license or other approval from the U. S. Department of Commerce or
102
* any other agency or department of the United States Government. In the
103
* event Licensee exports any such software from the United States or
104
* re-exports any such software from a foreign destination, Licensee shall
105
* ensure that the distribution and export/re-export of the software is in
106
* compliance with all laws, regulations, orders, or other restrictions of the
107
* U.S. Export Administration Regulations. Licensee agrees that neither it nor
108
* any of its subsidiaries will export/re-export any technical data, process,
109
* software, or service, directly or indirectly, to any country for which the
110
* United States government or any agency thereof requires an export license,
111
* other governmental approval, or letter of assurance, without first obtaining
112
* such license, approval or letter.
113
*
114
*****************************************************************************
115
*
116
* Alternatively, you may choose to be licensed under the terms of the
117
* following license:
118
*
119
* Redistribution and use in source and binary forms, with or without
120
* modification, are permitted provided that the following conditions
121
* are met:
122
* 1. Redistributions of source code must retain the above copyright
123
* notice, this list of conditions, and the following disclaimer,
124
* without modification.
125
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
126
* substantially similar to the "NO WARRANTY" disclaimer below
127
* ("Disclaimer") and any redistribution must be conditioned upon
128
* including a substantially similar Disclaimer requirement for further
129
* binary redistribution.
130
* 3. Neither the names of the above-listed copyright holders nor the names
131
* of any contributors may be used to endorse or promote products derived
132
* from this software without specific prior written permission.
133
*
134
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145
*
146
* Alternatively, you may choose to be licensed under the terms of the
147
* GNU General Public License ("GPL") version 2 as published by the Free
148
* Software Foundation.
149
*
150
*****************************************************************************/
151
152
#ifndef __ACTBL3_H__
153
#define __ACTBL3_H__
154
155
156
/*******************************************************************************
157
*
158
* Additional ACPI Tables
159
*
160
* These tables are not consumed directly by the ACPICA subsystem, but are
161
* included here to support device drivers and the AML disassembler.
162
*
163
******************************************************************************/
164
165
166
/*
167
* Values for description table header signatures for tables defined in this
168
* file. Useful because they make it more difficult to inadvertently type in
169
* the wrong signature.
170
*/
171
#define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */
172
#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */
173
#define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */
174
#define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */
175
#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */
176
#define ACPI_SIG_STAO "STAO" /* Status Override table */
177
#define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */
178
#define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */
179
#define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */
180
#define ACPI_SIG_VIOT "VIOT" /* Virtual I/O Translation Table */
181
#define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */
182
#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */
183
#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */
184
#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */
185
#define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */
186
#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Mitigations Table */
187
#define ACPI_SIG_XENV "XENV" /* Xen Environment table */
188
#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */
189
190
/*
191
* All tables must be byte-packed to match the ACPI specification, since
192
* the tables are provided by the system BIOS.
193
*/
194
#pragma pack(1)
195
196
/*
197
* Note: C bitfields are not used for this reason:
198
*
199
* "Bitfields are great and easy to read, but unfortunately the C language
200
* does not specify the layout of bitfields in memory, which means they are
201
* essentially useless for dealing with packed data in on-disk formats or
202
* binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
203
* this decision was a design error in C. Ritchie could have picked an order
204
* and stuck with it." Norman Ramsey.
205
* See http://stackoverflow.com/a/1053662/41661
206
*/
207
208
209
/*******************************************************************************
210
*
211
* SLIC - Software Licensing Description Table
212
*
213
* Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
214
* November 29, 2011. Copyright 2011 Microsoft
215
*
216
******************************************************************************/
217
218
/* Basic SLIC table is only the common ACPI header */
219
220
typedef struct acpi_table_slic
221
{
222
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
223
224
} ACPI_TABLE_SLIC;
225
226
227
/*******************************************************************************
228
*
229
* SLIT - System Locality Distance Information Table
230
* Version 1
231
*
232
******************************************************************************/
233
234
typedef struct acpi_table_slit
235
{
236
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
237
UINT64 LocalityCount;
238
UINT8 Entry[1]; /* Real size = localities^2 */
239
240
} ACPI_TABLE_SLIT;
241
242
243
/*******************************************************************************
244
*
245
* SPCR - Serial Port Console Redirection table
246
* Version 4
247
*
248
* Conforms to "Serial Port Console Redirection Table",
249
* Version 1.10, Jan 5, 2023
250
*
251
******************************************************************************/
252
253
typedef struct acpi_table_spcr
254
{
255
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
256
UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */
257
UINT8 Reserved[3];
258
ACPI_GENERIC_ADDRESS SerialPort;
259
UINT8 InterruptType;
260
UINT8 PcInterrupt;
261
UINT32 Interrupt;
262
UINT8 BaudRate;
263
UINT8 Parity;
264
UINT8 StopBits;
265
UINT8 FlowControl;
266
UINT8 TerminalType;
267
UINT8 Language;
268
UINT16 PciDeviceId;
269
UINT16 PciVendorId;
270
UINT8 PciBus;
271
UINT8 PciDevice;
272
UINT8 PciFunction;
273
UINT32 PciFlags;
274
UINT8 PciSegment;
275
UINT32 UartClkFreq;
276
UINT32 PreciseBaudrate;
277
UINT16 NameSpaceStringLength;
278
UINT16 NameSpaceStringOffset;
279
char NameSpaceString[];
280
281
} ACPI_TABLE_SPCR;
282
283
/* Masks for PciFlags field above */
284
285
#define ACPI_SPCR_DO_NOT_DISABLE (1)
286
287
/* Values for Interface Type: See the definition of the DBG2 table */
288
289
290
/*******************************************************************************
291
*
292
* SPMI - Server Platform Management Interface table
293
* Version 5
294
*
295
* Conforms to "Intelligent Platform Management Interface Specification
296
* Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
297
* June 12, 2009 markup.
298
*
299
******************************************************************************/
300
301
typedef struct acpi_table_spmi
302
{
303
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
304
UINT8 InterfaceType;
305
UINT8 Reserved; /* Must be 1 */
306
UINT16 SpecRevision; /* Version of IPMI */
307
UINT8 InterruptType;
308
UINT8 GpeNumber; /* GPE assigned */
309
UINT8 Reserved1;
310
UINT8 PciDeviceFlag;
311
UINT32 Interrupt;
312
ACPI_GENERIC_ADDRESS IpmiRegister;
313
UINT8 PciSegment;
314
UINT8 PciBus;
315
UINT8 PciDevice;
316
UINT8 PciFunction;
317
UINT8 Reserved2;
318
319
} ACPI_TABLE_SPMI;
320
321
/* Values for InterfaceType above */
322
323
enum AcpiSpmiInterfaceTypes
324
{
325
ACPI_SPMI_NOT_USED = 0,
326
ACPI_SPMI_KEYBOARD = 1,
327
ACPI_SPMI_SMI = 2,
328
ACPI_SPMI_BLOCK_TRANSFER = 3,
329
ACPI_SPMI_SMBUS = 4,
330
ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */
331
};
332
333
334
/*******************************************************************************
335
*
336
* SRAT - System Resource Affinity Table
337
* Version 3
338
*
339
******************************************************************************/
340
341
typedef struct acpi_table_srat
342
{
343
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
344
UINT32 TableRevision; /* Must be value '1' */
345
UINT64 Reserved; /* Reserved, must be zero */
346
347
} ACPI_TABLE_SRAT;
348
349
/* Values for subtable type in ACPI_SUBTABLE_HEADER */
350
351
enum AcpiSratType
352
{
353
ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
354
ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
355
ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
356
ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
357
ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */
358
ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5, /* ACPI 6.3 */
359
ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY = 6, /* ACPI 6.4 */
360
ACPI_SRAT_TYPE_RINTC_AFFINITY = 7, /* ACPI 6.6 */
361
ACPI_SRAT_TYPE_RESERVED = 8 /* 8 and greater are reserved */
362
};
363
364
/*
365
* SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
366
*/
367
368
/* 0: Processor Local APIC/SAPIC Affinity */
369
370
typedef struct acpi_srat_cpu_affinity
371
{
372
ACPI_SUBTABLE_HEADER Header;
373
UINT8 ProximityDomainLo;
374
UINT8 ApicId;
375
UINT32 Flags;
376
UINT8 LocalSapicEid;
377
UINT8 ProximityDomainHi[3];
378
UINT32 ClockDomain;
379
380
} ACPI_SRAT_CPU_AFFINITY;
381
382
/* Flags */
383
384
#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */
385
386
387
/* 1: Memory Affinity */
388
389
typedef struct acpi_srat_mem_affinity
390
{
391
ACPI_SUBTABLE_HEADER Header;
392
UINT32 ProximityDomain;
393
UINT16 Reserved; /* Reserved, must be zero */
394
UINT64 BaseAddress;
395
UINT64 Length;
396
UINT32 Reserved1;
397
UINT32 Flags;
398
UINT64 Reserved2; /* Reserved, must be zero */
399
400
} ACPI_SRAT_MEM_AFFINITY;
401
402
/* Flags */
403
404
#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */
405
#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */
406
#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */
407
#define ACPI_SRAT_MEM_SPEC_PURPOSE (1<<3) /* 03: Memory is intended for specific-purpose usage */
408
409
410
/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
411
412
typedef struct acpi_srat_x2apic_cpu_affinity
413
{
414
ACPI_SUBTABLE_HEADER Header;
415
UINT16 Reserved; /* Reserved, must be zero */
416
UINT32 ProximityDomain;
417
UINT32 ApicId;
418
UINT32 Flags;
419
UINT32 ClockDomain;
420
UINT32 Reserved2;
421
422
} ACPI_SRAT_X2APIC_CPU_AFFINITY;
423
424
/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */
425
426
#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */
427
428
429
/* 3: GICC Affinity (ACPI 5.1) */
430
431
typedef struct acpi_srat_gicc_affinity
432
{
433
ACPI_SUBTABLE_HEADER Header;
434
UINT32 ProximityDomain;
435
UINT32 AcpiProcessorUid;
436
UINT32 Flags;
437
UINT32 ClockDomain;
438
439
} ACPI_SRAT_GICC_AFFINITY;
440
441
/* Flags for ACPI_SRAT_GICC_AFFINITY */
442
443
#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */
444
445
446
/* 4: GIC ITS Affinity (ACPI 6.2) */
447
448
typedef struct acpi_srat_gic_its_affinity
449
{
450
ACPI_SUBTABLE_HEADER Header;
451
UINT32 ProximityDomain;
452
UINT16 Reserved;
453
UINT32 ItsId;
454
455
} ACPI_SRAT_GIC_ITS_AFFINITY;
456
457
/*
458
* Common structure for SRAT subtable types:
459
* 5: ACPI_SRAT_TYPE_GENERIC_AFFINITY
460
* 6: ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY
461
*/
462
463
#define ACPI_SRAT_DEVICE_HANDLE_SIZE 16
464
465
typedef struct acpi_srat_generic_affinity
466
{
467
ACPI_SUBTABLE_HEADER Header;
468
UINT8 Reserved;
469
UINT8 DeviceHandleType;
470
UINT32 ProximityDomain;
471
UINT8 DeviceHandle[ACPI_SRAT_DEVICE_HANDLE_SIZE];
472
UINT32 Flags;
473
UINT32 Reserved1;
474
475
} ACPI_SRAT_GENERIC_AFFINITY;
476
477
/* Flags for ACPI_SRAT_GENERIC_AFFINITY */
478
479
#define ACPI_SRAT_GENERIC_AFFINITY_ENABLED (1) /* 00: Use affinity structure */
480
#define ACPI_SRAT_ARCHITECTURAL_TRANSACTIONS (1<<1) /* ACPI 6.4 */
481
482
/* 7: RINTC Affinity Structure(ACPI 6.6) */
483
484
typedef struct acpi_srat_rintc_affinity
485
{
486
ACPI_SUBTABLE_HEADER Header;
487
UINT16 Reserved;
488
UINT32 ProximityDomain;
489
UINT32 AcpiProcessorUid;
490
UINT32 Flags;
491
UINT32 ClockDomain;
492
493
} ACPI_SRAT_RINTC_AFFINITY;
494
495
/* Flags for ACPI_SRAT_RINTC_AFFINITY */
496
497
#define ACPI_SRAT_RINTC_ENABLED (1) /* 00: Use affinity structure */
498
499
/*******************************************************************************
500
*
501
* STAO - Status Override Table (_STA override) - ACPI 6.0
502
* Version 1
503
*
504
* Conforms to "ACPI Specification for Status Override Table"
505
* 6 January 2015
506
*
507
******************************************************************************/
508
509
typedef struct acpi_table_stao
510
{
511
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
512
UINT8 IgnoreUart;
513
514
} ACPI_TABLE_STAO;
515
516
517
/*******************************************************************************
518
*
519
* TCPA - Trusted Computing Platform Alliance table
520
* Version 2
521
*
522
* TCG Hardware Interface Table for TPM 1.2 Clients and Servers
523
*
524
* Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
525
* Version 1.2, Revision 8
526
* February 27, 2017
527
*
528
* NOTE: There are two versions of the table with the same signature --
529
* the client version and the server version. The common PlatformClass
530
* field is used to differentiate the two types of tables.
531
*
532
******************************************************************************/
533
534
typedef struct acpi_table_tcpa_hdr
535
{
536
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
537
UINT16 PlatformClass;
538
539
} ACPI_TABLE_TCPA_HDR;
540
541
/*
542
* Values for PlatformClass above.
543
* This is how the client and server subtables are differentiated
544
*/
545
#define ACPI_TCPA_CLIENT_TABLE 0
546
#define ACPI_TCPA_SERVER_TABLE 1
547
548
549
typedef struct acpi_table_tcpa_client
550
{
551
UINT32 MinimumLogLength; /* Minimum length for the event log area */
552
UINT64 LogAddress; /* Address of the event log area */
553
554
} ACPI_TABLE_TCPA_CLIENT;
555
556
typedef struct acpi_table_tcpa_server
557
{
558
UINT16 Reserved;
559
UINT64 MinimumLogLength; /* Minimum length for the event log area */
560
UINT64 LogAddress; /* Address of the event log area */
561
UINT16 SpecRevision;
562
UINT8 DeviceFlags;
563
UINT8 InterruptFlags;
564
UINT8 GpeNumber;
565
UINT8 Reserved2[3];
566
UINT32 GlobalInterrupt;
567
ACPI_GENERIC_ADDRESS Address;
568
UINT32 Reserved3;
569
ACPI_GENERIC_ADDRESS ConfigAddress;
570
UINT8 Group;
571
UINT8 Bus; /* PCI Bus/Segment/Function numbers */
572
UINT8 Device;
573
UINT8 Function;
574
575
} ACPI_TABLE_TCPA_SERVER;
576
577
/* Values for DeviceFlags above */
578
579
#define ACPI_TCPA_PCI_DEVICE (1)
580
#define ACPI_TCPA_BUS_PNP (1<<1)
581
#define ACPI_TCPA_ADDRESS_VALID (1<<2)
582
583
/* Values for InterruptFlags above */
584
585
#define ACPI_TCPA_INTERRUPT_MODE (1)
586
#define ACPI_TCPA_INTERRUPT_POLARITY (1<<1)
587
#define ACPI_TCPA_SCI_VIA_GPE (1<<2)
588
#define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3)
589
590
591
/*******************************************************************************
592
*
593
* TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
594
* Version 4
595
*
596
* TCG Hardware Interface Table for TPM 2.0 Clients and Servers
597
*
598
* Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
599
* Version 1.2, Revision 8
600
* February 27, 2017
601
*
602
******************************************************************************/
603
604
/* Revision 3 */
605
606
typedef struct acpi_table_tpm23
607
{
608
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
609
UINT32 Reserved;
610
UINT64 ControlAddress;
611
UINT32 StartMethod;
612
613
} ACPI_TABLE_TPM23;
614
615
/* Value for StartMethod above */
616
617
#define ACPI_TPM23_ACPI_START_METHOD 2
618
619
/*
620
* Optional trailer for revision 3. If start method is 2, there is a 4 byte
621
* reserved area of all zeros.
622
*/
623
typedef struct acpi_tmp23_trailer
624
{
625
UINT32 Reserved;
626
627
} ACPI_TPM23_TRAILER;
628
629
630
/* Revision 4 */
631
632
typedef struct acpi_table_tpm2
633
{
634
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
635
UINT16 PlatformClass;
636
UINT16 Reserved;
637
UINT64 ControlAddress;
638
UINT32 StartMethod;
639
640
/* Platform-specific data follows */
641
642
} ACPI_TABLE_TPM2;
643
644
/* Values for StartMethod above */
645
646
#define ACPI_TPM2_NOT_ALLOWED 0
647
#define ACPI_TPM2_RESERVED1 1
648
#define ACPI_TPM2_START_METHOD 2
649
#define ACPI_TPM2_RESERVED3 3
650
#define ACPI_TPM2_RESERVED4 4
651
#define ACPI_TPM2_RESERVED5 5
652
#define ACPI_TPM2_MEMORY_MAPPED 6
653
#define ACPI_TPM2_COMMAND_BUFFER 7
654
#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8
655
#define ACPI_TPM2_RESERVED9 9
656
#define ACPI_TPM2_RESERVED10 10
657
#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */
658
#define ACPI_TPM2_RESERVED 12
659
#define ACPI_TPM2_COMMAND_BUFFER_WITH_PLUTON 13
660
#define ACPI_TPM2_CRB_WITH_ARM_FFA 15
661
662
663
/* Optional trailer appears after any StartMethod subtables */
664
665
typedef struct acpi_tpm2_trailer
666
{
667
UINT8 MethodParameters[12];
668
UINT32 MinimumLogLength; /* Minimum length for the event log area */
669
UINT64 LogAddress; /* Address of the event log area */
670
671
} ACPI_TPM2_TRAILER;
672
673
674
/*
675
* Subtables (StartMethod-specific)
676
*/
677
678
/* 11: Start Method for ARM SMC (V1.2 Rev 8) */
679
680
typedef struct acpi_tpm2_arm_smc
681
{
682
UINT32 GlobalInterrupt;
683
UINT8 InterruptFlags;
684
UINT8 OperationFlags;
685
UINT16 Reserved;
686
UINT32 FunctionId;
687
688
} ACPI_TPM2_ARM_SMC;
689
690
/* Values for InterruptFlags above */
691
692
#define ACPI_TPM2_INTERRUPT_SUPPORT (1)
693
694
/* Values for OperationFlags above */
695
696
#define ACPI_TPM2_IDLE_SUPPORT (1)
697
698
699
/*******************************************************************************
700
*
701
* UEFI - UEFI Boot optimization Table
702
* Version 1
703
*
704
* Conforms to "Unified Extensible Firmware Interface Specification",
705
* Version 2.3, May 8, 2009
706
*
707
******************************************************************************/
708
709
typedef struct acpi_table_uefi
710
{
711
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
712
UINT8 Identifier[16]; /* UUID identifier */
713
UINT16 DataOffset; /* Offset of remaining data in table */
714
715
} ACPI_TABLE_UEFI;
716
717
718
/*******************************************************************************
719
*
720
* VIOT - Virtual I/O Translation Table
721
* Version 1
722
*
723
******************************************************************************/
724
725
typedef struct acpi_table_viot
726
{
727
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
728
UINT16 NodeCount;
729
UINT16 NodeOffset;
730
UINT8 Reserved[8];
731
732
} ACPI_TABLE_VIOT;
733
734
/* VIOT subtable header */
735
736
typedef struct acpi_viot_header
737
{
738
UINT8 Type;
739
UINT8 Reserved;
740
UINT16 Length;
741
742
} ACPI_VIOT_HEADER;
743
744
/* Values for Type field above */
745
746
enum AcpiViotNodeType
747
{
748
ACPI_VIOT_NODE_PCI_RANGE = 0x01,
749
ACPI_VIOT_NODE_MMIO = 0x02,
750
ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI = 0x03,
751
ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO = 0x04,
752
ACPI_VIOT_RESERVED = 0x05
753
};
754
755
/* VIOT subtables */
756
757
typedef struct acpi_viot_pci_range
758
{
759
ACPI_VIOT_HEADER Header;
760
UINT32 EndpointStart;
761
UINT16 SegmentStart;
762
UINT16 SegmentEnd;
763
UINT16 BdfStart;
764
UINT16 BdfEnd;
765
UINT16 OutputNode;
766
UINT8 Reserved[6];
767
768
} ACPI_VIOT_PCI_RANGE;
769
770
typedef struct acpi_viot_mmio
771
{
772
ACPI_VIOT_HEADER Header;
773
UINT32 Endpoint;
774
UINT64 BaseAddress;
775
UINT16 OutputNode;
776
UINT8 Reserved[6];
777
778
} ACPI_VIOT_MMIO;
779
780
typedef struct acpi_viot_virtio_iommu_pci
781
{
782
ACPI_VIOT_HEADER Header;
783
UINT16 Segment;
784
UINT16 Bdf;
785
UINT8 Reserved[8];
786
787
} ACPI_VIOT_VIRTIO_IOMMU_PCI;
788
789
typedef struct acpi_viot_virtio_iommu_mmio
790
{
791
ACPI_VIOT_HEADER Header;
792
UINT8 Reserved[4];
793
UINT64 BaseAddress;
794
795
} ACPI_VIOT_VIRTIO_IOMMU_MMIO;
796
797
798
/*******************************************************************************
799
*
800
* WAET - Windows ACPI Emulated devices Table
801
* Version 1
802
*
803
* Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
804
*
805
******************************************************************************/
806
807
typedef struct acpi_table_waet
808
{
809
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
810
UINT32 Flags;
811
812
} ACPI_TABLE_WAET;
813
814
/* Masks for Flags field above */
815
816
#define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */
817
#define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */
818
819
820
/*******************************************************************************
821
*
822
* WDAT - Watchdog Action Table
823
* Version 1
824
*
825
* Conforms to "Hardware Watchdog Timers Design Specification",
826
* Copyright 2006 Microsoft Corporation.
827
*
828
******************************************************************************/
829
830
typedef struct acpi_table_wdat
831
{
832
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
833
UINT32 HeaderLength; /* Watchdog Header Length */
834
UINT16 PciSegment; /* PCI Segment number */
835
UINT8 PciBus; /* PCI Bus number */
836
UINT8 PciDevice; /* PCI Device number */
837
UINT8 PciFunction; /* PCI Function number */
838
UINT8 Reserved[3];
839
UINT32 TimerPeriod; /* Period of one timer count (msec) */
840
UINT32 MaxCount; /* Maximum counter value supported */
841
UINT32 MinCount; /* Minimum counter value */
842
UINT8 Flags;
843
UINT8 Reserved2[3];
844
UINT32 Entries; /* Number of watchdog entries that follow */
845
846
} ACPI_TABLE_WDAT;
847
848
/* Masks for Flags field above */
849
850
#define ACPI_WDAT_ENABLED (1)
851
#define ACPI_WDAT_STOPPED 0x80
852
853
854
/* WDAT Instruction Entries (actions) */
855
856
typedef struct acpi_wdat_entry
857
{
858
UINT8 Action;
859
UINT8 Instruction;
860
UINT16 Reserved;
861
ACPI_GENERIC_ADDRESS RegisterRegion;
862
UINT32 Value; /* Value used with Read/Write register */
863
UINT32 Mask; /* Bitmask required for this register instruction */
864
865
} ACPI_WDAT_ENTRY;
866
867
/* Values for Action field above */
868
869
enum AcpiWdatActions
870
{
871
ACPI_WDAT_RESET = 1,
872
ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
873
ACPI_WDAT_GET_COUNTDOWN = 5,
874
ACPI_WDAT_SET_COUNTDOWN = 6,
875
ACPI_WDAT_GET_RUNNING_STATE = 8,
876
ACPI_WDAT_SET_RUNNING_STATE = 9,
877
ACPI_WDAT_GET_STOPPED_STATE = 10,
878
ACPI_WDAT_SET_STOPPED_STATE = 11,
879
ACPI_WDAT_GET_REBOOT = 16,
880
ACPI_WDAT_SET_REBOOT = 17,
881
ACPI_WDAT_GET_SHUTDOWN = 18,
882
ACPI_WDAT_SET_SHUTDOWN = 19,
883
ACPI_WDAT_GET_STATUS = 32,
884
ACPI_WDAT_SET_STATUS = 33,
885
ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */
886
};
887
888
/* Values for Instruction field above */
889
890
enum AcpiWdatInstructions
891
{
892
ACPI_WDAT_READ_VALUE = 0,
893
ACPI_WDAT_READ_COUNTDOWN = 1,
894
ACPI_WDAT_WRITE_VALUE = 2,
895
ACPI_WDAT_WRITE_COUNTDOWN = 3,
896
ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */
897
ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */
898
};
899
900
901
/*******************************************************************************
902
*
903
* WDDT - Watchdog Descriptor Table
904
* Version 1
905
*
906
* Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
907
* Version 001, September 2002
908
*
909
******************************************************************************/
910
911
typedef struct acpi_table_wddt
912
{
913
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
914
UINT16 SpecVersion;
915
UINT16 TableVersion;
916
UINT16 PciVendorId;
917
ACPI_GENERIC_ADDRESS Address;
918
UINT16 MaxCount; /* Maximum counter value supported */
919
UINT16 MinCount; /* Minimum counter value supported */
920
UINT16 Period;
921
UINT16 Status;
922
UINT16 Capability;
923
924
} ACPI_TABLE_WDDT;
925
926
/* Flags for Status field above */
927
928
#define ACPI_WDDT_AVAILABLE (1)
929
#define ACPI_WDDT_ACTIVE (1<<1)
930
#define ACPI_WDDT_TCO_OS_OWNED (1<<2)
931
#define ACPI_WDDT_USER_RESET (1<<11)
932
#define ACPI_WDDT_WDT_RESET (1<<12)
933
#define ACPI_WDDT_POWER_FAIL (1<<13)
934
#define ACPI_WDDT_UNKNOWN_RESET (1<<14)
935
936
/* Flags for Capability field above */
937
938
#define ACPI_WDDT_AUTO_RESET (1)
939
#define ACPI_WDDT_ALERT_SUPPORT (1<<1)
940
941
942
/*******************************************************************************
943
*
944
* WDRT - Watchdog Resource Table
945
* Version 1
946
*
947
* Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
948
* Version 1.01, August 28, 2006
949
*
950
******************************************************************************/
951
952
typedef struct acpi_table_wdrt
953
{
954
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
955
ACPI_GENERIC_ADDRESS ControlRegister;
956
ACPI_GENERIC_ADDRESS CountRegister;
957
UINT16 PciDeviceId;
958
UINT16 PciVendorId;
959
UINT8 PciBus; /* PCI Bus number */
960
UINT8 PciDevice; /* PCI Device number */
961
UINT8 PciFunction; /* PCI Function number */
962
UINT8 PciSegment; /* PCI Segment number */
963
UINT16 MaxCount; /* Maximum counter value supported */
964
UINT8 Units;
965
966
} ACPI_TABLE_WDRT;
967
968
969
/*******************************************************************************
970
*
971
* WPBT - Windows Platform Environment Table (ACPI 6.0)
972
* Version 1
973
*
974
* Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011
975
*
976
******************************************************************************/
977
978
typedef struct acpi_table_wpbt
979
{
980
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
981
UINT32 HandoffSize;
982
UINT64 HandoffAddress;
983
UINT8 Layout;
984
UINT8 Type;
985
UINT16 ArgumentsLength;
986
987
} ACPI_TABLE_WPBT;
988
989
typedef struct acpi_wpbt_unicode
990
{
991
UINT16 *UnicodeString;
992
993
} ACPI_WPBT_UNICODE;
994
995
996
/*******************************************************************************
997
*
998
* WSMT - Windows SMM Security Mitigations Table
999
* Version 1
1000
*
1001
* Conforms to "Windows SMM Security Mitigations Table",
1002
* Version 1.0, April 18, 2016
1003
*
1004
******************************************************************************/
1005
1006
typedef struct acpi_table_wsmt
1007
{
1008
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1009
UINT32 ProtectionFlags;
1010
1011
} ACPI_TABLE_WSMT;
1012
1013
/* Flags for ProtectionFlags field above */
1014
1015
#define ACPI_WSMT_FIXED_COMM_BUFFERS (1)
1016
#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
1017
#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4)
1018
1019
1020
/*******************************************************************************
1021
*
1022
* XENV - Xen Environment Table (ACPI 6.0)
1023
* Version 1
1024
*
1025
* Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015
1026
*
1027
******************************************************************************/
1028
1029
typedef struct acpi_table_xenv
1030
{
1031
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1032
UINT64 GrantTableAddress;
1033
UINT64 GrantTableSize;
1034
UINT32 EventInterrupt;
1035
UINT8 EventFlags;
1036
1037
} ACPI_TABLE_XENV;
1038
1039
1040
/* Reset to default packing */
1041
1042
#pragma pack()
1043
1044
#endif /* __ACTBL3_H__ */
1045
1046