Mengaktifkan Transaksi DMA

[Hanya berlaku untuk KMDF]

Jika driver berbasis kerangka kerja Anda menangani operasi I/O untuk perangkat DMA, driver Anda harus mengaktifkan fitur DMA kerangka kerja untuk setiap perangkat DMA. Untuk mengaktifkan fitur-fitur ini, fungsi panggilan balik EvtDriverDeviceAdd atau EvtDevicePrepareHardware driver Anda harus:

  1. Panggil WdfDeviceSetAlignmentRequirement untuk menentukan persyaratan perangkat untuk perataan buffer.

  2. Panggil WdfDmaEnablerCreate untuk menentukan jenis operasi DMA (paket tunggal atau sebar/kumpulkan) dan ukuran transfer maksimum yang didukung perangkat. Mulai dari 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 sistem operasi yang lebih baru.

  3. Panggil WdfDmaEnablerSetMaximumScatterGatherElements untuk menentukan jumlah maksimum elemen yang dapat didukung perangkat dalam daftar sebar/kumpulkan, jika perangkat mendukung operasi sebar/kumpulkan.

Contoh kode berikut dari sampel PLX9x5x menggambarkan cara mengaktifkan fitur DMA kerangka kerja. Kode ini muncul dalam file Init.c.

WDF_DMA_ENABLER_CONFIG   dmaConfig;

WdfDeviceSetAlignmentRequirement( DevExt->Device, PCI9656_DTE_ALIGNMENT_16 );
WDF_DMA_ENABLER_CONFIG_INIT( &dmaConfig,
                             WdfDmaProfileScatterGather64Duplex,
                             DevExt->MaximumTransferLength );
status = WdfDmaEnablerCreate( DevExt->Device,
                              &dmaConfig, 
                              WDF_NO_OBJECT_ATTRIBUTES,
                              &DevExt->DmaEnabler );

Jika driver Anda memerlukan buffer umum, fungsi panggilan balik EvtDriverDeviceAdd driver biasanya mengaturnya. Untuk informasi selengkapnya tentang buffer ini, lihat Menggunakan Buffer Umum.

Setelah driver memanggil WdfDmaEnablerCreate, driver dapat memanggil WdfDmaEnablerWdmGetDmaAdapter untuk mendapatkan pointer ke WDM DMA_ADAPTER struktur yang dibuat kerangka kerja untuk arah input dan output perangkat. Namun, sebagian besar driver berbasis kerangka kerja tidak perlu mengakses struktur ini.