Bagikan melalui


Fungsi WdfDmaEnablerGetFragmentLength (wdfdmaenabler.h)

[Hanya berlaku untuk KMDF]

Metode WdfDmaEnablerGetFragmentLength mengembalikan panjang transfer maksimum yang didukung sistem operasi untuk satu transfer DMA.

Sintaks

size_t WdfDmaEnablerGetFragmentLength(
  [in] WDFDMAENABLER     DmaEnabler,
  [in] WDF_DMA_DIRECTION DmaDirection
);

Parameter

[in] DmaEnabler

Handel ke objek pengaktif DMA yang diperoleh driver dari panggilan sebelumnya ke WdfDmaEnablerCreate.

[in] DmaDirection

Nilai jenis WDF_DMA_DIRECTION yang menentukan arah operasi transfer DMA. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.

Nilai kembali

WdfDmaEnablerGetFragmentLength mengembalikan panjang maksimum transfer DMA, dalam byte, yang dapat didukung sistem operasi, atau nol jika nilai parameter DmaDirection tidak valid.

Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.

Keterangan

Panjang transfer DMA maksimum yang dapat didukung sistem operasi tergantung pada jumlah register peta yang tersedia. Jika tersedia cukup register peta, WdfDmaEnablerGetFragmentLength mengembalikan nilai yang sama dengan yang dikembalikan WdfDmaEnablerGetMaximumLength . Jika tidak, nilai yang dikembalikan WdfDmaEnablerGetFragmentLength akan kurang dari nilai yang dikembalikan WdfDmaEnablerGetMaximumLength .

Driver Anda dapat menentukan jumlah register peta yang tersedia dengan menggunakan makro BYTE_TO_PAGES, sebagai berikut:

BYTE_TO_PAGES(WdfDmaEnablerGetFragmentLength()) + 1

Jika driver Anda menentukan profil dupleks ketika disebut WdfDmaEnablerCreate, nilai parameter DmaDirection harus WdfDmaDirectionReadFromDevice untuk mendapatkan panjang transfer maksimum untuk operasi baca dan WdfDmaDirectionWriteToDevice untuk mendapatkan panjang transfer maksimum untuk operasi tulis. Jika driver Anda tidak menentukan profil dupleks, driver dapat menentukan WdfDmaDirectionReadFromDevice atau WdfDmaDirectionWriteToDevice untuk DmaDirection.

Perhatikan bahwa jika perangkat driver Anda mendukung operasi dupleks, WdfDmaEnablerGetFragmentLength dapat mengembalikan nilai yang berbeda untuk petunjuk baca dan tulis yang ditentukan parameter DmaDirection . Perbedaan ini karena kerangka kerja membuat objek adaptor terpisah untuk setiap arah, dan sistem operasi mungkin menyediakan jumlah register peta yang berbeda ke setiap objek adaptor.

Contoh

Contoh kode berikut menentukan jumlah minimum register peta yang diperlukan untuk menangani operasi baca perangkat NIC, menghitung jumlah register peta yang tersedia, dan melaporkan kesalahan jika jumlah register peta yang dialokasikan tidak mencukupi.

ULONG  minimumMapRegisters;
ULONG  maxLengthSupported;
ULONG  mapRegistersAllocated;

miniMapRegisters = BYTES_TO_PAGES(NIC_MAX_PACKET_SIZE) + 1;

maxLengthSupported = 
    (ULONG) WdfDmaEnablerGetFragmentLength(
                                           FdoData->WdfDmaEnabler,
                                           WdfDmaDirectionReadFromDevice
                                           );

mapRegistersAllocated = BYTES_TO_PAGES(maxLengthSupported) + 1;

if (mapRegistersAllocated < minimumMapRegisters) {
    status = STATUS_INSUFFICIENT_RESOURCES;
    return status;
}

Persyaratan

Persyaratan Nilai
Target Platform Universal
Versi KMDF minimum 1.1
Header wdfdmaenabler.h (termasuk Wdf.h)
Pustaka Wdf01000.sys (lihat Penerapan Versi Pustaka Kerangka Kerja.)
IRQL <=DISPATCH_LEVEL
Aturan kepatuhan DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Lihat juga

WDF_DMA_DIRECTION

WdfDmaEnablerCreate

WdfDmaEnablerGetMaximumLength