struttura NET_DMA_DESCRIPTOR (netdma.h)
Sintassi
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;
Members
TransferSize
Dimensioni, in byte, del blocco di memoria associato al descrittore DMA.
I driver di provider NetDMA 2.0 e versioni successive usano i membri DCAContext32, DCAContext16 e DCAContext8 dell'unione con TransferSize per supportare Direct Cache Access (DCA).
DCAContext32
Contesto DCA a 32 bit.
DCAContext32.DCAContext
Contesto DCA.
DCAContext16
Contesto DCA a 16 bit.
DCAContext16.DCAContext
Contesto DCA.
DCAContext16.Reserved
Bit riservati.
DCAContext8
Contesto DCA a 8 bit.
DCAContext8.DCAContext
Contesto DCA.
DCAContext8.Reserved
Bit riservati.
ControlFlags
Set di flag che specificano le operazioni che il motore DMA deve eseguire per questo descrittore DMA. Questo membro deve contenere uno o più dei valori seguenti (combinati con un'operazione OR bit per bit):
Se non diversamente specificato, le descrizioni si applicano a quando è impostato il bit. | Significato |
---|---|
|
Un provider NetDMA versione 2.0 o successiva avvia la copia dall'indirizzo fisico di origine specificato nel membro SourceAddress e quando raggiunge la fine della prima pagina, continua la copia dall'indirizzo fisico specificato nel membro NextSourceAddress . |
|
Un provider NetDMA versione 2.0 o successiva avvia la copia nell'indirizzo fisico di destinazione specificato nel membro DestinationAddress e quando raggiunge la fine della prima pagina, continua la copia nell'indirizzo fisico specificato nel membro NextDestinationAddress . |
|
Il motore DMA deve identificare il descrittore come descrittore di modifica del contesto .
L'interfaccia NetDMA invia un descrittore di modifica del contesto ai provider NetDMA che supportano DCA per impostare il processore di destinazione DCA dei dati di destinazione per tutti i trasferimenti DMA in un canale NetDMA. L'interfaccia NetDMA usa il membro DCAContext8 in un descrittore di modifica del contesto per specificare l'identificatore APIC (Programmable Interrupt Controller) avanzato a 8 bit del processore di destinazione per il canale. Un provider NetDMA con supporto per DCA deve mantenere l'affinità DCA di un canale DMA con un processore purché non abbia ricevuto un nuovo descrittore di modifica del contesto. L'interfaccia NetDMA invia un descrittore di modifica del contesto una volta dopo che il canale è stato allocato e di nuovo quando NetDMA rileva che il provider DMA potrebbe aver perso il contesto hardware, ad esempio dopo una sospensione e un'operazione di ripresa. |
|
Se il tipo di operazione DMA è un trasferimento DMA standard, il motore DMA deve inviare un hint DCA per i dati di destinazione al processore di destinazione DCA assegnato al canale DMA.
Per impostare il processore di destinazione DCA di un canale DMA, l'interfaccia NetDMA ha inviato in precedenza un descrittore di modifica del contesto a tale canale. |
|
Il motore DMA deve generare un interrupt per il canale DMA associato dopo l'elaborazione del descrittore DMA.
Quando questo bit viene cancellato, il motore DMA non genera un'interruzione. |
|
L'indirizzo di origine non deve essere sospeso.
Quando questo bit viene cancellato, l'indirizzo di origine si trova in uno spazio di memoria coerente e ogni riga della cache della CPU deve essere sospesa. Il client DMA deve verificare che lo snooping delle cache della CPU non sia necessario per un'operazione DMA appropriata. |
|
L'indirizzo di destinazione non deve essere sospeso.
Quando questo bit viene cancellato, l'indirizzo di destinazione si trova in uno spazio di memoria coerente e ogni riga della cache della CPU deve essere sospesa. Il client DMA deve verificare che lo snooping delle cache della CPU non sia necessario per un'operazione DMA appropriata. |
|
Membri CompletionVirtualAddress e CompletionPhysicalAddress nell'oggetto NET_DMA_CHANNEL_PARAMETERS struttura fa riferimento a un valore di stato di completamento. Il motore DMA aggiorna il valore di stato di completamento quando completa l'elaborazione di questo descrittore.
Il valore dello stato di completamento è una combinazione a 64 bit dell'indirizzo fisico del descrittore DMA più recente elaborato dal motore DMA e informazioni aggiuntive sullo stato. Quando questo bit viene cancellato, il motore DMA non usa CompletionVirtualAddress o CompletionPhysicalAddress. |
|
Il motore DMA garantisce che tutte le scritture per questo descrittore, inclusi i dati e lo stato di completamento, vengano completate prima di leggere i dati per il descrittore successivo.
Quando questo bit viene cancellato, il motore DMA può avviare l'elaborazione del descrittore successivo prima di completare l'elaborazione di questo descrittore. |
|
Un trasferimento DMA non è necessario per questo descrittore. Il motore DMA non è necessario per controllare i membri TransferSize, SourceAddress o DestinationAddress .
Quando questo bit viene cancellato, potrebbe essere necessario un trasferimento DMA o potrebbe trattarsi di un trasferimento di lunghezza zero. Il motore DMA deve controllare i membri TransferSize, SourceAddress o DestinationAddress . Nota Se questo bit è impostato o cancellato, il client NetDMA deve sempre assicurarsi che il descrittore definisca parametri di trasferimento validi.
|
Le maschera di bit seguenti identificano i bit rimanenti nel membro ControlFlags :
SourceAddress
Indirizzo fisico di un blocco di memoria che rappresenta un'origine per il trasferimento DMA.
DestinationAddress
Indirizzo fisico di un blocco di memoria che rappresenta una destinazione per il trasferimento DMA.
NextDescriptor
Indirizzo fisico della struttura NET_DMA_DESCRIPTOR successiva nell'elenco collegato di descrittori. Se questo descrittore è l'ultimo descrittore nell'elenco, NextDescriptor è NULL.
Reserved1
Valore ULONG64 riservato al motore DMA o al driver del provider DMA da usare. I driver del provider NetDMA 2.0 e versioni successive usano il membro NextSourceAddress dell'unione con Reserved1 per supportare l'interruzione di pagina di origine e di destinazione.
NextSourceAddress
Indirizzo fisico della seconda pagina dell'indirizzo di origine utilizzato nell'interruzione di pagina di origine.
Reserved2
Valore ULONG64 riservato per l'uso del motore DMA o del driver del provider DMA da usare. I driver del provider NetDMA 2.0 e versioni successive usano il membro NextDestinationAddress dell'unione con Reserved2 per supportare l'interruzione di pagina di origine e di destinazione.
NextDestinationAddress
Indirizzo fisico della seconda pagina dell'indirizzo di destinazione utilizzato nell'interruzione di pagina di destinazione.
UserContext1
Valore ULONG64 riservato all'interfaccia NetDMA da usare.
UserContext2
Valore ULONG64 riservato all'interfaccia NetDMA da usare.
Commenti
La struttura NET_DMA_DESCRIPTOR specifica le informazioni di origine, destinazione e controllo per un singolo trasferimento DMA in un elenco collegato di descrittori DMA.
Per avviare un trasferimento DMA, l'interfaccia NetDMA fornisce l'indirizzo fisico di una struttura NET_DMA_DESCRIPTOR nel parametro DescriptorPhysicalAddress della funzione ProviderStartDma del driver del provider DMA. Il parametro DescriptorVirtualAddress contiene l'indirizzo virtuale del descrittore.
Il membro NextDescriptor di una struttura NET_DMA_DESCRIPTOR contiene l'indirizzo fisico della struttura NET_DMA_DESCRIPTOR successiva nell'elenco collegato di descrittori.
L'interfaccia NetDMA chiama una funzione ProviderAppendDma del driver del provider DMA per aggiungere un elenco collegato di descrittori DMA dopo l'ultimo descrittore in un canale DMA.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Supportato per i driver NetDMA 2.0 in Windows Server 2008. Aggiunta dei membri NextSourceAddress, NextDestinationAddress, DCAContext32, DCAContext16 e DCAContext8. Supportato per i driver NetDMA 1.1 in Windows Server 2008. Supportato per i driver NetDMA 1.0 in Windows Server 2008 e Windows Vista. |
Intestazione | netdma.h (include Netdma.h) |