Compartilhar via


estrutura IDE_REQUEST_BLOCK (irb.h)

A estrutura IDE_REQUEST_BLOCK define um bloco de solicitação do IDE.

Nota O driver de porta do ATA e os modelos de driver de miniporta do ATA podem ser alterados ou indisponíveis no futuro. Em vez disso, recomendamos usar os modelos de driver storport e driver de miniporto Storport .
 

Sintaxe

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;

Membros

Function

Especifica a categoria à qual a solicitação pertence. A tabela a seguir descreve a classificação das solicitações de E/S.

Função Subcomandos Descrição
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 o IRB contém um IdeTaskFile que descreve o comando do ATA. Os subcomandos indicam um agrupamento mais fino de solicitação para uma pesquisa mais rápida.
IRB_FUNCTION_ATAPI_COMMAND IRB_FUNCTION_REQUEST_SENSE Indica que o IRB contém um CDB que descreve o comando da 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 o IRB é para o miniporto. É responsabilidade do miniporto interpretar o comando adequadamente.

IrbStatus

O miniporto deve definir esse membro para indicar o status da operação especificada. A tabela a seguir descreve os vários valores IrbStatus e seu significado.

Valor Significado
IRB_STATUS_PENDING Indica que a solicitação está em andamento. O driver de porta inicializa IrbStatus para esse valor. Um driver de miniporta nunca deve definir o membro IrbStatus para esse valor.
IRB_STATUS_SUCCESS Indica que a solicitação foi concluída com êxito.
IRB_STATUS_DATALENGTH_MISMATCH Indica que ocorreu um erro de subexecutamento ou estouro de dados. O miniporto deve atualizar o campo DataTransferLength no IRB para indicar a quantidade real de dados que foram transferidos no caso de uma subexecutação.
IRB_STATUS_DEVICE_ERROR Indica que o dispositivo retornou um erro. O driver de miniporto deve atualizar os campos AtaStatus e AtaError no Irb para o conteúdo do dispositivo ATA status e registro de erro na conclusão do comando.
IRB_STATUS_INVALID_REQUEST Indica que o miniporto não dá suporte à solicitação fornecida.
IRB_STATUS_BUS_RESET Indica que ocorreu uma redefinição de barramento durante o processamento da solicitação fornecida.
IRB_STATUS_SELECTION_TIMEOUT Indica que o dispositivo de destino não pôde ser selecionado.
IRB_STATUS_BUSY Indica que o dispositivo está ocupado. O driver de porta repete qualquer solicitação concluída com esse status. Uma solicitação concluída com status ocupado é repetida apenas uma vez. É responsabilidade do driver de miniporto pausar a fila de solicitações usando AtaPortDeviceBusy se o dispositivo não puder lidar com a solicitação por um determinado período de tempo.
IRB_STATUS_AUTOSENSE_VALID IRB_STATUS_AUTOSENSE_VALID é uma máscara de bits que indica dados de sentido válidos no membro SenseInfoBuffer do IRB.
IRB_STATUS_RETURN_TASKFILE_VALID IRB_STATUS_RETURN_TASKFILE_VALID é uma máscara de bits que indica um arquivo de tarefa de retorno válido no membro SenseInfoBuffer do IRB.

AtaStatus

Indica o status retornado pelo dispositivo em seu registro de status. O driver de miniporta deve atualizar esse campo ao concluir um IRB com IRB_STATUS_DEVICE_ERROR.

AtaError

Indica o valor de erro retornado pelo dispositivo em seu registro de erro. O driver de miniporta deve atualizar esse campo ao concluir um IRB com IRB_STATUS_DEVICE_ERROR.

Channel

Especifica o número do canal.

TargetId

Especifica a ID de destino do dispositivo.

Lun

Especifica o número da unidade lógica do dispositivo.

CdbLength

Especifica o comprimento em bytes do buffer apontado pelo Cdb.

SenseInfoBufferLength

Especifica o comprimento em bytes do buffer apontado por SenseInfoBuffer.

SenseInfoBufferType

Especifica o tipo de estrutura de dados retornado no SenseInfoBuffer. Como os comandos do ATA não precisam do comando request sense, ATA_PASS_THROUGH comandos usam SenseInfoBuffer para retornar informações do arquivo de tarefa. Para comandos ATA_PASS_THROUGH, conforme identificado no membro IrbFlags , o tamanho de TaskFile de retorno apropriado deve ser relatado como SENSE_INFO_BUFFER_RETURN_TYPE_28BIT_TASKFILE ou

SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE.

QueueTag

A marca de fila para este IRB. O driver de porta define esse campo como 0.

ReservedAsUlong

Reservado para uso futuro.

IrbFlags

Qualifica a solicitação com determinadas ações que precisam ser executadas. A tabela a seguir os descreve em detalhes.

Sinalizador Descrição
IRB_FLAGS_DRDY_REQUIRED Indica que o driver de miniporto deve aguardar até que o dispositivo defina o bit DRDY no registro de status do ATA antes de emitir esse comando.
IRB_FLAGS_USE_DMA Indica que a solicitação tem uma lista de dispersão/coleta associada e o driver de miniporto pode usar o AMD para transferir dados para essa solicitação.
IRB_FLAGS_MAP_BUFFERS Indica que o campo DataBuffer no IRB está mapeado. O miniporto pode acessar o DataBuffer com segurança quando esse sinalizador é definido. O driver de miniporta não deverá acessar o DataBuffer se o sinalizador não estiver definido. O driver de miniporta pode solicitar que o driver de porta mapeie o buffer de dados definindo esse sinalizador no IRB em sua rotina IdeHwBuildIo .
IRB_FLAGS_48BIT Indica que o comando do ATA no IRB pertence ao conjunto de recursos LBA de 48 bits. O campo Anterior na estrutura _IDE_TASK_FILE é válido quando esse sinalizador é definido.
IRB_FLAGS_PIO_MULTIPLE Indica que o comando do ATA deve ser transferido usando o método ATA PIO Multiple.
IRB_FLAGS_RETURN_RESULTS Indica que o arquivo de tarefa de retorno do ATA deve ser copiado para SenseInfoBuffer.
IRB_FLAGS_DATA_IN Indica que os dados devem ser transferidos do dispositivo para o sistema host (uma operação de leitura).
IRB_FLAGS_DATA_OUT Indica que os dados devem ser transferidos para o dispositivo do sistema host (uma operação de gravação).
IRB_FLAGS_DISCARDABLE Indica que o comando deve ser feito da melhor maneira. (observação: isso não é empregado atualmente pela ATAport).
IRB_FLAGS_HIGH_PRIORITY Indica que esse IRB deve ser processado o mais rápido possível, antes de IRBs não de alta prioridade atualmente no miniporto do ATA.

TimeOutValue

Indica o tempo em segundos após o qual a solicitação atingirá o tempo limite.

DataTransferLength

Contém o comprimento em bytes do buffer de dados que contém dados a serem transferidos.

IrbExtension

Ponteiro para a extensão por solicitação alocada pelo driver de porta.

DataBuffer

Ponteiro para o buffer em que os dados residem.

SenseInfoBuffer

Ponteiro para o buffer que contém os dados de sentido.

NextIrb

Ponteiro para o próximo IRB a ser processado. O driver de porta define isso como NULL. O driver de miniporte pode usar esse campo para vincular IRBs.

Reserved

Reservado para uso futuro.

IdeTaskFile

Contém uma estrutura do tipo IDE_TASK_FILE que contém o arquivo de tarefa IDE para o controlador indicado. Esse membro é definido sempre que o resultado de um AND bit a bit entre o membro function e o IRB_FUNCTION_ATA_COMMAND não é zero.

Cdb[16]

Contém um bloco de descritor de comando (CDB). Esse membro é definido sempre que o resultado de um AND bit a bit entre o membro function e IRB_FUNCTION_ATAPI_COMMAND não é zero.

PowerChange

Indica um valor de enumeração do tipo POWER_CHANGE_INFO que define uma transição de estado de energia. Esse membro é definido sempre que Function é igual a IRB_FUNCTION_POWER_CHANGE.

AsUChar[16]

Fornece um meio de acessar os membros IdeTaskFile, PowerChange e Cdb como dados de caracteres não assinados.

Comentários

A estrutura IDE_REQUEST_BLOCK fornece uma funcionalidade semelhante à SCSI_REQUEST_BLOCK mas com características mais adequadas para gerenciar dispositivos em um barramento IDE.

Requisitos

Requisito Valor
Cabeçalho irb.h (inclua Irb.h)

Confira também

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK