enumeración SPB_REQUEST_SEQUENCE_POSITION (spbcx.h)
La enumeración SPB_REQUEST_SEQUENCE_POSITION indica la posición de una solicitud de E/S en la lista de transferencias de una secuencia de transferencia 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 Solo para uso interno. |
SpbRequestSequencePositionSingle Una solicitud de E/S de transferencia única. Esta solicitud es una solicitud de lectura o escritura (IRP_MJ_READ o IRP_MJ_WRITE) que no forma parte de una secuencia o es una solicitud de control de E/S de IOCTL_SPB_EXECUTE_SEQUENCE para una secuencia que consta de una única transferencia. El controlador debe seleccionar el destino antes de realizar la transferencia y liberar el destino una vez finalizada la transferencia. |
SpbRequestSequencePositionFirst Primera solicitud de E/S en una secuencia. Esta solicitud es la solicitud de lectura o escritura que sigue inmediatamente a la solicitud de control de E/S de bloqueo (IOCTL_SPB_LOCK_CONTROLLER) que señala el inicio de la secuencia. El controlador debe seleccionar el destino antes de realizar esta transferencia y el destino debe permanecer seleccionado una vez finalizada la transferencia. |
SpbRequestSequencePositionContinue Una solicitud de E/S en medio de una secuencia. Esta solicitud es una solicitud de lectura o escritura que no es la primera ni la última transferencia de la secuencia. En algunos casos, la extensión de marco de SPB (SpbCx) no puede identificar la última transferencia y etiqueta la última transferencia como SpbRequestSequencePositionContinue en lugar de SpbRequestSequencePositionLast. Para obtener más información, vea la sección Comentarios que se muestra más adelante. El controlador ya debe tener seleccionado el destino antes de iniciar esta transferencia y el destino debe permanecer seleccionado una vez finalizada la transferencia. |
SpbRequestSequencePositionLast Última solicitud de E/S en una secuencia. Esta solicitud es la solicitud de lectura o escritura que precede inmediatamente a la solicitud de control de E/S de desbloqueo (IOCTL_SPB_UNLOCK_CONTROLLER) que señala el final de la secuencia. En algunos casos, SpbCx no puede identificar la última transferencia y etiqueta la última transferencia como SpbRequestSequencePositionContinue en lugar de SpbRequestSequencePositionLast. Para obtener más información, vea la sección Comentarios que se muestra más adelante. El controlador ya debe tener seleccionado el destino antes de iniciar esta transferencia y debe liberar el destino una vez finalizada la transferencia. |
SpbRequestSequencePositionMax Solo para uso interno. |
Comentarios
Un cliente (controlador periférico) del controlador SPB puede realizar una secuencia de transferencia de E/S enviando una serie de solicitudes de lectura y escritura a un dispositivo de destino en el bus. Cada solicitud de lectura o escritura de la serie ocupa una posición en la lista de transferencias de la secuencia. Los valores de la enumeración SPB_REQUEST_SEQUENCE_POSITION indican las posiciones relativas de las solicitudes de lectura y escritura en esta lista.
El método SpbRequestGetParameters recupera los valores de parámetro específicos de SPB de una solicitud de E/S y los escribe en una estructura de SPB_REQUEST_PARAMETERS . Incluido en estos parámetros es un valor de enumeración SPB_REQUEST_SEQUENCE_POSITION que indica la posición de la solicitud de E/S en la secuencia de transferencia de E/S de la que forma parte.
Si se llama a SpbRequestGetParameters para recuperar el valor de posición de una solicitud de E/S que no forma parte de una secuencia, este método asigna un valor de enumeración de SPB_REQUEST_SEQUENCE_POSITION adecuado a la solicitud.
Para las solicitudes de lectura y escritura, el valor de posición se establece en uno de los siguientes valores: SpbRequestSequencePositionSingle, SpbRequestSequencePositionFirst, SpbRequestSequencePositionContinue o SpbRequestSequencePositionLast.
Si el cliente envía una solicitud simple de lectura o escritura (IRP_MJ_READ o IRP_MJ_WRITE) que no forma parte de una secuencia, el valor de posición se establece en SpbRequestSequencePositionSingle.
Si el cliente envía una solicitud de bloqueo (IOCTL_SPB_LOCK_CONTROLLER) para indicar el inicio de una secuencia, el valor de posición de la primera transferencia (solicitud de lectura o escritura) en la secuencia es SpbRequestSequencePositionFirst y el valor de posición de las transferencias restantes en la secuencia es SpbRequestSequencePositionContinue. En este caso, SpbCx no puede asignar SpbRequestSequencePositionLast a la última transferencia porque no sabe que el cliente ha enviado la última solicitud de lectura o escritura hasta que el cliente envíe la solicitud de desbloqueo (IOCTL_SPB_UNLOCK_CONTROLLER) que finaliza la secuencia.
Para las solicitudes de bloqueo, el valor de posición se establece en SpbRequestSequencePositionFirst. Para las solicitudes de desbloqueo, el valor de posición se establece en SpbRequestSequencePositionLast.
Algunos controladores pueden admitir operaciones especiales, como transferencias de bus dúplex completas que leen y escriben simultáneamente en un dispositivo de destino. Un cliente puede realizar una operación de secuencia personalizada bloqueando el controlador y enviando una serie de solicitudes de E/S personalizadas, que SpbCx pasa a la función de devolución de llamada EvtSpbControllerIoOther del controlador spB. En este caso, el valor de posición de la primera solicitud de E/S personalizada en la secuencia es SpbRequestSequencePositionFirst y el valor de posición de las solicitudes de E/S personalizadas restantes en la secuencia es SpbRequestSequencePositionContinue. La secuencia finaliza cuando el cliente desbloquea el controlador. Si la función de devolución de llamada EvtSpbControllerIoOther recibe una solicitud de E/S personalizada que no forma parte de una secuencia, el valor de posición de esta solicitud es SpbRequestSequencePositionSingle.
Para un valor de posición de SpbRequestSequencePositionLast, el miembro Length de la estructura de SPB_REQUEST_PARAMETERS puede ser 0 para indicar que el destino debe liberarse simplemente y que no se deben transferir datos de E/S (o, de forma equivalente, para indicar que debe producirse una transferencia de 0 bytes, si el controlador no puede liberar el dispositivo sin ejecutar el reloj).
Para los valores de posición de SpbRequestSequencePositionContinue y SpbRequestSequencePositionLast, la dirección de transferencia podría haber cambiado de la transferencia anterior y el controlador del controlador SPB podría necesitar indicar este posible cambio de dirección en el bus (por ejemplo, un controlador I2C emite una nueva condición START). Para obtener más información sobre las direcciones de transferencia, consulte SPB_TRANSFER_DIRECTION.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Se admite a partir de Windows 8. |
Encabezado | spbcx.h (incluya Spb.h) |