estrutura IDE_REQUEST_BLOCK (irb.h)
A estrutura IDE_REQUEST_BLOCK define um bloco de solicitação do IDE.
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) |