ISOCH_DESCRIPTOR structure (1394.h)
La structure ISOCH_DESCRIPTOR décrit une mémoire tampon à attacher ou à détailler à partir d’un handle de ressource, à l’aide des requêtes REQUEST_ISOCH_ATTACH_BUFFERS et REQUEST_ISOCH_DETACH_BUFFERS .
Syntaxe
typedef struct _ISOCH_DESCRIPTOR {
ULONG fulFlags;
PMDL Mdl;
ULONG ulLength;
ULONG nMaxBytesPerFrame;
ULONG ulSynch;
ULONG ulTag;
CYCLE_TIME CycleTime;
PBUS_ISOCH_DESCRIPTOR_ROUTINE Callback;
PVOID Context1;
PVOID Context2;
NTSTATUS status;
ULONG_PTR DeviceReserved[8];
ULONG_PTR BusReserved[8];
ULONG_PTR PortReserved[16];
} ISOCH_DESCRIPTOR, *PISOCH_DESCRIPTOR;
Membres
fulFlags
Spécifie différents indicateurs pour ce descripteur isochroque. Chaque mémoire tampon attachée sur le canal a un descripteur isoch associé.
Avant d’utiliser une mémoire tampon particulière pour une opération d’E/S, le contrôleur hôte examine les indicateurs dans le descripteur isoch de la mémoire tampon pour obtenir des instructions sur la façon de gérer les données. Dans certains cas, le contrôleur hôte continue d’observer le comportement spécifié par ces indicateurs pendant les opérations d’E/S avec les mémoires tampons suivantes. Par instance, si les indicateurs de descripteur d’isoch indiquent que le contrôleur hôte doit filtrer les paquets qui n’ont pas une certaine valeur Sy enregistrée dans ulSynch, le contrôleur hôte poursuit cette opération de filtrage avec les données dans les mémoires tampons qui suivent, même si les descripteurs d’isoch associés à ces mémoires tampons n’ont pas les mêmes indicateurs définis.
Le tableau suivant décrit les indicateurs qui peuvent être affectés à ce membre.
Indicateur | Isochronous Transaction | Description |
---|---|---|
DESCRIPTOR_SYNCH_ON_SY | Écouter | À compter des données dans la mémoire tampon actuelle, le contrôleur hôte ignore tous les paquets qui ne contiennent pas une valeur Sy particulière incorporée dans le paquet isochronous. La valeur Sy est spécifiée dans ulSynch. Si l’indicateur DESCRIPTOR_USE_SY_TAG_IN_FIRST est défini, le contrôleur hôte reprend la lecture de tous les paquets après avoir rencontré le premier paquet avec la valeur Sy spécifiée dans ulSynch. Si l’indicateur de DESCRIPTOR_USE_SY_TAG_IN_FIRST n’est pas défini, le contrôleur hôte continue de filtrer, de lire les paquets avec la valeur Sy indiquée et d’ignorer tous les autres. |
DESCRIPTOR_SYNCH_ON_TAG | Écouter | À compter des données dans la mémoire tampon actuelle, le contrôleur hôte ignore tous les paquets qui ne contiennent pas une valeur de balise particulière incorporée dans le paquet isochronous. La valeur de balise est spécifiée dans ulTag. Si l’indicateur DESCRIPTOR_USE_SY_TAG_IN_FIRST est défini, le contrôleur hôte reprend la lecture de tous les paquets après avoir rencontré le premier paquet avec la valeur de balise spécifiée dans ulTag. Si l’indicateur DESCRIPTOR_USE_SY_TAG_IN_FIRST n’est pas défini, le contrôleur hôte continue de filtrer, de lire les paquets avec la valeur de balise indiquée et d’ignorer tous les autres. |
DESCRIPTOR_SYNCH_ON_TIME | Écouter, Parler | Le contrôleur hôte attend une durée de cycle isochroneuse particulière avant de poursuivre l’opération. La durée de cycle est spécifiée dans le membre CycleTime . À compter des données de la mémoire tampon actuelle, le contrôleur hôte ignore tous les paquets qui ne contiennent pas une durée de cycle de CycleTime. Après avoir trouvé un paquet avec le temps de cycle indiqué, le contrôleur hôte reprend le traitement de tous les paquets. |
DESCRIPTOR_USE_SY_TAG_IN_FIRST | Écouter | Le filtrage sur les membres Sy ou Tag se produit uniquement jusqu’à ce que le premier paquet correspondant soit reçu. Cet indicateur est utilisé conjointement avec les indicateurs DESCRIPTOR_SYNCH_ON_SY et DESCRIPTOR_SYNCH_ON_TAG. Ces deux indicateurs lancent une opération de filtrage basée sur les valeurs dans Sy ou Tag, sauf si DESCRIPTOR_USE_SY_TAG_IN_FIRST est également défini, auquel cas ces indicateurs lancent une synchronisation plutôt qu’une opération de filtrage. Dans cette opération de synchronisation, le contrôleur hôte ignore tous les paquets jusqu’à la découverte d’un paquet avec la valeur Sy ou Tag appropriée. Après avoir découvert un paquet avec la valeur Sy ou Tag indiquée, le contrôleur hôte reprend le traitement de tous les paquets. |
DESCRIPTOR_TIME_STAMP_ON_COMPLETION | Écouter, Parler | Une fois que le contrôleur hôte a terminé son DMA vers ou depuis cette mémoire tampon, stockez le temps de cycle dans le membre CycleTime du ISOCH_DESCRIPTOR. |
DESCRIPTOR_PRIORITY_TIME_DELIVERY | Parler | Si le contrôleur hôte local n’est pas prêt pour une écriture, ne réessayez pas d’écrire ultérieurement. (Le comportement par défaut consiste à réessayer jusqu’à ce que le contrôleur hôte soit prêt.) |
DESCRIPTOR_HEADER_SCATTER_GATHER | Parler | Le contrôleur hôte traite les données de cette mémoire tampon comme une séquence d’en-têtes. Le contrôleur hôte ajoute un en-tête de cette mémoire tampon à chaque paquet qu’il assemble à partir des données dans la mémoire tampon suivante attachée. |
Mdl
Spécifie la mdl représentant une mémoire tampon dans laquelle les données sont ou seront contenues.
ulLength
Spécifie la longueur du Mdl.
nMaxBytesPerFrame
Spécifie le nombre maximal d’octets contenus dans chaque frame isochronous. Lors des écritures, les données de la mémoire tampon sont divisées en paquets isochrone de cette taille.
ulSynch
Pour les requêtes IsochTalk, si l’indicateur DESCRIPTOR_SYNCH_ON_SY est défini, ce membre spécifie le champ Sy du paquet sortant. Pour les demandes de REQUEST_ISOCH_LISTEN, si l’indicateur DESCRIPTOR_SYNCH_ON_SY est défini, ce membre spécifie la valeur que le contrôleur hôte doit mettre en correspondance avec le champ Sy dans les en-têtes de paquets isochroneuses.
ulTag
Pour les demandes IsochTalk, ce membre spécifie le champ Balise du paquet sortant. Pour les demandes de REQUEST_ISOCH_LISTEN, si l’indicateur DESCRIPTOR_SYNCH_ON_TAG est défini, ce membre spécifie la valeur que le contrôleur hôte doit mettre en correspondance avec le champ Balise dans les en-têtes de paquets isochroneuses.
CycleTime
Si l’indicateur DESCRIPTOR_SYNCH_ON_TIME est défini, ce membre spécifie la durée de cycle isochroneuse sur laquelle se synchroniser. (La résolution de minutage est par cycle isochroque. Le membre CycleOffset du temps de cycle n’est pas utilisé.) Si l’indicateur DESCRIPTOR_TIME_STAMP_ON_COMPLETION est défini, le pilote de bus remplit ce membre avec la durée de cycle isochroneuse à la fin de l’opération qui a utilisé cette mémoire tampon.
Callback
Pointeur vers une routine de rappel. Si la valeur n’est pas NULL, le pilote de bus appelle cette routine pour indiquer que les mémoires tampons attachées associées sont prêtes à être détachées. Le rappel s’exécute au DISPATCH_LEVEL IRQL. Le rappel est du type suivant :
void Callback(IN PVOID Context1, IN PVOID Context2);
Context1
Spécifie le premier paramètre lorsque le pilote de bus appelle la routine passée dans Callback.
Context2
Spécifie le deuxième paramètre lorsque le pilote de bus appelle la routine passée dans Rappel.
status
Pour REQUEST_ISOCH_ATTACH_BUFFERS demandes, ce membre spécifie le status de l’opération d’attachement sur cette mémoire tampon. Si une erreur se produit pendant le traitement de la demande de REQUEST_ISOCH_ATTACH_BUFFERS, le pilote de bus renseigne le membre status avec un code d’erreur approprié.
DeviceReserved[8]
Réservé.
BusReserved[8]
Réservé.
PortReserved[16]
Réservé.
Remarques
Tous les indicateurs DESCRIPTOR_XXX ne sont pas pris en charge sur l’ensemble du matériel. Le pilote de périphérique peut utiliser la requête REQUEST_GET_LOCAL_HOST_INFO, avec nLevel = GET_HOST_CAPABILITIES, pour déterminer les indicateurs de DESCRIPTOR_XXX pris en charge. Le pilote de bus retourne un pointeur vers une structure GET_LOCAL_HOST_INFO2, dont le membre HostCapabilities contient des indicateurs qui déterminent les indicateurs pris en charge par le contrôleur hôte. Le tableau suivant répertorie les indicateurs de DESCRIPTOR_XXX nécessitant une prise en charge matérielle, et l’indicateur HostCapabilities correspondant que le pilote doit case activée.
DESCRIPTOR_XXX indicateurs | HostCapabilities |
---|---|
DESCRIPTOR_SYNCH_ON_TIME | HOST_INFO_SUPPORTS_START_ON_CYCLE |
DESCRIPTOR_HEADER_SCATTER_GATHER | HOST_INFO_SUPPORTS_ISO_HDR_INSERTION |
Si le pilote définit l’indicateur DESCRIPTOR_HEADER_SCATTER_GATHER, le contrôleur hôte combine les données de la mémoire tampon spécifiée dans Mdl avec les données de la mémoire tampon suivante attachée. (Les mémoires tampons suivantes ne sont pas affectées.) Chaque image de la mémoire tampon est ajoutée à une trame de la mémoire tampon suivante (dans l’ordre dans lequel les données de la mémoire tampon sont fractionnées en trames) et envoyées en tant que données du paquet isochrone suivant. Le nombre d’images de chaque mémoire tampon doit correspondre, ou le pilote de bus retourne STATUS_INVALID_PARAMETER pour la demande de REQUEST_ISOCH_ATTACH_BUFFER suivante.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | 1394.h (inclure 1394.h) |
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour