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
48286 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
408
409
/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
410
411
typedef struct acpi_srat_x2apic_cpu_affinity
412
{
413
ACPI_SUBTABLE_HEADER Header;
414
UINT16 Reserved; /* Reserved, must be zero */
415
UINT32 ProximityDomain;
416
UINT32 ApicId;
417
UINT32 Flags;
418
UINT32 ClockDomain;
419
UINT32 Reserved2;
420
421
} ACPI_SRAT_X2APIC_CPU_AFFINITY;
422
423
/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */
424
425
#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */
426
427
428
/* 3: GICC Affinity (ACPI 5.1) */
429
430
typedef struct acpi_srat_gicc_affinity
431
{
432
ACPI_SUBTABLE_HEADER Header;
433
UINT32 ProximityDomain;
434
UINT32 AcpiProcessorUid;
435
UINT32 Flags;
436
UINT32 ClockDomain;
437
438
} ACPI_SRAT_GICC_AFFINITY;
439
440
/* Flags for ACPI_SRAT_GICC_AFFINITY */
441
442
#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */
443
444
445
/* 4: GIC ITS Affinity (ACPI 6.2) */
446
447
typedef struct acpi_srat_gic_its_affinity
448
{
449
ACPI_SUBTABLE_HEADER Header;
450
UINT32 ProximityDomain;
451
UINT16 Reserved;
452
UINT32 ItsId;
453
454
} ACPI_SRAT_GIC_ITS_AFFINITY;
455
456
/*
457
* Common structure for SRAT subtable types:
458
* 5: ACPI_SRAT_TYPE_GENERIC_AFFINITY
459
* 6: ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY
460
*/
461
462
#define ACPI_SRAT_DEVICE_HANDLE_SIZE 16
463
464
typedef struct acpi_srat_generic_affinity
465
{
466
ACPI_SUBTABLE_HEADER Header;
467
UINT8 Reserved;
468
UINT8 DeviceHandleType;
469
UINT32 ProximityDomain;
470
UINT8 DeviceHandle[ACPI_SRAT_DEVICE_HANDLE_SIZE];
471
UINT32 Flags;
472
UINT32 Reserved1;
473
474
} ACPI_SRAT_GENERIC_AFFINITY;
475
476
/* Flags for ACPI_SRAT_GENERIC_AFFINITY */
477
478
#define ACPI_SRAT_GENERIC_AFFINITY_ENABLED (1) /* 00: Use affinity structure */
479
#define ACPI_SRAT_ARCHITECTURAL_TRANSACTIONS (1<<1) /* ACPI 6.4 */
480
481
/* 7: RINTC Affinity Structure(ACPI 6.6) */
482
483
typedef struct acpi_srat_rintc_affinity
484
{
485
ACPI_SUBTABLE_HEADER Header;
486
UINT16 Reserved;
487
UINT32 ProximityDomain;
488
UINT32 AcpiProcessorUid;
489
UINT32 Flags;
490
UINT32 ClockDomain;
491
492
} ACPI_SRAT_RINTC_AFFINITY;
493
494
/* Flags for ACPI_SRAT_RINTC_AFFINITY */
495
496
#define ACPI_SRAT_RINTC_ENABLED (1) /* 00: Use affinity structure */
497
498
/*******************************************************************************
499
*
500
* STAO - Status Override Table (_STA override) - ACPI 6.0
501
* Version 1
502
*
503
* Conforms to "ACPI Specification for Status Override Table"
504
* 6 January 2015
505
*
506
******************************************************************************/
507
508
typedef struct acpi_table_stao
509
{
510
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
511
UINT8 IgnoreUart;
512
513
} ACPI_TABLE_STAO;
514
515
516
/*******************************************************************************
517
*
518
* TCPA - Trusted Computing Platform Alliance table
519
* Version 2
520
*
521
* TCG Hardware Interface Table for TPM 1.2 Clients and Servers
522
*
523
* Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
524
* Version 1.2, Revision 8
525
* February 27, 2017
526
*
527
* NOTE: There are two versions of the table with the same signature --
528
* the client version and the server version. The common PlatformClass
529
* field is used to differentiate the two types of tables.
530
*
531
******************************************************************************/
532
533
typedef struct acpi_table_tcpa_hdr
534
{
535
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
536
UINT16 PlatformClass;
537
538
} ACPI_TABLE_TCPA_HDR;
539
540
/*
541
* Values for PlatformClass above.
542
* This is how the client and server subtables are differentiated
543
*/
544
#define ACPI_TCPA_CLIENT_TABLE 0
545
#define ACPI_TCPA_SERVER_TABLE 1
546
547
548
typedef struct acpi_table_tcpa_client
549
{
550
UINT32 MinimumLogLength; /* Minimum length for the event log area */
551
UINT64 LogAddress; /* Address of the event log area */
552
553
} ACPI_TABLE_TCPA_CLIENT;
554
555
typedef struct acpi_table_tcpa_server
556
{
557
UINT16 Reserved;
558
UINT64 MinimumLogLength; /* Minimum length for the event log area */
559
UINT64 LogAddress; /* Address of the event log area */
560
UINT16 SpecRevision;
561
UINT8 DeviceFlags;
562
UINT8 InterruptFlags;
563
UINT8 GpeNumber;
564
UINT8 Reserved2[3];
565
UINT32 GlobalInterrupt;
566
ACPI_GENERIC_ADDRESS Address;
567
UINT32 Reserved3;
568
ACPI_GENERIC_ADDRESS ConfigAddress;
569
UINT8 Group;
570
UINT8 Bus; /* PCI Bus/Segment/Function numbers */
571
UINT8 Device;
572
UINT8 Function;
573
574
} ACPI_TABLE_TCPA_SERVER;
575
576
/* Values for DeviceFlags above */
577
578
#define ACPI_TCPA_PCI_DEVICE (1)
579
#define ACPI_TCPA_BUS_PNP (1<<1)
580
#define ACPI_TCPA_ADDRESS_VALID (1<<2)
581
582
/* Values for InterruptFlags above */
583
584
#define ACPI_TCPA_INTERRUPT_MODE (1)
585
#define ACPI_TCPA_INTERRUPT_POLARITY (1<<1)
586
#define ACPI_TCPA_SCI_VIA_GPE (1<<2)
587
#define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3)
588
589
590
/*******************************************************************************
591
*
592
* TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
593
* Version 4
594
*
595
* TCG Hardware Interface Table for TPM 2.0 Clients and Servers
596
*
597
* Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
598
* Version 1.2, Revision 8
599
* February 27, 2017
600
*
601
******************************************************************************/
602
603
/* Revision 3 */
604
605
typedef struct acpi_table_tpm23
606
{
607
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
608
UINT32 Reserved;
609
UINT64 ControlAddress;
610
UINT32 StartMethod;
611
612
} ACPI_TABLE_TPM23;
613
614
/* Value for StartMethod above */
615
616
#define ACPI_TPM23_ACPI_START_METHOD 2
617
618
/*
619
* Optional trailer for revision 3. If start method is 2, there is a 4 byte
620
* reserved area of all zeros.
621
*/
622
typedef struct acpi_tmp23_trailer
623
{
624
UINT32 Reserved;
625
626
} ACPI_TPM23_TRAILER;
627
628
629
/* Revision 4 */
630
631
typedef struct acpi_table_tpm2
632
{
633
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
634
UINT16 PlatformClass;
635
UINT16 Reserved;
636
UINT64 ControlAddress;
637
UINT32 StartMethod;
638
639
/* Platform-specific data follows */
640
641
} ACPI_TABLE_TPM2;
642
643
/* Values for StartMethod above */
644
645
#define ACPI_TPM2_NOT_ALLOWED 0
646
#define ACPI_TPM2_RESERVED1 1
647
#define ACPI_TPM2_START_METHOD 2
648
#define ACPI_TPM2_RESERVED3 3
649
#define ACPI_TPM2_RESERVED4 4
650
#define ACPI_TPM2_RESERVED5 5
651
#define ACPI_TPM2_MEMORY_MAPPED 6
652
#define ACPI_TPM2_COMMAND_BUFFER 7
653
#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8
654
#define ACPI_TPM2_RESERVED9 9
655
#define ACPI_TPM2_RESERVED10 10
656
#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */
657
#define ACPI_TPM2_RESERVED 12
658
#define ACPI_TPM2_COMMAND_BUFFER_WITH_PLUTON 13
659
#define ACPI_TPM2_CRB_WITH_ARM_FFA 15
660
661
662
/* Optional trailer appears after any StartMethod subtables */
663
664
typedef struct acpi_tpm2_trailer
665
{
666
UINT8 MethodParameters[12];
667
UINT32 MinimumLogLength; /* Minimum length for the event log area */
668
UINT64 LogAddress; /* Address of the event log area */
669
670
} ACPI_TPM2_TRAILER;
671
672
673
/*
674
* Subtables (StartMethod-specific)
675
*/
676
677
/* 11: Start Method for ARM SMC (V1.2 Rev 8) */
678
679
typedef struct acpi_tpm2_arm_smc
680
{
681
UINT32 GlobalInterrupt;
682
UINT8 InterruptFlags;
683
UINT8 OperationFlags;
684
UINT16 Reserved;
685
UINT32 FunctionId;
686
687
} ACPI_TPM2_ARM_SMC;
688
689
/* Values for InterruptFlags above */
690
691
#define ACPI_TPM2_INTERRUPT_SUPPORT (1)
692
693
/* Values for OperationFlags above */
694
695
#define ACPI_TPM2_IDLE_SUPPORT (1)
696
697
698
/*******************************************************************************
699
*
700
* UEFI - UEFI Boot optimization Table
701
* Version 1
702
*
703
* Conforms to "Unified Extensible Firmware Interface Specification",
704
* Version 2.3, May 8, 2009
705
*
706
******************************************************************************/
707
708
typedef struct acpi_table_uefi
709
{
710
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
711
UINT8 Identifier[16]; /* UUID identifier */
712
UINT16 DataOffset; /* Offset of remaining data in table */
713
714
} ACPI_TABLE_UEFI;
715
716
717
/*******************************************************************************
718
*
719
* VIOT - Virtual I/O Translation Table
720
* Version 1
721
*
722
******************************************************************************/
723
724
typedef struct acpi_table_viot
725
{
726
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
727
UINT16 NodeCount;
728
UINT16 NodeOffset;
729
UINT8 Reserved[8];
730
731
} ACPI_TABLE_VIOT;
732
733
/* VIOT subtable header */
734
735
typedef struct acpi_viot_header
736
{
737
UINT8 Type;
738
UINT8 Reserved;
739
UINT16 Length;
740
741
} ACPI_VIOT_HEADER;
742
743
/* Values for Type field above */
744
745
enum AcpiViotNodeType
746
{
747
ACPI_VIOT_NODE_PCI_RANGE = 0x01,
748
ACPI_VIOT_NODE_MMIO = 0x02,
749
ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI = 0x03,
750
ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO = 0x04,
751
ACPI_VIOT_RESERVED = 0x05
752
};
753
754
/* VIOT subtables */
755
756
typedef struct acpi_viot_pci_range
757
{
758
ACPI_VIOT_HEADER Header;
759
UINT32 EndpointStart;
760
UINT16 SegmentStart;
761
UINT16 SegmentEnd;
762
UINT16 BdfStart;
763
UINT16 BdfEnd;
764
UINT16 OutputNode;
765
UINT8 Reserved[6];
766
767
} ACPI_VIOT_PCI_RANGE;
768
769
typedef struct acpi_viot_mmio
770
{
771
ACPI_VIOT_HEADER Header;
772
UINT32 Endpoint;
773
UINT64 BaseAddress;
774
UINT16 OutputNode;
775
UINT8 Reserved[6];
776
777
} ACPI_VIOT_MMIO;
778
779
typedef struct acpi_viot_virtio_iommu_pci
780
{
781
ACPI_VIOT_HEADER Header;
782
UINT16 Segment;
783
UINT16 Bdf;
784
UINT8 Reserved[8];
785
786
} ACPI_VIOT_VIRTIO_IOMMU_PCI;
787
788
typedef struct acpi_viot_virtio_iommu_mmio
789
{
790
ACPI_VIOT_HEADER Header;
791
UINT8 Reserved[4];
792
UINT64 BaseAddress;
793
794
} ACPI_VIOT_VIRTIO_IOMMU_MMIO;
795
796
797
/*******************************************************************************
798
*
799
* WAET - Windows ACPI Emulated devices Table
800
* Version 1
801
*
802
* Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
803
*
804
******************************************************************************/
805
806
typedef struct acpi_table_waet
807
{
808
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
809
UINT32 Flags;
810
811
} ACPI_TABLE_WAET;
812
813
/* Masks for Flags field above */
814
815
#define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */
816
#define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */
817
818
819
/*******************************************************************************
820
*
821
* WDAT - Watchdog Action Table
822
* Version 1
823
*
824
* Conforms to "Hardware Watchdog Timers Design Specification",
825
* Copyright 2006 Microsoft Corporation.
826
*
827
******************************************************************************/
828
829
typedef struct acpi_table_wdat
830
{
831
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
832
UINT32 HeaderLength; /* Watchdog Header Length */
833
UINT16 PciSegment; /* PCI Segment number */
834
UINT8 PciBus; /* PCI Bus number */
835
UINT8 PciDevice; /* PCI Device number */
836
UINT8 PciFunction; /* PCI Function number */
837
UINT8 Reserved[3];
838
UINT32 TimerPeriod; /* Period of one timer count (msec) */
839
UINT32 MaxCount; /* Maximum counter value supported */
840
UINT32 MinCount; /* Minimum counter value */
841
UINT8 Flags;
842
UINT8 Reserved2[3];
843
UINT32 Entries; /* Number of watchdog entries that follow */
844
845
} ACPI_TABLE_WDAT;
846
847
/* Masks for Flags field above */
848
849
#define ACPI_WDAT_ENABLED (1)
850
#define ACPI_WDAT_STOPPED 0x80
851
852
853
/* WDAT Instruction Entries (actions) */
854
855
typedef struct acpi_wdat_entry
856
{
857
UINT8 Action;
858
UINT8 Instruction;
859
UINT16 Reserved;
860
ACPI_GENERIC_ADDRESS RegisterRegion;
861
UINT32 Value; /* Value used with Read/Write register */
862
UINT32 Mask; /* Bitmask required for this register instruction */
863
864
} ACPI_WDAT_ENTRY;
865
866
/* Values for Action field above */
867
868
enum AcpiWdatActions
869
{
870
ACPI_WDAT_RESET = 1,
871
ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
872
ACPI_WDAT_GET_COUNTDOWN = 5,
873
ACPI_WDAT_SET_COUNTDOWN = 6,
874
ACPI_WDAT_GET_RUNNING_STATE = 8,
875
ACPI_WDAT_SET_RUNNING_STATE = 9,
876
ACPI_WDAT_GET_STOPPED_STATE = 10,
877
ACPI_WDAT_SET_STOPPED_STATE = 11,
878
ACPI_WDAT_GET_REBOOT = 16,
879
ACPI_WDAT_SET_REBOOT = 17,
880
ACPI_WDAT_GET_SHUTDOWN = 18,
881
ACPI_WDAT_SET_SHUTDOWN = 19,
882
ACPI_WDAT_GET_STATUS = 32,
883
ACPI_WDAT_SET_STATUS = 33,
884
ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */
885
};
886
887
/* Values for Instruction field above */
888
889
enum AcpiWdatInstructions
890
{
891
ACPI_WDAT_READ_VALUE = 0,
892
ACPI_WDAT_READ_COUNTDOWN = 1,
893
ACPI_WDAT_WRITE_VALUE = 2,
894
ACPI_WDAT_WRITE_COUNTDOWN = 3,
895
ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */
896
ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */
897
};
898
899
900
/*******************************************************************************
901
*
902
* WDDT - Watchdog Descriptor Table
903
* Version 1
904
*
905
* Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
906
* Version 001, September 2002
907
*
908
******************************************************************************/
909
910
typedef struct acpi_table_wddt
911
{
912
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
913
UINT16 SpecVersion;
914
UINT16 TableVersion;
915
UINT16 PciVendorId;
916
ACPI_GENERIC_ADDRESS Address;
917
UINT16 MaxCount; /* Maximum counter value supported */
918
UINT16 MinCount; /* Minimum counter value supported */
919
UINT16 Period;
920
UINT16 Status;
921
UINT16 Capability;
922
923
} ACPI_TABLE_WDDT;
924
925
/* Flags for Status field above */
926
927
#define ACPI_WDDT_AVAILABLE (1)
928
#define ACPI_WDDT_ACTIVE (1<<1)
929
#define ACPI_WDDT_TCO_OS_OWNED (1<<2)
930
#define ACPI_WDDT_USER_RESET (1<<11)
931
#define ACPI_WDDT_WDT_RESET (1<<12)
932
#define ACPI_WDDT_POWER_FAIL (1<<13)
933
#define ACPI_WDDT_UNKNOWN_RESET (1<<14)
934
935
/* Flags for Capability field above */
936
937
#define ACPI_WDDT_AUTO_RESET (1)
938
#define ACPI_WDDT_ALERT_SUPPORT (1<<1)
939
940
941
/*******************************************************************************
942
*
943
* WDRT - Watchdog Resource Table
944
* Version 1
945
*
946
* Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
947
* Version 1.01, August 28, 2006
948
*
949
******************************************************************************/
950
951
typedef struct acpi_table_wdrt
952
{
953
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
954
ACPI_GENERIC_ADDRESS ControlRegister;
955
ACPI_GENERIC_ADDRESS CountRegister;
956
UINT16 PciDeviceId;
957
UINT16 PciVendorId;
958
UINT8 PciBus; /* PCI Bus number */
959
UINT8 PciDevice; /* PCI Device number */
960
UINT8 PciFunction; /* PCI Function number */
961
UINT8 PciSegment; /* PCI Segment number */
962
UINT16 MaxCount; /* Maximum counter value supported */
963
UINT8 Units;
964
965
} ACPI_TABLE_WDRT;
966
967
968
/*******************************************************************************
969
*
970
* WPBT - Windows Platform Environment Table (ACPI 6.0)
971
* Version 1
972
*
973
* Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011
974
*
975
******************************************************************************/
976
977
typedef struct acpi_table_wpbt
978
{
979
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
980
UINT32 HandoffSize;
981
UINT64 HandoffAddress;
982
UINT8 Layout;
983
UINT8 Type;
984
UINT16 ArgumentsLength;
985
986
} ACPI_TABLE_WPBT;
987
988
typedef struct acpi_wpbt_unicode
989
{
990
UINT16 *UnicodeString;
991
992
} ACPI_WPBT_UNICODE;
993
994
995
/*******************************************************************************
996
*
997
* WSMT - Windows SMM Security Mitigations Table
998
* Version 1
999
*
1000
* Conforms to "Windows SMM Security Mitigations Table",
1001
* Version 1.0, April 18, 2016
1002
*
1003
******************************************************************************/
1004
1005
typedef struct acpi_table_wsmt
1006
{
1007
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1008
UINT32 ProtectionFlags;
1009
1010
} ACPI_TABLE_WSMT;
1011
1012
/* Flags for ProtectionFlags field above */
1013
1014
#define ACPI_WSMT_FIXED_COMM_BUFFERS (1)
1015
#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
1016
#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4)
1017
1018
1019
/*******************************************************************************
1020
*
1021
* XENV - Xen Environment Table (ACPI 6.0)
1022
* Version 1
1023
*
1024
* Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015
1025
*
1026
******************************************************************************/
1027
1028
typedef struct acpi_table_xenv
1029
{
1030
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1031
UINT64 GrantTableAddress;
1032
UINT64 GrantTableSize;
1033
UINT32 EventInterrupt;
1034
UINT8 EventFlags;
1035
1036
} ACPI_TABLE_XENV;
1037
1038
1039
/* Reset to default packing */
1040
1041
#pragma pack()
1042
1043
#endif /* __ACTBL3_H__ */
1044
1045