MSI MSI Micro-Star International 1 ACPI Advanced Configuration and Power Interface Reporter :Wequalwu 2 Contents ACPI Overview ASL (ACPI Source Language) ACPI Implementer in AWARD BIOS 3 History of Power Management SL technology - 1989 First seen on the 386SL and still included in all of today’s Pentium and Pentium II processors Operating system had no idea of what the power management BIOS was up to. Advanced Power Management - 1991 Intel & Microsoft co-developed OS and power management BIOS could now talk to each other No cooperation among system components Add-on components do not participate in power management ACPI (Advanced Configuration and Power Interface) - 1997 Intel, Toshiba and Microsoft Open industry, all encompassing, PC hardware, operating system and peripheral device interface specifications Primary goal is to let O.S. manage all power activity 4 ACPI Introduction 1. industry common interfaces 2. The key element in Operating System-directed configuration and Power Management (OSPM). 3. stretch the limits of current Plug and Play interfaces. 4. more robust, and potentially more efficient manner. 5. collection of power management BIOS code, Advanced Power Management (APM) application programming interfaces (APIs, PNPBIOS APIs, Multiprocessor Specification (MPS) 6. suitable to all classes of computers including (but not limited to) desktop, mobile, workstation, and server machines 5 Principal Goals 1. ACPI provides OSPM with direct and exclusive control over the power management and motherboard device configuration functions of a computer. OS plays a central role and uses global information to optimize system behavior. ACPI is the key element in OSPM 2. Enable all computer systems to implement motherboard configuration and power management functions 3. Enhance power management functionality and robustness. 4. Facilitate and accelerate industry-wide implementation of power management. 5. Create a robust interface for configuring motherboard devices. 6 ACPI Function System power management Device power management Processor power management Plug and Play System Events Battery management Thermal management Embedded Controller SMBus Controller 7 Seven Operation Region Types 0 – SystemMemory 1 – SystemIO 2 – PCI_Config 3 – EmbeddedControl 4 – SMBus 5 – CMOS 6 – PCIBARTarget 8 OSPM/ACPI Global System 9 ACPI run-time components ACPI Tables Describe the interfaces to the hardware. ACPI Registers The constrained part of the hardware interface, described (at least in location) by the ACPI System Description Tables. ACPI BIOS ACPI system firmware.The firmwares boots the machine and compatible with ACPI spec. 10 ACPI Power States Global System States G0 -- ----Working (System Operational) G1 -------Sleeping - no user threads, system looks off G2/S5 --Soft Off G3 -------Mechanical off (Physical off switch) Device Power States D3 - Off - Power off to device D2 - Less power than D1 (Depends on device) D1 - Less power than D0 (Depends on Device) D0 - Fully-On Processor Power States C0 - Full power, instructions execute C1 - Processor stopped C2 - Processor stopped, less power than C1 C3 - Processor stopped, caches ignore snoops Sleeping States S0 - system Working S1 - Low Latency Sleeping State - Processor Context Maintained S2 - Low Latency Sleeping State - Processor Context Not Maintained S3 - Low Latency Sleeping State - DRAM still maintained S4 - Lowest power longest wake-up - DRAM not maintained S5 - Soft Off State 11 System Power States 12 OSPM Implementations 1.Use system address map reporting interfaces. (int15h,e820h) 2.Find and consume the ACPI System Description Tables. 3.Interpret ACPI machine language (AML). 4.Enumerate and configure motherboard devices described in the ACPI Namespace. 5.Interface with the power management timer. 6.Interface with the real-time clock wake alarm. 7.Enter ACPI mode (on legacy hardware systems). 8.Implement device power management policy. 9.Implement power resource management. 10.Implement processor power states in the scheduler idle handlers. 11.Control processor and device performance states. 12.Implement the ACPI thermal model. 13.Support the ACPI Event programming model including handling SCI interrupts, managing fixed events, general-purpose events, embedded controller interrupts, and dynamic device support. 14.Support acquisition and release of the Global Lock. 15.Use the reset register to reset the system. 16.Provide APIs to influence power management policy. 17.Implement driver support for ACPI-defined devices. 18.Implement APIs supporting the system indicators. 19.Support all system states S1–S5. 13 ACPI Hardware Fixed Hardware Programming Model Performance sensitive features Features that drivers require during wake Features that enable catastrophic OS software failure recovery CPU clock control Power management timer Fixed hardware registers Generic Hardware Programming Model OEM-provided AML code 14 Generic Hardware Feature Model ACPI Driver and AMLInterpreter Code Rds AML Code Control Events GP Event Status Generic Child Event Status Generic Control Logic Generic Event Logic 15 Global States and Their Transitions Pow e r Failure Legacy Boot (SCI_EN=0) Mode m HDD CDROM D3 D3 D3 D2 D2 D2 D1 D1 D1 D0 D0 D0 G3 -Mech Off C0 ACPI Boot (SCI_EN=1) BIOS Routine S4BIOS_F S4BIOS_REQ ACPI_ENABLE (SCI_EN=1) SLP_TYPx=(S1-S4) and SLP_EN G0 (S0) Working Legacy S4 S3 S2 S1 ACPI_DISABLE (SCI_EN=0) G1 Sleeping W ake Event ACPI Boot (SCI_EN=1) Legacy Boot (SCI_EN=0) SLP_TYPx=S5 and SLP_EN or PW RBTN_OR G2 (S5) Soft Off Performance State Px Throttling C0 C1 C2 CPU Cn 16 Register model Fixed hardware registers and Generic hardware registers System I/O System memory PCI configuration SMBus Embedded controller Functional Fixed Hardware 17 18 19 Example: PM1 20 21 ACPI Software ACPI uses tables to describe system information, features, and methods for controlling features. RSDT--Root System Description Table. XSDT--Extended System Description Table. FADT--Fixed ACPI Description Table. DSDT--Differentiated System Description Table. FACS--Firmware ACPI Control Structure. SSDT--Secondary System Description Table. …… 22 System Description Table Architecture F000:xxxx RSD PTR Top Memory RSDT(XSDT) FACS RSD PTR:Root System Description Pointer FADT DSDT RSDT:Root System Description Table FADT:Fixed ACPI Description Table FACS:Fimware ACPI Control Structure DBGP APIC MP(APIC) BOOT Simple boot flag DSDT:Differentiated System Description table SSDT:Secondary System Description Table SSDT 23 24 W6555 Acpi.asm ;Build RSD PTRtable ALIGN 16 Public RSD_PTR RSD_PTR: db "RSD PTR “ RSD_CKSM: db 0 ;RSD PTR Signature ;Checksum, fill in at POST …… RSDT_Ptr: db POST RSDPTRLengthEQU 4 dup (?) ;RSDT physical address, fill in at ($-RSD_PTR) 25 …… 26 W6555 Acpitbl.asm ;RSDT table RSDTtable: db "RSDT" ;Signaturedb 4 dup (?) …… db 4 dup (?) ;Pointer of FACP table ifdef SIMPLE_BOOT_SUPPORT db 4 dup (?) ; Pointer of BOOT table endif ;SIMPLE_BOOT_SUPPORT ifdef Debug_port_table ;R09 db 4 dup (?) ;R09 Pointer of DBGP table endif ;Debug_port_table ;R09 27 28 Fixed ACPI Description Table (FADT) FADT defines various fixed hardware ACPI information vital to an ACPI-compatible OS, such as the base address for the following hardware registers blocks: PM1a_EVT_BLK, PM1b_EVT_BLK, PM1a_CNT_BLK, PM1b_CNT_BLK…… 29 …… …… …… 30 W6555 FACPtable: db "FACP" ;Signature …… db 4 dup (?) ;Pointer of FACS table db 4 dup (?) ;Pointer of DSDT table …… dd PM1a_EVT_BLK dd PM1b_EVT_BLK …… dd GPE0_BLK dd GPE1_BLK db PM1_EVT_LEN …… Acpitbl.asm 31 Firmware ACPI Control Structure (FACS) FACS is a structure in read/write memory that the BIOS reserves for ACPI usage. Hardware Signature Used in waking from S4 state Firmware_waking_Vector Physical memory address of an OS wake function Global_lock 32 W6555 Acpitbl.asm ;FACS Table FACStable: db "FACS" ;Signature dd FACSLength ;Length dd 0 ;Hardware Signature dd 0 ;Firmware Waking Vector dd 0 ;Global Lock dd FACSFlag db 40 dup (0) ;Reserved FACSLength EQU ($-FACStable) 33 Differentiated System Description Table (DSDT) DSDT is part of the system fixed description. Table header Data in Definition Block 34 35 ASL (ACPI Source Language) ASL Name define All name are a fixed 32 bits. First byte is ‘A’-’Z’,’_’ Inclusive of ‘A’-’Z’,’0’-’9’,’_’ Name begin with ’_’ are reserved Name proceeded with ‘\’ refer to the root Name proceeded with ‘^’ refer to the parent 36 ASL Language Grammer Multiple blanks are the same as one. Blank, (, ), ‘,’ and newline are all token separators. // marks the beginning of a comment, which continues from the // to the end of the line. /* marks the beginning of a comment, which continues from the /* to the next */. “” surround an ASCII string. Single quotes (‘ ’)Indicate constant characters.‘A’ Numeric constants can be written in three ways: ordinary decimal, octal (using 0ddd) or hexadecimal, using the notation 0xdd. Nothing indicates an empty item. For example, { Nothing } is equivalent to {}. 37 ASL Data Type Description [Uninitialized] No assigned type or value. This is the type of all control method LocalX variables and unused ArgX variables at the beginning of method execution, as well as all uninitialized Package elements. Uninitialized objects must be initialized (via Store or CopyObject) before they may be used as source operands in ASL expressions. Buffer An array of bytes. Uninitialized elements are zero by default. Buffer Field Portion of a buffer created using CreateBitField, CreateByteField, CreateWordField, CreateQWordField, CreateField, or returned by the Index operator. DDB Handle Definition block handle returned by the Load operator Debug Object Debug output object. Formats an object and prints it to the system debug port. Has no effect if debugging is not active. Device Device or bus object Event Event synchronization object Field Unit (within an Operation Region) Portion of an address space, bit-aligned and of one-bit granularity. Created using Field, BankField, or IndexField. Integer An n-bit little-endian unsigned integer. In ACPI 1.0 this was at least 32-bits. In ACPI 2.0 this is at least 64.bits. Integer Constant Created by the ASL terms “Zero”, “One”, “Ones”, and “Revision”. Method Control Method (Executable AML function) Mutex Mutex synchronization object Object Reference Reference to an object created using the RefOf operator Operation Region Operation Region (A region within an Address Space) Package Collection of ASL objects with a fixed number of elements (up to 255). Power Resource Power Resource description object Processor Processor description object String Null-terminated ASCII string with up to 200 characters. Thermal Zone Thermal Zone description object 38 ASL Language and Terms DefinitionBlock( AMLFileName, TableSignature, ComplianceRevision, OEMID, TableID, OEMRevision ) //StringData //StringData //ByteConst //StringData //StringData //DWordConst { ObjectList } 39 H E A D B O D Y DefinitionBlock ( "DSDT.AML", "DSDT", 0x01, "INTELR", "AWRDACPI", 0x1000 ) { Scope(\_PR) { Processor(\_PR.CPU0, 1, 0x4010, 0x06 ) {} } …… Name(\_S0,Package(){0,0,0,0}) …… } W6555 Dsdt.asl //OEMID // Start of ASL File //processor number //System IO address of Pblk Registers //length in bytes of PBlk //R36 40 Example // Define a control method power button Device(\_SB.PWRB){ //_SB System bus scope Name(_HID, EISAID(“PNP0C0C”)) //_HID hardware ID Name(_PRW,Package(){0, 0x4}) //_PRW power resource for wake } OperationRegion(\Pho, SystemIO, 0x200, 0x1) Field(\Pho, ByteAcc, NoLock, WriteAsZeros){ PBP, 1, // sleep/off request PBW, 1 // wakeup request } // end of power button device object //_Lxx /_Exx Control method executed as a result of a GPE Scope(\_GPE){ // Root level event handlers //general-purpose event. Method(_L00){ // uses bit 0 of GP0_STS register If(PBP){ Store(One, PBP) // clear power button status Notify(\_SB.PWRB, 0x80) // Notify OS of event } IF(PBW){ Store(One, PBW) Notify(\_SB.PWRB, 0x2) } } // end of _L00 handler } // end of \_GPE scope 41 Prepare To Sleep _PTS Going To Sleep _GTS Wake Sleep _WAK System Wake _BFS Back From Sleep 42 ACPI In BIOS 43 Relative files in source code *.asx*.asl*.aml ACPITBL.EXEACPITBL.BIN ACPI.ASM ACPI.EQU ACPI.INC ACPI_CT.INC ACPI_IO.EQU ACPIPOST.ASM ACPITBL.ASM ACPILED.ASXACPILED.ASL 44 45 ACPI Name space A hierarchical tree structure in OS-controlled memory that contains named objects. These objects may be data objects, control method objects, bus/device package objects, and so on. The OS dynamically changes the contents of the namespace at run-time by loading and/or unloading definition blocks from the ACPI Tables that reside in the ACPI BIOS. All the information in the ACPI Namespace comes from the Differentiated System Description Table (DSDT), which contains the Differentiated Definition Block, and one or more other definition blocks. For all Definition Blocks, the system maintains a single hierarchical namespace that it uses to refer to objects. All Definition Blocks load into the same namespace. 46 Example ACPI NameSpace Root – Processor Tree \_PR P R – Processor 0 object CPU0 – Pow er resource for IDE0 \PID0 _STA – Method to return status of pow er resourse _ON – Method to turn on pow er resourse _OFF – Method to turn off pow er resourse – System bus tree \_SB d – PCI bus PCI0 d _HID – Device ID _CRS – Current resources (PCI bus number) IDE0 – IDE0 device Key _ADR – PCI device #, function # _PR0 – Pow er resource requirements for D0 P Processor Object – General purpose events (GP_STS) R Pow er Resource Object _L01 – Method to handle level GP_STS.1 d Bus/Device Object _E02 – Method to handle edge GP_STS.2 Data Object _L03 – Method to handle level GP_STS.3 Control Method (AML code) \_GPE Package 47 48 49 \_PR \_S0 \_S1 \_S4 \_S5 \_PTS \_WAK \_SI _MSG _SST \_GPE _L05 _L03 _L04 _L0B _L08 _L1B _L0C _L0D \_SB \_SB PWRB _HID _STA SLPB _HID _STA _PRW PCI0 _HID _ADR _UID _S3D _STA _CRS PICM APIC _PRT PX40 _ADR USB0 USB1 USB2 USB3 PX43 _ADR SMBB MODM PMIO _CRS W6555 Dsdt.asx 50 BIOS Initialization Boot Vector Yes SLP_TYP=S3 ? No Initialize CPU Enable Memory Initialize CPU Init memory controller Enable Memory Init chipset Yes S4BIOS ? Restore Memory Image No POST •… •ACPI NVS •ACPI Reclaim •ACPI Tables •… Boot OS Loader Call Waking Vector Non-Volatile-Sleeping Memory(NVS) 51 SETUP ACPI TABLE ACPI memory range type: ACPI Reclaim Memory Be free when finish using ACPI table ACPI Non-Volatile-Sleeping Memory(NVS) Reserved by BIOS 52 Process of Setup ACPI Table Determine the size and address of the physical memory. Allocate the ACPI Reserved area at top of memory for ACPI NVS and ACPI Reclaim memory areas. Fix up the ACPI table pointers with address values. Copy FACS into NVS;copy RSET,RACP,DSDT into ACPI Reclaim memory area;copy RSD pointer into E000:F000 memory segment. 53 54 W6555 E8post.asm ifdef ACPI_Support cmp dword ptr ACPI_TABLE_FLAG[bp],0 jz short No_ACPI_table mov di,(ACPITBL_Expand_Address+1)*4 call POST_decompress extrn SetupACPI:near call SetupACPI ;call to setup ACPI table No_ACPI_table: endif; ACPI_Support 55 W6555 acpi.asm call SetRealModeLimit F000_Call F000_Shadow_W call GetACPIReclaimArea call MoveACPIToReclaim call GetACPINVSArea call call call call MoveACPItoNVS FillACPIAddress FillACPIChecksum SetRealModelimit ;Enter big real mode ;Set F000 shadow to writeable ;Return EAX=physical address of reclaim memory area ;Move RSDT, FACP, DSDT tables to reclaim area ;Return EAX=physical address of ACPI NVS area ;Move FACS table to NVS area. ;Fill in the pointers for all tables ;Fill in check sum for all tables ;Leave big real mode 56 BOOTROM.ASM Detected system sleep resume state Enable ACPI I/O space Turn_On_ACPI_IO(chiprun.asm) ACPI.ASM Move codes to the top of memory,filled in all pointers,checksum. ACPI Patch (Ct_parse_AML) Replacesuspendtype PROC ModifySuspendType PROC ReplaceAML_String PROC ACPITBL.ASM All ACPI Tables puts here. 57 E0post.ASM POST code 067h Setup INT15h function E820h – memory report ACPI table address & size E8post.ASM POST code 089h - SetupACPI ACPI Table initialize AML initialize Dynamically modify ACPI tables and AML 58 ACPI_ENABLE (0A1h) out SMI_CMD,0A1H Enable SCI to transfer to ACPI mode. Save some chipset configuration. ACPI_DISABLE (0A0h) out SMI_CMD,0A0H Disable SCI to transfer to Legacy mode. Restore original chipset configuration. S4BIOS_REQ (0A4h) out SMI_CMD,0A4H Save system context to heardisk and put system state to S4. 59 Questions How does OS get SCI information? Is ACPI table dynamical created by BIOS Post? Can modify ACPI table in OS? 60 THE END Thank you 61