struttura IDE_REQUEST_BLOCK (irb.h)
La struttura IDE_REQUEST_BLOCK definisce un blocco di richieste IDE.
Sintassi
typedef struct _IDE_REQUEST_BLOCK {
USHORT Function;
UCHAR IrbStatus;
UCHAR AtaStatus;
UCHAR AtaError;
UCHAR Channel;
UCHAR TargetId;
UCHAR Lun;
UCHAR CdbLength;
UCHAR SenseInfoBufferLength;
UCHAR SenseInfoBufferType;
UCHAR QueueTag;
ULONG ReservedAsUlong;
ULONG IrbFlags;
ULONG TimeOutValue;
ULONG DataTransferLength;
PVOID IrbExtension;
PVOID DataBuffer;
PVOID SenseInfoBuffer;
PVOID NextIrb;
PVOID Reserved;
union {
IDE_TASK_FILE IdeTaskFile;
UCHAR Cdb[16];
IDE_POWER_INFO PowerChange;
UCHAR AsUChar[16];
};
} IDE_REQUEST_BLOCK, *PIDE_REQUEST_BLOCK;
Members
Function
Specifica la categoria a cui appartiene la richiesta. La tabella seguente descrive la classificazione delle richieste di I/O.
Funzione | Sottocom commandi | Descrizione |
IRB_FUNCTION_ATA_COMMAND |
IRB_FUNCTION_ATA_IDENTIFY IRB_FUNCTION_ATA_READ IRB_FUNCTION_ATA_WRITE IRB_FUNCTION_ATA_FLUSH IRB_FUNCTION_ATA_SMART |
Indica che L'IRB contiene un oggetto IdeTaskFile che descrive il comando ATA. I sottocomando indicano un raggruppamento più fine della richiesta per una ricerca più rapida. |
IRB_FUNCTION_ATAPI_COMMAND | IRB_FUNCTION_REQUEST_SENSE | Indica che L'IRB contiene un CDB che descrive il comando ATAPI. |
IRB_FUNCTION_MINIPORT_COMMAND |
IRB_FUNCTION_ADAPTER_FLUSH IRB_FUNCTION_SHUTDOWN IRB_FUNCTION_POWER_CHANGE IRB_FUNCTION_POWER_REBOOT IRB_FUNCTION_LUN_RESET IRB_FUNCTION_MINIPORT_IOCTL |
Indica che L'IRB è per il miniport. È responsabilità del miniport interpretare il comando in modo appropriato. |
IrbStatus
Il miniport deve impostare questo membro per indicare lo stato dell'operazione specificata. La tabella seguente descrive i vari valori IrbStatus e il relativo significato.
Valore | Significato |
IRB_STATUS_PENDING | Indica che la richiesta è in corso. Il driver della porta inizializza IrbStatus su questo valore. Un driver miniport non deve mai impostare il membro IrbStatus su questo valore. |
IRB_STATUS_SUCCESS | Indica che la richiesta è stata completata correttamente. |
IRB_STATUS_DATALENGTH_MISMATCH | Indica che si è verificato un errore di sottorun o overrun dei dati. Il miniport deve aggiornare il campo DataTransferLength in IRB per indicare la quantità effettiva di dati trasferiti in caso di sottorun. |
IRB_STATUS_DEVICE_ERROR | Indica che il dispositivo ha restituito un errore. Il driver miniport deve aggiornare i campi AtaStatus e AtaError in Irb al contenuto dello stato del dispositivo ATA e del registro degli errori al completamento del comando. |
IRB_STATUS_INVALID_REQUEST | Indica che il miniport non supporta la richiesta specificata. |
IRB_STATUS_BUS_RESET | Indica che si è verificata una reimpostazione del bus durante l'elaborazione della richiesta specificata. |
IRB_STATUS_SELECTION_TIMEOUT | Indica che non è stato possibile selezionare il dispositivo di destinazione. |
IRB_STATUS_BUSY | Indica che il dispositivo è occupato. Il driver della porta ritenta qualsiasi richiesta completata con questo stato. Una richiesta completata con stato occupato viene ritentata una sola volta. È responsabilità del driver miniport sospendere la coda delle richieste usando AtaPortDeviceBusy se il dispositivo non è in grado di gestire la richiesta per un determinato periodo di tempo. |
IRB_STATUS_AUTOSENSE_VALID | IRB_STATUS_AUTOSENSE_VALID è una maschera di bit che indica i dati di senso validi nel membro SenseInfoBuffer di IRB. |
IRB_STATUS_RETURN_TASKFILE_VALID | IRB_STATUS_RETURN_TASKFILE_VALID è una maschera di bit che indica un file di attività restituito valido nel membro SenseInfoBuffer di IRB. |
AtaStatus
Indica lo stato restituito dal dispositivo nel registro di stato. Il driver miniport deve aggiornare questo campo quando si completa un IRB con IRB_STATUS_DEVICE_ERROR.
AtaError
Indica il valore di errore restituito dal dispositivo nel registro degli errori. Il driver miniport deve aggiornare questo campo quando si completa un IRB con IRB_STATUS_DEVICE_ERROR.
Channel
Specifica il numero di canale.
TargetId
Specifica l'ID di destinazione del dispositivo.
Lun
Specifica il numero di unità logica del dispositivo.
CdbLength
Specifica la lunghezza in byte del buffer a cui punta Cdb.
SenseInfoBufferLength
Specifica la lunghezza in byte del buffer a cui punta SenseInfoBuffer.
SenseInfoBufferType
Specifica il tipo di struttura dei dati restituita in SenseInfoBuffer. Poiché i comandi ATA non hanno bisogno del comando di rilevamento della richiesta, ATA_PASS_THROUGH comandi usano SenseInfoBuffer per restituire informazioni sul file di attività. Per i comandi di ATA_PASS_THROUGH, come identificato nel membro IrbFlags , le dimensioni appropriate di TaskFile restituite devono essere segnalate come SENSE_INFO_BUFFER_RETURN_TYPE_28BIT_TASKFILE o
SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE.
QueueTag
Tag della coda per questo IRB. Il driver della porta imposta questo campo su 0.
ReservedAsUlong
Riservato per utilizzi futuri.
IrbFlags
Qualifica la richiesta con determinate azioni che devono essere eseguite. La tabella seguente li descrive in dettaglio.
Bandiera | Descrizione |
IRB_FLAGS_DRDY_REQUIRED | Indica che il driver miniport deve attendere che il dispositivo imposti il bit DRDY nel registro di stato ATA prima di eseguire questo comando. |
IRB_FLAGS_USE_DMA | Indica che la richiesta ha un elenco a dispersione/raccolta associato e il driver miniport può usare DMA per trasferire i dati per questa richiesta. |
IRB_FLAGS_MAP_BUFFERS | Indica che viene eseguito il mapping del campo DataBuffer in IRB. Il miniport può accedere in modo sicuro a DataBuffer quando questo flag è impostato. Il driver miniport non deve accedere a DataBuffer se il flag non è impostato. Il driver miniport potrebbe richiedere al driver di porta di eseguire il mapping del buffer dei dati impostando questo flag nell'IRB nella routine IdeHwBuildIo . |
IRB_FLAGS_48BIT | Indica che il comando ATA in IRB appartiene al set di funzionalità LBA a 48 bit. Il campo Indietro nella struttura _IDE_TASK_FILE è valido quando questo flag è impostato. |
IRB_FLAGS_PIO_MULTIPLE | Indica che il comando ATA deve essere trasferito usando il metodo ATA PIO Multiple. |
IRB_FLAGS_RETURN_RESULTS | Indica che il file di attività restituito da ATA deve essere copiato in SenseInfoBuffer. |
IRB_FLAGS_DATA_IN | Indica che i dati devono essere trasferiti dal dispositivo al sistema host (operazione di lettura). |
IRB_FLAGS_DATA_OUT | Indica che i dati devono essere trasferiti al dispositivo dal sistema host ( operazione di scrittura). |
IRB_FLAGS_DISCARDABLE | Indica che il comando deve essere eseguito nel modo migliore. (nota: attualmente non è impiegato da ATAport). |
IRB_FLAGS_HIGH_PRIORITY | Indica che questo IRB deve essere elaborato il prima possibile, prima che i runtime di integrazione con priorità non elevata siano attualmente presenti nel miniport ATA. |
TimeOutValue
Indica il tempo in secondi dopo il quale si verifica il timeout della richiesta.
DataTransferLength
Contiene la lunghezza in byte del buffer di dati che contiene i dati da trasferire.
IrbExtension
Puntatore all'estensione per richiesta allocata dal driver della porta.
DataBuffer
Puntatore al buffer in cui si trovano i dati.
SenseInfoBuffer
Puntatore al buffer che contiene i dati di senso.
NextIrb
Puntatore al successivo IRB da elaborare. Il driver della porta imposta questo valore su NULL. Il driver miniport può usare questo campo per collegare i runtime di integrazione tra loro.
Reserved
Riservato per utilizzi futuri.
IdeTaskFile
Contiene una struttura di tipo IDE_TASK_FILE che contiene il file di attività IDE per il controller indicato. Questo membro viene definito ogni volta che il risultato di un AND bit per bit tra il membro Function e IRB_FUNCTION_ATA_COMMAND è diverso da zero.
Cdb[16]
Contiene un blocco di descrittore di comando (CDB). Questo membro viene definito ogni volta che il risultato di un AND bit per bit tra il membro Function e IRB_FUNCTION_ATAPI_COMMAND è diverso da zero.
PowerChange
Indica un valore di enumerazione di tipo POWER_CHANGE_INFO che definisce una transizione dello stato di alimentazione. Questo membro viene definito ogni volta che Function è uguale a IRB_FUNCTION_POWER_CHANGE.
AsUChar[16]
Fornisce un modo per accedere ai membri IdeTaskFile, PowerChange e Cdb come dati di caratteri non firmati.
Commenti
La struttura IDE_REQUEST_BLOCK fornisce una funzionalità simile alla SCSI_REQUEST_BLOCK , ma con caratteristiche più adatte per la gestione dei dispositivi in un bus IDE.
Requisiti
Requisito | Valore |
---|---|
Intestazione | irb.h (include Irb.h) |