1 Introduction 21
1.1 Principal Goals 21
1.2 Power Management Rationale 22
1.3 Legacy Support 23
1.4 OEM Implementation Strategy 23
1.5 Power and Sleep Buttons 23
1.6 ACPI Specification and the Structure Of ACPI 23
1.7 OS and Platform Compliance 25
1.7.1 Platform Implementations of ACPI-defined Interfaces 25
1.7.2 OSPM Implementations 28
1.7.3 OS Requirements 29
1.8 Target Audience 29
1.9 Document Organization 29
1.9.1 ACPI Introduction and Overview 30
1.9.2 Programming Models 30
1.9.3 Implementation Details 30
2 Technical Reference 31
2.1 Related Documents 31
3 Definition of Terms 32
3.1 General ACPI Terminology 32
3.2 Global System State Definitions 37
3.3 Device Power State Definitions 40
3.4 Sleeping State Definitions 41
3.5 Processor Power State Definitions 42
3.6 Device and Processor Performance State Definitions 42
4 ACPI Overview 44
4.1 System Power Management 45
4.2 Power States 45
4.2.1 Power Button 47
4.2.2 Platform Power Management Characteristics 47
4.3 Device Power Management 48
4.3.1 Power Management Standards 48
4.3.2 Device Power States 48
4.3.3 Device Power State Definitions 49
4.4 Controlling Device Power 49
4.4.1 Getting Device Power Capabilities 49
4.4.2 Setting Device Power States 50
4.4.3 Getting Device Power Status 50
4.4.4 Waking the Computer 50
4.4.5 Example: Modem Device Power Management 52
4.5 Processor Power Management 54
4.6 Device and Processor Performance States 55
4.7 Configuration and “Plug and Play” 55
4.7.1 Device Configuration Example: Configuring the Modem 56
4.7.2 NUMA Nodes 56
4.8 System Events 56
4.9 Battery Management 57
4.9.1 Battery Communications 57
4.9.2 Battery Capacity 57
4.9.3 Battery Gas Gauge 58
4.9.4 Low Battery Levels 58
4.9.5 Battery Calibration 60
4.10 Thermal Management 61
4.10.1 Active and Passive Cooling Modes 62
4.10.2 Performance vs. Energy Conservation 62
4.10.3 Acoustics (Noise) 62
4.10.4 Multiple Thermal Zones 62
5 ACPI Hardware Specification 63
5.1 Fixed Hardware Programming Model 63
5.1.1 Functional Fixed Hardware 63
5.2 Generic Hardware Programming Model 64
5.3 Diagram Legends 66
5.4 Register Bit Notation 67
5.5 The ACPI Hardware Model 67
5.5.1 Hardware Reserved Bits 70
5.5.2 Hardware Ignored Bits 71
5.5.3 Hardware Write-Only Bits 71
5.5.4 Cross Device Dependencies 71
5.6 ACPI Hardware Features 71
5.7 ACPI Register Model 73
5.7.1 ACPI Register Summary 76
5.7.2 Fixed Hardware Features 78
5.7.3 Fixed Hardware Registers 87
5.7.4 Generic Hardware Registers 94
6 ACPI Software Programming Model 103
6.1 Overview of the System Description Table Architecture 103
6.1.1 Address Space Translation 105
6.2 ACPI System Description Tables 106
6.2.1 Reserved Bits and Fields 106
6.2.2 Compatibility 107
6.2.3 Address Format 107
6.2.4 Universal Uniform Identifiers (UUID) 108
6.2.5 Root System Description Pointer (RSDP) 108
6.2.6 System Description Table Header 110
6.2.7 Root System Description Table (RSDT) 113
6.2.8 Extended System Description Table (XSDT) 113
6.2.9 Fixed ACPI Description Table (FADT) 114
6.2.10 Firmware ACPI Control Structure (FACS) 125
6.2.11 Definition Blocks 131
6.2.12 Multiple APIC Description Table (MADT) 134
6.2.13 Global System Interrupts 145
6.2.14 Smart Battery Table (SBST) 146
6.2.15 Embedded Controller Boot Resources Table (ECDT) 146
6.2.16 System Resource Affinity Table (SRAT) 148
6.2.17 System Locality Distance Information Table (SLIT) 151
6.2.18 Corrected Platform Error Polling Table (CPEP) 153
6.2.19 Maximum System Characteristics Table (MSCT) 154
6.3 ACPI Namespace 157
Except for names preceded with a ‘\’, the current namespace determines where in the namespace hierarchy a name being created goes and where a name being referenced is found. A name is located by finding the matching name in the current namespace, and then in the parent namespace. If the parent namespace does not contain the name, the search continues recursively upwards until either the name is found or the namespace does not have a parent (the root of the namespace). This indicates that the name is not found. 157
An attempt to access names in the parent of the root will result in the name not being found. 157
6.3.1 Predefined Root Namespaces 158
6.3.2 Objects 159
6.4 Definition Block Encoding 159
6.5 Using the ACPI Control Method Source Language 160
6.5.1 ASL Statements 161
6.5.2 Control Method Execution 161
The object \XYZ.BAR is a static object created when the table that contains the above ASL is loaded. The object \XYZ.FOO.BAR is a dynamic object that is created when the Name (BAR, 7) statement in the FOO method is executed. The object \XYZ.FOOB is a dynamic object created by the \XYZ.FOO method when the Name (\XYZ.FOOB, 3) statement is executed. Notice that the \XYZ.FOOB object is destroyed after the \XYZ.FOO method exits. 163
6.6 ACPI Event Programming Model 169
6.6.1 ACPI Event Programming Model Components 169
6.6.2 Types of ACPI Events 170
6.6.3 Fixed Event Handling 171
6.6.5 General-Purpose Event Handling 172
6.6.6 Device Object Notifications 175
6.6.7 Device Class-Specific Objects 180
6.6.8 Predefined ACPI Names for Objects, Methods, and Resources 183
6.7 Predefined Objects 191
6.7.1 \_GL (Global Lock Mutex) 191
6.7.2 \_OSI (Operating System Interfaces) 191
6.7.3 \_OS (OS Name Object) 194
6.7.4 \_REV (Revision Data Object) 195
6.8 System Configuration Objects 195
6.8.1 _PIC Method 195
7 Device Configuration 196
7.1 Device Identification Objects 196
7.1.1 _ADR (Address) 197
7.1.2 _CID (Compatible ID) 198
7.1.3 _DDN (DOS Device Name) 198
7.1.4 _HID (Hardware ID) 199
7.1.5 _MLS (Multiple Language String) 199
7.1.6 _PLD (Physical Device Location) 200
7.1.7 _STR (String) 206
7.1.8 _SUN (Slot User Number) 207
7.1.9 _UID (Unique ID) 207
7.2 Device Configuration Objects 207
7.2.1 _CDM (Clock Domain) 208
7.2.2 _CRS (Current Resource Settings) 209
7.2.3 _DIS (Disable) 209
7.2.4 _DMA (Direct Memory Access) 209
7.2.5 _FIX (Fixed Register Resource Provider) 212
7.2.6 _GSB (Global System Interrupt Base) 213
7.2.7 _HPP (Hot Plug Parameters) 214
7.2.8 _HPX (Hot Plug Parameter Extensions) 216
7.2.9 _MAT (Multiple APIC Table Entry) 221
7.2.10 _OSC (Operating System Capabilities) 222
7.2.11 _PRS (Possible Resource Settings) 232
7.2.12 _PRT (PCI Routing Table) 232
7.2.13 _PXM (Proximity) 234
7.2.14 _SLI (System Locality Information) 235
7.2.15 _SRS (Set Resource Settings) 239
7.3 Device Insertion, Removal, and Status Objects 239
7.3.1 _EDL (Eject Device List) 241
7.3.2 _EJD (Ejection Dependent Device) 241
7.3.3 _EJx (Eject) 243
7.3.4 _LCK (Lock) 243
7.3.5 _OST (OSPM Status Indication) 244
7.3.6 _RMV (Remove) 248
7.3.7 _STA (Status) 248
7.4 Resource Data Types for ACPI 249
7.4.1 ASL Macros for Resource Descriptors 249
7.4.2 Small Resource Data Type 249
7.4.3 Large Resource Data Type 254
7.5 Other Objects and Control Methods 276
7.5.1 _INI (Init) 276
7.5.2 _DCK (Dock) 277
7.5.3 _BDN (BIOS Dock Name) 277
7.5.4 _REG (Region) 277
7.5.5 _BBN (Base Bus Number) 279
7.5.6 _SEG (Segment) 279
7.5.7 _GLK (Global Lock) 281
8 Power and Performance Management 283
8.1 Declaring a Power Resource Object 283
8.1.1 Defined Child Objects for a Power Resource 284
8.1.2 _OFF 284
8.1.3 _ON 284
8.1.4 _STA (Status) 285
8.2 Device Power Management Objects 285
8.2.1 _DSW (Device Sleep Wake) 287
8.2.2 _PS0 (Power State 0) 287
8.2.3 _PS1 (Power State 1) 287
8.2.4 _PS2 (Power State 2) 288
8.2.5 _PS3 (Power State 3) 288
8.2.6 _PSC (Power State Current) 288
8.2.7 _PR0 (Power Resources for D0) 288
8.2.8 _PR1 (Power Resources for D1) 289
8.2.9 _PR2 (Power Resources for D2) 289
8.2.10 _PR3 (Power Resources for D3hot) 290
8.2.11 _PRW (Power Resources for Wake) 290
8.2.12 _PSW (Power State Wake) 291
8.2.13 _IRC (In Rush Current) 291
8.2.14 _S1D (S1 Device State) 292
8.2.15 _S2D (S2 Device State) 292
8.2.16 _S3D (S3 Device State) 293
8.2.17 _S4D (S4 Device State) 294
8.2.18 _S0W (S0 Device Wake State) 294
8.2.19 _S1W (S1 Device Wake State) 294
8.2.20 _S2W (S2 Device Wake State) 295
8.2.21 _S3W (S3 Device Wake State) 295
8.2.22 _S4W (S4 Device Wake State) 295
8.3 OEM-Supplied System-Level Control Methods 295
8.3.1 \_BFS (Back From Sleep) 296
8.3.2 \_PTS (Prepare To Sleep) 296
8.3.3 \_GTS (Going To Sleep) 297
8.3.4 System \_Sx states 297
8.3.5 _SWS (System Wake Source) 301
8.3.6 \_TTS (Transition To State) 302
8.3.7 \_WAK (System Wake) 302
8.4 OSPM usage of _GTS, _PTS, _TTS, _WAK, and _BFS 303
9 Processor Configuration and Control 306
9.1 Processor Power States 306
9.1.1 Processor Power State C0 308
9.1.2 Processor Power State C1 310
9.1.3 Processor Power State C2 310
9.1.4 Processor Power State C3 310
9.1.5 Additional Processor Power States 311
9.2 Flushing Caches 311
9.3 Power, Performance, and Throttling State Dependencies 312
9.4 Declaring Processors 312
9.4.1 _PDC (Processor Driver Capabilities) 313
9.4.2 Processor Power State Control 314
9.4.3 Processor Throttling Controls 319
9.4.4 Processor Performance Control 325
9.4.5 _PPE (Polling for Platform Errors) 332
9.5 Processor Aggregator Device 332
9.5.1 Logical Processor Idling 332
10 ACPI-Defined Devices and Device Specific Objects 334
10.1 \_SI System Indicators 334
10.1.1 _SST (System Status) 334
10.1.2 _MSG (Message) 334
10.1.3 _BLT (Battery Level Threshold) 334
10.2 Ambient Light Sensor Device 335
10.2.1 Overview 335
10.2.2 _ALI (Ambient Light Illuminance) 336
10.2.3 _ALT (Ambient Light Temperature) 336
10.2.4 _ALC (Ambient Light Color Chromaticity) 337
10.2.5 _ALR (Ambient Light Response) 337
10.2.6 _ALP (Ambient Light Polling) 341
10.2.7 Ambient Light Sensor Events 341
10.2.8 Relationship to Backlight Control Methods 341
10.3 Battery Device 342
10.4 Control Method Lid Device 342
10.4.1 _LID 342
10.5 Control Method Power and Sleep Button Devices 342
10.6 Embedded Controller Device 343
10.7 Generic Container Device 343
10.8 ATA Controller Devices 343
10.8.1 Objects for Both ATA and SATA Controllers 344
10.8.2 IDE Controller Device 345
10.8.3 Serial ATA (SATA) Controller Device 347
10.9 Floppy Controller Device Objects 349
10.9.1 _FDE (Floppy Disk Enumerate) 349
10.9.2 _FDI (Floppy Disk Information) 350
10.9.3 _FDM (Floppy Disk Drive Mode) 351
10.10 GPE Block Device 351
10.10.1 Matching Control Methods for General-Purpose Events in a GPE Block Device 352
10.11 Module Device 352
10.11.1 Describing PCI Bus and Segment Group Numbers under Module Devices 354
10.12 Memory Devices 356
10.12.1 Address Decoding 357
10.12.2 Memory Bandwidth Monitoring and Reporting 357
10.12.3 _OSC Definition for Memory Device 359
10.12.4 Example: Memory Device 359
10.13 _UPC (USB Port Capabilities) 360
10.13.1 USB 2.0 Host Controllers and _UPC and _PLD 364
10.14 Device Object Name Collision 365
10.14.1 _DSM (Device Specific Method) 365
10.15 PC/AT RTC/CMOS Devices 368
10.15.1 PC/AT-compatible RTC/CMOS Devices (PNP0B00) 368
10.15.2 Intel PIIX4-compatible RTC/CMOS Devices (PNP0B01) 369
10.15.3 Dallas Semiconductor-compatible RTC/CMOS Devices (PNP0B02) 370
10.16 User Presence Detection Device 370
10.16.1 _UPD (User Presence Detect) 371
10.16.2 _UPP (User Presence Polling) 371
10.16.3 User Presence Sensor Events 371
10.17 I/O APIC Device 371
10.18 Wake Alarm Device 372
10.18.1 Overview 372
10.18.2 _STP (Set Expired Timer Wake Policy) 374
10.18.3 _STV (Set Timer Value) 375
10.18.4 _TIP (Expired Timer Wake Policy) 375
10.18.5 _TIV (Timer Values) 375
10.18.6 ACPI Wakeup Alarm Events 375
10.18.7 Relationship to Real Time Clock Alarm 375
10.18.8 Example ASL code 376
11 Power Source and Power Meter Devices 379
11.1 Smart Battery Subsystems 379
11.1.1 ACPI Smart Battery Status Change Notification Requirements 381
11.1.2 Smart Battery Objects 382
11.1.3 _SBS (Smart Battery Subsystem) 382
11.2 Control Method Batteries 385
11.2.1 Battery Events 385
11.2.2 Battery Control Methods 386
11.3 AC Adapters and Power Source Objects 398
11.3.1 _PSR (Power Source) 398
11.3.2 _PCL (Power Consumer List) 399
11.3.3 _PIF (Power Source Information) 399
11.3.4 _PRL (Power Source Redundancy List) 400
11.4 Power Meters 400
11.4.1 _PMC (Power Meter Capabilities) 400
11.4.2 _PTP (Power Trip Points) 402
11.4.3 _PMM (Power Meter Measurement) 403
11.4.4 _PAI (Power Averaging Interval) 403
11.4.5 _GAI (Get Averaging Interval) 403
11.4.6 _SHL (Set Hardware Limit) 404
11.4.7 _GHL (Get Hardware Limit) 404
11.4.8 _PMD (Power Metered Devices) 404
11.5 Example: Power Source and Power Meter Namespace 405
13 Thermal Management 407
13.1 Thermal Control 407
13.1.1 Active, Passive, and Critical Policies 408
13.1.2 Dynamically Changing Cooling Temperature Trip Points 409
13.1.3 Detecting Temperature Changes 410
13.1.4 Active Cooling 412
13.1.5 Passive Cooling 412
13.1.6 Critical Shutdown 414
13.2 Cooling Preferences 415
13.2.1 Evaluating Thermal Device Lists 416
13.2.2 Evaluating Device Thermal Relationship Information 416
13.2.3 Fan Device Notifications 417
13.3 Fan Device 417
13.3.1 Fan Objects 417
13.4 Thermal Objects 420
13.4.1 _ACx (Active Cooling) 421
13.4.2 _ALx (Active List) 422
13.4.3 _ART (Active Cooling Relationship Table) 422
13.4.4 _CRT (Critical Temperature) 425
13.4.5 _DTI (Device Temperature Indication) 425
13.4.6 _HOT (Hot Temperature) 425
13.4.7 _NTT (Notification Temperature Threshold) 425
13.4.8 _PSL (Passive List) 426
13.4.9 _PSV (Passive) 426
13.4.10 _RTV (Relative Temperature Values) 426
13.4.11 _SCP (Set Cooling Policy) 427
13.4.12 _TC1 (Thermal Constant 1) 429
13.4.13 _TC2 (Thermal Constant 2) 429
13.4.14 _TMP (Temperature) 430
13.4.15 _TPT (Trip Point Temperature) 430
13.4.16 _TRT (Thermal Relationship Table) 430
13.4.17 _TSP (Thermal Sampling Period) 431
13.4.18 _TST (Temperature Sensor Threshold) 431
13.4.19 _TZD (Thermal Zone Devices) 432
13.4.20 _TZM (Thermal Zone Member) 432
13.4.21 _TZP (Thermal Zone Polling) 432
13.5 Native OS Device Driver Thermal Interfaces 433
13.6 Thermal Zone Interface Requirements 433
13.7 Thermal Zone Examples 434
13.7.1 Example: The Basic Thermal Zone 434
13.7.2 Example: Multiple-Speed Fans 435
13.7.3 Example: Thermal Zone with Multiple Devices 436
14 ACPI Embedded Controller Interface Specification 442
14.1 Embedded Controller Interface Description 442
14.2 Embedded Controller Register Descriptions 445
14.2.1 Embedded Controller Status, EC_SC (R) 445
14.2.2 Embedded Controller Command, EC_SC (W) 446
14.2.3 Embedded Controller Data, EC_DATA (R/W) 446
14.3 Embedded Controller Command Set 446
14.3.1 Read Embedded Controller, RD_EC (0x80) 447
14.3.2 Write Embedded Controller, WR_EC (0x81) 447
14.3.3 Burst Enable Embedded Controller, BE_EC (0x82) 447
14.3.4 Burst Disable Embedded Controller, BD_EC (0x83) 448
14.3.5 Query Embedded Controller, QR_EC (0x84) 448
14.4 SMBus Host Controller Notification Header (Optional), OS_SMB_EVT 448
14.5 Embedded Controller Firmware 448
14.6 Interrupt Model 449
14.6.1 Event Interrupt Model 449
14.6.2 Command Interrupt Model 450
14.7 Embedded Controller Interfacing Algorithms 450
14.8 Embedded Controller Description Information 450
14.9 SMBus Host Controller Interface via Embedded Controller 451
14.9.1 Register Description 451
This register determines the type of SMBus transaction generated on the SMBus. In addition to indicating the protocol type to the SMB-HC, a write to this register initiates the transaction on the SMBus. Notice that bit 7 of the protocol value is used to indicate whether packet error checking should be employed. A value of 1 (one) in this bit indicates that PEC format should be used for the specified protocol, and a value of 0 (zero) indicates the standard (non-PEC) format should be used. 452
14.9.2 Protocol Description 455
14.9.3 SMBus Register Set 458
14.10 SMBus Devices 460
14.10.1 SMBus Device Access Restrictions 460
14.10.2 SMBus Device Command Access Restriction 460
14.11 Defining an Embedded Controller Device in ACPI Namespace 460
14.11.1 Example: EC Definition ASL Code 461
14.12 Defining an EC SMBus Host Controller in ACPI Namespace 461
14.12.1 Example: EC SMBus Host Controller ASL-Code 462
15 ACPI System Management Bus Interface Specification 462
15.1 SMBus Overview 463
15.1.1 SMBus Slave Addresses 463
15.1.2 SMBus Protocols 463
15.1.3 SMBus Status Codes 464
15.1.4 SMBus Command Values 464
15.2 Accessing the SMBus from ASL Code 464
15.2.1 Declaring SMBus Host Controller Objects 464
15.2.2 Declaring SMBus Devices 465
15.2.3 Declaring SMBus Operation Regions 465
15.2.4 Declaring SMBus Fields 466
15.2.5 Declaring and Using an SMBus Data Buffer 468
15.3 Using the SMBus Protocols 469
15.3.1 Read/Write Quick (SMBQuick) 469
15.3.2 Send/Receive Byte (SMBSendReceive) 470
15.3.3 Read/Write Byte (SMBByte) 470
15.3.4 Read/Write Word (SMBWord) 471
15.3.5 Read/Write Block (SMBBlock) 472
15.3.6 Word Process Call (SMBProcessCall) 472
15.3.7 Block Process Call (SMBBlockProcessCall) 473
16 System Address Map Interfaces 474
16.1 INT 15H, E820H - Query System Address Map 475
16.2 E820 Assumptions and Limitations 477
16.3 UEFI GetMemoryMap() Boot Services Function 477
16.4 UEFI Assumptions and Limitations 478
16.5 Example Address Map 479
16.6 Example: Operating System Usage 479
17 Waking and Sleeping 482
17.1 Sleeping States 483
17.1.1 S1 Sleeping State 485
17.1.2 S2 Sleeping State 485
17.1.3 S3 Sleeping State 486
17.1.4 S4 Sleeping State 486
17.1.5 S5 Soft Off State 487
17.1.6 Transitioning from the Working to the Sleeping State 488
17.1.7 Transitioning from the Working to the Soft Off State 488
17.2 Flushing Caches 488
17.3 Initialization 489
17.3.1 Placing the System in ACPI Mode 491
17.3.2 BIOS Initialization of Memory 492
17.3.3 OS Loading 494
17.3.4 Exiting ACPI Mode 495
18 Non-Uniform Memory Access (NUMA) Architecture Platforms 496
18.1 NUMA Node 496
18.2 System Locality 496
18.2.1 System Resource Affinity Table Definition 496
18.3 System Locality Distance Information 497
19 ACPI Platform Error Interfaces (APEI) 499
19.1 Hardware Errors and Error Sources 499
19.2 Relationship between OSPM and System Firmware 500
19.3 Error Source Discovery 500
19.3.1 Boot Error Source 500
19.3.2 ACPI Error Source 502
19.4 Firmware First Error Handling 515
19.4.1 Example: Firmware First Handling Using NMI Notification 515
19.5 Error Serialization 515
19.5.1 Serialization Action Table 516
19.5.2 Operations 522
19.6 Error Injection 526
19.6.1 Error Injection Table (EINJ) 526
19.6.2 Injection Instruction Entries 528
19.6.3 Injection Instructions 529
19.6.4 Trigger Action Table 530
19.6.5 Error Injection Operation 530