Mengakses Ruang Konfigurasi Perangkat PCI
Beberapa operasi pada perangkat interkoneksi komponen periferal (PCI) disediakan untuk driver fungsi perangkat. Operasi tersebut termasuk, misalnya, mengakses ruang konfigurasi khusus perangkat dari bus dan memprogram pengontrol akses memori langsung (DMA). Microsoft menyediakan dukungan sistem untuk mengakses ruang konfigurasi perangkat PCI dengan dua metode:
Antarmuka bus BUS_INTERFACE_STANDARD
Paket permintaan I/O konfigurasi (IRP), IRP_MN_READ_CONFIG dan IRP_MN_WRITE_CONFIG
Catatan
Dimulai dengan Windows 10, versi 2004, jika perangkat memiliki tabel ACPI Secure Devices (SDEV) dan keamanan berbasis Virtualisasi diaktifkan, pembatasan ditempatkan pada metode yang tidak didukung untuk mengakses ruang konfigurasi perangkat PCI. Jika driver atau proses mencoba membaca atau memanipulasi ruang konfigurasi perangkat PCI menggunakan metode yang tidak tercantum di atas, akses akan diblokir dan akan mengakibatkan pemeriksaan bug sistem.
Sistem operasi Windows XP dan Windows Server 2003 dan yang lebih baru memiliki kontrol eksklusif atas header ruang konfigurasi, seperti yang didefinisikan oleh spesifikasi PCI Local Bus , serta semua kemampuan dalam daftar yang ditautkan kemampuan. Driver tidak boleh mencoba mengubah register ini.
Namun, driver dapat menulis ke ruang konfigurasi yang bukan milik header atau daftar kemampuan yang ditentukan vendor, menggunakan permintaan IRP_MN_WRITE_CONFIG atau metode SetBusData BUS_INTERFACE_STANDARD. Driver juga dapat membaca kemampuan perangkat, menggunakan permintaan IRP_MN_READ_CONFIG atau metode GetBusData BUS_INTERFACE_STANDARD. Untuk menggunakan IRP_MN_READ_CONFIG atau IRP_MN_WRITE_CONFIG, driver harus berjalan pada PASSIVE_LEVEL. Untuk daftar kemampuan dan struktur terkait yang dapat dikueri driver, lihat bagian Struktur PCI .
Driver dapat membaca dari ruang konfigurasi perangkat PCI yang diperluas (yaitu, lebih dari 256 byte data konfigurasi) menggunakan permintaan IRP_MN_READ_CONFIG atau metode GetBusData BUS_INTERFACE_STANDARD. Demikian juga, driver dapat menulis ke ruang konfigurasi perangkat PCI yang diperluas menggunakan permintaan IRP_MN_WRITE_CONFIG atau metode SetBusData BUS_INTERFACE_STANDARD. Jika perangkat tidak memiliki ruang konfigurasi yang diperluas atau platform tidak menentukan jalur untuk ruang konfigurasi yang diperluas pada perangkat, permintaan baca akan mengembalikan 0xFFFF dan permintaan tulis tidak akan berpengaruh. Untuk menentukan apakah operasi berhasil, driver dapat memeriksa jumlah byte yang dibaca atau ditulis.
PCI Express dan PCI-X mode 2 mendukung ruang konfigurasi perangkat PCI yang diperluas lebih dari 256 byte. Driver dapat membaca dan menulis ke ruang konfigurasi ini, tetapi hanya dengan dukungan perangkat keras dan BIOS yang sesuai. Dalam ACPI BIOS, bus akar harus memiliki ID PNP baik PNP0A08 atau PNP0A03. Untuk bus akar dengan ID PNP PNP0A03, metode _DSM dengan fungsi 4 harus menunjukkan bahwa mode saat ini adalah mode PCI-X 2. Semua jembatan dan perangkat harus pci express atau beroperasi dalam mode PCI-X 2.
Selain itu, sistem harus mendukung akses ruang konfigurasi yang dipetakan memori. Ini dengan mendefinisikan tabel MCFG dalam sistem BIOS/firmware. Sistem operasi Windows Vista dan Windows Server 2008 dan yang lebih baru secara otomatis mendukung akses ruang konfigurasi yang dipetakan memori.
Peringatan
HalGetBusDataByOffset dan HalSetBusDataByOffset disediakan untuk kompatibilitas mundur tetapi harus digunakan hanya jika menggunakan dua metode di atas tidak dimungkinkan.