Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/edk2/Include/IndustryStandard/Acpi20.h
48291 views
1
/** @file
2
ACPI 2.0 definitions from the ACPI Specification, revision 2.0
3
4
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
5
SPDX-License-Identifier: BSD-2-Clause-Patent
6
**/
7
8
#ifndef _ACPI_2_0_H_
9
#define _ACPI_2_0_H_
10
11
#include <IndustryStandard/Acpi10.h>
12
13
//
14
// Define for Descriptor
15
//
16
#define ACPI_LARGE_GENERIC_REGISTER_DESCRIPTOR_NAME 0x02
17
18
#define ACPI_GENERIC_REGISTER_DESCRIPTOR 0x82
19
20
//
21
// Ensure proper structure formats
22
//
23
#pragma pack(1)
24
25
///
26
/// Generic Register Descriptor
27
///
28
typedef PACKED struct {
29
ACPI_LARGE_RESOURCE_HEADER Header;
30
UINT8 AddressSpaceId;
31
UINT8 RegisterBitWidth;
32
UINT8 RegisterBitOffset;
33
UINT8 AddressSize;
34
UINT64 RegisterAddress;
35
} EFI_ACPI_GENERIC_REGISTER_DESCRIPTOR;
36
37
#pragma pack()
38
39
//
40
// Ensure proper structure formats
41
//
42
#pragma pack(1)
43
44
///
45
/// ACPI 2.0 Generic Address Space definition
46
///
47
typedef struct {
48
UINT8 AddressSpaceId;
49
UINT8 RegisterBitWidth;
50
UINT8 RegisterBitOffset;
51
UINT8 Reserved;
52
UINT64 Address;
53
} EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE;
54
55
//
56
// Generic Address Space Address IDs
57
//
58
#define EFI_ACPI_2_0_SYSTEM_MEMORY 0
59
#define EFI_ACPI_2_0_SYSTEM_IO 1
60
#define EFI_ACPI_2_0_PCI_CONFIGURATION_SPACE 2
61
#define EFI_ACPI_2_0_EMBEDDED_CONTROLLER 3
62
#define EFI_ACPI_2_0_SMBUS 4
63
#define EFI_ACPI_2_0_FUNCTIONAL_FIXED_HARDWARE 0x7F
64
65
//
66
// ACPI 2.0 table structures
67
//
68
69
///
70
/// Root System Description Pointer Structure
71
///
72
typedef struct {
73
UINT64 Signature;
74
UINT8 Checksum;
75
UINT8 OemId[6];
76
UINT8 Revision;
77
UINT32 RsdtAddress;
78
UINT32 Length;
79
UINT64 XsdtAddress;
80
UINT8 ExtendedChecksum;
81
UINT8 Reserved[3];
82
} EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER;
83
84
///
85
/// RSD_PTR Revision (as defined in ACPI 2.0 spec.)
86
///
87
#define EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION 0x02
88
89
///
90
/// Common table header, this prefaces all ACPI tables, including FACS, but
91
/// excluding the RSD PTR structure
92
///
93
typedef struct {
94
UINT32 Signature;
95
UINT32 Length;
96
} EFI_ACPI_2_0_COMMON_HEADER;
97
98
//
99
// Root System Description Table
100
// No definition needed as it is a common description table header, the same with
101
// EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
102
//
103
104
///
105
/// RSDT Revision (as defined in ACPI 2.0 spec.)
106
///
107
#define EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
108
109
//
110
// Extended System Description Table
111
// No definition needed as it is a common description table header, the same with
112
// EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers.
113
//
114
115
///
116
/// XSDT Revision (as defined in ACPI 2.0 spec.)
117
///
118
#define EFI_ACPI_2_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
119
120
///
121
/// Fixed ACPI Description Table Structure (FADT)
122
///
123
typedef struct {
124
EFI_ACPI_DESCRIPTION_HEADER Header;
125
UINT32 FirmwareCtrl;
126
UINT32 Dsdt;
127
UINT8 Reserved0;
128
UINT8 PreferredPmProfile;
129
UINT16 SciInt;
130
UINT32 SmiCmd;
131
UINT8 AcpiEnable;
132
UINT8 AcpiDisable;
133
UINT8 S4BiosReq;
134
UINT8 PstateCnt;
135
UINT32 Pm1aEvtBlk;
136
UINT32 Pm1bEvtBlk;
137
UINT32 Pm1aCntBlk;
138
UINT32 Pm1bCntBlk;
139
UINT32 Pm2CntBlk;
140
UINT32 PmTmrBlk;
141
UINT32 Gpe0Blk;
142
UINT32 Gpe1Blk;
143
UINT8 Pm1EvtLen;
144
UINT8 Pm1CntLen;
145
UINT8 Pm2CntLen;
146
UINT8 PmTmrLen;
147
UINT8 Gpe0BlkLen;
148
UINT8 Gpe1BlkLen;
149
UINT8 Gpe1Base;
150
UINT8 CstCnt;
151
UINT16 PLvl2Lat;
152
UINT16 PLvl3Lat;
153
UINT16 FlushSize;
154
UINT16 FlushStride;
155
UINT8 DutyOffset;
156
UINT8 DutyWidth;
157
UINT8 DayAlrm;
158
UINT8 MonAlrm;
159
UINT8 Century;
160
UINT16 IaPcBootArch;
161
UINT8 Reserved1;
162
UINT32 Flags;
163
EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE ResetReg;
164
UINT8 ResetValue;
165
UINT8 Reserved2[3];
166
UINT64 XFirmwareCtrl;
167
UINT64 XDsdt;
168
EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XPm1aEvtBlk;
169
EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XPm1bEvtBlk;
170
EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XPm1aCntBlk;
171
EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XPm1bCntBlk;
172
EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XPm2CntBlk;
173
EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XPmTmrBlk;
174
EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XGpe0Blk;
175
EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XGpe1Blk;
176
} EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE;
177
178
///
179
/// FADT Version (as defined in ACPI 2.0 spec.)
180
///
181
#define EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION 0x03
182
183
//
184
// Fixed ACPI Description Table Preferred Power Management Profile
185
//
186
#define EFI_ACPI_2_0_PM_PROFILE_UNSPECIFIED 0
187
#define EFI_ACPI_2_0_PM_PROFILE_DESKTOP 1
188
#define EFI_ACPI_2_0_PM_PROFILE_MOBILE 2
189
#define EFI_ACPI_2_0_PM_PROFILE_WORKSTATION 3
190
#define EFI_ACPI_2_0_PM_PROFILE_ENTERPRISE_SERVER 4
191
#define EFI_ACPI_2_0_PM_PROFILE_SOHO_SERVER 5
192
#define EFI_ACPI_2_0_PM_PROFILE_APPLIANCE_PC 6
193
194
//
195
// Fixed ACPI Description Table Boot Architecture Flags
196
// All other bits are reserved and must be set to 0.
197
//
198
#define EFI_ACPI_2_0_LEGACY_DEVICES BIT0
199
#define EFI_ACPI_2_0_8042 BIT1
200
201
//
202
// Fixed ACPI Description Table Fixed Feature Flags
203
// All other bits are reserved and must be set to 0.
204
//
205
#define EFI_ACPI_2_0_WBINVD BIT0
206
#define EFI_ACPI_2_0_WBINVD_FLUSH BIT1
207
#define EFI_ACPI_2_0_PROC_C1 BIT2
208
#define EFI_ACPI_2_0_P_LVL2_UP BIT3
209
#define EFI_ACPI_2_0_PWR_BUTTON BIT4
210
#define EFI_ACPI_2_0_SLP_BUTTON BIT5
211
#define EFI_ACPI_2_0_FIX_RTC BIT6
212
#define EFI_ACPI_2_0_RTC_S4 BIT7
213
#define EFI_ACPI_2_0_TMR_VAL_EXT BIT8
214
#define EFI_ACPI_2_0_DCK_CAP BIT9
215
#define EFI_ACPI_2_0_RESET_REG_SUP BIT10
216
#define EFI_ACPI_2_0_SEALED_CASE BIT11
217
#define EFI_ACPI_2_0_HEADLESS BIT12
218
#define EFI_ACPI_2_0_CPU_SW_SLP BIT13
219
220
///
221
/// Firmware ACPI Control Structure
222
///
223
typedef struct {
224
UINT32 Signature;
225
UINT32 Length;
226
UINT32 HardwareSignature;
227
UINT32 FirmwareWakingVector;
228
UINT32 GlobalLock;
229
UINT32 Flags;
230
UINT64 XFirmwareWakingVector;
231
UINT8 Version;
232
UINT8 Reserved[31];
233
} EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;
234
235
///
236
/// FACS Version (as defined in ACPI 2.0 spec.)
237
///
238
#define EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION 0x01
239
240
///
241
/// Firmware Control Structure Feature Flags
242
/// All other bits are reserved and must be set to 0.
243
///
244
#define EFI_ACPI_2_0_S4BIOS_F BIT0
245
246
///
247
/// Multiple APIC Description Table header definition. The rest of the table
248
/// must be defined in a platform specific manner.
249
///
250
typedef struct {
251
EFI_ACPI_DESCRIPTION_HEADER Header;
252
UINT32 LocalApicAddress;
253
UINT32 Flags;
254
} EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
255
256
///
257
/// MADT Revision (as defined in ACPI 2.0 spec.)
258
///
259
#define EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x01
260
261
///
262
/// Multiple APIC Flags
263
/// All other bits are reserved and must be set to 0.
264
///
265
#define EFI_ACPI_2_0_PCAT_COMPAT BIT0
266
267
//
268
// Multiple APIC Description Table APIC structure types
269
// All other values between 0x09 an 0xFF are reserved and
270
// will be ignored by OSPM.
271
//
272
#define EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC 0x00
273
#define EFI_ACPI_2_0_IO_APIC 0x01
274
#define EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE 0x02
275
#define EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE 0x03
276
#define EFI_ACPI_2_0_LOCAL_APIC_NMI 0x04
277
#define EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE 0x05
278
#define EFI_ACPI_2_0_IO_SAPIC 0x06
279
#define EFI_ACPI_2_0_PROCESSOR_LOCAL_SAPIC 0x07
280
#define EFI_ACPI_2_0_PLATFORM_INTERRUPT_SOURCES 0x08
281
282
//
283
// APIC Structure Definitions
284
//
285
286
///
287
/// Processor Local APIC Structure Definition
288
///
289
typedef struct {
290
UINT8 Type;
291
UINT8 Length;
292
UINT8 AcpiProcessorId;
293
UINT8 ApicId;
294
UINT32 Flags;
295
} EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE;
296
297
///
298
/// Local APIC Flags. All other bits are reserved and must be 0.
299
///
300
#define EFI_ACPI_2_0_LOCAL_APIC_ENABLED BIT0
301
302
///
303
/// IO APIC Structure
304
///
305
typedef struct {
306
UINT8 Type;
307
UINT8 Length;
308
UINT8 IoApicId;
309
UINT8 Reserved;
310
UINT32 IoApicAddress;
311
UINT32 GlobalSystemInterruptBase;
312
} EFI_ACPI_2_0_IO_APIC_STRUCTURE;
313
314
///
315
/// Interrupt Source Override Structure
316
///
317
typedef struct {
318
UINT8 Type;
319
UINT8 Length;
320
UINT8 Bus;
321
UINT8 Source;
322
UINT32 GlobalSystemInterrupt;
323
UINT16 Flags;
324
} EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
325
326
///
327
/// Non-Maskable Interrupt Source Structure
328
///
329
typedef struct {
330
UINT8 Type;
331
UINT8 Length;
332
UINT16 Flags;
333
UINT32 GlobalSystemInterrupt;
334
} EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
335
336
///
337
/// Local APIC NMI Structure
338
///
339
typedef struct {
340
UINT8 Type;
341
UINT8 Length;
342
UINT8 AcpiProcessorId;
343
UINT16 Flags;
344
UINT8 LocalApicLint;
345
} EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE;
346
347
///
348
/// Local APIC Address Override Structure
349
///
350
typedef struct {
351
UINT8 Type;
352
UINT8 Length;
353
UINT16 Reserved;
354
UINT64 LocalApicAddress;
355
} EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
356
357
///
358
/// IO SAPIC Structure
359
///
360
typedef struct {
361
UINT8 Type;
362
UINT8 Length;
363
UINT8 IoApicId;
364
UINT8 Reserved;
365
UINT32 GlobalSystemInterruptBase;
366
UINT64 IoSapicAddress;
367
} EFI_ACPI_2_0_IO_SAPIC_STRUCTURE;
368
369
///
370
/// Local SAPIC Structure
371
///
372
typedef struct {
373
UINT8 Type;
374
UINT8 Length;
375
UINT8 AcpiProcessorId;
376
UINT8 LocalSapicId;
377
UINT8 LocalSapicEid;
378
UINT8 Reserved[3];
379
UINT32 Flags;
380
} EFI_ACPI_2_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
381
382
///
383
/// Platform Interrupt Sources Structure
384
///
385
typedef struct {
386
UINT8 Type;
387
UINT8 Length;
388
UINT16 Flags;
389
UINT8 InterruptType;
390
UINT8 ProcessorId;
391
UINT8 ProcessorEid;
392
UINT8 IoSapicVector;
393
UINT32 GlobalSystemInterrupt;
394
UINT32 Reserved;
395
} EFI_ACPI_2_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
396
397
///
398
/// Smart Battery Description Table (SBST)
399
///
400
typedef struct {
401
EFI_ACPI_DESCRIPTION_HEADER Header;
402
UINT32 WarningEnergyLevel;
403
UINT32 LowEnergyLevel;
404
UINT32 CriticalEnergyLevel;
405
} EFI_ACPI_2_0_SMART_BATTERY_DESCRIPTION_TABLE;
406
407
///
408
/// SBST Version (as defined in ACPI 2.0 spec.)
409
///
410
#define EFI_ACPI_2_0_SMART_BATTERY_DESCRIPTION_TABLE_REVISION 0x01
411
412
///
413
/// Embedded Controller Boot Resources Table (ECDT)
414
/// The table is followed by a null terminated ASCII string that contains
415
/// a fully qualified reference to the name space object.
416
///
417
typedef struct {
418
EFI_ACPI_DESCRIPTION_HEADER Header;
419
EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE EcControl;
420
EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE EcData;
421
UINT32 Uid;
422
UINT8 GpeBit;
423
} EFI_ACPI_2_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
424
425
///
426
/// ECDT Version (as defined in ACPI 2.0 spec.)
427
///
428
#define EFI_ACPI_2_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION 0x01
429
430
//
431
// Known table signatures
432
//
433
434
///
435
/// "RSD PTR " Root System Description Pointer
436
///
437
#define EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
438
439
///
440
/// "SPIC" Multiple SAPIC Description Table
441
///
442
/// BUGBUG: Don't know where this came from except SR870BN4 uses it.
443
/// #define EFI_ACPI_2_0_MULTIPLE_SAPIC_DESCRIPTION_TABLE_SIGNATURE 0x43495053
444
///
445
#define EFI_ACPI_2_0_MULTIPLE_SAPIC_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('A', 'P', 'I', 'C')
446
447
///
448
/// "BOOT" MS Simple Boot Spec
449
///
450
#define EFI_ACPI_2_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE SIGNATURE_32('B', 'O', 'O', 'T')
451
452
///
453
/// "DBGP" MS Bebug Port Spec
454
///
455
#define EFI_ACPI_2_0_DEBUG_PORT_TABLE_SIGNATURE SIGNATURE_32('D', 'B', 'G', 'P')
456
457
///
458
/// "DSDT" Differentiated System Description Table
459
///
460
#define EFI_ACPI_2_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('D', 'S', 'D', 'T')
461
462
///
463
/// "ECDT" Embedded Controller Boot Resources Table
464
///
465
#define EFI_ACPI_2_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE SIGNATURE_32('E', 'C', 'D', 'T')
466
467
///
468
/// "ETDT" Event Timer Description Table
469
///
470
#define EFI_ACPI_2_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('E', 'T', 'D', 'T')
471
472
///
473
/// "FACS" Firmware ACPI Control Structure
474
///
475
#define EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE SIGNATURE_32('F', 'A', 'C', 'S')
476
477
///
478
/// "FACP" Fixed ACPI Description Table
479
///
480
#define EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('F', 'A', 'C', 'P')
481
482
///
483
/// "APIC" Multiple APIC Description Table
484
///
485
#define EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('A', 'P', 'I', 'C')
486
487
///
488
/// "PSDT" Persistent System Description Table
489
///
490
#define EFI_ACPI_2_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('P', 'S', 'D', 'T')
491
492
///
493
/// "RSDT" Root System Description Table
494
///
495
#define EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('R', 'S', 'D', 'T')
496
497
///
498
/// "SBST" Smart Battery Specification Table
499
///
500
#define EFI_ACPI_2_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE SIGNATURE_32('S', 'B', 'S', 'T')
501
502
///
503
/// "SLIT" System Locality Information Table
504
///
505
#define EFI_ACPI_2_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE SIGNATURE_32('S', 'L', 'I', 'T')
506
507
///
508
/// "SPCR" Serial Port Console Redirection Table
509
///
510
#define EFI_ACPI_2_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE SIGNATURE_32('S', 'P', 'C', 'R')
511
512
///
513
/// "SRAT" Static Resource Affinity Table
514
///
515
#define EFI_ACPI_2_0_STATIC_RESOURCE_AFFINITY_TABLE_SIGNATURE SIGNATURE_32('S', 'R', 'A', 'T')
516
517
///
518
/// "SSDT" Secondary System Description Table
519
///
520
#define EFI_ACPI_2_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('S', 'S', 'D', 'T')
521
522
///
523
/// "SPMI" Server Platform Management Interface Table
524
///
525
#define EFI_ACPI_2_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_SIGNATURE SIGNATURE_32('S', 'P', 'M', 'I')
526
527
///
528
/// "XSDT" Extended System Description Table
529
///
530
#define EFI_ACPI_2_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('X', 'S', 'D', 'T')
531
532
///
533
/// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
534
///
535
#define EFI_ACPI_2_0_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_SIGNATURE SIGNATURE_32('M', 'C', 'F', 'G')
536
537
#pragma pack()
538
539
#endif
540
541