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


структура SCSI_POWER_REQUEST_BLOCK (minitape.h)

Структура SCSI_POWER_REQUEST_BLOCK — это специальная версия SCSI_REQUEST_BLOCK , которая используется для запросов на управление питанием.

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

Синтаксис

typedef struct _SCSI_POWER_REQUEST_BLOCK {
  USHORT                     Length;
  UCHAR                      Function;
  UCHAR                      SrbStatus;
  UCHAR                      SrbPowerFlags;
  UCHAR                      PathId;
  UCHAR                      TargetId;
  UCHAR                      Lun;
  STOR_DEVICE_POWER_STATE    DevicePowerState;
  ULONG                      SrbFlags;
  ULONG                      DataTransferLength;
  ULONG                      TimeOutValue;
  PVOID                      DataBuffer;
  PVOID                      SenseInfoBuffer;
  struct _SCSI_REQUEST_BLOCK *NextSrb;
  PVOID                      OriginalRequest;
  PVOID                      SrbExtension;
  STOR_POWER_ACTION          PowerAction;
  ULONG                      Reserved;
  UCHAR                      Reserved5[16];
} SCSI_POWER_REQUEST_BLOCK, *PSCSI_POWER_REQUEST_BLOCK;

Члены

Length

Размер структуры SCSI_POWER_REQUEST_BLOCK в байтах.

Function

Выполняемая операция. Для структуры SCSI_POWER_REQUEST_BLOCK этот элемент всегда имеет значение SRB_FUNCTION_POWER.

SrbStatus

Состояние завершенного запроса. Этот элемент должен быть задан драйвером мини-порта, прежде чем он уведомит драйвер Storport о завершении запроса. Драйвер мини-порта уведомляет драйвер Storport о том, что запрос выполнен, вызывая функцию StorPortNotification с типом уведомления RequestComplete .

Список возможных значений этого элемента см. в SCSI_REQUEST_BLOCK документации по WDK.

SrbPowerFlags

Флаги управления питанием. В настоящее время единственным допустимым флагом является SRB_POWER_FLAGS_ADAPTER_REQUEST, который указывает, что запрос на управление питанием предназначен для адаптера. Если этот флаг установлен, драйвер мини-порта должен игнорировать значения в PathId, TargetId и Lun.

PathId

Идентификатор порта или шины SCSI для запроса. Это значение отсчитывается от нуля.

TargetId

Целевой контроллер или идентификатор устройства в шине.

Lun

Номер логического устройства (LUN).

DevicePowerState

Значение перечислителя типа STOR_DEVICE_POWER_STATE , указывающее запрошенное состояние питания устройства.

SrbFlags

Драйвер miniport должен игнорировать этот элемент.

DataTransferLength

Драйвер miniport должен игнорировать этот элемент.

TimeOutValue

Интервал выполнения запроса (в секундах) до того, как драйвер Storport определит, что время ожидания запроса истекло.

DataBuffer

Драйвер miniport должен игнорировать этот элемент.

SenseInfoBuffer

Драйвер miniport должен игнорировать этот элемент.

NextSrb

Драйвер miniport должен игнорировать этот элемент.

OriginalRequest

Драйвер miniport должен игнорировать этот элемент.

SrbExtension

Указатель на расширение SRB. Драйвер мини-порта не должен использовать этот элемент, если он устанавливает для SrbExtensionSize нулевое значение в структуре HW_INITIALIZATION_DATA . Драйвер Storport не инициализирует память, на которую указывает этот элемент. HBA может напрямую обращаться к данным, которые драйвер минипорта записывает в расширение SRB. Драйвер мини-порта может получить физический адрес расширения SRB, вызвав подпрограмму StorPortGetPhysicalAddress .

PowerAction

Значение перечислителя типа STOR_POWER_ACTION , указывающее тип завершения работы системы, которое ожидается. Это значение имеет смысл, только если устройство переходит в состояние питания D1, D2 или D3, как указано элементом DevicePowerState .

Reserved

Зарезервировано для системного использования.

Reserved5[16]

Зарезервировано для системного использования.

Комментарии

Драйвер Storport вызывает HwStorBuildIo для передачи srbs драйверу мини-порта. HwStorBuildIo должен проверка член функции SRB, чтобы определить тип SRB. Если для элемента Function задано значение SRB_FUNCTION_POWER, SRB представляет собой структуру типа SCSI_POWER_REQUEST_BLOCK.

Драйвер Storport отправляет SCSI_POWER_REQUEST_BLOCK запросы драйверу мини-порта, чтобы уведомить его о событиях питания Windows, влияющих на запоминающие устройства, подключенные к адаптеру. В случае события включения питания этот запрос дает драйверу мини-порта возможность инициализировать себя. В случае события гибернации или завершения работы этот запрос дает драйверу мини-порта возможность выполнить запросы ввода-вывода и подготовиться к отключению питания. Драйвер мини-порта может использовать значение в элементе PowerActionSCSI_POWER_REQUEST_BLOCK , чтобы определить, какие действия требуются. После того как драйвер мини-порта завершит запрос SCSI_POWER_REQUEST_BLOCK , драйвер Storport вызывает HwScsiAdapterControl с запросом управления ScsiStopAdapter для выключения адаптера. Драйвер мини-порта повторно инициализирует при обработке запроса SRB_FUNCTION_POWER или может ждать и повторно инициализировать, когда драйвер Storport вызывает HwStorAdapterControl для выполнения запроса элемента управления ScsiRestartAdapter .

При переходе из состояния питания D0 в состояние с низким энергопотреблением (D1, D2 или D3) драйвер Storport отправляет SCSI_POWER_REQUEST_BLOCK запрос драйверу мини-порта, прежде чем базовый драйвер шины выключит адаптер.

Чтобы драйвер Storport отправлял драйверу мини-порта SCSI_POWER_REQUEST_BLOCK запрос, должны существовать следующие условия:

  • Адаптер не остановлен.
  • Очередь ввода-вывода для адаптера приостановлена.
  • Оборудование адаптера отключено.
  • Мини-порт может получить доступ к аппаратным ресурсам адаптера.

Требования

Требование Значение
Заголовок minitape.h (включая Storport.h, Minitape.h, Srb.h)

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

HwStorBuildIo

SCSI_REQUEST_BLOCK

StorPortNotification