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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk