ACPI (Advanced Configuration and Power Interface),故名思義是對硬體的電源管理和設定的介面。它是由Intel、Microsoft、Phoenix、Toshiba等不同領域的製造商所訂定,它的目的就是讓OS可以對hardware做以上的動作。它的架構主要都在BIOS階段會建立起來,所以我們必須熟悉這本ACPI spec, 目前最新的版本是5.0a.
前六章是ACPI最基本的部分,要觀念清楚,一定要照著順序看,而且要熟讀它。後面章節可
以跳著看,也就是當作工具書來查,如果懂得愈多,對未來處理ACPI的問題也就更容易解決! 當然,要支援ACPI除了hardware , OS也必須支援ACPI, 而在ACPI訂定之前有個APM,這裡指的legacy OS或legacy hardware就是指APM的OS或不支援ACPI的OS或hardware,它將不符合ACPI,所以不在這裡討論。
ACPI既不是軟體的spec,也不是硬體的spec,它包括了軟體和硬體的元素,目的上面也說過,它是讓OS可以對Hardware做電源管理和設定的介面。如圖紅色部分就是ACPI的範圍:
ACPI可以做的事情很多,大致可分為十大類:
System power management: 整個系統的電源管理,ACPI定義了許多Sleep狀態,如S1、S3、S4、S5等,可以在Sleep狀態被Device喚醒,Sleep狀態數字愈高表示睡得越深、耗的電量越少,需要被喚醒的時間也越長。
Device power management: 週邊裝置的電源管理,ACPI定義D0、D1、D2、D3...,數字越大表示耗電量越少,D0表示週邊裝置運作中。ACPI Table也定義了週邊裝置的相關電源控制,可以在OS端透過AP將週邊裝置設定較省電的模式。
Processor power management: 處理器的電源管理,ACPI定義了當CPU不在Sleep狀態時且閒置時,可以進入low power 狀態,也就是C State,數字越大表示越省電,C0表示運作中。
Device and processor performance management: 週邊裝置和處理器的效能管理,ACPI定義為當CPU和設備在動作的時候(C0或D0),做改變效能的動作,這裡指的是P State,它的狀態改變會影響運作的效能,通常是降頻來動作,也可以達到省電的功能。
介紹完四個功能,發現了許多狀態,這是屬於Power State的部份,下面以G State圖表示可以看得更清楚。G0表示系統在工作中,G1為Sleeping, G2為soft off (S5), G3為Mech off(電源斷開).
Configuration / Plug and Play: 組態和隨插即用,ACPI提供了介面讓OSPM可以把資源在插入和移除之間做組態。這些組態將定義在DSDT和SSDT中,它將有一個ID來代表它的Device.
System Event: 糸統事件,ACPI定義了通用的事件模組,如Plug and Ply、Power management、Thermal 等。當系統事件發生時,core logic會設定一個bit在Status Register中來表示事件發生,如果對應的Bit在enable register 被設定,那麼會發出SCI來告訴OS. 當OS 收到SCI事件時,它會去找該事件所對應的control method. 這些control method會以AML的方式告訴OS做什麼事,我們則要用ASL來撰寫它。
Battery management: 電池管理,支援ACPI的電池裝置它是透過OS且以EC來控制,或者由電池的control method來控制。這邊的control method也是由ASL來實作它。
Thermal management: 熱的管理,對於Device的熱管理也是在ACPI定義的範圍,它提供了簡單的、可調整的模組來給OEM定義其Thermal zone、Thermal indicator和method for cooling thermal zones.
Embedded Controller: ACPI定義了標凖的硬體的和軟體的溝通介面給OS bus enumerator和EC之間來做溝通,也就是說可以由Driver來存取EC的資源,讓OEM可以提供platform features給OS的AP使用。
SMBus Controller: ACPI定義了標凖的硬體的和軟體的溝通介面給OS bus enumerator和SMBus Controller之間來做溝通,也就是說可以由Driver來存取SMBus device的資源,讓OEM可以提供platform features給OS的AP使用。
您好!我有轉載您的文章若有侵權~請通知~我將立即撤下!謝謝
回覆刪除如果有附轉載來源網站是可以的,請問轉載到哪裡?
回覆刪除請問您知道要如何取得AMD 平台的 ACPI base address嗎 ? 網路上有for intel chipset的方式(就是找ISA bridge,offset 0x43~0x40就是了) 但不知道AMD platform是否也一樣 ?
回覆刪除Default會落在0xFED80000
回覆刪除Intel default在0x400
回覆刪除您好,請問第一張圖可否再解釋的更清楚一點呢
回覆刪除參考資料acpi spec :),有問題再提出吧,前六章非常基本地
回覆刪除請問一下D3(hot) D2 D1 state差別分別是在哪裡?
回覆刪除別叫我再參考spec了>~< 就是看不是非常懂..才在這裡請教您的
親愛的讀者,關於妳的問題,有解答囉 ^_^
刪除http://frankuefi.blogspot.tw/search/label/ACPI
作者已經移除這則留言。
回覆刪除