Bagikan melalui


Menerapkan Penyeimbangan Ulang PnP untuk Driver Audio PortCls

Penyeimbangan ulang PnP digunakan dalam skenario PCI tertentu di mana sumber daya memori perlu direalokasikan.

Penyeimbangan ulang dapat dipicu dalam dua skenario utama:

  1. Hotplug PCI: Pengguna mencolokkan perangkat dan bus PCI tidak memiliki sumber daya yang cukup untuk memuat driver untuk perangkat baru. Beberapa contoh perangkat yang termasuk dalam kategori ini termasuk Thunderbolt, USB-C dan NVME Storage. Dalam skenario ini sumber daya memori perlu diatur ulang dan dikonsolidasikan (diseimbangkan ulang) untuk mendukung perangkat tambahan yang ditambahkan.
  2. PCI yang dapat diubah ukuranNYA: Setelah driver untuk perangkat berhasil dimuat dalam memori, IA meminta sumber daya tambahan. Beberapa contoh perangkat termasuk kartu grafis kelas atas dan perangkat penyimpanan. Untuk informasi selengkapnya tentang dukungan driver video, lihat Dukungan BAR yang dapat diubah ukurannya. Topik ini menjelaskan apa yang perlu dilakukan untuk menerapkan penyeimbangan ulang PnP untuk driver audio PortCls.

Penyeimbangan ulang PnP tersedia di Windows 10, versi 1511, dan versi Windows yang lebih baru.

Persyaratan Penyeimbangan Ulang

Driver audio Portcls memiliki kemampuan untuk mendukung penyeimbangan ulang jika kondisi berikut terpenuhi:

Untuk mendukung penyeimbangan ulang ketika ada aliran audio aktif, driver audio portcls perlu memenuhi salah satu dari dua persyaratan tambahan ini.

ATAU

Perilaku Aliran Audio Saat Penyeimbangan Ulang Terjadi

Jika penyeimbangan ulang dipicu, ketika ada aliran audio aktif, dan driver menyediakan dukungan penyeimbangan ulang untuk aliran audio aktif, semua aliran audio aktif akan dihentikan dan tidak akan dimulai ulang secara otomatis.

Antarmuka COM IPortClsPnp

IPortClsPnp adalah antarmuka manajemen PnP yang diekspos driver kelas port (PortCls) ke adaptor.

IPortClsPnp mewarisi dari IUnknown dan juga mendukung metode berikut:

Driver miniport audio dapat mendaftarkan antarmuka pemberitahuan PNP menggunakan ekspor Portcls atau melalui antarmuka IPortClsPnp COM IPortClsPnp yang terekspos pada objek port WaveRT. Gunakan IPortClsPnp::RegisterAdapterPnpManagement dan IPortClsPnp::UnregisterAdapterPnpManagement untuk mendaftar dan membatalkan pendaftaran.

DDI Ekspor PortCls yang Diperlukan

IAdapterPnpManagement adalah antarmuka yang harus diterapkan dan didaftarkan adaptor jika mereka ingin menerima pesan manajemen PnP. Daftarkan antarmuka ini dengan PortCls menggunakan PcRegisterAdapterPnpManagement. Batalkan pendaftaran antarmuka ini dengan PortCls menggunakan PcUnregisterAdapterPnpManagement.

DDI Driver yang Diperlukan

DDI IAdapterPnpManagement berikut harus diimplementasikan untuk mendukung penyeimbangan ulang.

  • IAdapterPnpManagement::GetSupportedRebalanceType dipanggil oleh Portcls saat memproses QueryStop. Miniport mengembalikan jenis penyeimbangan ulang yang didukung seperti yang didefinisikan dalam enum PC_REBALANCE_TYPE.

    Catatan Portcls memperoleh kunci global perangkat sebelum melakukan panggilan ini, sehingga miniport harus menjalankan panggilan ini secepat mungkin.

  • IAdapterPnpManagement::P npQueryStop dipanggil oleh portcls tepat sebelum mengganti queryStop IRP. Ini hanya pemberitahuan dan panggilan tidak mengembalikan nilai.

    Catatan Portcls memperoleh kunci global perangkat sebelum melakukan panggilan ini, sehingga miniport harus menjalankan panggilan ini secepat mungkin. Saat Berhenti tertunda, Portcls akan memblokir (menahan) permintaan pembuatan baru apa pun.

  • IAdapterPnpManagement::P npCancelStop dipanggil oleh portcls saat memproses IRP CanceStop. Ini hanya pemberitahuan. Dimungkinkan bagi miniport untuk menerima PnpCancelStop bahkan tanpa sebelumnya menerima pemberitahuan PnpQueryStop. Miniport harus ditulis untuk mengakomodasi perilaku ini. Misalnya, ini adalah kasus ketika logika QueryStop gagal IRP sebelum Portcls memiliki kesempatan untuk meneruskan pemberitahuan ini ke miniport. Dalam skenario ini, manajer PnP masih memanggil Pemberhentian Pembatalan PnP.

    Catatan Portcls memperoleh kunci global perangkat sebelum melakukan panggilan ini, sehingga miniport harus menjalankan panggilan ini secepat mungkin. Saat Berhenti tertunda, Portcls akan memblokir (menahan) permintaan pembuatan baru apa pun. PortCls memulai ulang permintaan pembuatan yang tertunda saat Pemberhentian tertunda dibatalkan.

  • IAdapterPnpManagement::P npStop dipanggil oleh Portcls setelah menghentikan semua operasi Ioctl dan memindahkan aliran aktif dari status [run|pause|acquire] ke status [stop]. Panggilan ini tidak dilakukan saat menahan kunci global perangkat. Dengan demikian miniport memiliki kesempatan untuk menunggu operasi asinkronnya (work-items, dpc, async threads) dan membatalkan pendaftaran subdevice audionya. Sebelum kembali dari panggilan ini, miniport harus memastikan bahwa semua sumber daya h/w telah dirilis.

    Catatan Miniport tidak boleh menunggu objek miniport/stream saat ini dihapus karena tidak jelas kapan klien audio yang ada akan merilis handel saat ini. Utas PnpStop tidak dapat memblokir selamanya tanpa menabrak sistem, yaitu, ini adalah utas PnP/Power.

IMiniportPnpNotify

IMiniportPnpNotify adalah antarmuka opsional untuk memungkinkan objek miniport (subdevice audio) menerima pemberitahuan perubahan status PnP.

Miniports memiliki kesempatan untuk menerima pemberitahuan PnP Stop untuk setiap subdevice audio yang telah mereka daftarkan. Untuk menerima pemberitahuan ini, subdevice harus mendukung IMiniportPnpNotify. Hanya pemberitahuan IMiniportPnpNotify::P npStop yang ditentukan pada antarmuka ini.

Antarmuka IMiniportPnpNotify yang tersedia ada di WaveRT dan Topologi.

Catatan Karena Portcls memperoleh kunci global perangkat sebelum melakukan panggilan ini, miniport harus menjalankan panggilan ini secepat mungkin. Miniport tidak boleh menunggu aktivitas lain saat memproses panggilan ini untuk mencegah kebuntuan ketika utas/item kerja lain menunggu kunci global perangkat. Jika diperlukan, miniport dapat menunggu di panggilan IAdapterPnpManagement::P npStop.