ACX 電源管理
本主題討論 ACX 電源管理。 如需 ACX 裝置列舉、啟動和關機,以及裝置重新平衡的相關信息,請參閱 ACX 裝置列舉。 如需 ACX 的一般概觀,請參閱 ACX 音訊類別延伸模組概觀。
ACX 會利用 WDF KMDF PnP 電源行為。 如需 KMDF 電源管理序列的詳細資訊,請參閱 PnP 和電源管理回呼序列。
建議 ACX 驅動程式完全實作 WDF 電源管理,例如實 作 WDF_PNPPOWER_EVENT_CALLBACKS 結構。 如需詳細資訊,請參閱 支援驅動程式中的 PnP 和電源管理。
ACX 裝置意外移除
WDF 架構可以隨時呼叫 EvtDeviceSurpriseRemoval ,也就是說,此回呼不會以關閉電源序列串行化。 WDF 驅動程式不應該採取任何動作來接收此回呼,但請注意裝置已意外移除。
關閉電源意外移除回呼順序與關閉 Dx 和移除案例相同,WDF 不會在意外移除路徑上叫用下列回呼:
- EvtDeviceArmWakeFrom*,例如 EvtDeviceArmWakeFromS0
- EvtIoStop (清除電源受控佇列的) EvtWdfIoQueueIoStop
- EvtDeviceSelfManagedIoFlush (flush I/O 緩衝區)
如需詳細資訊,請參閱 PnP 和電源管理回呼序列 和使用 Power-Managed I/O 佇列。
ACX 線路啟動和啟動
您可以隨時新增「動態」AcxCircuit。 驅動程式會建立新的子 PDO 裝置,並在處理此 PDO 裝置的 WDF PrepareHardware 回呼時建立新的 AcxCircuit 關聯。 “dynamic' 線路的存留期不會繫結至 FDO 的存留期。
只有在驅動程式正在處理其 FDO 裝置的 WDF PrepareHardware 回呼時,才能新增 “static” AcxCircuit。 「靜態」線路的存留期會繫結至 FDO 的存留期。
ACX 驅動程式也可以使用 AcxFactoryCircuitCreate 函式,在啟動序列期間建立 AcxFactoryCircuit 物件(線路提供者)。 AcxFactoryCircuit 物件會在 ACX 要求時,使用動態線路建立來新增 ACXCIRCUITS。 建置複合端點時,此功能非常有用,也就是由兩個或多個 ACXCIRCUIT 連結在一起的音訊端點。
ACX 線路會定義下列在 AcxCircuit / 音訊端點初始化期間叫用的回呼:
EvtAcxCircuitPrepareHardware:ACX 會在 WDF 傳遞其 WDF 準備硬體回呼之後叫用此回呼。 它有機會讓驅動程式執行線路特有的任何「準備硬體」。 此呼叫是由 ACX 串行化。 叫用此呼叫時,裝置不在 D0 中。
EvtAcxCircuitPowerUp:ACX 會在從 Dx 回來後叫用此回呼。 此呼叫是由 ACX 串行化。 裝置位於 D0 中。
針對複合端點,AcxCircuits 可以選擇性地註冊這些回呼:
EvtAcxCircuitCompositeCircuitInitialize,第一次叫用 ACX 偵測到此 ACXCIRCUIT 是可見的,也就是相關聯的裝置進入 D0,並讓外部實體看到它自己的堆棧。 線路的音訊介面仍處於 OFF 狀態。
EvtAcxCircuitCompositeInitialize,每次 ACX 完成複合端點的 init 時叫用。 在此回呼 ACX 開啟此線路的音訊介面之後。
EvtAcxCircuitCompositeDeinitialize,每次 ACX 卸除複合端點時叫用。 如果已移除自己的堆疊,或無法處理 I/O,驅動程式可能無法收到此回呼。
如果有的話,串流實例會還原到其開機前狀態。
ACX 線路關閉電源和移除
您可以隨時藉由使與線路相關聯的裝置物件失效並移除 「dynamic」 AcxCircuit。 當驅動程式處理此 PDO 裝置的 WDF PrepareHardware/ReleaseHardware 回呼時,可以從移除的裝置中移除/中斷連結相關聯的線路。 如上所述,「動態」線路的存留期不會系結至 FDO 的存留期。
只有在驅動程序處理其 FDO 裝置的 WDF PrepareHardware/ReleaseHardware 回呼時,才能移除 “static” AcxCircuit。 「靜態」線路的存留期會繫結至 FDO 的存留期。
驅動程式可以在其 WDF PrepareHardware/ReleaseHardware 回呼中移除 AcxFactoryCircuit (線路提供者)。 拿掉 AcxFactoryCircuit 的效果是移除其所有相關聯的 “dynamic” AcxCircuit(s)。 當 ACX 管理員告訴線路處理站移除特定線路時,或 ACX 管理員關閉其 AcxFactoryCircuit 句柄時,也可以移除 AcxCircuit(s) - 在此案例中,ACX 會關閉與該句柄相關聯的所有線路。
ACX_CIRCUIT_PNPPOWER_CALLBACKS 結構描述 ACX 驅動程式可以使用的下列回呼。
EvtAcxCircuitPowerDown:ACX 會在進入 Sx/Dx/Stop/Remove/SurpriseRemoval 之前叫用此回呼,並在驅動程式移除線路時叫用此回呼。 此呼叫是由 ACX 串行化。 裝置在 D0 中,但請記住,裝置可以隨時「意外移除」(這表示相關聯的硬體已消失)。
EvtAcxCircuitReleaseHardware:ACX 會在 WDF 傳遞其 WDF 發行硬體回呼之前叫用此回呼。 它給了司機一個機會,做任何清理,而電路仍然活著。 此呼叫是由 ACX 串行化。 叫用此呼叫時,裝置不在 D0 中。
EvtWdfObjectContextCleanup:WDF 刪除 WDF/ACX 物件時會叫用此回呼。 此呼叫與刪除 WDF 物件呼叫同步。 叫用此呼叫時,裝置可能不在 D0 中。 回呼是在被動層級執行。
EvtWdfObjectContextDestory:WDF 在此對象上最後一個 ref 消失後叫用此回呼。 此呼叫是異步的,但會刪除 WDF 物件呼叫。 叫用此呼叫時,裝置可能不在 D0 中。 只有在物件上的最後一個參考消失之後,才會叫用這個回呼。 回呼在 = DPC 層級執行 <。 確切的 IRQL 取決於釋放最後一個 ref 之線程的 IRQL。
ACX 裝置閑置管理
ACX 會利用 WDF 閑置管理基礎結構。 ACX 驅動程式會使用下列 WDF DIS 來啟用閑置管理:
WdfDeviceAssignS0Idle 設定:此呼叫會指定閑置逾時和閑置管理的類型。 ACX 驅動程式可以免費為其裝置使用適當的設定。
WdfDeviceStopIdle:此呼叫可防止裝置閑閒。 請注意,他的呼叫不會封鎖 Sx 要求。 也就是說,當系統進入較低的電源狀態時,裝置會獨立於作用中電源參考數目的 Dx 中。
WdfDeviceResumeIdle:此呼叫可讓裝置重新啟動其閒置逾時。
在 多堆疊/線路案例中,不同的堆疊可能會有不同的閑置逾時。 這是因為每個堆疊的不同電源設定/需求,因此適合不同的閑置逾時。 如需 多堆疊 的一般資訊,請參閱 ACX 多堆棧交叉驅動程序通訊。
ACX 驅動程式和電源受控佇列
WDF 支援電源管理的 I/O 佇列。 這種類型的佇列與 WDF 電源管理完全整合。 WDF 會在啟動/關閉 WDF 序列中的各種步驟叫用佇列的回呼。 如需詳細資訊,請參閱 使用 Power-Managed I/O 佇列。
只有在驅動程式未使用具有多重狀態 (Fx) 功能的單一/多重組件時,ACX 驅動程式才能使用此類型的佇列。
ACX 驅動程式和 D3Hot / D3Cold (D3) 狀態
音訊驅動程式會根據ACX_DX_EXIT_LATENCY列舉中可用的資訊,知道何時要進入 D3Hot 或 D3Cold。
typedef enum _ACX_DX_EXIT_LATENCY {
AcxDxExitLatencyInstant = 0,
AcxDxExitLatencyFast,
AcxDxExitLatencyResponsive
} ACX_DX_EXIT_LATENCY;
AcxDxExitLatencyFast 對應至 D3Hot (DSP on) 和 AcxDxExitLatencyResponsive 對應至 D3Cold (DSP 關閉)。
音訊驅動程式可以藉由呼叫 AcxDeviceGetCurrentDxExitLatency 函式來取得ACX_DX_EXIT_LATENCY值。
WDF 透過WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS的 ExcludeD3Cold 字段了解驅動程式的 D3Cold 功能。 驅動程式會將此結構當做輸入傳遞至 WdfDeviceAssignS0Idle 設定。
WDF 驅動程式可以叫用 WdfDeviceAssignS0Idle 設定 多次開啟或關閉 D3Cold,這取決於系統環境,也就是回應 ACX。 如需詳細資訊,請參閱 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 結構。
電源管理架構 (PoFx) 和驅動程式管理的閑置逾時
元件層級電源管理
請注意,WDF 不會直接支援 Fx 裝置/元件狀態。 若要使用這些狀態,驅動程式必須使用驅動程式管理的閑置逾時。 如需有關使用 Fx 裝置元件狀態和驅動程式管理的閑置逾時的詳細資訊,請參閱下列主題。
電源管理架構 (PoFx)
Windows 提供運行時間電源管理架構 (PoFx),可新增元件層級電源管理的支援。 元件或子裝置是裝置中可開啟或切換至低功率狀態的功能硬體單位,與相同裝置中的其他元件無關。 如需詳細資訊,請參閱 Power Management Framework 概觀。