Condividi tramite


struttura NET_DMA_DESCRIPTOR (netdma.h)

Nota L'interfaccia NetDMA non è supportata in Windows 8 e versioni successive.
 
La struttura NET_DMA_DESCRIPTOR specifica le informazioni di trasferimento DMA per ogni voce in un elenco collegato di descrittori DMA.

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
NET_DMA_SOURCE_PAGE_BREAK
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 .
NET_DMA_DESTINATION_PAGE_BREAK
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 .
NET_DMA_OP_TYPE_CONTEXT_CHANGE
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.

NET_DMA_DESTINATION_DCA_ENABLE
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.

NET_DMA_INTERRUPT_ON_COMPLETION
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.

NET_DMA_SOURCE_NO_SNOOP
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.

NET_DMA_DESTINATION_NO_SNOOP
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.

NET_DMA_STATUS_UPDATE_ON_COMPLETION
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.

NET_DMA_SERIALIZE_TRANSFER
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.

NET_DMA_NULL_TRANSFER
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 :

Valore Significato
NET_DMA_OP_TYPE_MASK
Maschera di bit che specifica i bit riservati per un tipo di operazione DMA. L'interfaccia NetDMA imposta questi bit su zero.
NET_DMA_RESERVED_MASK
Maschera di bit che specifica i bit riservati alle applicazioni future. L'interfaccia NetDMA imposta questi bit su zero.

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)

Vedi anche

NET_DMA_CHANNEL_PARAMETERS

ProviderAppendDma

ProviderStartDma