Rutinitas Panggilan Balik Tunggu/Bangun

Ketika driver meminta IRP tunggu/bangun, driver harus menentukan rutinitas panggilan balik sehingga dapat mengembalikan perangkat ke status kerja (D0) saat peristiwa bangun terjadi. Setelah peristiwa bangun terjadi dan semua driver telah menyelesaikan IRP, sistem memanggil rutinitas panggilan balik yang diteruskan ke PoRequestPowerIrp.

Karena rutinitas panggilan balik ini diatur atas nama driver yang berasal dari IRP—dan bukan untuk driver yang menangani IRP—tidak boleh memanggil PoStartNextPowerIrp; hanya rutinitas IoCompletion yang ditetapkan sebagai driver yang melewati IRP ke bawah tumpukan yang akan memulai IRP daya berikutnya. Perlu diingat bahwa pemilik kebijakan tidak hanya mengirim IRP tetapi menanganinya, dan oleh karena itu mungkin menetapkan rutinitas IoCompletion saat melewati IRP ke bawah tumpukan selain mengatur rutinitas panggilan balik ketika meminta IRP tunggu/bangun.

Rutinitas panggilan balik memiliki tanggung jawab berikut:

  1. Jika driver mengontrol lebih dari satu perangkat, tentukan perangkat mana yang memberi sinyal bangun.

  2. Layanan peristiwa yang menyebabkan sinyal bangun.

  3. Atur perangkat yang memberi sinyal bangun dalam status D0 dengan memanggil PoRequestPowerIrp untuk mengirim permintaan PowerDeviceD0 . Driver juga harus memanggil PoSetPowerState untuk memberi tahu manajer daya status daya perangkat baru. Untuk informasi selengkapnya, lihat Mengirim IRP_MN_QUERY_POWER atau IRP_MN_SET_POWER untuk Device Power States.

  4. Jika driver mengatur rutinitas Batal untuk IRP, panggil IoSetCancelRoutine untuk mengatur ulang rutinitas Batal ke NULL.

  5. Jika driver memiliki kebijakan daya untuk lebih dari satu perangkat, turunkan jumlah referensi tunggu/bangunnya. Jika jumlahnya bukan nol, menunjukkan bahwa perangkat lain sebelumnya telah mengirim IRP tunggu/bangun, minta IRP tunggu/bangun lain (PoRequestPowerIrp) untuk PDO-nya.

    Misalnya, perangkat PCI mungkin mengaktifkan tunggu/bangun untuk modem dan Kartu Antarmuka Jaringan (NIC). Jika NIC membangunkan sistem (sehingga menyelesaikan IRP), FDO PCI harus mengirim IRP tunggu/bangun lain ke dirinya sendiri sehingga modem akan tetap dapat bangun.

Karena driver yang meminta IRP tunggu/bangun mengontrol kebijakan daya untuk tumpukan perangkatnya, IRP bertanggung jawab untuk mengembalikan perangkatnya ke status kerja ketika IRP selesai. Meskipun driver yang lebih rendah mungkin sudah menerapkan daya secara fisik ke perangkat, pemilik kebijakan harus memanggil PoRequestPowerIrp untuk mengirim permintaan IRP_MN_SET_POWER untuk status daya perangkat D0. Hanya setelah semua driver dalam tumpukan perangkat menangani IRP power-up ini, perangkat akan dikembalikan ke status kerja.