NET_DMA_DESCRIPTOR-Struktur (netdma.h)
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 |
---|---|
|
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. |
|
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. |
|
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). |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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 :
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) |