enumerazione SPB_REQUEST_SEQUENCE_POSITION (spbcx.h)
L'enumerazione SPB_REQUEST_SEQUENCE_POSITION indica la posizione di una richiesta di I/O nell'elenco dei trasferimenti per una sequenza di trasferimento di I/O.
Sintassi
typedef enum _SPB_REQUEST_SEQUENCE_POSITION {
SpbRequestSequencePositionInvalid,
SpbRequestSequencePositionSingle,
SpbRequestSequencePositionFirst,
SpbRequestSequencePositionContinue,
SpbRequestSequencePositionLast,
SpbRequestSequencePositionMax
} SPB_REQUEST_SEQUENCE_POSITION, *PSPB_REQUEST_SEQUENCE_POSITION;
Costanti
SpbRequestSequencePositionInvalid Solo per uso interno. |
SpbRequestSequencePositionSingle Richiesta di I/O a trasferimento singolo. Questa richiesta è una richiesta di lettura o scrittura (IRP_MJ_READ o IRP_MJ_WRITE) che non fa parte di una sequenza oppure è una richiesta di controllo I/O IOCTL_SPB_EXECUTE_SEQUENCE per una sequenza costituita da un singolo trasferimento. Il controller deve selezionare la destinazione prima di eseguire il trasferimento e rilasciare la destinazione al termine del trasferimento. |
SpbRequestSequencePositionFirst Prima richiesta di I/O in una sequenza. Questa richiesta è la richiesta di lettura o scrittura che segue immediatamente la richiesta di controllo di I/O di blocco (IOCTL_SPB_LOCK_CONTROLLER) che segnala l'inizio della sequenza. Il controller deve selezionare la destinazione prima di eseguire questo trasferimento e la destinazione deve rimanere selezionata al termine del trasferimento. |
SpbRequestSequencePositionContinue Richiesta di I/O al centro di una sequenza. Questa richiesta è una richiesta di lettura o scrittura che non è né il primo né l'ultimo trasferimento nella sequenza. In alcuni casi, l'estensione spb framework (SpbCx) non può identificare l'ultimo trasferimento ed etichetta l'ultimo trasferimento come SpbRequestSequencePositionContinue anziché SpbRequestSequencePositionLast. Per ulteriori informazioni, vedere la sezione Osservazioni successiva. Il controller deve avere già selezionato la destinazione prima di avviare questo trasferimento e la destinazione deve rimanere selezionata al termine del trasferimento. |
SpbRequestSequencePositionLast Ultima richiesta di I/O in una sequenza. Questa richiesta è la richiesta di lettura o scrittura che precede immediatamente la richiesta di controllo di I/O di sblocco (IOCTL_SPB_UNLOCK_CONTROLLER) che segnala la fine della sequenza. In alcuni casi SpbCx non riesce a identificare l'ultimo trasferimento ed etichetta l'ultimo trasferimento come SpbRequestSequencePositionContinue anziché SpbRequestSequencePositionLast. Per ulteriori informazioni, vedere la sezione Osservazioni successiva. Il controller deve avere già selezionato la destinazione prima di avviare questo trasferimento e deve rilasciare la destinazione al termine del trasferimento. |
SpbRequestSequencePositionMax Solo per uso interno. |
Commenti
Un client (driver periferica) del controller SPB può eseguire una sequenza di trasferimento di I/O inviando una serie di richieste di lettura e scrittura a un dispositivo di destinazione nel bus. Ogni richiesta di lettura o scrittura nella serie occupa una posizione nell'elenco dei trasferimenti per la sequenza. I valori nell'enumerazione SPB_REQUEST_SEQUENCE_POSITION indicano le posizioni relative delle richieste di lettura e scrittura in questo elenco.
Il metodo SpbRequestGetParameters recupera i valori dei parametri specifici di SPB da una richiesta di I/O e li scrive in una struttura SPB_REQUEST_PARAMETERS . Incluso in questi parametri è un valore di enumerazione SPB_REQUEST_SEQUENCE_POSITION che indica la posizione della richiesta di I/O nella sequenza di trasferimento di I/O di cui fa parte.
Se viene chiamato SpbRequestGetParameters per recuperare il valore di posizione di una richiesta di I/O che non fa parte di una sequenza, questo metodo assegna un valore di enumerazione SPB_REQUEST_SEQUENCE_POSITION appropriato alla richiesta.
Per le richieste di lettura e scrittura, il valore position viene impostato su uno dei valori seguenti: SpbRequestSequencePositionSingle, SpbRequestSequencePositionFirst, SpbRequestSequencePositionContinue o SpbRequestSequencePositionLast.
Se il client invia una semplice richiesta di lettura o scrittura (IRP_MJ_READ o IRP_MJ_WRITE) che non fa parte di una sequenza, il valore della posizione viene impostato su SpbRequestSequencePositionSingle.
Se il client invia una richiesta di blocco (IOCTL_SPB_LOCK_CONTROLLER) per segnalare l'inizio di una sequenza, il valore di posizione per il primo trasferimento (richiesta di lettura o scrittura) nella sequenza è SpbRequestSequencePositionFirst e il valore della posizione per i trasferimenti rimanenti nella sequenza è SpbRequestSequencePositionContinue. In questo caso, SpbCx non può assegnare SpbRequestSequencePositionLast all'ultimo trasferimento perché non sa che il client ha inviato l'ultima richiesta di lettura o scrittura finché il client non invia la richiesta di sblocco (IOCTL_SPB_UNLOCK_CONTROLLER) che termina la sequenza.
Per le richieste di blocco, il valore della posizione è impostato su SpbRequestSequencePositionFirst. Per le richieste di sblocco, il valore della posizione è impostato su SpbRequestSequencePositionLast.
Alcuni controller potrebbero supportare operazioni speciali, ad esempio trasferimenti di bus full-duplex che leggono e scrivono simultaneamente in un dispositivo di destinazione. Un client può eseguire un'operazione di sequenza personalizzata bloccando il controller e inviando una serie di richieste di I/O personalizzate, che SpbCx passa alla funzione di callback EvtSpbControllerIother del driver del controller SPB. In questo caso, il valore della posizione per la prima richiesta di I/O personalizzata nella sequenza è SpbRequestSequencePositionFirst e il valore della posizione per le richieste di I/O personalizzate rimanenti nella sequenza è SpbRequestSequencePositionContinue. La sequenza termina quando il client sblocca il controller. Se la funzione di callback EvtSpbControllerIother riceve una richiesta di I/O personalizzata che non fa parte di una sequenza, il valore della posizione per questa richiesta è SpbRequestSequencePositionSingle.
Per un valore di posizione di SpbRequestSequencePositionLast, il membro Length della struttura SPB_REQUEST_PARAMETERS può essere 0 per indicare che la destinazione deve essere semplicemente rilasciata e che non devono essere trasferiti dati di I/O (o, in modo equivalente, per indicare che deve verificarsi un trasferimento a 0 byte, se il controller non può rilasciare il dispositivo senza eseguire l'orologio).
Per i valori di posizione di SpbRequestSequencePositionContinue e SpbRequestSequencePositionLast, la direzione di trasferimento potrebbe essere cambiata rispetto al trasferimento precedente e il driver del controller SPB potrebbe dover indicare questa possibile modifica della direzione sul bus (ad esempio, un controller I2C genera una nuova condizione START). Per altre informazioni sulle indicazioni di trasferimento, vedere SPB_TRANSFER_DIRECTION.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Supportato a partire da Windows 8. |
Intestazione | spbcx.h (include Spb.h) |