estructura de IDE_REQUEST_BLOCK (irb.h)

La estructura IDE_REQUEST_BLOCK define un bloque de solicitud ide.

Nota Los modelos de controlador de puerto ATA y controlador de minipuerto de ATA pueden modificarse o no estar disponibles en el futuro. En su lugar, se recomienda usar el controlador Storport y los modelos de controlador de miniport storport .
 

Sintaxis

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;

Miembros

Function

Especifica la categoría a la que pertenece la solicitud. En la tabla siguiente se describe la clasificación de las solicitudes de E/S.

Function Sub comandos Descripción
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 que el IRB contiene un IdeTaskFile que describe el comando ATA. Los sub comandos indican la agrupación más fina de la solicitud para una búsqueda más rápida.
IRB_FUNCTION_ATAPI_COMMAND IRB_FUNCTION_REQUEST_SENSE Indica que el IRB contiene un CDB que describe el 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 que el IRB es para el miniporte. Es responsabilidad del miniporte interpretar el comando adecuadamente.

IrbStatus

El miniport debe establecer este miembro para indicar el estado de la operación especificada. En la tabla siguiente se describen los distintos valores de IrbStatus y su significado.

Valor Significado
IRB_STATUS_PENDING Indica que la solicitud está en curso. El controlador de puerto inicializa IrbStatus en este valor. Un controlador de minipuerto nunca debe establecer el miembro IrbStatus en este valor.
IRB_STATUS_SUCCESS Indica que la solicitud se completó correctamente.
IRB_STATUS_DATALENGTH_MISMATCH Indica que se ha producido un error de ejecución o saturación de datos. El minipuerto debe actualizar el campo DataTransferLength en el IRB para indicar la cantidad real de datos transferidos en el caso de una ejecución inferior.
IRB_STATUS_DEVICE_ERROR Indica que el dispositivo devolvió un error. El controlador de minipuerto debe actualizar los campos AtaStatus y AtaError del Irb al contenido del estado de ATA del dispositivo y registrar errores al finalizar el comando.
IRB_STATUS_INVALID_REQUEST Indica que el miniporte no admite la solicitud especificada.
IRB_STATUS_BUS_RESET Indica que se ha producido un restablecimiento de bus durante el procesamiento de la solicitud especificada.
IRB_STATUS_SELECTION_TIMEOUT Indica que no se pudo seleccionar el dispositivo de destino.
IRB_STATUS_BUSY Indica que el dispositivo está ocupado. El controlador de puerto reintenta cualquier solicitud completada con este estado. Una solicitud completada con el estado ocupado solo se reintenta una vez. Es responsabilidad del controlador de miniportar pausar la cola de solicitudes mediante AtaPortDeviceBusy si el dispositivo no puede controlar la solicitud durante un determinado período de tiempo.
IRB_STATUS_AUTOSENSE_VALID IRB_STATUS_AUTOSENSE_VALID es una máscara de bits que indica datos de sentido válidos en el miembro SenseInfoBuffer del IRB.
IRB_STATUS_RETURN_TASKFILE_VALID IRB_STATUS_RETURN_TASKFILE_VALID es una máscara de bits que indica un archivo de tarea de devolución válido en el miembro SenseInfoBuffer del IRB.

AtaStatus

Indica el estado devuelto por el dispositivo en su registro de estado. El controlador de minipuerto debe actualizar este campo al completar un IRB con IRB_STATUS_DEVICE_ERROR.

AtaError

Indica el valor de error devuelto por el dispositivo en su registro de errores. El controlador de minipuerto debe actualizar este campo al completar un IRB con IRB_STATUS_DEVICE_ERROR.

Channel

Especifica el número de canal.

TargetId

Especifica el identificador de destino del dispositivo.

Lun

Especifica el número de unidad lógica del dispositivo.

CdbLength

Especifica la longitud en bytes del búfer al que apunta Cdb.

SenseInfoBufferLength

Especifica la longitud en bytes del búfer al que apunta SenseInfoBuffer.

SenseInfoBufferType

Especifica el tipo de estructura de datos devuelta en SenseInfoBuffer. Dado que los comandos de ATA no necesitan el comando request sense, ATA_PASS_THROUGH comandos usan SenseInfoBuffer para devolver información del archivo de tareas. Para ATA_PASS_THROUGH comandos, como se identifica en el miembro IrbFlags , se debe notificar el tamaño de taskFile de devolución adecuado como SENSE_INFO_BUFFER_RETURN_TYPE_28BIT_TASKFILE o

SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE.

QueueTag

Etiqueta de cola para este IRB. El controlador de puerto establece este campo en 0.

ReservedAsUlong

Reservado para uso futuro.

IrbFlags

Califica la solicitud con determinadas acciones que deben realizarse. En la tabla siguiente se describen con detalle.

Marca Descripción
IRB_FLAGS_DRDY_REQUIRED Indica que el controlador de minipuerto debe esperar a que el dispositivo establezca el bit DRDY en el registro de estado de ATA antes de emitir este comando.
IRB_FLAGS_USE_DMA Indica que la solicitud tiene una lista de dispersión o recopilación asociada y el controlador de miniporte podría usar DMA para transferir datos para esta solicitud.
IRB_FLAGS_MAP_BUFFERS Indica que el campo DataBuffer del IRB está asignado. La minipuerto puede acceder de forma segura a DataBuffer cuando se establece esta marca. El controlador de minipuerto no debe tener acceso a DataBuffer si no se ha establecido la marca. El controlador de miniporte podría solicitar al controlador de puerto que asigne el búfer de datos estableciendo esta marca en el IRB en su rutina IdeHwBuildIo .
IRB_FLAGS_48BIT Indica que el comando ATA del IRB pertenece al conjunto de características LBA de 48 bits. El campo Anterior de la estructura _IDE_TASK_FILE es válido cuando se establece esta marca.
IRB_FLAGS_PIO_MULTIPLE Indica que el comando de ATA se va a transferir mediante el método ATA PIO Multiple.
IRB_FLAGS_RETURN_RESULTS Indica que el archivo de tarea de devolución de ATA se va a copiar en SenseInfoBuffer.
IRB_FLAGS_DATA_IN Indica que los datos se van a transferir desde el dispositivo al sistema host (una operación de lectura).
IRB_FLAGS_DATA_OUT Indica que los datos se van a transferir al dispositivo desde el sistema host (una operación de escritura).
IRB_FLAGS_DISCARDABLE Indica que el comando se realizará de la mejor manera. (Nota: actualmente no está empleado por ATAport).
IRB_FLAGS_HIGH_PRIORITY Indica que este IRB se va a procesar lo antes posible, antes de irB que no sean de alta prioridad actualmente en la miniporte de ATA.

TimeOutValue

Indica el tiempo en segundos después del cual se agotará el tiempo de espera de la solicitud.

DataTransferLength

Contiene la longitud en bytes del búfer de datos que contiene los datos que se van a transferir.

IrbExtension

Puntero a la extensión por solicitud asignada por el controlador de puerto.

DataBuffer

Puntero al búfer donde residen los datos.

SenseInfoBuffer

Puntero al búfer que contiene los datos de sentido.

NextIrb

Puntero al siguiente IRB que se va a procesar. El controlador de puerto establece este valor en NULL. El controlador de minipuerto puede usar este campo para vincular los IRB juntos.

Reserved

Reservado para uso futuro.

IdeTaskFile

Contiene una estructura de tipo IDE_TASK_FILE que contiene el archivo de tarea IDE para el controlador indicado. Este miembro se define cada vez que el resultado de un AND bit a bit entre el miembro Function y IRB_FUNCTION_ATA_COMMAND es distinto de cero.

Cdb[16]

Contiene un bloque de descriptor de comandos (CDB). Este miembro se define cada vez que el resultado de un AND bit a bit entre el miembro Function y IRB_FUNCTION_ATAPI_COMMAND es distinto de cero.

PowerChange

Indica un valor de enumeración de tipo POWER_CHANGE_INFO que define una transición de estado de energía. Este miembro se define siempre que Function sea igual a IRB_FUNCTION_POWER_CHANGE.

AsUChar[16]

Proporciona un medio para acceder a los miembros IdeTaskFile, PowerChange y Cdb como datos de caracteres sin firmar.

Comentarios

La estructura IDE_REQUEST_BLOCK proporciona una funcionalidad similar a la SCSI_REQUEST_BLOCK , pero con características más adecuadas para administrar dispositivos en un bus IDE.

Requisitos

Requisito Valor
Header irb.h (incluya Irb.h)

Consulte también

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK