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 l’état de la requête, qui peut être l’une des suivantes :
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 pour 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 ou parce que la longueur donnée n’est pas valide.
_H
Handle DMA retourné par la fonction NdisMRegisterDmaChannel lors de 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 au démarrage du transfert. Zéro indique que le transfert doit commencer à l’octet initial de la plage spécifiée à 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 à 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
Aucun
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 pour héberger la mémoire.
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 une taille de transfert adaptée aux 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 est FALSE. Sinon, le descripteur de mémoire tampon à tampon a été chaîné à une entrée de descripteur de paquets au pilote miniport MiniportSendNetBufferLists fonction.
Pour améliorer les performances des petites demandes de transmission, telles qu’une demande d’envoi de moins de 256 octets de longueur, un pilote miniport peut copier les données de paquets dans une mémoire tampon intermédiaire interne et transmettre un mappage de descripteur de mémoire tampon alloué par le pilote à NdisMSetupDmaTransfer.
Lors du 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.