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