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é.

Note Le membre status doit être initialisé pour STATUS_SUCCESS avant que la demande de REQUEST_ISOCH_ATTACH_BUFFERS soit effectuée.

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

GET_LOCAL_HOST_INFO2

REQUEST_ISOCH_ALLOCATE_RESOURCES

REQUEST_ISOCH_ATTACH_BUFFERS

REQUEST_ISOCH_DETACH_BUFFERS

REQUEST_ISOCH_LISTEN

REQUEST_ISOCH_TALK