NET_DMA_DESCRIPTOR-Struktur (netdma.h)

Hinweis Die NetDMA-Schnittstelle wird in Windows 8 und höher nicht unterstützt.
 
Die NET_DMA_DESCRIPTOR-Struktur gibt die DMA-Übertragungsinformationen für jeden Eintrag in einer verknüpften Liste von DMA-Deskriptoren an.

Syntax

typedef struct _NET_DMA_DESCRIPTOR {
  union {
    ULONG TransferSize;
    struct {
      ULONG DCAContext : 32;
    } DCAContext32;
    struct {
      ULONG DCAContext : 16;
      ULONG Reserved : 16;
    } DCAContext16;
    struct {
      ULONG DCAContext : 8;
      ULONG Reserved : 24;
    } DCAContext8;
  };
  ULONG            ControlFlags;
  PHYSICAL_ADDRESS SourceAddress;
  PHYSICAL_ADDRESS DestinationAddress;
  PHYSICAL_ADDRESS NextDescriptor;
  union {
    ULONG64          Reserved1;
    PHYSICAL_ADDRESS NextSourceAddress;
  };
  union {
    ULONG64          Reserved2;
    PHYSICAL_ADDRESS NextDestinationAddress;
  };
  ULONG64          UserContext1;
  ULONG64          UserContext2;
} NET_DMA_DESCRIPTOR, *PNET_DMA_DESCRIPTOR;

Member

TransferSize

Die Größe des Speicherblocks in Bytes, der diesem DMA-Deskriptor zugeordnet ist.

NetDMA 2.0 und höher verwenden die DCAContext32-, DCAContext16- und DCAContext8-Member der Union mit TransferSize zur Unterstützung des direkten Cachezugriffs (DCA).

DCAContext32

Ein 32-Bit-DCA-Kontext.

DCAContext32.DCAContext

Ein DCA-Kontext.

DCAContext16

Ein 16-Bit-DCA-Kontext.

DCAContext16.DCAContext

Ein DCA-Kontext.

DCAContext16.Reserved

Reservierte Bits.

DCAContext8

Ein 8-Bit-DCA-Kontext.

DCAContext8.DCAContext

Ein DCA-Kontext.

DCAContext8.Reserved

Reservierte Bits.

ControlFlags

Ein Satz von Flags, die die Vorgänge angeben, die die DMA-Engine für diesen DMA-Deskriptor ausführen soll. Dieser Member muss einen oder mehrere der folgenden Werte enthalten (in Kombination mit einer bitweisen OR-Operation):

Sofern nicht anders angegeben, gelten Beschreibungen für den Zeitpunkt, an dem das Bit festgelegt ist. Bedeutung
NET_DMA_SOURCE_PAGE_BREAK
Ein Anbieter von NetDMA, Version 2.0 oder höher, startet die Kopie von der physischen Quelladresse, die im SourceAddress-Member angegeben ist, und wenn er das Ende der ersten Seite erreicht, setzt er die Kopie von der physischen Adresse fort, die im NextSourceAddress-Element angegeben ist.
NET_DMA_DESTINATION_PAGE_BREAK
Ein Anbieter der NetDMA-Version 2.0 oder höher startet die Kopie auf die physische Zieladresse, die im DestinationAddress-Member angegeben ist, und wenn er das Ende der ersten Seite erreicht, setzt er die Kopie an die physische Adresse fort, die im NextDestinationAddress-Element angegeben ist.
NET_DMA_OP_TYPE_CONTEXT_CHANGE
Die DMA-Engine sollte den Deskriptor als Kontextänderungsdeskriptor identifizieren.

Die NetDMA-Schnittstelle übermittelt einen Kontextänderungsdeskriptor an DCA-fähige NetDMA-Anbieter, um den DCA-Zielprozessor der Zieldaten für alle DMA-Übertragungen in einem NetDMA-Kanal festzulegen. Die NetDMA-Schnittstelle verwendet den DCAContext8-Member in einem Kontextänderungsdeskriptor, um den APIC-Bezeichner (Advanced Programmable Interrupt Controller) des Zielprozessors für den Kanal anzugeben.

Ein DCA-fähiger NetDMA-Anbieter muss die DCA-Affinität eines DMA-Kanals mit einem Prozessor beibehalten, solange er keinen neuen Kontextänderungsdeskriptor erhalten hat.

Die NetDMA-Schnittstelle übermittelt einmal nach der Zuordnung des Kanals und erneut einen Kontextänderungsdeskriptor, wenn NetDMA erkennt, dass der DMA-Anbieter den Hardwarekontext möglicherweise verloren hat (z. B. nach einem Vorgang zum Anhalten und Fortsetzen).

NET_DMA_DESTINATION_DCA_ENABLE
Wenn der DMA-Vorgangstyp eine DMA-Standardübertragung ist, sollte die DMA-Engine einen DCA-Hinweis für die Zieldaten an den DCA-Zielprozessor senden, der dem DMA-Kanal zugewiesen wurde.

Um den DCA-Zielprozessor eines DMA-Kanals festzulegen, hat die NetDMA-Schnittstelle zuvor einen Kontextänderungsdeskriptor an diesen Kanal übermittelt.

NET_DMA_INTERRUPT_ON_COMPLETION
Die DMA-Engine sollte einen Interrupt für den zugeordneten DMA-Kanal generieren, nachdem sie diesen DMA-Deskriptor verarbeitet hat.

Wenn dieses Bit gelöscht wird, generiert die DMA-Engine keinen Interrupt.

NET_DMA_SOURCE_NO_SNOOP
Die Quelladresse sollte nicht snooped werden.

Wenn dieses Bit gelöscht wird, befindet sich die Quelladresse im zusammenhängenden Speicherplatz, und jede CPU-Cachezeile muss abgesunken werden. Der DMA-Client muss überprüfen, ob das Snooping von CPU-Caches für einen ordnungsgemäßen DMA-Vorgang nicht erforderlich ist.

NET_DMA_DESTINATION_NO_SNOOP
Die Zieladresse sollte nicht abgesunken werden.

Wenn dieses Bit gelöscht wird, befindet sich die Zieladresse im zusammenhängenden Speicherplatz, und jede CPU-Cachezeile muss abgesunken werden. Der DMA-Client muss überprüfen, ob das Snooping von CPU-Caches für einen ordnungsgemäßen DMA-Vorgang nicht erforderlich ist.

NET_DMA_STATUS_UPDATE_ON_COMPLETION
Die Member CompletionVirtualAddress und CompletionPhysicalAddress im NET_DMA_CHANNEL_PARAMETERS Struktur verweisen auf einen Abschluss status Wert. Die DMA-Engine aktualisiert den Abschluss status Werts, wenn die Verarbeitung dieses Deskriptors abgeschlossen ist.

Der Abschluss status Werts ist eine 64-Bit-breite Kombination aus der physischen Adresse des letzten DMA-Deskriptors, den die DMA-Engine verarbeitet hat, und zusätzlichen status Informationen.

Wenn dieses Bit gelöscht wird, verwendet die DMA-Engine weder CompletionVirtualAddress noch CompletionPhysicalAddress.

NET_DMA_SERIALIZE_TRANSFER
Die DMA-Engine garantiert, dass alle Schreibvorgänge für diesen Deskriptor, einschließlich der Daten und der Vervollständigung status, abgeschlossen sind, bevor die Daten für den nächsten Deskriptor gelesen werden.

Wenn dieses Bit gelöscht wird, kann die DMA-Engine mit der Verarbeitung des nächsten Deskriptors beginnen, bevor die Verarbeitung dieses Deskriptors abgeschlossen ist.

NET_DMA_NULL_TRANSFER
Für diesen Deskriptor ist keine DMA-Übertragung erforderlich. Die DMA-Engine ist nicht erforderlich, um die Elemente TransferSize, SourceAddress oder DestinationAddress zu überprüfen.

Wenn dieses Bit gelöscht wird, ist möglicherweise eine DMA-Übertragung erforderlich, oder es kann sich um eine Übertragung der Länge Null handelt. Die DMA-Engine muss die Elemente TransferSize, SourceAddress oder DestinationAddress überprüfen.

