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;
Membri
TransferSize
Dimensioni, in byte, del blocco di memoria associato a questo descrittore DMA.
I driver del provider NetDMA 2.0 e versioni successive usano DCAContext32, DCAContext16e DCAContext8 membri dell'unione con TransferSize per supportare DCA (Direct Cache Access).
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 il bit è impostato. | 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 modifica del contesto descrittore.
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) 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 un'operazione di sospensione e 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 in precedenza ha inviato 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 interrupt. |
|
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 snooped. 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 snooped. Il client DMA deve verificare che lo snooping delle cache della CPU non sia necessario per un'operazione DMA appropriata. |
|
Membri CompletionVirtualAddress e CompletionPhysicalAd dress in
NET_DMA_CHANNEL_PARAMETERS struttura fanno riferimento a un valore di stato di completamento. Il motore DMA aggiorna il valore dello stato di completamento al termine dell'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, SourceAddresso DestinationAddress.
Quando questo bit viene cancellato, potrebbe essere necessario un trasferimento DMA o un trasferimento di lunghezza zero. Il motore DMA deve controllare i membri TransferSize, SourceAddresso 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 'interruzione di pagina di origine e 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 '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.
Osservazioni
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 di NET_DMA_DESCRIPTOR nella DescriptorPhysicalAddress parametro del driver del provider DMA ProviderStartDma. Il parametro DescriptorVirtualAddress contiene l'indirizzo virtuale del descrittore.
Il NextDescriptor membro 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 la funzione di ProviderAppendDma di un driver del provider DMA per aggiungere un elenco collegato di descrittori DMA dopo l'ultimo descrittore in un canale DMA.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Supportato per i driver NetDMA 2.0 in Windows Server 2008. Aggiunti 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) |