Multiple-Component 디바이스에서 유휴 Power-Down 지원

[KMDF에만 적용]

다중 구성 요소 디바이스에 대한 KMDF 드라이버는 유휴 전원 다운 및 기능 전원 상태를 지원할 수 있습니다. 이 경우 드라이버가 PoFx(전원 관리 프레임워크)에 직접 등록되므로 드라이버는 PoFx를 사용하여 결과 Dx 상태 변경을 조정해야 합니다.

디바이스 전원 정책 유휴 설정 제공

WdfDeviceAssignS0IdleSettings를 호출하는 경우 드라이버는 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조에서 IdleTimeoutTypeDriverManagedIdleTimeout으로 설정해야 합니다. 또한 드라이버는 다음 예제와 같이 PowerUpIdleDeviceOnSystemWakeWdfTrue로, IdleCapsIdleCannotWakeFromS0으로 설정해야 합니다.

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS s0IdleSettings;

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(&s0IdleSettings, 
                                           IdleCannotWakeFromS0);
s0IdleSettings.IdleTimeoutType = DriverManagedIdleTimeout;
s0IdleSettings.PowerUpIdleDeviceOnSystemWake = WdfTrue;
s0IdleSettings.IdleTimeout = 1;
status = WdfDeviceAssignS0IdleSettings(device, &s0IdleSettings);

작업(D0)에서 Low-Power(Dx) 상태로 전환

EvtDeviceSelfManagedIoInit에서 드라이버는 WdfDeviceStopIdle을 호출하여 전원 참조를 수행하므로 WDF가 디바이스를 저전력 상태로 전환할 수 없습니다.

드라이버는 DevicePowerRequiredCallback 콜백 루틴에서 WdfDeviceResumeIdle을 호출하여 전원 참조를 해제합니다.

드라이버는 일반적으로 매우 짧은 유휴 시간 제한을 지정하므로 WDF는 모든 전원 참조가 릴리스된 직후 디바이스를 저전력 상태로 전환합니다.

Low-Power(Dx)에서 작업(D0) 상태로 전환

DevicePowerRequiredCallback에서 드라이버는 디바이스를 작동(D0) 상태로 가져와야 합니다. 이렇게 하려면 WaitForD0 매개 변수가 TRUE로 설정된 WdfDeviceStopIdle 호출을 작업자 스레드로 연기해야 합니다. WdfDeviceStopIdle에 대한 이 차단 호출은 DevicePowerRequiredCallback 내에서 수행되어서는 안 됩니다.

대신 드라이버는 수동 수준에서 실행 중인 작업자 스레드에 대한 차단 호출을 연기해야 하며 전원 관리 큐의 I/O 디스패치 루틴 컨텍스트에서 WdfDeviceStopIdle 호출을 하지 않도록 보장됩니다.

드라이버가 이전에 WdfDeviceInitSetPowerPageable 을 호출한 경우(즉, 전원 전환 중에 페이지가 지정 가능한 데이터에 액세스할 수 있음) 드라이버는 WdfWorkItemCreate 를 호출하여 프레임워크 작업 항목을 만들 수 있습니다. 드라이버가 전원 페이지 가능을 설정하지 않은 경우 드라이버는 자체 시스템 스레드를 만들어야 합니다. 자세한 내용은 PsCreateSystemThread를 참조하세요.

WdfDeviceStopIdle이 반환된 후 메서드가 오류를 반환하더라도 드라이버는 PoFxReportDevicePoweredOn을 호출해야 합니다.