структура IDE_REQUEST_BLOCK (irb.h)
Структура IDE_REQUEST_BLOCK определяет блок запросов интегрированной среды разработки.
Синтаксис
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;
Члены
Function
Указывает категорию, к которой относится запрос. В таблице ниже описана классификация запросов ввода-вывода.
Функция | Вложенные команды | Описание |
IRB_FUNCTION_ATA_COMMAND |
IRB_FUNCTION_ATA_IDENTIFY IRB_FUNCTION_ATA_READ IRB_FUNCTION_ATA_WRITE IRB_FUNCTION_ATA_FLUSH IRB_FUNCTION_ATA_SMART |
Указывает, что IRB содержит IdeTaskFile, описывающий команду ATA. Подкоманды указывают на более точное группирование запроса для ускорения поиска. |
IRB_FUNCTION_ATAPI_COMMAND | IRB_FUNCTION_REQUEST_SENSE | Указывает, что IRB содержит CDB, описывающую команду 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 |
Указывает, что IRB предназначен для мини-порта. Ответственность за правильную интерпретацию команды лежит на минипорте. |
IrbStatus
Мини-порт должен задать этому члену значение , указывающее состояние указанной операции. В таблице ниже описаны различные значения IrbStatus и их значение.
Значение | Значение |
IRB_STATUS_PENDING | Указывает, что запрос выполняется. Драйвер порта инициализирует IrbStatus этим значением. Драйвер мини-порта никогда не должен присваивать члену IrbStatus это значение. |
IRB_STATUS_SUCCESS | Указывает, что запрос был успешно выполнен. |
IRB_STATUS_DATALENGTH_MISMATCH | Указывает, что произошла ошибка недостаточного или переполнения данных. Мини-порт должен обновить поле DataTransferLength в IRB, чтобы указать фактический объем данных, переданных в случае недостаточного выполнения. |
IRB_STATUS_DEVICE_ERROR | Указывает, что устройство вернуло ошибку. Драйвер мини-порта должен обновить поля AtaStatus и AtaError в Irb до содержимого состояния ATA устройства и регистра ошибок при завершении команды. |
IRB_STATUS_INVALID_REQUEST | Указывает, что мини-порт не поддерживает данный запрос. |
IRB_STATUS_BUS_RESET | Указывает, что при обработке заданного запроса произошел сброс шины. |
IRB_STATUS_SELECTION_TIMEOUT | Указывает, что не удалось выбрать целевое устройство. |
IRB_STATUS_BUSY | Указывает, что устройство занято. Драйвер порта повторяет любой запрос, завершенный с таким состоянием. Запрос, завершенный с состоянием занятости, повторно выполняется только один раз. Драйвер мини-порта должен приостановить очередь запросов с помощью AtaPortDeviceBusy , если устройство не может обработать запрос в течение определенного периода времени. |
IRB_STATUS_AUTOSENSE_VALID | IRB_STATUS_AUTOSENSE_VALID — это битовая маска, указывающая допустимые данные осмысления в элементе SenseInfoBuffer IRB. |
IRB_STATUS_RETURN_TASKFILE_VALID | IRB_STATUS_RETURN_TASKFILE_VALID — это битовая маска, указывающая на допустимый возвращаемый файл задачи в элементе SenseInfoBuffer IRB. |
AtaStatus
Указывает состояние, возвращенное устройством в его регистре состояния. Драйвер мини-порта должен обновить это поле при заполнении IRB с IRB_STATUS_DEVICE_ERROR.
AtaError
Указывает значение ошибки, возвращаемое устройством в его регистре ошибок. Драйвер мини-порта должен обновить это поле при заполнении IRB с IRB_STATUS_DEVICE_ERROR.
Channel
Указывает номер канала.
TargetId
Указывает целевой идентификатор устройства.
Lun
Указывает номер логического устройства.
CdbLength
Указывает длину буфера, на который указывает Cdb, в байтах.
SenseInfoBufferLength
Указывает длину буфера в байтах, на который указывает SenseInfoBuffer.
SenseInfoBufferType
Указывает тип структуры данных, возвращаемой в SenseInfoBuffer. Так как командам ATA не требуется команда request sense, ATA_PASS_THROUGH команды используют SenseInfoBuffer для возврата сведений о файле задачи. Для ATA_PASS_THROUGH команд, как указано в элементе IrbFlags , соответствующий возвращаемый размер TaskFile должен быть указан как SENSE_INFO_BUFFER_RETURN_TYPE_28BIT_TASKFILE или
SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE.
QueueTag
Тег очереди для этого IRB. Драйвер порта задает для этого поля значение 0.
ReservedAsUlong
Зарезервировано для последующего использования.
IrbFlags
Квалифициирует запрос с определенными действиями, которые необходимо выполнить. В таблице ниже они подробно описаны.
Пометить | Описание |
IRB_FLAGS_DRDY_REQUIRED | Указывает, что драйвер мини-порта должен дождаться, пока устройство установит бит DRDY в регистре состояния ATA перед выполнением этой команды. |
IRB_FLAGS_USE_DMA | Указывает, что запрос имеет связанный список точечной и сборной, и драйвер мини-порта может использовать DMA для передачи данных для этого запроса. |
IRB_FLAGS_MAP_BUFFERS | Указывает, что поле DataBuffer в IRB сопоставлено. При установке этого флага мини-порт может безопасно получить доступ к DataBuffer . Драйвер мини-порта не должен получать доступ к DataBuffer , если флаг не установлен. Драйвер мини-порта может запросить у драйвера порта сопоставление буфера данных, установив этот флаг в IRB в подпрограмме IdeHwBuildIo . |
IRB_FLAGS_48BIT | Указывает, что команда ATA в IRB принадлежит 48-разрядному набору функций LBA. Поле Назад в структуре _IDE_TASK_FILE допустимо, если установлен этот флаг. |
IRB_FLAGS_PIO_MULTIPLE | Указывает, что команда ATA должна быть передана с помощью метода ATA PIO Multiple. |
IRB_FLAGS_RETURN_RESULTS | Указывает, что файл задачи возврата ATA должен быть скопирован в SenseInfoBuffer. |
IRB_FLAGS_DATA_IN | Указывает, что данные должны быть переданы с устройства в хост-систему (операция чтения). |
IRB_FLAGS_DATA_OUT | Указывает, что данные должны быть переданы на устройство из хост-системы (операция записи). |
IRB_FLAGS_DISCARDABLE | Указывает, что команда должна быть выполнена наилучшим образом. (Примечание: в настоящее время это не используется ATAport). |
IRB_FLAGS_HIGH_PRIORITY | Указывает, что этот IRB должен быть обработан как можно скорее, прежде чем irbs, не имеющие высокого приоритета, в настоящее время находятся в минипорте ATA. |
TimeOutValue
Указывает время в секундах, по истечении которого истекает время ожидания запроса.
DataTransferLength
Содержит длину буфера данных, содержащего передаваемые данные, в байтах.
IrbExtension
Указатель на расширение для каждого запроса, выделенное драйвером порта.
DataBuffer
Указатель на буфер, в котором находятся данные.
SenseInfoBuffer
Указатель на буфер, в котором хранятся данные осмыслеющих данных.
NextIrb
Указатель на следующий IRB для обработки. Драйвер порта задает для этого параметра значение NULL. Драйвер мини-порта может использовать это поле для связывания irb.
Reserved
Зарезервировано для последующего использования.
IdeTaskFile
Содержит структуру типа IDE_TASK_FILE , которая содержит файл задач интегрированной среды разработки для указанного контроллера. Этот элемент определяется всякий раз, когда результат побитового И между элементом Функции и IRB_FUNCTION_ATA_COMMAND не равен нулю.
Cdb[16]
Содержит блок дескриптора команд (CDB). Этот элемент определяется всякий раз, когда результат побитового И между элементом Функции и IRB_FUNCTION_ATAPI_COMMAND не равен нулю.
PowerChange
Указывает значение перечисления типа POWER_CHANGE_INFO , определяющее переход состояния власти. Этот элемент определяется всякий раз, когда функция равна IRB_FUNCTION_POWER_CHANGE.
AsUChar[16]
Предоставляет средства доступа к членам IdeTaskFile, PowerChange и Cdb в качестве неподписанных символьных данных.
Комментарии
Структура IDE_REQUEST_BLOCK предоставляет функциональные возможности, аналогичные SCSI_REQUEST_BLOCK , но с характеристиками, более подходящими для управления устройствами в шине интегрированной среды разработки.
Требования
Требование | Значение |
---|---|
Заголовок | irb.h (включая Irb.h) |