Compartilhar via


estrutura IDE_REQUEST_BLOCK (irb.h)

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

Observação o driver de porta do ATA e os modelos de driver de miniporto do ATA podem estar alterados ou indisponíveis no futuro. Em vez disso, recomendamos usar o de driver do Storport e miniporto storport modelos de driver.
 

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.

de função subconjuntos 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 sub-comandos 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 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 de IrbStatus e seu significado.

Value significado
IRB_STATUS_PENDING Indica que a solicitação está em andamento. O driver de porta inicializa IrbStatus para esse valor. Um driver de miniporto 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 subexecução ou sobrecarga 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 subexecuçã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 status do ATA do dispositivo e o registro de erros 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 tenta novamente qualquer solicitação concluída com esse status. Uma solicitação concluída com o 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 miniporto 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 miniporto 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 de unidade lógica do dispositivo.

CdbLength

Especifica o comprimento em bytes do buffer apontado por cdb.

SenseInfoBufferLength

Especifica o comprimento em bytes do buffer apontado por SenseInfoBuffer.

SenseInfoBufferType

Especifica o tipo de estrutura de dados retornada no SenseInfoBuffer. Como os comandos do ATA não precisam do comando de sentido de solicitação, os comandos ATA_PASS_THROUGH usam SenseInfoBuffer para retornar informações do arquivo de tarefa. Para comandos ATA_PASS_THROUGH, conforme identificado no membro do IrbFlags, o retorno apropriado tamanho TaskFile 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 descreve-as em detalhes.

de Sinalizador descrição
IRB_FLAGS_DRDY_REQUIRED Indica que o driver de miniporto deve aguardar o dispositivo definir 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 DMA para transferir dados para essa solicitação.
IRB_FLAGS_MAP_BUFFERS Indica que o campo DataBuffer no IRB está mapeado. O miniporto pode acessar com segurança databuffer quando esse sinalizador é definido. O driver de miniporto não deve acessar DataBuffer se o sinalizador não estiver definido. O driver de miniporto pode solicitar que o driver de porta mapeie o buffer de dados definindo esse sinalizador no IRB em seu rotina de 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 que IRBs não de alta prioridade atualmente no miniporto do ATA.

TimeOutValue

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

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 no qual 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 miniporto 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 do Function e IRB_FUNCTION_ATA_COMMAND não é zero.

Cdb[16]

Contém um CDB (bloco de descritor de comando). Esse membro é definido sempre que o resultado de um AND bit a bit entre o membro da Função 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 membros IdeTaskFile, powerchangee cdb como dados de caractere sem sinal.

Observações

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)

Consulte também

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK