다음을 통해 공유


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을 호출해야 합니다.