Bagikan melalui


Menggunakan Antarmuka Driver GUID_D3COLD_SUPPORT_INTERFACE

Dimulai dengan Windows 8, driver dapat memanggil rutinitas di antarmuka GUID_D3COLD_SUPPORT_INTERFACE untuk menentukan kemampuan D3cold perangkat dan untuk memungkinkan perangkat ini menggunakan D3cold. Dua rutinitas utama dalam antarmuka ini adalah SetD3ColdSupport dan GetIdleWakeInfo.

Antarmuka driver GUID_D3COLD_SUPPORT_INTERFACE menyediakan dukungan untuk substat D3cold dari status daya perangkat D3. D3 dibagi menjadi dua substatus, D3hot dan D3cold. D3 adalah status daya perangkat bertenaga terendah, dan D3cold menggunakan daya yang lebih sedikit daripada D3hot. Perangkat dapat memasukkan D3cold hanya jika perangkat, driver bus induk, dan firmware platform mendukung status ini. Perangkat yang mendukung D3cold dapat masuk dan keluar dari status ini ketika komputer berada dalam status daya sistem S0 (bekerja).

Driver yang merupakan pemilik kebijakan daya (PPO) untuk perangkat memanggil rutinitas dalam antarmuka ini untuk melakukan hal berikut:

  • Temukan apakah perangkat, driver bus induk, dan firmware platform mendukung transisi ke substat D3cold.
  • Temukan apakah perangkat dapat memberi sinyal peristiwa bangun ke prosesor saat perangkat berada di substat D3cold.
  • Aktifkan dan nonaktifkan transisi ke substat D3cold oleh perangkat.

Untuk mengkueri antarmuka ini, driver perangkat mengirim IRP_MN_QUERY_INTERFACE IRP ke bawah tumpukan driver. Untuk IRP ini, driver mengatur parameter input InterfaceType ke GUID_D3COLD_SUPPORT_INTERFACE. Setelah berhasil menyelesaikan IRP, parameter output Antarmuka adalah penunjuk ke struktur D3COLD_SUPPORT_INTERFACE. Struktur ini berisi penunjuk ke rutinitas dalam antarmuka.

Untuk informasi selengkapnya tentang status daya perangkat D3cold, lihat Mendukung D3cold di Driver.

Driver memanggil rutinitas SetD3ColdSupport untuk mengaktifkan dan menonaktifkan transisi perangkat secara dinamis ke D3cold yang dapat terjadi ketika komputer berada di S0. Jika perangkat harus dapat memberi sinyal peristiwa bangun dari status Dx berdaya rendah yang dimasukkan perangkat, driver harus mengaktifkan perangkat untuk memasukkan D3cold hanya jika perangkat dapat memberi sinyal peristiwa bangun dari D3cold. Jika tidak, setelah perangkat memasuki D3cold, perangkat mungkin tidak tersedia sampai komputer meninggalkan status S0.

Secara default, sebelum panggilan pertama ke rutinitas SetD3ColdSupport , transisi D3hot-to-D3cold dinonaktifkan. Untuk mengubah default ini sehingga transisi D3hot-to-D3cold diaktifkan sebelum panggilan SetD3ColdSupport pertama, paket driver untuk perangkat dapat menyertakan dua baris berikut di bagian DDInstall.HW dari file INF yang menginstal driver:

Include = machine.inf
Needs = PciD3ColdSupported

Rutinitas GetIdleWakeInfo memungkinkan driver untuk perangkat menemukan status daya perangkat tempat perangkat dapat memberi sinyal peristiwa bangun ketika komputer dalam status daya sistem tertentu. Pemanggil ke rutinitas ini menentukan status daya sistem sebagai parameter input, dan, sebagai parameter output, rutin melaporkan status daya perangkat bertenaga terendah tempat perangkat dapat memberi sinyal peristiwa tunggu ketika komputer berada dalam status daya sistem yang ditentukan. Misalnya, rutinitas GetIdleWakeInfo dapat memberi tahu driver apakah perangkat dapat memberi sinyal peristiwa bangun dari D3cold saat komputer berada di S0.

