NdisMSetupDmaTransfer-Makro (ndis.h)
Die NdisMSetupDmaTransfer-Funktion richtet den Host-DMA-Controller für eine DMA-Übertragung ein.
Syntax
void NdisMSetupDmaTransfer(
_S,
_H,
_B,
_O,
_L,
_M_
);
Parameter
_S
Ein Zeiger auf eine vom Aufrufer bereitgestellte Variable, in der diese Funktion den status der Anforderung zurückgibt, was einer der folgenden Sein kann:
NDIS_STATUS_SUCCESS
Der DMA-Controller wurde so eingerichtet, dass die angegebenen Daten übertragen werden, die an oder vom Gerät geleert wurden, um die Datenintegrität zu gewährleisten.
NDIS_STATUS_RESOURCES
Ein Versuch, den DMA-Controller für die Übertragung einzurichten, ist fehlgeschlagen, entweder weil der von MiniportDmaHandle angegebene Kanal derzeit verwendet wird, um Daten zu übertragen, oder weil die angegebene Länge ungültig ist.
_H
Das DMA-Handle, das von der NdisMRegisterDmaChannel-Funktion während der Initialisierung zurückgegeben wird.
_B
Ein Zeiger auf den Pufferdeskriptor, der den Bereich des Hostspeichers zuordnen soll, von dem oder in den die Daten übertragen werden.
_O
Der Byteoffset innerhalb des zugeordneten Puffers, bei dem die Übertragung beginnen soll. Null gibt an, dass die Übertragung mit dem anfänglichen Byte des bereichs beginnen sollte, der unter Buffer angegeben ist.
_L
Die Anzahl der zu übertragenden Datenbytes. Der durch Offset und Length angegebene Bereich muss ein richtiger Unterbereich des unter Puffer angegebenen sein.
_M_
Ein boolescher Wert, der true für eine ausgehende Übertragung vom System über die NIC ist. Andernfalls ist es FALSE.
Rückgabewert
Keine
Bemerkungen
Treiber untergeordneter DMA-NICs rufen NdisMSetupDmaTransfer als Antwort auf eingehende Sendeanforderungen auf, für die der Treiber WriteToDevice auf TRUE festlegt. Sie legen WriteToDevice auf FALSE fest, wenn empfangene Daten von der NIC in den Hostspeicher übertragen werden.
Der Aufrufer von NdisMSetupDmaTransfer stellt einen Pufferdeskriptor bereit, der dem Hostspeicherbereich zugeordnet ist, der das Ziel der Übertragung ist oder Daten für einen Downloadvorgang vom Host an die NIC enthält. Um eine Übertragungsgröße anzugeben, die den DMA-Einschränkungen der NIC entspricht, kann der Aufrufer einen Unterbereich einrichten, der bei Bedarf mit den Parametern Offset und Length übertragen werden soll.
Der Aufrufer muss einen Pufferdeskriptor bereitstellen, der den Hostbereich angibt, in den empfangene Daten von der NIC übertragen werden, wenn WriteToDeviceFALSE ist. Andernfalls wurde der Pufferdeskriptor bei Buffer an eine Paketdeskriptoreingabe an den Miniporttreiber verkettet. MiniportSendNetBufferLists-Funktion .
Um die Leistung für kleine Übertragungsanforderungen zu verbessern, z. B. eine Sendeanforderung mit einer Länge von weniger als 256 Bytes, kann ein Miniporttreiber die Paketdaten in einen internen Stagingpuffer kopieren und eine vom Treiber zugewiesene Pufferdeskriptorzuordnung an NdisMSetupDmaTransfer übergeben.
Bei der Rückkehr von NdisMSetupDmaTransfer wurde der Host-DMA-Controller für die Übertragung programmiert. Der Miniporttreiber programmiert dann die NIC für den Übertragungsvorgang.
Wenn die Übertragung abgeschlossen ist, muss der Miniporttreiber den NdisMCompleteDmaTransfer-Funktion .
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Unterstützt für NDIS 6.0- und NDIS 5.1-Treiber (siehe NdisMSetupDmaTransfer (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe NdisMSetupDmaTransfer (NDIS 5.1)) in Windows XP. |
Zielplattform | Universell |
Header | ndis.h (einschließlich Ndis.h) |
IRQL | <= DISPATCH_LEVEL |
DDI-Complianceregeln | Irql_Miniport_Driver_Function(ndis) |