Partager via


Macro NdisMSetupDmaTransfer (ndis.h)

La fonction NdisMSetupDmaTransfer configure le contrôleur DMA hôte pour un transfert DMA.

Syntaxe

void NdisMSetupDmaTransfer(
   _S,
   _H,
   _B,
   _O,
   _L,
   _M_
);

Paramètres

_S

Pointeur vers une variable fournie par l’appelant dans laquelle cette fonction retourne le status de la requête, qui peut être l’un des éléments suivants :

NDIS_STATUS_SUCCESS

Le contrôleur DMA a été configuré pour transférer les données spécifiées, qui ont été vidées vers ou depuis l’appareil afin de maintenir l’intégrité des données.

NDIS_STATUS_RESOURCES

Une tentative de configuration du contrôleur DMA pour le transfert a échoué, soit parce que le canal désigné par MiniportDmaHandle est actuellement en cours d’utilisation pour transférer des données, soit parce que la longueur donnée n’est pas valide.

_H

Handle DMA retourné par la fonction NdisMRegisterDmaChannel pendant l’initialisation.

_B

Pointeur vers le descripteur de mémoire tampon mappant la plage de mémoire hôte à partir de laquelle ou vers laquelle les données seront transférées.

_O

Décalage d’octet dans la mémoire tampon mappée à laquelle le transfert doit commencer. Zéro indique que le transfert doit commencer à l’octet initial de la plage spécifiée dans Tampon .

_L

Nombre d’octets de données à transférer. La plage spécifiée par Offset et Length doit être une sous-plage appropriée de celle spécifiée dans Tampon .

_M_

Valeur booléenne true pour un transfert sortant à partir du système via la carte réseau. Sinon, il est FALSE.

Valeur de retour

None

Remarques

Les pilotes des cartes réseau DMA subordonnées appellent NdisMSetupDmaTransfer en réponse aux demandes d’envoi entrantes, pour lesquelles le pilote définit WriteToDevice sur TRUE. Ils définissent WriteToDevice sur FALSE lorsqu’ils transfèrent les données reçues de la carte réseau vers la mémoire hôte.

L’appelant de NdisMSetupDmaTransfer fournit un descripteur de mémoire tampon mappant la plage de mémoire hôte qui est la cible du transfert ou qui contient des données pour une opération de téléchargement de l’hôte vers la carte réseau. Pour spécifier un transfert dimensionné en fonction des contraintes DMA de la carte réseau, l’appelant peut configurer une sous-plage à transférer avec les paramètres Offset et Length si nécessaire.

L’appelant doit fournir un descripteur de mémoire tampon qui spécifie la plage d’hôtes dans laquelle les données reçues seront transférées à partir de la carte réseau lorsque WriteToDevice a la valeur FALSE. Sinon, le descripteur de mémoire tampon de la mémoire tampon a été chaîné à une entrée de descripteur de paquets au niveau du pilote miniport Fonction MiniportSendNetBufferLists .

Pour améliorer les performances pour les petites demandes de transmission, telles qu’une demande d’envoi de moins de 256 octets, un pilote miniport peut copier les données de paquet dans une mémoire tampon intermédiaire interne et passer un descripteur de mémoire tampon alloué par le pilote au mappage de cette mémoire tampon à NdisMSetupDmaTransfer.

Au retour de NdisMSetupDmaTransfer, le contrôleur DMA hôte a été programmé pour le transfert. Le pilote miniport programme ensuite la carte réseau pour l’opération de transfert.

Une fois le transfert terminé, le pilote miniport doit appeler le Fonction NdisMCompleteDmaTransfer .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge pour les pilotes NDIS 6.0 et NDIS 5.1 (voir NdisMSetupDmaTransfer (NDIS 5.1)) dans Windows Vista. Pris en charge pour les pilotes NDIS 5.1 (consultez NdisMSetupDmaTransfer (NDIS 5.1)) dans Windows XP.
Plateforme cible Universal
En-tête ndis.h (inclure Ndis.h)
IRQL <= DISPATCH_LEVEL
Règles de conformité DDI Irql_Miniport_Driver_Function(ndis)

Voir aussi

MiniportSendNetBufferLists

NdisMCompleteDmaTransfer

NdisMRegisterDmaChannel