NET_DMA_DESCRIPTOR structure (netdma.h)

Note L’interface NetDMA n’est pas prise en charge dans Windows 8 et versions ultérieures.
 
La structure NET_DMA_DESCRIPTOR spécifie les informations de transfert DMA pour chaque entrée dans une liste liée de descripteurs DMA.

Syntaxe

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;

Membres

TransferSize

Taille, en octets, du bloc de mémoire associé à ce descripteur DMA.

Les pilotes de fournisseur NetDMA 2.0 et versions ultérieures utilisent les membres DCAContext32, DCAContext16 et DCAContext8 de l’union avec TransferSize pour prendre en charge l’accès direct au cache (DCA).

DCAContext32

Contexte DCA 32 bits.

DCAContext32.DCAContext

Contexte DCA.

DCAContext16

Contexte DCA 16 bits.

DCAContext16.DCAContext

Contexte DCA.

DCAContext16.Reserved

Bits réservés.

DCAContext8

Contexte DCA 8 bits.

DCAContext8.DCAContext

Contexte DCA.

DCAContext8.Reserved

Bits réservés.

ControlFlags

Ensemble d’indicateurs qui spécifient les opérations que le moteur DMA doit effectuer pour ce descripteur DMA. Ce membre doit contenir une ou plusieurs des valeurs suivantes (associées à une opération OR au niveau du bit) :

Sauf indication contraire, les descriptions s’appliquent au moment où le bit est défini. Signification
NET_DMA_SOURCE_PAGE_BREAK
Un fournisseur NetDMA version 2.0 ou ultérieure démarre la copie à partir de l’adresse physique source spécifiée dans le membre SourceAddress et, lorsqu’elle atteint la fin de la première page, elle poursuit la copie à partir de l’adresse physique spécifiée dans le membre NextSourceAddress .
NET_DMA_DESTINATION_PAGE_BREAK
Un fournisseur NetDMA version 2.0 ou ultérieure démarre la copie vers l’adresse physique de destination spécifiée dans le membre DestinationAddress et, lorsqu’elle atteint la fin de la première page, elle poursuit la copie à l’adresse physique spécifiée dans le membre NextDestinationAddress .
NET_DMA_OP_TYPE_CONTEXT_CHANGE
Le moteur DMA doit identifier le descripteur en tant que descripteur de modification de contexte .

L’interface NetDMA envoie un descripteur de modification de contexte aux fournisseurs NetDMA compatibles DCA pour définir le processeur cible DCA des données de destination pour tous les transferts DMA sur un canal NetDMA. L’interface NetDMA utilise le membre DCAContext8 dans un descripteur de changement de contexte pour spécifier l’identificateur APIC (Advanced Programmable Interrupt Controller) 8 bits du processeur cible pour le canal.

Un fournisseur NetDMA compatible DCA doit conserver l’affinité DCA d’un canal DMA avec un processeur tant qu’il n’a pas reçu de nouveau descripteur de modification de contexte.

L’interface NetDMA envoie un descripteur de modification de contexte une fois après l’allocation du canal et à nouveau lorsque NetDMA détecte que le fournisseur DMA a peut-être perdu le contexte matériel (par exemple, après une opération de suspension et de reprise).

NET_DMA_DESTINATION_DCA_ENABLE
Si le type d’opération DMA est un transfert DMA standard, le moteur DMA doit envoyer un indicateur DCA pour les données de destination au processeur cible DCA affecté au canal DMA.

Pour définir le processeur cible DCA d’un canal DMA, l’interface NetDMA a précédemment soumis un descripteur de modification de contexte à ce canal.

NET_DMA_INTERRUPT_ON_COMPLETION
Le moteur DMA doit générer une interruption pour le canal DMA associé après avoir traite ce descripteur DMA.

Lorsque ce bit est effacé, le moteur DMA ne génère pas d’interruption.

NET_DMA_SOURCE_NO_SNOOP
L’adresse source ne doit pas être espionnée.

Lorsque ce bit est effacé, l’adresse source se trouve dans un espace mémoire cohérent, et chaque ligne de cache du processeur doit être espionnée. Le client DMA doit vérifier que l’espionnage des caches de processeur n’est pas nécessaire pour une opération DMA appropriée.

NET_DMA_DESTINATION_NO_SNOOP
L’adresse de destination ne doit pas être espionnée.

Lorsque ce bit est effacé, l’adresse de destination se trouve dans un espace mémoire cohérent et chaque ligne de cache du processeur doit être espionnée. Le client DMA doit vérifier que l’espionnage des caches de processeur n’est pas nécessaire pour une opération DMA appropriée.

NET_DMA_STATUS_UPDATE_ON_COMPLETION
Les membres CompletionVirtualAddress et CompletionPhysicalAddress dans le NET_DMA_CHANNEL_PARAMETERS structure référence une valeur de status d’achèvement. Le moteur DMA met à jour l’achèvement status valeur lorsqu’il termine le traitement de ce descripteur.

