Partager via


énumération SPB_REQUEST_SEQUENCE_POSITION (spbcx.h)

L’énumération SPB_REQUEST_SEQUENCE_POSITION indique la position d’une requête d’E/S dans la liste des transferts d’une séquence d’E/S .

Syntaxe

typedef enum _SPB_REQUEST_SEQUENCE_POSITION {
  SpbRequestSequencePositionInvalid,
  SpbRequestSequencePositionSingle,
  SpbRequestSequencePositionFirst,
  SpbRequestSequencePositionContinue,
  SpbRequestSequencePositionLast,
  SpbRequestSequencePositionMax
} SPB_REQUEST_SEQUENCE_POSITION, *PSPB_REQUEST_SEQUENCE_POSITION;

Constantes

 
SpbRequestSequencePositionInvalid
Pour une utilisation interne uniquement.
SpbRequestSequencePositionSingle
Requête d’E/S de transfert unique. Cette requête est une demande de lecture ou d’écriture (IRP_MJ_READ ou IRP_MJ_WRITE) qui ne fait pas partie d’une séquence, ou il s’agit d’une demande de contrôle d’E/S IOCTL_SPB_EXECUTE_SEQUENCE pour une séquence qui se compose d’un transfert unique.

Le contrôleur doit sélectionner la cible avant d’effectuer le transfert et libérer la cible une fois le transfert terminé.
SpbRequestSequencePositionFirst
Première requête d’E/S dans une séquence. Cette demande est la demande de lecture ou d’écriture qui suit immédiatement la demande de contrôle d’E/S (IOCTL_SPB_LOCK_CONTROLLER) qui signale le début de la séquence.

Le contrôleur doit sélectionner la cible avant d’effectuer ce transfert, et la cible doit rester sélectionnée une fois le transfert terminé.
SpbRequestSequencePositionContinue
Requête d’E/S au milieu d’une séquence. Cette demande est une demande de lecture ou d’écriture qui n’est ni la première ni la dernière transmission dans la séquence.

Dans certains cas, l’extension de framework SPB (SpbCx) ne peut pas identifier le dernier transfert et étiquette le dernier transfert en tant que SpbRequestSequencePositionContinue au lieu de SpbRequestSequencePositionLast. Pour plus d’informations, consultez la section Remarques suivante.

Le contrôleur doit déjà avoir la cible sélectionnée avant de démarrer ce transfert, et la cible doit rester sélectionnée une fois le transfert terminé.
SpbRequestSequencePositionLast
Dernière requête d’E/S dans une séquence. Cette demande est la demande de lecture ou d’écriture qui précède immédiatement la demande de contrôle d’E/S de déverrouillage (IOCTL_SPB_UNLOCK_CONTROLLER) qui signale la fin de la séquence.

Dans certains cas, SpbCx ne peut pas identifier le dernier transfert et étiquette le dernier transfert en tant que SpbRequestSequencePositionContinue au lieu de SpbRequestSequencePositionLast. Pour plus d’informations, consultez la section Remarques suivante.

Le contrôleur doit déjà avoir la cible sélectionnée avant de démarrer ce transfert et doit libérer la cible une fois le transfert terminé.
SpbRequestSequencePositionMax
Pour une utilisation interne uniquement.

Remarques

Un client (pilote périphérique) du contrôleur SPB peut effectuer une séquence de transfert d’E/S en envoyant une série de demandes de lecture et d’écriture à un appareil cible sur le bus. Chaque demande de lecture ou d’écriture dans la série occupe une position dans la liste des transferts pour la séquence. Les valeurs de l’énumération SPB_REQUEST_SEQUENCE_POSITION indiquent les positions relatives des demandes de lecture et d’écriture dans cette liste.