Hinweis Wenn dieses Bit festgelegt oder gelöscht wird, muss der NetDMA-Client immer sicherstellen, dass der Deskriptor gültige Übertragungsparameter definiert.
 
 

Die folgenden Bitmasken identifizieren die verbleibenden Bits im ControlFlags-Element :

Wert Bedeutung
NET_DMA_OP_TYPE_MASK
Eine Bitmaske, die Bits angibt, die für einen DMA-Vorgangstyp reserviert sind. Die NetDMA-Schnittstelle legt diese Bits auf 0 (null) fest.
NET_DMA_RESERVED_MASK
Eine Bitmaske, die Bits angibt, die für zukünftige Anwendungen reserviert sind. Die NetDMA-Schnittstelle legt diese Bits auf 0 (null) fest.

SourceAddress

Die physische Adresse eines Speicherblocks, der eine Quelle für die DMA-Übertragung ist.

DestinationAddress

Die physische Adresse eines Speicherblocks, der ein Ziel für die DMA-Übertragung ist.

NextDescriptor

Die physische Adresse der nächsten NET_DMA_DESCRIPTOR-Struktur in der verknüpften Liste der Deskriptoren. Wenn dieser Deskriptor der letzte Deskriptor in der Liste ist, ist NextDescriptorNULL.

Reserved1

Ein ULONG64 Wert, der für die zu verwendende DMA-Engine oder den DMA-Anbietertreiber reserviert ist. Anbietertreiber von NetDMA 2.0 und höher verwenden das NextSourceAddress-Element der Union mit Reserved1 , um Seitenwechsel für Quelle und Ziel zu unterstützen.

NextSourceAddress

Die physische Adresse der zweiten Seite der Quelladresse, die im Quellseitenwechsel verwendet wird.

Reserved2

Ein ULONG64 Wert, der für die Verwendung der zu verwendenden DMA-Engine oder des DMA-Anbietertreibers reserviert ist. Anbietertreiber von NetDMA 2.0 und höher verwenden das NextDestinationAddress-Mitglied der Union mit Reserved2 , um Seitenwechsel für Quelle und Ziel zu unterstützen.

NextDestinationAddress

Die physische Adresse der zweiten Seite der Zieladresse, die beim Seitenwechsel des Ziels verwendet wird.

UserContext1

Ein ULONG64 Wert, der für die zu verwendende NetDMA-Schnittstelle reserviert ist.

UserContext2

Ein ULONG64 Wert, der für die zu verwendende NetDMA-Schnittstelle reserviert ist.

Hinweise

Die NET_DMA_DESCRIPTOR-Struktur gibt die Quell-, Ziel- und Steuerungsinformationen für eine einzelne DMA-Übertragung in einer verknüpften Liste von DMA-Deskriptoren an.

Um eine DMA-Übertragung zu starten, stellt die NetDMA-Schnittstelle die physische Adresse einer NET_DMA_DESCRIPTOR-Struktur am DescriptorPhysicalAddress-Parameter der ProviderStartDma-Funktion des DMA-Anbietertreibers bereit. Der DescriptorVirtualAddress-Parameter enthält die virtuelle Adresse des Deskriptors.

Das NextDescriptor-Element einer NET_DMA_DESCRIPTOR-Struktur enthält die physische Adresse der nächsten NET_DMA_DESCRIPTOR-Struktur in der verknüpften Liste der Deskriptoren.

Die NetDMA-Schnittstelle ruft die ProviderAppendDma-Funktion eines DMA-Anbietertreibers auf, um eine verknüpfte Liste von DMA-Deskriptoren nach dem letzten Deskriptor in einem DMA-Kanal anzufügen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt für NetDMA 2.0-Treiber in Windows Server 2008. (Die Member NextSourceAddress, NextDestinationAddress, DCAContext32, DCAContext16 und DCAContext8 wurden hinzugefügt.) Unterstützt für NetDMA 1.1-Treiber in Windows Server 2008. Unterstützt für NetDMA 1.0-Treiber in Windows Server 2008 und Windows Vista.
Kopfzeile netdma.h (netdma.h einschließen)

Weitere Informationen

NET_DMA_CHANNEL_PARAMETERS

ProviderAppendDma

ProviderStartDma