Bagikan melalui


Menggunakan Sistem DMA Packet-Based

Driver perangkat subordinat yang menggunakan DMA berbasis paket memanggil urutan umum rutinitas dukungan berikut saat mereka memproses IRP yang meminta transfer DMA:

  • KeFlushIoBuffers tepat sebelum mencoba mengalokasikan pengontrol DMA sistem (untuk informasi selengkapnya, lihat Mempertahankan Koherensi Cache)

  • AlokasikanAdapterChannel ketika driver siap untuk memprogram perangkatnya untuk DMA dan membutuhkan pengontrol DMA sistem

    AllocateAdapterChannel, pada gilirannya, memanggil rutinitas AdapterControl driver.

  • MmGetMdlVirtualAddress untuk mendapatkan indeks ke MDL, diperlukan sebagai parameter dalam panggilan awal ke MapTransfer

  • MapTransfer untuk memprogram pengontrol DMA sistem untuk operasi transfer

    Driver mungkin perlu memanggil MapTransfer lebih dari sekali untuk mentransfer semua data yang diminta, seperti yang dijelaskan dalam Permintaan Transfer Pemisahan.

  • FlushAdapterBuffers tepat setelah setiap operasi transfer DMA ke/dari perangkat subordinat

    Jika driver harus memanggil MapTransfer lebih dari sekali untuk mentransfer semua data yang diminta, driver harus memanggil FlushAdapterBuffers sebanyak driver memanggil MapTransfer.

  • FreeAdapterChannel segera setelah semua data yang diminta telah ditransfer atau jika driver gagal menyelesaikan IRP karena kesalahan I/O perangkat

Penunjuk objek adaptor yang dikembalikan oleh IoGetDmaAdapter adalah parameter yang diperlukan untuk masing-masing rutinitas ini kecuali KeFlushIoBuffers dan MmGetMdlVirtualAddress, yang memerlukan penunjuk ke MDL yang diteruskan di Irp-MdlAddress>.

Driver individu memanggil urutan rutinitas dukungan ini di titik yang berbeda, tergantung pada bagaimana setiap driver diimplementasikan untuk melayani perangkatnya. Misalnya, rutinitas StartIo satu driver mungkin melakukan panggilan ke AllocateAdapterChannel, driver lain mungkin melakukan panggilan ini dari rutinitas yang menghapus IRP dari antrean yang dibuat driver dan saling mengunci, dan driver lainnya mungkin melakukan panggilan ini ketika perangkat DMA bawahannya menunjukkan bahwa ia siap untuk mentransfer data.