다음을 통해 공유


ACX 전원 관리

이 항목에서는 ACX 전원 관리에 대해 설명합니다. ACX 디바이스 열거, 시작 및 종료 및 디바이스 재조정에 대한 자세한 내용은 ACX 디바이스 열거형을 참조 하세요. ACX에 대한 일반적인 개요는 ACX 오디오 클래스 확장 개요를 참조하세요.

ACX는 WDF KMDF PnP 전원 동작을 활용합니다. KMDF 전원 관리 시퀀스에 대한 자세한 내용은 PnP 및 전원 관리 콜백 시퀀스를 참조 하세요.

예를 들어 ACX 드라이버는 WDF_PNPPOWER_EVENT_CALLBACKS 구조를 구현하여 WDF 전원 관리를 완전히 구현하는 것이 좋습니다. 자세한 내용은 드라이버에서 PnP 및 전원 관리 지원을 참조하세요.

ACX 디바이스 서프라이즈 제거

WDF 프레임워크는 언제든지 EvtDeviceSurpriseRemoval을 호출할 수 있습니다. 즉, 이 콜백은 전원 다운 시퀀스로 직렬화되지 않습니다. WDF 드라이버는 디바이스가 깜짝 제거되었음을 유의하는 것 외에는 이 콜백 수신에 대해 어떠한 조치도 취하지 않아야 합니다.

전원 다운 서프라이즈 제거 콜백 시퀀스는 전원 다운 Dx와 동일하고 케이스를 제거합니다. WDF는 깜짝 제거 경로에서 다음 콜백을 호출하지 않습니다.

자세한 내용은 PnP 및 Power Management 콜백 시퀀스Power-Managed I/O 큐 사용을 참조하세요.

ACX 회로 전원 켜기 및 시작

"동적" AcxCircuit은 언제든지 추가할 수 있습니다. 드라이버는 새 자식 PDO 디바이스를 만들고 이 PDO 디바이스에 대한 WDF PrepareHardware 콜백을 처리할 때 새 AcxCircuit을 연결합니다. "동적' 회로의 수명은 FDO의 수명에 바인딩되지 않습니다.

"정적" AcxCircuit은 드라이버가 해당 FDO 디바이스에 대한 WDF PrepareHardware 콜백을 처리하는 경우에만 추가할 수 있습니다. "정적" 회로의 수명은 FDO의 수명에 바인딩됩니다.

ACX 드라이버는 AcxFactoryCircuitCreate 함수를 사용하여 전원을 켜는 동안 AcxFactoryCircuit 개체(회로 공급자)를 만들 수도 있습니다. AcxFactoryCircuit 개체는 ACX에서 요청할 때 ACXCIRCUITS를 추가하기 위해 동적 회로 생성을 사용합니다. 이 기능은 복합 엔드포인트, 즉 둘 이상의 ACXCIRCUIT로 구성된 오디오 엔드포인트를 함께 빌드할 때 매우 유용합니다.

ACX 회로는 AcxCircuit/오디오 엔드포인트 초기화 중에 호출되는 다음 콜백을 정의합니다.

  • EvtAcxCircuitPrepareHardware: ACX는 WDF가 WDF 준비 하드웨어 콜백을 전달한 직후에 이 콜백을 호출합니다. 드라이버가 회로와 관련된 '준비 하드웨어'를 수행할 수 있는 기회를 제공합니다. 이 호출은 ACX에 의해 직렬화됩니다. 이 호출이 호출될 때 디바이스가 D0에 없습니다.

  • EvtAcxCircuitPowerUp: ACX는 Dx에서 돌아온 직후 이 콜백을 호출합니다. 이 호출은 ACX에 의해 직렬화됩니다. 디바이스가 D0에 있습니다.

복합 엔드포인트의 경우 AcxCircuits는 필요에 따라 이러한 콜백에 등록할 수 있습니다.

있는 경우 스트림 인스턴스는 전원이 공급되지 않는 상태로 복원됩니다.

ACX 회로 전원 절전 및 제거

회로와 연결된 디바이스 개체를 무효화하고 제거하여 언제든지 "동적" AcxCircuit을 제거할 수 있습니다. 드라이버가 이 PDO 디바이스에 대한 WDF PrepareHardware/ReleaseHardware 콜백을 처리할 때 연결된 회로를 제거된 디바이스에서 제거/분리할 수 있습니다. 위에서 멘션 것처럼 "동적" 회로의 수명은 FDO의 수명에 바인딩되지 않습니다.

"정적" AcxCircuit은 드라이버가 해당 FDO 디바이스에 대한 WDF PrepareHardware/ReleaseHardware 콜백을 처리하는 경우에만 제거할 수 있습니다. "정적" 회로의 수명은 FDO의 수명에 바인딩됩니다.

드라이버는 WDF PrepareHardware/ReleaseHardware 콜백에서 AcxFactoryCircuit(회로 공급자)를 제거할 수 있습니다. AcxFactoryCircuit을 제거하면 연결된 모든 "동적" AcxCircuit이 제거됩니다. ACX 관리자가 회로 팩터리에 특정 회로를 제거하라고 지시하거나 ACX 관리자가 AcxFactoryCircuit 핸들을 닫을 때 AcxCircuit을 제거할 수도 있습니다. 이 시나리오에서 ACX는 해당 핸들과 연결된 모든 회로를 닫습니다.