La méthode SpbRequestGetParameters récupère les valeurs de paramètre spécifiques à SPB à partir d’une requête d’E/S et les écrit dans une structure SPB_REQUEST_PARAMETERS. Inclus dans ces paramètres est une valeur d’énumération SPB_REQUEST_SEQUENCE_POSITION qui indique la position de la requête d’E/S dans la séquence de transfert d’E/S dont elle fait partie.

Si SpbRequestGetParameters est appelé pour récupérer la valeur de position d’une requête d’E/S qui ne fait pas partie d’une séquence, cette méthode affecte une valeur d’énumération appropriée SPB_REQUEST_SEQUENCE_POSITION à la requête.

Pour les demandes de lecture et d’écriture, la valeur de position est définie sur l’une des valeurs suivantes : SpbRequestSequencePositionSingle, SpbRequestSequencePositionFirst, SpbRequestSequencePositionContinueou SpbRequestSequencePositionLast.

Si le client envoie une requête de lecture ou d’écriture simple (IRP_MJ_READ ou IRP_MJ_WRITE) qui ne fait pas partie d’une séquence, la valeur de position est définie sur SpbRequestSequencePositionSingle.

Si le client envoie une requête de verrou (IOCTL_SPB_LOCK_CONTROLLER) pour signaler le début d’une séquence, la valeur de position du premier transfert (demande de lecture ou d’écriture) dans la séquence est SpbRequestSequencePositionFirst, et la valeur de position des transferts restants dans la séquence est SpbRequestSequencePositionContinue. Dans ce cas, SpbCx ne peut pas affecter SpbRequestSequencePositionLast au dernier transfert, car il ne sait pas que le client a envoyé la dernière demande de lecture ou d’écriture jusqu’à ce que le client envoie la demande de déverrouillage (IOCTL_SPB_UNLOCK_CONTROLLER) qui met fin à la séquence.

Pour les requêtes de verrou, la valeur de position est définie sur SpbRequestSequencePositionFirst. Pour les requêtes de déverrouillage, la valeur de position est définie sur SpbRequestSequencePositionLast.

Certains contrôleurs peuvent prendre en charge des opérations spéciales, telles que les transferts de bus duplex complets qui lisent et écrivent simultanément sur un appareil cible. Un client peut effectuer une opération de séquence personnalisée en verrouillant le contrôleur et en envoyant une série de requêtes d’E/S personnalisées, que SpbCx transmet au pilote du contrôleur SPB EvtSpbControllerIoOther fonction de rappel. Dans ce cas, la valeur de position de la première requête d’E/S personnalisée dans la séquence est SpbRequestSequencePositionFirst, et la valeur de position des requêtes d’E/S personnalisées restantes dans la séquence est SpbRequestSequencePositionContinue. La séquence se termine lorsque le client déverrouille le contrôleur. Si la fonction de rappel EvtSpbControllerIoOther reçoit une requête d’E/S personnalisée qui ne fait pas partie d’une séquence, la valeur de position de cette requête est SpbRequestSequencePositionSingle.

Pour une valeur de position de SpbRequestSequencePositionLast, le membre Length de la structure SPB_REQUEST_PARAMETERS peut être 0 pour indiquer que la cible doit simplement être libérée et qu’aucune donnée d’E/S ne doit être transférée (ou, de manière équivalente, pour indiquer qu’un transfert de 0 octets doit se produire, si le contrôleur ne peut pas libérer l’appareil sans exécuter l’horloge).

Pour les valeurs de position de SpbRequestSequencePositionContinue et SpbRequestSequencePositionLast, le sens de transfert peut avoir changé à partir du transfert précédent et le pilote du contrôleur SPB peut avoir besoin d’indiquer cette modification de direction possible sur le bus (par exemple, un contrôleur I2C émet une nouvelle condition START). Pour plus d’informations sur les itinéraires de transfert, consultez SPB_TRANSFER_DIRECTION.

Exigences

Exigence Valeur
client minimum pris en charge Prise en charge à partir de Windows 8.
d’en-tête spbcx.h (include Spb.h)

Voir aussi