Bagikan melalui


Menservasi Sumber Daya DMA

[Berlaku untuk KMDF saja]

Biasanya, driver berbasis kerangka kerja tidak memesan register peta sebelumnya. Namun, dalam keadaan tertentu, driver mungkin perlu memesan sumber daya ini terlebih dahulu.

Driver berbasis kerangka kerja yang berjalan pada Windows 8 atau yang lebih baru dapat memesan sejumlah register peta tertentu untuk pengaktif DMA yang menentukan paket atau profil sistem. Untuk melakukannya, driver memanggil WdfDmaTransactionAllocateResources dan mendaftarkan fungsi panggilan balik EvtReserveDma .

Kerangka kerja memanggil fungsi EvtReserveDma driver ketika telah memesan register peta dan kunci adaptor WDM DMA. Driver kemudian dapat menginisialisasi dan memulai transaksi beberapa kali menggunakan objek transaksi yang sama sebelum akhirnya merilis objek transaksi. Untuk merilis sumber daya DMA kembali ke sistem, driver memanggil WdfDmaTransactionFreeResources.

Untuk menentukan jumlah register peta yang diperlukan untuk transaksi, driver dapat memanggil WdfDmaTransactionGetTransferInfo sebelum memanggil WdfDmaTransactionAllocateResources. Driver harus menginisialisasi transaksi sebelum memanggil WdfDmaTransactionGetTransferInfo.

Langkah-langkah berikut menunjukkan bagaimana driver dapat memesan dan merilis pengaktif DMA untuk penggunaan eksklusif dengan transaksi tertentu:

  1. Driver menerima permintaan I/O.

  2. Handler permintaan driver memanggil WdfDmaTransactionCreate untuk membuat objek transaksi DMA untuk permintaan tersebut.

  3. Handler permintaan driver memanggil WdfDmaTransactionAllocateResources untuk memesan sumber daya.

  4. Kerangka kerja memanggil EvtReserveDma ketika telah memesan sumber daya yang diminta.

  5. Di EvtReserveDma, driver memanggil WdfDmaTransactionInitializeUsingRequest atau WdfDmaTransactionInitialize untuk menginisialisasi objek transaksi.

  6. Di EvtReserveDma, driver memanggil metode WdfDmaTransactionExecute untuk memulai transaksi. Karena transaksi telah mencadangkan sumber daya, kerangka kerja segera memanggil fungsi panggilan balik EvtProgramDma driver.

  7. Dari EvtInterruptDpc atau EvtDmaTransactionDmaTransferComplete, driver memanggil WdfDmaTransactionDmaCompleted, WdfDmaTransactionDmaCompletedWithLength, atau WdfDmaTransactionDmaCompletedFinal, diikuti oleh WdfObjectDelete atau WdfDmaTransactionRelease. Driver tidak boleh menghapus atau melepaskan transaksi sampai transaksi selesai atau dibatalkan. Setelah menyelesaikan langkah ini, daftar peta tetap dipesan.

  8. Pengemudi dapat mengulangi langkah 5–7 sebanyak yang diperlukan.

    Ketika driver tidak lagi memerlukan reservasi, driver memanggil WdfDmaTransactionFreeResources dari EvtInterruptDpc atau EvtDmaTransactionDmaTransferComplete. Atau, driver dapat memanggil WdfDmaTransactionFreeResources dari fungsi panggilan balik peristiwa EvtReserveDma - nya.