Menangani Permintaan I/O di Driver KMDF untuk Perangkat DMA Bus-Master

[Berlaku untuk KMDF saja]

Topik ini di bagian ini menjelaskan bagaimana driver KMDF untuk perangkat DMA master bus memproses permintaan I/O. Jika Anda menulis driver KMDF yang menerapkan DMA mode sistem, lihat Mendukung System-Mode DMA.

Menangani permintaan I/O di driver KMDF untuk perangkat DMA master bus memerlukan kode dalam beberapa fungsi panggilan balik peristiwa driver, seperti yang ditunjukkan pada gambar berikut:

Diagram alur yang mengilustrasikan proses implementasi DMA di driver KMDF.

Seperti yang ditunjukkan di atas, pemrosesan terkait DMA berlangsung dalam empat fase:

  1. Fungsi panggilan balik EvtDriverDeviceAdd atau EvtDevicePrepareHardware driver Anda harus mengaktifkan transaksi DMA untuk perangkat, sehingga driver Anda dapat menggunakan kemampuan DMA kerangka kerja. Fungsi panggilan balik yang sama juga harus membuat buffer umum jika perangkat dan driver Anda memerlukan akses ke buffer memori bersama.

  2. Ketika driver Anda menerima permintaan I/O yang mengharuskan perangkat melakukan operasi DMA, salah satu penangan permintaan driver harus membuat dan menginisialisasi transaksi DMA baru. (Perhatikan bahwa jika driver Anda menggunakan kembali objek transaksi DMA, fungsi panggilan balik EvtDriverDeviceAdd driver Anda dapat membuat objek transaksi.) Kemudian, penangan permintaan harus memulai transaksi DMA sehingga kerangka kerja dapat mulai memecah transaksi menjadi transfer DMA yang lebih kecil, jika perlu, dan memanggil fungsi panggilan balik EvtProgramDma driver.

  3. Fungsi panggilan balik EvtProgramDma driver Anda memprogram perangkat keras DMA untuk satu transfer DMA dan memungkinkan gangguan perangkat.

  4. Saat perangkat terganggu, kerangka kerja memanggil fungsi panggilan balik EvtInterruptIsr driver Anda, yang menyimpan informasi perangkat yang mudah menguap dan menjadwalkan eksekusi fungsi panggilan balik EvtInterruptDpc driver.

    Fungsi panggilan balik EvtInterruptDpc driver Anda menyelesaikan setiap transfer DMA setelah perangkat keras selesai memprosesnya. Setelah transfer akhir transaksi DMA selesai, fungsi panggilan balik EvtInterruptDpcmenyelesaikan transaksi DMA.

Driver Anda mungkin menggunakan kembali objek transaksi DMA-nya untuk memastikan bahwa mereka dapat beroperasi ketika sumber daya memori rendah.

Driver Anda dapat menyediakan serangkaian fungsi panggilan balik yang menangani operasi manajemen daya khusus DMA.

Beberapa driver menggunakan buffer umum yang dapat diakses oleh perangkat dan driver.