共用方式為


針對 ACPI 服務使用 PEP

本主題提供針對 ACPI 服務使用平台擴充功能外掛程式 (PEP) 的相關信息。

PEP 提供動態運行時間 ACPI 方法。 靜態數據表 (FADT、MADT、DBG2 等 ) 必須在 ACPI 韌體中實作,以及 DSDT/SSDT 裝置階層。

PEP 用於關閉SoC電源管理方法。 因為它們是可安裝的二進位檔,因此可以即時更新,而不是需要韌體快閃的ACPI韌體。 這表示您可以藉由在 Windows Update 上張貼更新的驅動程式,來改善已寄送平臺上的電源管理程序代碼。 電源管理是 PEP 的原始意圖,但可用來提供或覆寫任何任意 ACPI 運行時間方法。

PEP 在建構 ACPI 命名空間階層時沒有作用,因為必須在韌體 DSDT 中提供命名空間階層。 當 ACPI 驅動程式在運行時間評估方法時,它會針對有問題的裝置檢查 PEP 的實作方法,如果有的話,它會執行 PEP 並忽略韌體的版本。 不過,裝置本身必須在韌體中定義。

使用 PEP 提供電源管理比針對 ACPI 韌體撰寫的程式代碼更容易偵錯,因為有可用的工具。 對 ACPI 韌體進行偵錯的工具不熟悉大部分,且工具選項有限。 相反地,PEP 會開發為 Windows 驅動程式,讓開發人員可以使用他們最熟悉的任何開發和偵錯工具。

使用 PEP 取代 ACPI 服務時,不需要任何特殊動作或作業,才能宣告服務的角色。 在 PEP 中實作方法時,Windows 會自動使用它。 如果提供相同裝置上相同方法的韌體版本,則會予以忽略。

PEP 會非常早載入,以便其服務可供設備驅動器使用。 此外,透過 Windows 的抽象層是設計為對設備驅動器而言是透明的。 驅動程式應該能夠與其 ACPI 方法互動,就像 PEP 未使用一樣。

將 PEP 用於 DPM) 和 ACPI 服務的兩個裝置電源管理 (時,建議您使用不同的 PEP 句柄,但這隻是喜好設定。 共用句柄 DPM 和 ACPI 狀態時,可以輕鬆地追蹤裝置的句柄,因為句柄相同。 不過,處理存留期管理稍微複雜一點。 PEP 必須提供句柄的參考計數,以確保只有在 DPM 和 ACPI 服務都已針對該句柄進行損毀之後,才會刪除該句柄 (,亦即PEP_DPM_UNREGISTER_DEVICE和PEP_NOTIFY_ACPI_UNREGISTER_DEVICE都已在該句柄上收到) 。 使用不同的句柄時,DPM 和 ACPI 狀態將會分開追蹤,但句柄存留期管理更簡單。 在此情況下,當傳送對應的取消註冊通知時,可以終結句柄。

為了簡化使用 ACPI 資源的程式,Power Management Framework (PoFx) 提供PEP_REQUEST_COMMON_ACPI_CONVERT_TO_BIOS_RESOURCES協助程式例程,將 ACPI 資源轉換為 BIOS 資源。

PEP 負責排程無法同步執行的工作,以回應 PoFx 的 ACPI 通知,但所使用的方法是由 PEP 開發人員決定。 一般而言,PEP 會將工作排入某個內部佇列,然後視需要啟動背景工作線程。 此外,工作也需要等候某些外部事件 (例如裝置中斷) ,而且會在該事件的內容中處理。 工作完成後,PEP 可以透過叫用 PEP_KERNEL_INFORMATION_STRUCT_V3-RequestWorker> () 來要求 PoFx 查詢工作。 為了回應,PoFx 會針對實作 DPM 通知處理程式的PE傳送 PEP_DPM_WORK通知 , (AcceptDeviceNotification) ,或針對實作僅限 ACPI 通知處理程式的 PEP 傳送 PEP_NOTIFY_ACPI_WORK通知 , (AcceptAcpiNotification) 。

ACPI 系統描述數據表
PEP_DPM_UNREGISTER_DEVICE
PEP_NOTIFY_ACPI_UNREGISTER_DEVICE
PEP_KERNEL_INFORMATION_STRUCT_V3
PEP_DPM_WORK
PEP_NOTIFY_ACPI_WORK
RequestWorker
AcceptDeviceNotification
ACPI 通知