struttura IDE_REQUEST_BLOCK (irb.h)

La struttura IDE_REQUEST_BLOCK definisce un blocco di richieste IDE.

Nota I modelli di driver di porta ATA e miniport ATA potrebbero essere modificati o non disponibili in futuro. È invece consigliabile usare il driver Storport e i modelli di driver miniport Storport .
 

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)

Vedi anche

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK