Поделиться через


структура IDE_REQUEST_BLOCK (irb.h)

Структура IDE_REQUEST_BLOCK определяет блок запросов интегрированной среды разработки.

Примечание Модели драйвера портов ATA и драйвера минипорта ATA могут быть изменены или недоступны в будущем. Вместо этого рекомендуется использовать модели драйверов Storport и драйверов для мини-портов Storport .
 

Синтаксис

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)

См. также раздел

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK