Mendukung DMA System-Mode

[Hanya berlaku untuk KMDF]

DMA mode sistem, berbeda dengan DMA master bus , menjelaskan konfigurasi di mana beberapa perangkat berbagi satu pengontrol DMA multisaluran.

Mulai Kernel-Mode Driver Framework (KMDF) versi 1.11, kerangka kerja mendukung DMA mode sistem pada sistem berbasis System on a Chip (SoC) yang berjalan pada Windows 8 atau versi yang lebih baru dari sistem operasi Windows.

Topik ini menjelaskan kode yang harus disediakan driver KMDF dalam fungsi panggilan balik peristiwanya, serta fungsi panggilan balik peristiwa opsional yang dapat didaftarkannya, untuk menangani permintaan I/O untuk perangkat DMA mode sistem.

Untuk informasi tentang KMDF dan DMA master bus, lihat Menangani Permintaan I/O di Driver KMDF untuk Perangkat DMA Bus-Master.

Gambar berikut menunjukkan fungsi panggilan balik peristiwa yang digunakan driver Anda untuk mendukung DMA mode sistem:

Diagram alur memperlihatkan fungsi panggilan balik peristiwa untuk implementasi DMA mode sistem di driver KMDF.

Membuat Pengaktif DMA System-Mode

Membuat profil DMA mode sistem adalah proses dua langkah. Langkah-langkah berikut mewakili skenario umum:

  1. Biasanya dalam fungsi panggilan balik EvtDriverDeviceAdd , driver memanggil WDF_DMA_ENABLER_CONFIG_INIT, mengatur parameter Profil ke SystemMode atau SystemModeDuplex. Driver kemudian memanggil WdfDmaEnablerCreate, melewati struktur WDF_DMA_ENABLER_CONFIG yang baru saja diterimanya.

    Driver mungkin membuat pengaktif selama EvtDevicePrepareHardware.

  2. Fungsi panggilan balik EvtDevicePrepareHardware driver Anda mengaitkan pengaktif DMA dengan sumber daya DMA-nya dengan memanggil metode WdfDmaEnablerConfigureSystemProfile . Untuk pengaktif dupleks, driver memanggil WdfDmaEnablerConfigureSystemProfile dua kali, sekali untuk mengonfigurasi setiap arah transfer.

    Driver dapat memanggil WdfDmaEnablerConfigureSystemProfile setelah EvtDevicePrepareHardware selesai, tetapi driver harus memanggil metode ini sebelum menginisialisasi transaksi DMA.

Menyediakan Fungsi Panggilan Balik Opsional

Biasanya, driver KMDF tidak mengonfigurasi saluran DMA. Namun, dalam keadaan tertentu, driver mungkin perlu melakukan konfigurasi khusus saluran. Misalnya, driver mungkin memanggil fungsi kustom yang diimplementasikan oleh pengontrol DMA dengan menggunakan langkah-langkah berikut:

  1. Di salah satu penangan permintaan driver, driver memanggil fungsi panggilan balik WdfDmaTransactionSetChannelConfigurationCallback untuk mendaftarkan fungsi panggilan balik EvtDmaTransactionConfigureDmaChannel .
  2. Fungsi panggilan balik EvtDmaTransactionConfigureDmaChannel driver Anda memanggil WdfDmaEnablerWdmGetDmaAdapter untuk mengambil pointer ke DMA_ADAPTER WDM. Struktur ini adalah objek adaptor yang mewakili saluran DMA mode sistem driver.
  3. Driver kemudian dapat memanggil ConfigureAdapterChannel untuk mengaktifkan fungsi kustom yang diterapkan oleh pengontrol DMA. Rutinitas ini hanya dapat dipanggil oleh penunjuk dari alamat yang dikembalikan dalam struktur DMA_OPERATIONS .
  4. Fungsi panggilan balik EvtDmaTransactionConfigureDmaChannel driver Anda mengembalikan TRUE jika berhasil mengonfigurasi saluran DMA.
  5. Kerangka kerja memanggil fungsi panggilan balik EvtProgramDma driver.

Menerima Pemberitahuan Penyelesaian Transfer

Tidak seperti perangkat yang menggunakan pengontrol penguasa bus, perangkat keras untuk perangkat DMA mode sistem mungkin tidak memberi sinyal penyelesaian transfer DMA dengan mengeluarkan gangguan.

Jika perangkat Anda tidak meningkatkan gangguan untuk memberi sinyal penyelesaian transfer DMA, driver Anda dapat menyediakan fungsi panggilan balik peristiwa EvtDmaTransactionDmaTransferComplete yang dipanggil kerangka kerja ketika transfer DMA mode sistem telah selesai.

Untuk mendaftarkan fungsi panggilan balik ini, driver memanggil WdfDmaTransactionSetTransferCompleteCallback dari salah satu penangan permintaannya.