ACPI 通知
PEP 的 AcceptAcpiNotification 回呼例程收到的每個 ACPI 通知都會伴隨指出通知類型的 Notification 參數,以及指向包含指定通知類型資訊之數據結構的 Data 參數。
在此呼叫中,Notification 參數會設定為指出通知類型的PEP_NOTIFY_ACPI_XXX常數值。 Data 參數會指向與此通知類型相關聯的PEP_ACPI_XXX結構類型。
AcceptAcpiNotification 回呼例程會使用下列 ACPI 通知標識符。
通知標識碼 | 值 | 相關聯的結構 |
---|---|---|
PEP_NOTIFY_ACPI_PREPARE_DEVICE | 0x01 | PEP_ACPI_PREPARE_DEVICE |
PEP_NOTIFY_ACPI_ABANDON_DEVICE | 0x02 | PEP_ACPI_ABANDON_DEVICE |
PEP_NOTIFY_ACPI_REGISTER_DEVICE | 0x03 | PEP_ACPI_REGISTER_DEVICE |
PEP_NOTIFY_ACPI_UNREGISTER_DEVICE | 0x04 | PEP_ACPI_UNREGISTER_DEVICE |
PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE | 0x05 | PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE |
PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION | 0x06 | PEP_ACPI_QUERY_OBJECT_INFORMATION |
PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD | 0x07 | PEP_ACPI_EVALUATE_CONTROL_METHOD |
PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES | 0x08 | PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES |
PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES | 0x09 | PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES |
PEP_NOTIFY_ACPI_PREPARE_DEVICE
通知:值PEP_NOTIFY_ACPI_PREPARE_DEVICE。 數據:依名稱識別裝置之PEP_ACPI_PREPARE_DEVICE結構的指標。
允許 PEP 選擇是否要為裝置提供 ACPI 服務。
當 Windows ACPI 驅動程式在裝置列舉期間探索 ACPI 命名空間中的新裝置時,Windows 電源管理架構 (PoFx) 傳送此通知。 此通知會傳送至實作 AcceptAcpiNotification 回呼例程的 PEP。
若要傳送PEP_NOTIFY_ACPI_PREPARE_DEVICE通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 例程。 在此呼叫中,Notification 參數值PEP_NOTIFY_ACPI_PREPARE_DEVICE,而 Data 參數會指向包含裝置名稱的PEP_ACPI_PREPARE_DEVICE結構。 如果 PEP 已準備好為此裝置提供 ACPI 服務,PEP 會將此結構的 DeviceAccepted 成員設定為 TRUE。 若要拒絕提供這類服務,PEP 會將此成員設定為 FALSE。
如果 PEP 透過設定 DeviceAccepted = TRUE 來指出 (,) 它準備好為裝置提供 ACPI 服務,PoFx 會藉由傳送 PEP PEP_NOTIFY_ACPI_REGISTER_DEVICE通知來回應,以註冊 PEP,以成為裝置的唯一 ACPI 服務提供者。 PoFx 預期只有一個 PEP 可宣告裝置 ACPI 服務提供者的角色。
最佳做法是不要執行任何裝置初始化,以回應PEP_NOTIFY_ACPI_PREPARE_DEVICE通知。 相反地,請延遲此初始化,直到收到裝置的PEP_NOTIFY_ACPI_REGISTER_DEVICE通知,或 (ACPI 控制方法,例如,為裝置叫用_INI) 。
對於PEP_NOTIFY_ACPI_PREPARE_DEVICE通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。
PEP_NOTIFY_ACPI_ABANDON_DEVICE
通知:值PEP_NOTIFY_ACPI_ABANDON_DEVICE。
數據:識別已放棄裝置之PEP_ACPI_ABANDON_DEVICE結構的指標。
通知 PEP 指定的裝置已放棄,且不再需要 PEP 的 ACPI 服務。
Windows 電源管理架構 (PoFx) 傳送此通知,通知 PEP 裝置不再由操作系統使用。 PEP 可以使用此通知來清除它配置來追蹤裝置狀態的任何內部記憶體。
若要傳送PEP_NOTIFY_ACPI_ABANDON_DEVICE通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_ABANDON_DEVICE,而 Data 參數會指向PEP_ACPI_ABANDON_DEVICE結構。
PoFx 只會將此通知傳送至已選擇在先前PEP_NOTIFY_ACPI_PREPARE_DEVICE通知中為裝置提供 ACPI 服務的 PEP。 如果 PEP 已註冊在先前的PEP_NOTIFY_ACPI_REGISTER_DEVICE通知中提供這些服務,PoFx 會先傳送裝置的PEP_NOTIFY_ACPI_UNREGISTER_DEVICE通知,再傳送PEP_NOTIFY_ACPI_ABANDON_DEVICE通知。
對於PEP_NOTIFY_ACPI_ABANDON_DEVICE通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。
PEP_NOTIFY_ACPI_REGISTER_DEVICE
通知:值PEP_NOTIFY_ACPI_REGISTER_DEVICE。
數據:識別裝置之PEP_ACPI_REGISTER_DEVICE結構的指標。 為了回應此通知,PEP 預期會建立有效的 PEPHANDLE 值來識別裝置,並將此句柄值寫入結構。
將 PEP 註冊為指定裝置的唯一 ACPI 服務提供者。
Windows 電源管理架構 (PoFx) 會將此通知傳送至先前PEP_NOTIFY_ACPI_PREPARE_DEVICE通知中所指出的 PEP,其已準備好為指定的裝置提供 ACPI 服務。
若要傳送PEP_NOTIFY_ACPI_REGISTER_DEVICE通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_REGISTER_DEVICE,而 Data 參數會指向可識別 PEP 提供 ACPI 服務之裝置的PEP_ACPI_REGISTER_DEVICE結構。
對於PEP_NOTIFY_ACPI_REGISTER_DEVICE通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。
PEP_NOTIFY_ACPI_UNREGISTER_DEVICE
通知:值PEP_NOTIFY_ACPI_UNREGISTER_DEVICE。
數據:包含裝置 PEPHANDLE 之PEP_ACPI_UNREGISTER_DEVICE結構的指標。
從 PEP 取消 ACPI 服務的指定裝置註冊。
為了回應此通知,PEP 可以在先前的PEP_NOTIFY_ACPI_REGISTER_DEVICE通知中終結 PEP 為這個裝置建立的 PEPHANDLE。
若要傳送PEP_NOTIFY_ACPI_UNREGISTER_DEVICE通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_UNREGISTER_DEVICE,而 Data 參數會指向PEP_ACPI_UNREGISTER_DEVICE結構。
對於PEP_NOTIFY_ACPI_UNREGISTER_DEVICE通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。
PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE
通知:值PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE。
數據:指向PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE結構的指標,其中包含裝置 ACPI 命名空間中物件的列舉。
查詢 PEP,以取得 ACPI 物件清單, (ACPI 命名空間中指定裝置下 PEP 支援的原生方法) 。
Windows ACPI 驅動程式會使用此通知列舉的物件來建置指定裝置的命名空間。 之後,參考此裝置時,ACPI 驅動程式只會查詢這些物件的 PEP。
Windows 電源管理架構 (PoFx) 會在探索到裝置後立即傳送PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知,而 PEP 快取器會為裝置提供 ACPI 服務。 如需此註冊的詳細資訊,請參閱 PEP_NOTIFY_ACPI_REGISTER_DEVICE。
若要傳送PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE,而 Data 參數會指向PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE結構。
AcceptAcpiNotification 例程預期會處理PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知並傳回 TRUE。 若無法這麼做,會導致錯誤檢查。
對於PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。
PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION
通知:值PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION。
數據:指定 ACPI 物件屬性之PEP_ACPI_QUERY_OBJECT_INFORMATION結構的指標。
查詢 PEP,以取得先前列舉 ACPI 對象的相關信息。
Windows 電源管理架構 (PoFx) 傳送此通知,以查詢 PEP,以取得在處理先前PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知期間列舉的物件屬性。 目前,唯一列舉的對像是控件方法。
若要傳送PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION,而 Data 參數會指向PEP_ACPI_QUERY_OBJECT_INFORMATION結構。
對於PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。
PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD
通知:值PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD。
數據:PEP_ACPI_EVALUATE_CONTROL_METHOD 結構的指標,指定要評估的ACPI控件方法、要提供給這個方法的輸入自變數,以及結果的輸出緩衝區。
用來評估 PEP 是已註冊處理程式的 ACPI 控制方法。
當 Windows ACPI 驅動程式需要評估 PEP 實作的 ACPI 控制方法時,Windows 電源管理架構 (PoFx) 將此通知傳送至 PEP。
若要傳送PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD,而 Data 參數會指向PEP_ACPI_EVALUATE_CONTROL_METHOD結構。
平台設計工具可以選擇讓 PEP 或 ACPI 韌體處理特定的 ACPI 控制方法。 如果 PEP 是 ACPI 控制方法的已註冊處理程式,PoFx 會回應來自 Windows ACPI 驅動程式的要求,藉由將PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD通知傳送至 PEP 來評估此方法。
以下是 PEP 可以處理裝置的 ACPI 控制方法範例清單:
裝置識別和設定:_HID、_CID、_UID、_ADR、_CLS、_SUB、_CRS、_PRS等等。 裝置電源管理和喚醒:透過_PS3_PS0、_PR0到_PR3、_DSW等等。 裝置特定方法:_DSM和任何裝置堆疊特定的控制方法。 對於 ACPI Time 和 Alarm 裝置等特殊裝置,此通知是用來評估時間和警示方法 (_GCP、_GRT、_SRT等) 。
對於PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。
PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES
通知:值PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES。
數據:包含電源資源清單之PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES結構的指標。
查詢 PEP,以取得控制裝置電源所需的原始資源清單。
為了回應此通知,PEP 會提供控制裝置電源所需的原始資源清單。 Windows ACPI 驅動程式需要此列表,才能保留裝置所需的電源資源,並藉由傳送PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES通知) ,將翻譯的資源對應清單提供給 PEP (。 如需詳細資訊,請參閱原始和翻譯的資源。
若要傳送PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES通知,Windows 電源管理架構 (PoFx) 呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES,而 Data 參數會指向PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES結構。
對於PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。
PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES
通知:值PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES。
數據:包含已翻譯資源清單之PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES結構的指標。
為 PEP 提供裝置所需的任何電源控制資源翻譯資源清單。
如果 PEP 列出任何原始資源以回應先前的PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES通知,則 Windows 電源管理架構 (PoFx) 傳送此通知。 PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES通知會為 PEP 提供對應的翻譯資源清單。 如需詳細資訊,請參閱原始和翻譯的資源。
若要傳送PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES,而 Data 參數會指向PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES結構。
對於PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。
PEP_NOTIFY_ACPI_WORK
通知:值PEP_NOTIFY_ACPI_WORK。
數據:PEP_WORK 結構的指標。
每次 PEP 呼叫 RequestWorker 例程以要求 Windows 電源管理架構 (PoFx) 的工作專案時,都會傳送至 PEP 一次。 此通知用於僅限 ACPI 的工作。
在 PEP 呼叫 RequestWorker 例程來要求工作項目之後,PoFx 會藉由傳送 PEP PEP_NOTIFY_ACPI_WORK 通知來回應。 不過,在資源 (之前,不會傳送此通知,也就是處理工作專案所需的背景工作線程) 。 如此一來,PoFx 可確保 PEP 在通知期間傳遞至 PoFx 的工作要求,因為缺少資源而永遠不會失敗。
在輸入時,PEP 應該假設PEP_WORK結構未初始化。 若要處理此通知,PEP 應該將 WorkInformation 成員設定為指向 PEP 配置的PEP_WORK_INFORMATION結構,描述所要求的工作。 此外,PEP 應該將PEP_WORK結構的 NeedWork 成員設定為 TRUE,以確認 PEP 已處理PEP_NOTIFY_ACPI_WORK通知,而 WorkInformation 成員指向有效的PEP_WORK_INFORMATION結構。 如果 PEP 無法處理通知或無法配置PEP_WORK_INFORMATION結構,PEP 應該將 WorkInformation 成員設定為 NULL,並將 NeedWork 成員設定為 FALSE。
對於PEP_NOTIFY_ACPI_WORK通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。