Component-Level Power Management
Dimulai dengan Windows 8, kerangka kerja manajemen daya (PoFx) memungkinkan driver untuk mengelola status daya komponen individu dalam perangkat. Manajemen daya tingkat komponen ada berdampingan dengan manajemen daya tingkat perangkat. Untuk pengenalan, lihat Gambaran Umum Power Management Framework.
Halaman ini menjelaskan PoFx API untuk Component-Level Power Management.
Untuk mendaftarkan perangkat yang akan dikelola oleh PoFx, driver memanggil rutinitas PoFxRegisterDevice . Driver melewati rutinitas ini struktur PO_FX_DEVICE yang, di antara data lainnya, berisi array struktur PO_FX_COMPONENT . Setiap elemen dalam array ini menjelaskan status daya Fx komponen di perangkat dan atribut setiap status Fx. (Minimal, komponen yang tidak mendukung manajemen daya tingkat komponen hanya mengimplementasikan status F0.) Atribut status daya Fx tertentu dalam komponen tertentu dijelaskan oleh struktur PO_FX_COMPONENT_IDLE_STATE , yang berisi nilai berikut:
- Latensi transisi, yang merupakan waktu yang diperlukan untuk melakukan transisi dari status Fx ini ke status F0 (sepenuhnya aktif).
- Persyaratan residensi, yang merupakan waktu yang harus dihabiskan komponen dalam status Fx ini untuk melakukan transisi ke status yang berharga.
- Kekuatan nominal, yang merupakan daya yang dikonsumsi oleh komponen dalam status Fx ini.
PoFx menggunakan informasi ini (selain input dan dependensi di seluruh sistem lainnya) untuk membuat keputusan cerdas tentang status daya Fx mana komponen harus berada pada waktu tertentu. PoFx harus menyeimbangkan dua tujuan yang bersaing. Pertama, komponen yang menganggur harus dikonfigurasi untuk mengonsumsi daya sesedikit mungkin. Kedua, komponen harus siap untuk beralih dari status Fx berdaya rendah ke F0 dengan cukup cepat untuk mempertahankan penampilan perangkat yang selalu menyala dan selalu terhubung.
Manajemen daya tingkat komponen hanya dapat dilakukan ketika perangkat berada dalam status daya D0 (sepenuhnya aktif). Saat perangkat berada di D1 (hampir menyala), D2 (hampir mati), atau status daya D3, perangkat tidak dapat diakses. Ketika perangkat dalam status D0, hanya komponen yang secara aktif digunakan driver harus tetap dalam status F0. Komponen diam berpotensi beralih ke status Fx berdaya rendah untuk mengurangi konsumsi daya.
Saat perangkat dalam status daya D0, driver mengikuti protokol sederhana untuk mengaktifkan manajemen daya tingkat komponen. Ketika driver perlu mengakses komponen, driver memanggil rutinitas PoFxActivateComponent untuk meminta akses ke komponen. Jika komponen berada dalam status Fx berdaya rendah ketika panggilan ini terjadi, PoFx memulai transisi ke status F0 dan memberi tahu driver ketika transisi ini selesai. Driver kemudian dapat mengakses komponen. Ketika driver tidak lagi perlu mengakses komponen, driver memanggil rutinitas PoFxIdleComponent untuk memberi tahu PoFx. Menanggapi panggilan ini, PoFx berpotensi mengalihkan komponen ke status Fx berdaya rendah.
Komponen yang dapat diakses berada dalam kondisi aktif. Komponen yang tidak dapat diakses berada dalam kondisi menganggur. Untuk melacak aksesibilitas komponen dalam perangkat, PoFx mempertahankan jumlah referensi aktivasi pada setiap komponen. Panggilan PoFxActivateComponent meningkatkan hitungan pada komponen yang ditentukan satu per satu, dan panggilan PoFxIdleComponent mengurangi hitungan satu per satu.
Jika panggilan PoFxActivateComponent meningkatkan hitungan dari nol ke satu, PoFx memulai transisi dari kondisi menganggur ke kondisi aktif, dan memberi tahu driver ketika transisi ini selesai. Jika PoFxActivateComponent terjadi ketika komponen sudah dalam kondisi aktif, komponen tetap dalam kondisi aktif dan driver tidak menerima pemberitahuan.
Jika panggilan PoFxIdleComponent mengurangi hitungan dari satu ke nol, PoFx memulai transisi dari kondisi aktif ke kondisi menganggur, dan memberi tahu driver ketika transisi ini selesai. Jika panggilan PoFxIdleComponent mengurangi jumlah tetapi jumlahnya tetap bukan nol, komponen tetap dalam kondisi aktif dan driver tidak menerima pemberitahuan.
Jumlah referensi aktivasi menangani situasi di mana dua atau beberapa jalur kode di driver yang sama mungkin perlu mengakses komponen yang sama secara bersamaan di perangkat. Dengan mempertahankan jumlah ini, PoFx memungkinkan berbagai bagian driver untuk secara independen mempertahankan akses ke komponen tanpa mengharuskan driver mengelola akses ke komponen secara terpusat.
Kondisi aktif/menganggur komponen adalah satu-satunya cara yang dapat diandalkan bagi driver untuk menentukan apakah komponen dapat diakses. Komponen yang berada dalam status daya F0 tetapi berada dalam kondisi menganggur mungkin akan beralih ke status Fx berdaya rendah.
Komponen yang berada dalam kondisi aktif selalu dalam status F0. Komponen tidak dapat meninggalkan F0 hingga memasuki kondisi menganggur. Komponen yang berada dalam kondisi menganggur mungkin berada di F0 atau dalam status Fx berdaya rendah. Jika komponen dalam status Fx berdaya rendah saat panggilan PoFxActivateComponent memulai transisi dari kondisi menganggur ke kondisi aktif, PoFx harus terlebih dahulu mengalihkan komponen ke F0 sebelum komponen dapat memasuki kondisi aktif.