Sürpriz Wake-Up

Sürpriz uyandırma, D0'ye beklenmedik bir geçiştir. Bir cihaz D3cold'a girdikten sonra, aynı power rail üzerindeki başka bir cihazın sürücüsü D3cold'dan D0'ye geçiş istediğinde yan etki olarak sürpriz bir uyandırmayla karşılaşabilir. Cihazın başlatılmamış D0 durumunda kalmasını önlemek için ilk cihazın sürücüsünün sürpriz uyandırma bildirimi alması gerekir.

Bir cihaz D3hot'tan D3cold'a geçtiğinde, büyük olasılıkla bunu yapar çünkü başka birkaç cihazla paylaştığı güç kaynağı kapatılmış olur. Bu cihazlar D3cold girdikten bir süre sonra, cihazlardan birinin sürücüsü D0'a geçiş isteyebilir. Bu isteğe yanıt olarak, üst veri yolu sürücüsü veya ACPI filtre sürücüsü güç kaynağını açar ve güç kaynağını paylaşan tüm cihazlar varsayılan güç açık donanım durumlarını girer.

Bu güç durumu değişikliğini bekleyen tek cihaz sürücüsü, değişikliği isteyen sürücüdür. Diğer cihazların sürücüleri, cihazlarını D0'de çalışacak şekilde düzgün bir şekilde başlatabilmeleri için bu değişiklikle ilgili bildirim almalıdır. Yalnızca bu bildirimi alabilen bir sürücü yazılımı, cihazının D3cold durumuna geçişini etkinleştirmelidir. Aksi takdirde, sürücü cihazın D0'ye ne zaman girdiğini bilmez.

Bir cihaz açıldığında varsayılan, başlatılmamış donanım durumuna girer. Örneğin PCI Express Base 3.0 Belirtimi , bir cihazın ilk güç aldığında girdiği başlatılmamış D0 durumunu tanımlar. Bu durumun tanımı PCI ve PCI Express cihazlarına özgüdür, ancak diğer otobüslere bağlanan cihazlar, açıldığında benzer donanım durumlarına girmek üzere tasarlanmıştır.

Birden çok işlev uygulayan bir PCI veya PCI Express cihazı söz konusu olduğunda, bu cihaz işlevleri büyük olasılıkla aynı güç rayını paylaşır. Ancak, her işlevin ayrı bir sürücüsü olabilir ve bu işlevlerin sürücülerinin birbirleriyle doğrudan iletişim kurma olasılığı düşüktür. Bu işlevlerden birinin sürücüsü D3cold'dan D0'a güç durumu değişikliği istediğinde, diğer işlevlerin sürücüleri bu değişikliği beklemez. Bu diğer işlevler güç aldığında, D0'de düzgün çalışacak şekilde işlevleri yapılandırabilmeleri için sürücülerine bildirim gönderilmelidir.

Bir veri yolu sürücüsü, bir alt cihaza yönelik güç ayarının ne zaman açıldığını algılar. Bu cihazın işlev sürücüsü D0'a geçiş isteğinde bulunmadıysa, veri yolu sürücüsü, cihazı D0'de çalışacak şekilde başlatmak için cihaz sürücüsünden kendisine D0 güç IRP'sini (hedef durumu = PowerDeviceD0 olan bir IRP_MN_SET_POWER isteği) göndermesini ister. Bu başlatılan D0 durumundan, cihaz sürücüsü cihazın D3hot'a geçişini başlatabilir. Cihaz sürücüleri, veri yolu sürücülerinden D0'a yapılan beklenmedik geçişlerin bildirimlerini aşağıdaki yollarla alabilir:

  • Kendilerini doğrudan veya dolaylı olarak çalışma zamanı güç yönetimi çerçevesinin (PoFx) istemcileri olarak kaydeden cihaz sürücüleri bildirim geri çağrıları alır.
  • Cihazlarını uyandırmak üzere etkinleştiren cihazların sürücüleri, bekleyen IRP_MN_WAIT_WAKE istekleri veri yolu sürücüleri tarafından tamamlanır.

Windows 8'den başlayarak, güç ilkesi sahibi olarak hareket eden bir cihazın işlev sürücüsü kendisini PoFx istemcisi olarak kaydedebilir. Veriyolu sürücüsü, PoFx'e cihazın beklenmedik bir şekilde D0'a geçtiğini bildirdiğinde, PoFx, cihazın başlatılmış D0 durumuna ve ardından D3hot'a geçmesine yardımcı olur. İlk olarak PoFx, cihaz sürücüsünün DevicePowerRequiredCallback yordamını çağırarak, cihaz sürücüsünü cihaz yığınında bir D0 güç IRP'si göndermesi için harekete geçirir. Ardından PoFx, cihazın D0 durumunda kalması gerekmediğini cihaz sürücüsüne bildirmek için sürücünün DevicePowerNotRequiredCallback yordamını çağırır.

Kernel-Mode Driver Framework (KMDF) sürüm 1.11'den başlayarak, tek bileşenli bir cihazın KMDF sürücüsü WdfDeviceWdmAssignPowerFrameworkSettings yöntemini çağırarak pofx'a dolaylı olarak kendini kaydedebilir. Bu çağrıda sürücü, sürücüye D0'a olan beklenmedik geçişleri bildiren geri çağırma işlevlerine yönelik göstergeler sağlar. Daha fazla bilgi için bkz . İşlevsel Güç Durumlarını Destekleme.

Cihazını PoFx'e kaydetmeyen bir sürücü, cihaz uyandırma için hazır hâle getirilmişse D0'a beklenmedik bir geçişten haberdar edilebilir. Otobüs sürücüleri cihazın gücünü açtıklarında sürücünün IRP_MN_WAIT_WAKE isteğini tamamlar. Yanıt olarak, sürücü cihazını D0'de çalışacak şekilde başlatır. Cihazın boşta olması muhtemeldir, bu durumda sürücü bir süre sonra bu cihazı D3hot'a taşır.

PoFx'e kaydolmayan ve cihazını uyandırma için hazırlamayan bir işlev sürücüsü, D3cold'dan D0'a sürpriz bir geçiş için bildirim almaz. Cihaz başlatılmamış D0 durumunda büyük miktarda zaman harcayabilir. Bu durumda, cihazdaki tüm bileşenler genellikle açıktır. ** Boşta kalan cihazların güç tüketimini azaltmak için, sürpriz D0 geçiş bildirimlerini alabiliyorlarsa sürücülerin D3cold moduna giriş yapmasına izin verilmelidir.