ACX_CIRCUIT_PNPPOWER_CALLBACKS 구조체는 ACX 드라이버에서 사용할 수 있는 다음 콜백을 설명합니다.

  • EvtAcxCircuitPowerDown: ACX는 Sx/Dx/Stop/Remove/SurpriseRemoval로 가기 직전에 그리고 드라이버가 회로를 제거할 때 이 콜백을 호출합니다. 이 호출은 ACX에 의해 직렬화됩니다. 디바이스는 D0에 있지만 언제든지 디바이스가 서프라이즈 제거될 수 있습니다(즉, 연결된 하드웨어가 사라짐).

  • EvtAcxCircuitReleaseHardware: ACX는 WDF가 WDF 릴리스 하드웨어 콜백을 제공하기 직전에 이 콜백을 호출합니다. 회로가 아직 활성 상태인 동안 드라이버가 클린 수행할 수 있는 기회를 제공합니다. 이 호출은 ACX에 의해 직렬화됩니다. 이 호출이 호출될 때 디바이스가 D0에 없습니다.

  • EvtWdfObjectContextCleanup: WDF/ACX 개체가 삭제될 때 WDF는 이 콜백을 호출합니다. 이 호출은 WDF 개체 호출의 삭제와 동기적입니다. 이 호출이 호출될 때 디바이스가 D0에 없을 수 있습니다. 콜백이 수동 수준에서 실행되고 있습니다.

  • EvtWdfObjectContextDestory: WDF는 이 개체의 마지막 참조가 사라지면 이 콜백을 호출합니다. 이 호출은 WDF 개체 호출을 삭제할 때 비동기적입니다. 이 호출이 호출될 때 디바이스가 D0에 없을 수 있습니다. 이 콜백은 개체에 대한 마지막 참조가 제거된 후에만 호출됩니다. 콜백이 = DPC 수준에서 실행되고 <있습니다. 정확한 IRQL은 마지막 참조를 해제하는 스레드의 IRQL에 따라 달라집니다.

ACX 디바이스 유휴 관리

ACX는 WDF 유휴 관리 인프라를 활용합니다. ACX 드라이버는 다음 WDF DPI를 사용하여 유휴 관리를 사용하도록 설정합니다.

  • WdfDeviceAssignS0Idle설정: 이 호출은 유휴 시간 제한 및 유휴 관리의 유형을 지정합니다. ACX 드라이버는 해당 디바이스에 적절한 설정을 자유롭게 사용할 수 있습니다.

  • WdfDeviceStopIdle: 이 호출을 사용하면 디바이스가 유휴 상태가 되지 않습니다. 그의 호출은 Sx 요청을 차단하지 않습니다. 즉, 시스템이 더 낮은 전원 상태로 넘어갈 때 디바이스는 활성 전원 참조 수와 독립적으로 Dx로 이동합니다.

  • WdfDeviceResumeIdle: 이 호출을 사용하면 디바이스가 유휴 시간 제한을 다시 시작할 수 있습니다.

다중 스택/회로 시나리오에서 스택에 따라 유휴 시간 제한이 다를 수 있습니다. 이는 각 스택의 전원 설정/요구 사항이 다르기 때문에 다른 유휴 시간 제한이 적절하기 때문입니다. 다중 스택 대한 일반적인 내용은 ACX 다중 스택 교차 드라이버 통신을 참조하세요.

ACX 드라이버 및 전원 관리 큐

WDF는 전원 관리형 I/O 큐를 지원합니다. 이 유형의 큐는 WDF 전원 관리와 완전히 통합됩니다. WDF는 전원 켜기/전원 다운 WDF 시퀀스의 다양한 단계에서 큐의 콜백을 호출합니다. 자세한 내용은 Power-Managed I/O 큐 사용을 참조 하세요.

ACX 드라이버는 드라이버가 다중 상태(Fx) 기능과 함께 단일/다중 구성 요소를 사용하지 않는 경우에만 이 유형의 큐를 사용할 수 있습니다.

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 off)에 해당합니다.

오디오 드라이버는 AcxDeviceGetCurrentDxExitLatency 함수를 호출 하여 ACX_DX_EXIT_LATENCY 값을 가져올 수 있습니다.

WDF는 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS ExcludeD3Cold 필드를 통해 드라이버의 D3Cold 기능에 대해 알고 있습니다. 드라이버는 이 구조체를 WdfDeviceAssignS0Idle설정 입력으로 전달합니다.

WDF 드라이버는 WdfDeviceAssignS0Idle을 여러 번 호출할 수 설정 ACX에 대한 응답으로 시스템 환경에 따라 D3Cold를 켜거나 끌 수 있습니다. 자세한 내용은 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조를 참조 하세요.

PoFx(전원 관리 프레임워크) 및 드라이버 관리 유휴 시간 제한

구성 요소 수준 전원 관리

WDF는 Fx 디바이스/구성 요소 상태를 직접 지원하지 않습니다. 이러한 상태를 사용하려면 드라이버는 드라이버 관리 유휴 시간 제한을 사용해야 합니다. Fx 디바이스 구성 요소 상태 및 드라이버 관리 유휴 시간 제한 사용에 대한 자세한 내용은 다음 항목을 참조하세요.

전원 관리 프레임워크(PoFx)

Windows는 구성 요소 수준 전원 관리에 대한 지원을 추가하는 PoFx(런타임 전원 관리 프레임워크)를 제공합니다. 구성 요소 또는 하위 서비스는 동일한 디바이스의 다른 구성 요소와 독립적으로 전원이 낮은 상태로 설정하거나 전환할 수 있는 디바이스의 기능 하드웨어 단위입니다. 자세한 내용은 Power Management Framework 개요를 참조 하세요.

참고 항목

ACX 디바이스 열거형

ACX 참조 설명서

ACX 오디오 클래스 확장 개요

전원 관리형 I/O 큐 사용.

PnP 및 전원 관리 콜백 시퀀스