Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Vorsicht
Für ARM- und ARM64-Prozessoren empfehlen wir dringend, dass NDIS-Treiberautoren WDF DMA oder WDM DMA anstelle von NDIS Scatter/Gather DMA verwenden.
Weitere Informationen zu WDF DMA finden Sie unter Behandeln von DMA-Vorgängen in KMDF Drivers.
Weitere Informationen zu WDM DMA finden Sie in den DMA-bezogenen untergeordneten Themen Managing Input/Output for Drivers.
Busmaster-Miniporttreiber rufen die NdisMRegisterScatterGatherDma--Funktion von MiniportInitializeEx auf, um einen Punkt/Gather-DMA-Kanal zu initialisieren.
Syntax
NDIS_STATUS NdisMRegisterScatterGatherDma(
[in] NDIS_HANDLE MiniportAdapterHandle,
[in, out] PNDIS_SG_DMA_DESCRIPTION DmaDescription,
[out] PNDIS_HANDLE NdisMiniportDmaHandle
);
Parameter
[in] MiniportAdapterHandle
Der Miniportziehpunkt, den NDIS an MiniportInitializeExübergeben hat.
[in, out] DmaDescription
Ein Zeiger auf eine NDIS_SG_DMA_DESCRIPTION Struktur. Diese Struktur beschreibt die Punkt-/Gather-DMA-Eigenschaften des Miniporttreibers. Die Struktur wird wie folgt definiert:
typedef struct _NDIS_SG_DMA_DESCRIPTION {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
ULONG MaximumPhysicalMapping;
MINIPORT_PROCESS_SG_LIST_HANDLER ProcessSGListHandler;
MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE_HANDLER SharedMemAllocateCompleteHandler;
ULONG ScatterGatherListSize;
} NDIS_SG_DMA_DESCRIPTION, *PNDIS_SG_DMA_DESCRIPTION;
Diese Struktur enthält die folgenden Elemente:
Kopfball
Die NDIS_OBJECT_HEADER Struktur für die NDIS_SG_DMA_DESCRIPTION Struktur. Legen Sie das element Type der Struktur fest, das Header- angibt, NDIS_OBJECT_TYPE_SG_DMA_DESCRIPTION, das element Revision auf NDIS_SG_DMA_DESCRIPTION_REVISION_1 und das Size Member auf NDIS_SIZEOF_SG_DMA_DESCRIPTION_REVISION_1.
Flaggen
Eine Reihe von Bitkennzeichen, die Punkt-/Sammelmerkmale definieren. Legen Sie dieses Element auf den bitweisen OR aller erforderlichen Flags fest.
Das flag NDIS_SG_DMA_64_BIT_ADDRESS gibt an, dass die NIC 64-Bit-Adressierung für DMA-Vorgänge verwenden kann. Andernfalls verwendet die NIC die 32-Bit-Adressierung.
Legen Sie dieses Element auf Null fest, wenn keine 64-Bit-Adressierung erforderlich ist.
MaximumPhysicalMapping
Die maximale Anzahl von Bytes, die die NIC in einem einzelnen DMA-Vorgang übertragen kann. NDIS stellt diesen Wert für die Hardwarestraktionsebene (HAL) bereit, wenn ein DMA-Kanal zugeordnet wird, und HAL verwendet diesen Wert, um die maximale Anzahl von Kartenregistern zu ermitteln, die für die NIC reserviert werden sollen.
ProcessSGListHandler
Die MiniportProcessSGList Funktion, die NDIS aufruft, wenn HAL die XY/Gather-Liste erstellt.
SharedMemAllocateCompleteHandler
Das MiniportSharedMemoryAllocateComplete-Funktion für Miniporttreiber, die aufrufen NdisMAllocateSharedMemoryAsyncEx. Dieses Feld ist optional und sollte NULL- sein, wenn der Miniporttreiber nicht NdisMAllocateSharedMemoryAsyncExaufruft.
ScatterGatherListSize
Die Größe des Speichers, der erforderlich ist, um eine Punkt/Gather-Liste zu speichern. NDIS legt diesen Wert fest, bevor er aus NdisMRegisterScatterGatherDmazurückgibt. Miniport-Treiber sollten diese Größe verwenden, um Speicher für jede Punkt/Gather-Liste vorab zuzuweisen.
[out] NdisMiniportDmaHandle
Ein Zeiger auf eine Variable, die der Aufrufer bereitstellt und der NDIS mit einem Handle gefüllt wird. Das Handle identifiziert einen Kontextbereich, den NDIS zum Verwalten dieser DMA-Ressource verwendet. Der Miniporttreiber übergibt dieses Handle in nachfolgenden Aufrufen von NDIS an NDIS, die diese DMA-Ressource einbeziehen.
Rückgabewert
NdisMRegisterScatterGatherDma gibt eine der folgenden Werte zurück:
| Rückgabecode | Beschreibung |
|---|---|
|
NdisMRegisterScatterGatherDma ressourcen für Busmaster-DMA-Vorgänge erfolgreich zugeordnet. |
|
NdisMRegisterScatterGatherDma aufgrund unzureichender Ressourcen nicht erfolgreich. |
|
NdisMRegisterScatterGatherDma fehlgeschlagen, da der Miniport nicht angegeben hat, dass er NDIS 6.0 oder höhere Versionen unterstützt, oder weil der Miniporttreiber nicht angegeben hat, dass es sich bei der NIC um ein Busmaster-DMA-Gerät handelt. Ein Miniporttreiber gibt seine NDIS-Version an, wenn er aufruft NdisMRegisterMiniportDriver. Ein Miniporttreiber gibt an, dass er DMA-Geräte im Busmaster unterstützt, wenn er aufruft NdisMSetMiniportAttributes. |
|
Die aktuelle Version von NDIS unterstützt die im Revision Member der Header Struktur von DmaDescription angegebene Version nicht. |
Bemerkungen
Ein NDIS-Busmaster-Miniporttreiber ruft NdisMRegisterScatterGatherDma- innerhalb seiner MiniportInitializeEx--Funktion auf, um Ressourcen für XY/Gather-DMA-Vorgänge zu initialisieren. Der DmaDescription Parameter, den der Miniporttreiber an NdisMRegisterScatterGatherDma übergibt, enthält die Informationen, die NDIS zum Initialisieren der XY/Gather-DMA-Ressourcen verwendet. Nachdem NdisMRegisterScatterGatherDma- zurückgegeben wurde, enthält das ScatterGatherListSize Element von DmaDescription eine Puffergröße, die ausreichen sollte, um eine Punkt/Gather-Liste zu enthalten. Miniport-Treiber sollten diese Größe verwenden, um den Speicher für Punkt/Erfassungslisten vorab zuzuweisen.
Der ProcessSGListHandler Member im DmaDescription Parameter definiert den Einstiegspunkt im Miniporttreiber für die MiniportProcessSGList Funktion. Wenn ein Miniporttreiber aufruft NdisMAllocateNetBufferSGListruft NDIS HAL auf, um die Punkt/Erfassungsliste für den Miniporttreiber bereitzustellen. HAL ruft MiniportProcessSGList auf, nachdem HAL die Erstellung der Punkt/Gather-Liste abgeschlossen hat. NDIS kann MiniportProcessSGList- außerhalb des Kontexts des Aufrufs an NdisMAllocateNetBufferSGListaufrufen.
NdisMRegisterScatterGatherDma gibt einen Zeiger auf einen Kontextbereich zurück, der für den Miniporttreiber undurchsichtig ist. Der Miniporttreiber muss dieses Handle in nachfolgenden Aufrufen von NDIS-Punkt-/Gather-DMA-Funktionen verwenden.
Busmaster-Miniport-Fahreranruf NdisMAllocateSharedMemoryAsyncEx, um gemeinsam genutzten Speicher dynamisch für Datenübertragungsvorgänge zuzuweisen. Dieser Aufruf ist erforderlich, wenn ein hoher Netzwerkdatenverkehr bewirkt, dass der Miniporttreiber für den freigegebenen Speicherplatz, den der Treiber während der Initialisierung zugewiesen hat, niedrig ausgeführt wird. Wenn NdisMAllocateSharedMemoryAsyncEx NDIS_STATUS_PENDING zurückgibt, ruft NDIS die MiniportSharedMemoryAllocateComplete Funktion, um den Vorgang zu einem späteren Zeitpunkt abzuschließen. Miniport-Treiber geben den Einstiegspunkt für die MiniportSharedMemoryAllocateComplete--Funktion im SharedMemAllocateCompleteHandler Member des DmaDescription--Parameters an.
Miniporttreiber rufen die NdisMDeregisterScatterGatherDma Funktion, um die DMA-Ressourcen zuzuordnen, die NdisMRegisterScatterGatherDma zugeordnet.
Anforderungen
| Anforderung | Wert |
|---|---|
| mindestens unterstützte Client- | Unterstützt in NDIS 6.0 und höher. |
| Zielplattform- | Universal |
| Header- | ndis.h (include Ndis.h) |
| Library | Ndis.lib |
| IRQL- | PASSIVE_LEVEL |
| DDI-Complianceregeln | Init_RegisterSG(ndis), Irql_Gather_DMA_Function(ndis) |