La valeur de status d’achèvement est une combinaison de 64 bits de l’adresse physique du descripteur DMA le plus récent traité par le moteur DMA, ainsi que d’informations status supplémentaires.

Lorsque ce bit est effacé, le moteur DMA n’utilise pas CompletionVirtualAddress ou CompletionPhysicalAddress.

NET_DMA_SERIALIZE_TRANSFER
Le moteur DMA garantit que toutes les écritures pour ce descripteur, y compris les données et les status de saisie semi-automatique, sont terminées avant de lire les données du descripteur suivant.

Lorsque ce bit est effacé, le moteur DMA peut commencer à traiter le descripteur suivant avant de terminer le traitement de ce descripteur.

NET_DMA_NULL_TRANSFER
Un transfert DMA n’est pas nécessaire pour ce descripteur. Le moteur DMA n’est pas nécessaire pour case activée les membres TransferSize, SourceAddress ou DestinationAddress.

Lorsque ce bit est effacé, un transfert DMA peut être nécessaire ou il peut s’agir d’un transfert de longueur nulle. Le moteur DMA doit case activée les membres TransferSize, SourceAddress ou DestinationAddress.

Note Si ce bit est défini ou effacé, le client NetDMA doit toujours s’assurer que le descripteur définit des paramètres de transfert valides.
 
 

Les masques de bits suivants identifient les bits restants dans le membre ControlFlags :

Valeur Signification
NET_DMA_OP_TYPE_MASK
Masque de bits qui spécifie les bits réservés à un type d’opération DMA. L’interface NetDMA définit ces bits sur zéro.
NET_DMA_RESERVED_MASK
Masque de bits qui spécifie les bits réservés aux applications futures. L’interface NetDMA définit ces bits sur zéro.

SourceAddress

Adresse physique d’un bloc de mémoire qui est une source pour le transfert DMA.

DestinationAddress

Adresse physique d’un bloc de mémoire qui est une destination pour le transfert DMA.

NextDescriptor

Adresse physique de la structure NET_DMA_DESCRIPTOR suivante dans la liste liée des descripteurs. Si ce descripteur est le dernier descripteur de la liste, NextDescriptor a la valeur NULL.

Reserved1

Valeur ULONG64 réservée au moteur DMA ou au pilote de fournisseur DMA à utiliser. Les pilotes de fournisseur NetDMA 2.0 et ultérieur utilisent le membre NextSourceAddress de l’union avec Reserved1 pour prendre en charge le saut de page source et de destination.

NextSourceAddress

Adresse physique de la deuxième page de l’adresse source utilisée dans le saut de page source.

Reserved2

Valeur ULONG64 réservée à l’utilisation du moteur DMA ou du pilote du fournisseur DMA. Les pilotes de fournisseur NetDMA 2.0 et ultérieur utilisent le membre NextDestinationAddress de l’union avec Reserved2 pour prendre en charge le saut de page source et de destination.

NextDestinationAddress

Adresse physique de la deuxième page de l’adresse de destination utilisée dans le saut de page de destination.

UserContext1

Valeur ULONG64 qui est réservée à l’interface NetDMA à utiliser.

UserContext2

Valeur ULONG64 qui est réservée à l’interface NetDMA à utiliser.

Remarques

La structure NET_DMA_DESCRIPTOR spécifie les informations de source, de destination et de contrôle d’un seul transfert DMA dans une liste liée de descripteurs DMA.

Pour démarrer un transfert DMA, l’interface NetDMA fournit l’adresse physique d’une structure NET_DMA_DESCRIPTOR au niveau du paramètre DescriptorPhysicalAddress de la fonction ProviderStartDma du pilote du fournisseur DMA. Le paramètre DescriptorVirtualAddress contient l’adresse virtuelle du descripteur.

Le membre NextDescriptor d’une structure NET_DMA_DESCRIPTOR contient l’adresse physique de la structure NET_DMA_DESCRIPTOR suivante dans la liste liée des descripteurs.

L’interface NetDMA appelle la fonction ProviderAppendDma d’un pilote de fournisseur DMA pour ajouter une liste liée de descripteurs DMA après le dernier descripteur sur un canal DMA.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge pour les pilotes NetDMA 2.0 dans Windows Server 2008. (Ajout des membres NextSourceAddress, NextDestinationAddress, DCAContext32, DCAContext16 et DCAContext8.) Pris en charge pour les pilotes NetDMA 1.1 dans Windows Server 2008. Pris en charge pour les pilotes NetDMA 1.0 dans Windows Server 2008 et Windows Vista.
En-tête netdma.h (inclure Netdma.h)

Voir aussi

NET_DMA_CHANNEL_PARAMETERS

ProviderAppendDma

ProviderStartDma