Compartilhar via


enumeração SPB_REQUEST_SEQUENCE_POSITION (spbcx.h)

A enumeração SPB_REQUEST_SEQUENCE_POSITION indica a posição de uma solicitação de E/S na lista de transferências para uma sequência de transferência de E/S.

Syntax

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

Constantes

 
SpbRequestSequencePositionInvalid
Apenas para uso interno.
SpbRequestSequencePositionSingle
Uma solicitação de E/S de transferência única. Essa solicitação é uma solicitação de leitura ou gravação (IRP_MJ_READ ou IRP_MJ_WRITE) que não faz parte de uma sequência ou é uma solicitação de controle de E/S IOCTL_SPB_EXECUTE_SEQUENCE para uma sequência que consiste em uma única transferência.

O controlador deve selecionar o destino antes de executar a transferência e liberar o destino após a conclusão da transferência.
SpbRequestSequencePositionFirst
A primeira solicitação de E/S em uma sequência. Essa solicitação é a solicitação de leitura ou gravação que segue imediatamente a solicitação de controle de E/S de bloqueio (IOCTL_SPB_LOCK_CONTROLLER) que sinaliza o início da sequência.

O controlador deve selecionar o destino antes de executar essa transferência e o destino deve permanecer selecionado após a conclusão da transferência.
SpbRequestSequencePositionContinue
Uma solicitação de E/S no meio de uma sequência. Essa solicitação é uma solicitação de leitura ou gravação que não é a primeira nem a última transferência na sequência.

Em alguns casos, a extensão de estrutura do SPB (SpbCx) não pode identificar a última transferência e rotula a última transferência como SpbRequestSequencePositionContinue em vez de SpbRequestSequencePositionLast. Para obter mais informações, consulte a seção Comentários a seguir.

O controlador já deve ter o destino selecionado antes de iniciar essa transferência, e o destino deve permanecer selecionado após a conclusão da transferência.
SpbRequestSequencePositionLast
A última solicitação de E/S em uma sequência. Essa solicitação é a solicitação de leitura ou gravação que precede imediatamente a solicitação de controle de E/S de desbloqueio (IOCTL_SPB_UNLOCK_CONTROLLER) que sinaliza o fim da sequência.

Em alguns casos, o SpbCx não pode identificar a última transferência e rotula a última transferência como SpbRequestSequencePositionContinue em vez de SpbRequestSequencePositionLast. Para obter mais informações, consulte a seção Comentários a seguir.

O controlador já deve ter o destino selecionado antes de iniciar essa transferência e deve liberar o destino após a conclusão da transferência.
SpbRequestSequencePositionMax
Apenas para uso interno.

Comentários

Um cliente (driver periférico) do controlador SPB pode executar uma sequência de transferência de E/S enviando uma série de solicitações de leitura e gravação para um dispositivo de destino no barramento. Cada solicitação de leitura ou gravação na série ocupa uma posição na lista de transferências para a sequência. Os valores na enumeração SPB_REQUEST_SEQUENCE_POSITION indicam as posições relativas das solicitações de leitura e gravação nesta lista.

O método SpbRequestGetParameters recupera os valores de parâmetro específicos do SPB de uma solicitação de E/S e os grava em uma estrutura de SPB_REQUEST_PARAMETERS . Incluído nesses parâmetros é um valor de enumeração SPB_REQUEST_SEQUENCE_POSITION que indica a posição da solicitação de E/S na sequência de transferência de E/S da qual faz parte.

Se SpbRequestGetParameters for chamado para recuperar o valor de posição de uma solicitação de E/S que não faz parte de uma sequência, esse método atribuirá um valor de enumeração de SPB_REQUEST_SEQUENCE_POSITION apropriado à solicitação.

Para solicitações de leitura e gravação, o valor da posição é definido como um dos seguintes valores: SpbRequestSequencePositionSingle, SpbRequestSequencePositionFirst, SpbRequestSequencePositionContinue ou SpbRequestSequencePositionLast.

Se o cliente enviar uma solicitação simples de leitura ou gravação (IRP_MJ_READ ou IRP_MJ_WRITE) que não faz parte de uma sequência, o valor da posição será definido como SpbRequestSequencePositionSingle.

Se o cliente enviar uma solicitação de bloqueio (IOCTL_SPB_LOCK_CONTROLLER) para sinalizar o início de uma sequência, o valor da posição da primeira transferência (solicitação de leitura ou gravação) na sequência será SpbRequestSequencePositionFirst e o valor de posição para as transferências restantes na sequência será SpbRequestSequencePositionContinue. Nesse caso, o SpbCx não pode atribuir SpbRequestSequencePositionLast à última transferência porque não sabe que o cliente enviou a última solicitação de leitura ou gravação até que o cliente envie a solicitação de desbloqueio (IOCTL_SPB_UNLOCK_CONTROLLER) que encerra a sequência.

Para solicitações de bloqueio, o valor da posição é definido como SpbRequestSequencePositionFirst. Para solicitações de desbloqueio, o valor da posição é definido como SpbRequestSequencePositionLast.

Alguns controladores podem dar suporte a operações especiais, como transferências de barramento full-duplex que leem e gravam simultaneamente em um dispositivo de destino. Um cliente pode executar uma operação de sequência personalizada bloqueando o controlador e enviando uma série de solicitações de E/S personalizadas, que o SpbCx passa para a função de retorno de chamada EvtSpbControllerIoOther do driver do controlador SPB. Nesse caso, o valor da posição da primeira solicitação de E/S personalizada na sequência é SpbRequestSequencePositionFirst e o valor de posição para as solicitações de E/S personalizadas restantes na sequência é SpbRequestSequencePositionContinue. A sequência termina quando o cliente desbloqueia o controlador. Se a função de retorno de chamada EvtSpbControllerIoOther receber uma solicitação de E/S personalizada que não faz parte de uma sequência, o valor de posição dessa solicitação será SpbRequestSequencePositionSingle.

Para um valor de posição de SpbRequestSequencePositionLast, o membro Length da estrutura SPB_REQUEST_PARAMETERS pode ser 0 para indicar que o destino deve ser simplesmente liberado e que nenhum dado de E/S deve ser transferido (ou, equivalentemente, para indicar que uma transferência de 0 bytes deve ocorrer, se o controlador não puder liberar o dispositivo sem executar o relógio).

Para valores de posição de SpbRequestSequencePositionContinue e SpbRequestSequencePositionLast, a direção de transferência pode ter sido alterada em relação à transferência anterior e o driver do controlador SPB pode precisar indicar essa possível alteração de direção no barramento (por exemplo, um controlador I2C emite uma nova condição START). Para obter mais informações sobre as instruções de transferência, consulte SPB_TRANSFER_DIRECTION.

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte começando com Windows 8.
Cabeçalho spbcx.h (inclua Spb.h)

Confira também