Freigeben über


NdisMRegisterScatterGatherDma-Funktion (ndis.h)

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:

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
NDIS_STATUS_SUCCESS
NdisMRegisterScatterGatherDma ressourcen für Busmaster-DMA-Vorgänge erfolgreich zugeordnet.
NDIS_STATUS_RESOURCES
NdisMRegisterScatterGatherDma aufgrund unzureichender Ressourcen nicht erfolgreich.
NDIS_STATUS_NOT_SUPPORTED
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.
NDIS_STATUS_BAD_VERSION
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)

Siehe auch

MiniportInitializeEx-

MiniportProcessSGList-

MiniportSharedMemoryAllocateComplete

NDIS Scatter/Gather DMA-

NDIS_OBJECT_HEADER

NdisMAllocateNetBufferSGList

NdisMAllocateSharedMemoryAsyncEx NdisMDeregisterScatterGatherDma

NdisMRegisterMiniportDriver-

NdisMSetMiniportAttributes