다음을 통해 공유


서프라이즈 Wake-Up

깜짝 절전 모드 해제는 D0으로의 예기치 않은 전환입니다. 디바이스가 D3cold에 들어가면 동일한 전원 레일의 다른 디바이스에 대한 드라이버가 D3cold에서 D0으로의 전환을 요청할 때 부작용으로 놀라운 절전 모드 해제가 발생할 수 있습니다. 첫 번째 디바이스의 드라이버는 디바이스가 초기화되지 않은 D0 상태로 유지되지 않도록 깜짝 절전 모드 해제 알림을 받아야 합니다.

디바이스가 D3hot에서 D3cold로 이동하면 일부 다른 디바이스와 공유하는 전원이 꺼져 있기 때문일 수 있습니다. 이러한 디바이스가 D3cold를 입력한 후 몇 시간 후에 디바이스 중 하나에 대한 드라이버가 D0으로의 전환을 요청할 수 있습니다. 이 요청에 대한 응답으로 부모 버스 드라이버 또는 ACPI 필터 드라이버가 전원을 켜고 전원을 공유하는 모든 디바이스는 기본 전원 기반 하드웨어 상태를 입력합니다.

이 전원 상태 변경을 예상하는 유일한 디바이스 드라이버는 변경을 요청한 드라이버입니다. 다른 디바이스의 드라이버는 D0에서 작동하도록 디바이스를 제대로 초기화할 수 있도록 이 변경에 대한 알림을 받아야 합니다. 이 알림을 받을 수 있는 드라이버만 디바이스가 D3cold를 입력할 수 있도록 설정해야 합니다. 그렇지 않으면 디바이스가 D0에 들어갈 때 드라이버가 알 수 없습니다.

디바이스가 켜져 있으면 초기화되지 않은 기본 하드웨어 상태가 됩니다. 예를 들어 PCI Express Base 3.0 사양 은 디바이스가 처음 전원을 수신할 때 들어오는 초기화되지 않은 D0 상태를 정의합니다. 이 상태의 정의는 PCI 및 PCI Express 디바이스와 관련이 있지만 다른 버스에 연결하는 디바이스는 켜져 있을 때 유사한 하드웨어 상태를 입력하도록 설계되었습니다.

여러 기능을 구현하는 PCI 또는 PCI Express 디바이스의 경우 이러한 디바이스 함수는 동일한 전원 레일을 공유할 수 있습니다. 그러나 각 함수에는 별도의 드라이버가 있을 수 있으며 이러한 함수의 드라이버는 서로 직접 통신할 가능성이 낮습니다. 이러한 함수 중 하나에 대한 드라이버가 D3cold에서 D0으로 전원 상태 변경을 요청하는 경우 다른 함수의 드라이버는 이 변경을 기대하지 않습니다. 이러한 다른 함수가 전원을 받으면 D0에서 올바르게 작동하도록 함수를 구성할 수 있도록 드라이버에 알림을 받아야 합니다.

버스 드라이버는 자식 디바이스의 전원이 켜지는 시기를 감지합니다. 이 디바이스의 함수 드라이버가 D0으로의 전환을 요청하지 않은 경우 버스 드라이버는 디바이스 드라이버에 D0 전원 IRP(대상 상태 = PowerDeviceD0이 있는 IRP_MN_SET_POWER 요청)를 보내 D0에서 작동하도록 디바이스를 초기화하라는 메시지를 표시합니다. 초기화된 D0 상태에서 디바이스 드라이버는 디바이스의 D3hot 전환을 시작할 수 있습니다. 디바이스 드라이버는 다음과 같은 방법으로 버스 드라이버에서 D0으로의 깜짝 전환 알림을 받을 수 있습니다.

  • 직접 또는 간접적으로 PoFx( 런타임 전원 관리 프레임워크 )의 클라이언트로 등록하는 디바이스 드라이버는 알림 콜백을 수신합니다.
  • 절전 모드 해제를 위해 디바이스를 무장하는 디바이스용 드라이버에는 버스 드라이버가 완료한 보류 중인 IRP_MN_WAIT_WAKE 요청이 있습니다.

Windows 8 시작하여 전원 정책 소유자 역할을 하는 디바이스의 함수 드라이버는 PoFx의 클라이언트로 등록할 수 있습니다. 버스 드라이버가 디바이스가 D0으로의 깜짝 전환을 경험했음을 PoFx에 알리면 PoFx는 디바이스가 초기화된 D0 상태로 이동한 다음 D3hot으로 이동하는 데 도움이 됩니다. 먼저 PoFx는 드라이버의 DevicePowerRequiredCallback 루틴을 호출하여 디바이스 드라이버가 디바이스 스택 아래로 D0 전원 IRP를 보내도록 요청합니다. 다음으로 PoFx는 드라이버의 DevicePowerNotRequiredCallback 루틴을 호출하여 디바이스가 D0 상태를 유지할 필요가 없음을 디바이스 드라이버에 알립니다.

kmDF(Kernel-Mode Driver Framework) 버전 1.11부터 단일 구성 요소 디바이스에 대한 KMDF 드라이버는 WdfDeviceWdmAssignPowerFrameworkSettings 메서드를 호출하여 PoFx에 간접적으로 등록할 수 있습니다. 이 호출에서 드라이버는 드라이버에 D0으로의 깜짝 전환을 알리는 콜백 루틴에 대한 포인터를 제공합니다. 자세한 내용은 기능 전원 상태 지원을 참조하세요.

PoFx에 디바이스를 등록하지 않은 드라이버는 디바이스가 절전 모드 해제를 위해 무장하는 경우 D0으로의 깜짝 전환을 계속 알 수 있습니다. 버스 드라이버가 디바이스에 전원을 켜면 드라이버의 IRP_MN_WAIT_WAKE 요청을 완료합니다. 이에 대한 응답으로 드라이버는 D0에서 작동하도록 디바이스를 초기화합니다. 디바이스가 유휴 상태일 가능성이 높으며, 이 경우 드라이버는 일정 시간 후에 이 디바이스를 D3hot으로 이동합니다.

PoFx에 등록하지 않고 절전 모드 해제를 위해 디바이스를 무장하지 않는 함수 드라이버는 D3cold에서 D0으로의 깜짝 전환에 대한 알림을 받지 않습니다. 디바이스는 초기화되지 않은 D0 상태에서 많은 시간을 보낼 수 있습니다. 이 상태에서는 디바이스의 모든 구성 요소가 일반적으로 켜져 있습니다. 유휴 디바이스로 전력 소비를 줄이려면 드라이버는 D0으로의 깜짝 전환 알림을 받을 수 있는 경우에만 D3cold에 대한 항목을 사용하도록 설정해야 합니다.