GetIdleWakeInfo rutin menyediakan informasi bangun perangkat yang lebih lengkap daripada yang tersedia dari permintaan IRP_MN_QUERY_CAPABILITIES. Permintaan ini, yang didukung semua versi Windows, menyediakan struktur DEVICE_CAPABILITIES yang menjelaskan kemampuan perangkat. Anggota DeviceWake dari struktur ini berisi subset informasi yang tersedia dari rutinitas GetIdleWakeInfo . Anggota ini menunjukkan status daya perangkat bertenaga terendah tempat perangkat dapat memberi sinyal peristiwa tunggu. Informasi dalam anggota ini dijamin akurat hanya jika komputer berada dalam status sistem berdaya rendah yang ditunjukkan oleh anggota SystemWake dari struktur. Jika SystemWake = PowerSystemSleeping3, informasi di DeviceWake diketahui valid untuk S3, mungkin sering berlaku untuk S1 dan S2, dan bahkan mungkin berlaku untuk S0.

Namun, sebagai praktik terbaik, driver tidak boleh berasumsi bahwa informasi dalam metode DeviceWake berlaku untuk status daya sistem apa pun selain status yang ditunjukkan oleh SystemWake. Untuk beberapa perangkat, status Dx terendah tempat perangkat dapat memberi sinyal peristiwa bangun bervariasi sesuai dengan apakah komputer berada dalam status kerja S0 atau dalam status daya rendah (S1, S2, S3, atau S4). Untuk perangkat lain, bus tempat perangkat terhubung dapat menangani sinyal bangun saat komputer berada di S0, tetapi perangkat tidak dapat. Hanya rutinitas GetIdleWakeInfo yang dapat secara akurat menggambarkan kemampuan bangun perangkat perangkat perangkat ini.

Misalnya, Spesifikasi PCI Express Base 3.0 menentukan dua mekanisme terpisah untuk memberi sinyal peristiwa bangun—satu mekanisme digunakan saat tautan PCI Express (bus) dinyalakan, dan yang lainnya digunakan saat tautan dimatikan. Saat tautan diaktifkan, perangkat mengirim aliran PM_PME Transaction Layer Packets (TLP) untuk memberi sinyal bahwa perangkat harus berpindah dari status Dx berdaya rendah ke D0. Saat tautan dimatikan, perangkat meminta agar tautan diaktifkan sehingga perangkat dapat mengirim PM_PME TLP. Untuk meminta agar tautan diaktifkan, perangkat menegaskan sinyal WAKE# (untuk faktor bentuk perangkat yang lebih umum) atau menggunakan mekanisme "suar" (kurang umum).

Spesifikasi PCI Express mengharuskan semua perangkat yang mengiklankan kemampuan untuk memberi sinyal peristiwa manajemen daya (PMEs) dari D3cold mengimplementasikan kedua mekanisme bangun perangkat ini, tetapi pengembang driver mungkin perlu mengaktifkan perangkat yang tidak menerapkan mekanisme ini dengan benar.

Jika perangkat dapat mengirimkan TLP PM_PME dengan benar saat tautan dinyalakan, driver dapat mengaktifkan perangkat untuk memasukkan D3hot saat komputer berada di S0. Jika perangkat dapat menegaskan sinyal WAKE# dengan benar untuk mengaktifkan tautan lalu menggunakan PM_PME TLP untuk memulai transisi ke D0, driver dapat mengaktifkan perangkat untuk memasukkan D3cold saat komputer berada di S0.

Namun, driver tidak boleh mengaktifkan perangkat untuk memasukkan D3hot atau D3cold jika firmware sistem (BIOS) tidak dapat menjamin bahwa mekanisme bangun perangkat PCI Express ditangani dengan benar oleh platform perangkat keras. Driver dapat memanggil rutinitas GetIdleWakeInfo untuk menemukan apakah firmware mengklaim dukungan untuk mekanisme ini. Jika driver menggunakan Kernel-Mode Driver Framework (KMDF) 1.11 atau yang lebih baru, alternatif yang nyaman untuk memanggil GetIdleWakeInfo adalah mengizinkan metode WdfDeviceAssignS0IdleSettings untuk memungkinkan perangkat menganggur dalam status Dx bertenaga terendah tempat perangkat dapat memberi sinyal peristiwa bangun.