Funzione WdfDmaEnablerGetFragmentLength (wdfdmaenabler.h)
[Si applica solo a KMDF]
Il metodo WdfDmaEnablerGetFragmentLength restituisce la lunghezza massima di trasferimento supportata dal sistema operativo per un singolo trasferimento DMA .
Sintassi
size_t WdfDmaEnablerGetFragmentLength(
[in] WDFDMAENABLER DmaEnabler,
[in] WDF_DMA_DIRECTION DmaDirection
);
Parametri
[in] DmaEnabler
Handle per un oggetto enabler DMA ottenuto dal driver da una chiamata precedente a WdfDmaEnablerCrea.
[in] DmaDirection
Valore WDF_DMA_DIRECTIONtipizzato che specifica la direzione dell'operazione di trasferimento DMA. Per altre informazioni, vedere la sezione Osservazioni seguente.
Valore restituito
WdfDmaEnablerGetFragmentLength restituisce la lunghezza massima di un trasferimento DMA, in byte, che il sistema operativo può supportare o zero se il valore DmaDirection parametro non è valido.
Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.
Osservazioni:
La lunghezza massima di trasferimento DMA supportata dal sistema operativo dipende dal numero di registri mappa disponibili. Se sono disponibili registri di mapping sufficienti, WdfDmaEnablerGetFragmentLength restituisce lo stesso valore restituito WdfDmaEnablerGetMaximumLength. In caso contrario, il valore restituito WdfDmaEnablerGetFragmentLength sarà minore del valore restituito WdfDmaEnablerGetMaximumLength.
Il driver può determinare il numero di registri mappa disponibili usando la macro BYTE_TO_PAGES, come indicato di seguito:
BYTE_TO_PAGES(WdfDmaEnablerGetFragmentLength()) + 1
Se il driver ha specificato un profilo duplex quando viene chiamato WdfDmaEnablerCreate, il valore del parametro DmaDirection deve essere WdfDmaDirectionReadFromDevice per ottenere la lunghezza massima di trasferimento per le operazioni di lettura e WdfDmaDirectionWriteToDevice per ottenere la lunghezza massima di trasferimento per le operazioni di scrittura. Se il driver non ha specificato un profilo duplex, il driver può specificare WdfDmaDirectionReadFromDevice o WdfDmaDirectionWriteToDevice per DmaDirection.
Si noti che se il dispositivo del driver supporta l'operazione duplex, WdfDmaEnablerGetFragmentLength può restituire valori diversi per le istruzioni di lettura e scrittura specificate dal parametro DmaDirection. Questa differenza è dovuta al fatto che il framework crea un oggetto adattatore separato per ogni direzione e il sistema operativo potrebbe fornire un numero diverso di registri mappa a ogni oggetto adapter.
Esempi
L'esempio di codice seguente determina il numero minimo di registri mappa necessari per gestire le operazioni di lettura di un dispositivo NIC, calcola il numero di registri mappa disponibili e segnala un errore se il numero di registri mappa allocati non è sufficiente.
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;
}
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
versione minima di KMDF | 1.1 |
intestazione | wdfdmaenabler.h (include Wdf.h) |
Biblioteca | Wdf01000.sys (vedere Controllo delle versioni della libreria framework). |
IRQL | <=DISPATCH_LEVEL |
regole di conformità DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |