структура HW_INITIALIZATION_DATA (storport.h)
Структура HW_INITIALIZATION_DATA (Storport) содержит сведения, определенные для каждого драйвера минипорта и оборудования, которым управляет драйвер минипорта.
Синтаксис
typedef struct _HW_INITIALIZATION_DATA {
ULONG HwInitializationDataSize;
INTERFACE_TYPE AdapterInterfaceType;
PHW_INITIALIZE HwInitialize;
PHW_STARTIO HwStartIo;
PHW_INTERRUPT HwInterrupt;
PVOID HwFindAdapter;
PHW_RESET_BUS HwResetBus;
PHW_DMA_STARTED HwDmaStarted;
PHW_ADAPTER_STATE HwAdapterState;
ULONG DeviceExtensionSize;
ULONG SpecificLuExtensionSize;
ULONG SrbExtensionSize;
ULONG NumberOfAccessRanges;
PVOID Reserved;
UCHAR MapBuffers;
BOOLEAN NeedPhysicalAddresses;
BOOLEAN TaggedQueuing;
BOOLEAN AutoRequestSense;
BOOLEAN MultipleRequestPerLu;
BOOLEAN ReceiveEvent;
USHORT VendorIdLength;
PVOID VendorId;
union {
USHORT ReservedUshort;
USHORT PortVersionFlags;
};
USHORT DeviceIdLength;
PVOID DeviceId;
PHW_ADAPTER_CONTROL HwAdapterControl;
PHW_BUILDIO HwBuildIo;
PHW_FREE_ADAPTER_RESOURCES HwFreeAdapterResources;
PHW_PROCESS_SERVICE_REQUEST HwProcessServiceRequest;
PHW_COMPLETE_SERVICE_IRP HwCompleteServiceIrp;
PHW_INITIALIZE_TRACING HwInitializeTracing;
PHW_CLEANUP_TRACING HwCleanupTracing;
PHW_TRACING_ENABLED HwTracingEnabled;
ULONG FeatureSupport;
ULONG SrbTypeFlags;
ULONG AddressTypeFlags;
ULONG Reserved1;
PHW_UNIT_CONTROL HwUnitControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
Члены
HwInitializationDataSize
Задает размер этой структуры в байтах, возвращаемую sizeof(HW_INITIALIZATION_DATA). В действительности этот элемент указывает версию этой структуры, используемой драйвером мини-порта. Подпрограмма DriverEntry драйвера miniport должна задать значение этого члена для драйвера порта.
AdapterInterfaceType
Драйвер Storport не поддерживает устаревшие автобусы. Поэтому большинство типов интерфейсов адаптера, используемых с драйвером портов SCSI, недопустимы для Storport. В частности, Иса, Эйза, MicroChannelи TurboChannel не поддерживаются. Кроме того, в отличие от регистра порта SCSI, мини-драйвер, который работает с драйвером Storport, не требуется для предоставления значений для VendorIdLength, VendorId, DeviceIdLengthи элементов DeviceId.
HwInitialize
Указатель на драйвера минипорта HwStorInitialize подпрограмму, которая является обязательной точкой входа для всех драйверов минипорта.
HwStartIo
Указатель на подпрограмму драйвера минипорта HwStorStartIo, которая является обязательной точкой входа для всех драйверов минипорта.
HwInterrupt
Указатель на
HwFindAdapter
Указатель на
HwResetBus
Указатель на подпрограмму драйвера минипорта HwStorResetBus, которая является обязательной точкой входа для всех драйверов минипорта.
HwDmaStarted
Драйвер Storport не поддерживает DMA в подчиненном режиме. Поэтому этот элемент должен быть NULL.
HwAdapterState
Драйвер Storport не поддерживает устаревшие драйверы. Поэтому этот элемент должен быть NULL.
DeviceExtensionSize
Указывает размер в байтах, необходимый мини-драйверу для расширения устройства для каждого адаптера. Мини-порт драйвер использует свое расширение устройства в качестве хранилища для сведений адаптера шины узла(HBA). Драйвер порта для конкретной операционной системы инициализирует каждое расширение устройства один раз, когда он сначала выделяет расширение и заполняет его нулями. Он передает указатель на расширение устройства hBA в каждом вызове минипорта драйвера. Указанный размер не включает в себя запрошенное мини-драйвером хранилище для логического блока. Размер хранилища для каждого логического блока указывается с помощью поля SpecificLuExtensionSize, описанного далее в этом разделе.
Хотя SCSIPort повторно инициализирует расширение устройства при остановке адаптера и таким образом последующие вызовы HwScsiFindAdapter получают расширение устройства с отсчитываемой от нуля, Storport не следует этой модели. Скорее, Storport сбрасывает расширение устройства до нуля только при первом выделении, поэтому только первый вызов HwStorFindAdapter для данного адаптера получает расширение устройства с отсчитываемой от нуля. Последующие вызовы HwStorFindAdapter и другие функции минипорта получают расширение устройства, как последнее изменение минипортом. Это позволяет минипорт-драйверу поддерживать знания о состоянии адаптера между подключаемым модулем и перезапуском (PnP), что позволяет мини-драйверу оптимизировать процедуру инициализации.
SpecificLuExtensionSize
Указывает размер в байтах, необходимый драйверу мини-порта для его хранилища по логическому блоку, если таковой имеется. Минипорт-драйвер может использовать расширения LU в качестве хранилища для сведений о периферийных устройствах на шине, определяемых драйвером. Драйвер Storport инициализирует каждое расширение LU, выделяемое с нулями. Оставьте этот член равным нулю, если драйвер минипорта не поддерживает сведения о lu-LU, для которых требуется хранилище. Это значение основано на предположении, что HBA может получать 32-разрядные адреса независимо от того, что контроллер может фактически поддерживать. Если требуется дополнительное пространство в расширениях LUN или SRB для обработки 64-разрядных адресов, необходимо внести соответствующие корректировки в это значение, прежде чем использовать его с подпрограммами, такими как StorPortGetUncachedExtension.
SrbExtensionSize
Указывает размер в байтах, необходимый мини-драйверу для своего хранилища на запрос, если таковой имеется. Минипорт-драйвер может использовать расширения SRB в качестве хранилища для определяемых драйвером, определенных запросом сведений, таких как данные, необходимые для обработки конкретного запроса. Драйвер Storport не инициализирует расширения SRB, но задает указатель на это хранилище в каждом SRB, который отправляется в мини-драйвер. Расширение SRB можно безопасно получить с помощью оборудования HBA. Так как минипорт-драйверы, работающие с драйвером Storport, должны поддерживать списки точечной и сборной, а списки точечной и сборной для каждого SRB обычно выделяются в расширении SRB, этот элемент редко равен нулю. Оставьте этот член равным нулю, если драйвер минипорта не поддерживает сведения о SRB, для которых требуется хранилище.
Это значение основано на предположении, что HBA может получать 32-разрядные адреса независимо от того, что контроллер может фактически поддерживать. Если требуется дополнительное пространство в расширениях LUN или SRB для обработки 64-разрядных адресов, необходимо внести соответствующие корректировки в это значение, прежде чем использовать его с подпрограммами, такими как StorPortGetUncachedExtension.
NumberOfAccessRanges
Указывает, сколько диапазонов доступа использует адаптер. Каждый из них — это диапазон адресов памяти или портов ввода-вывода.
Reserved
Зарезервировано для использования системой и недоступно для использования мини-драйверами.
MapBuffers
Указывает, сопоставляет ли драйвер Storport адреса буфера данных SRB с системными виртуальными адресами. Элемент MapBuffers может иметь одно из следующих значений.
Ценность | Значение |
---|---|
STOR_MAP_NO_BUFFERS (0) | Не сопоставляйте никакие SRB, кроме SRB_FUNCTION_IO_CONTROL и SRB_FUNCTION_WMI. |
STOR_MAP_ALL_BUFFERS (1) | Устаревший. Это значение имеет тот же эффект, что и STOR_MAP_NON_READ_WRITE_BUFFERS. |
STOR_MAP_NON_READ_WRITE_BUFFERS (2) | Сопоставляйте буфер для всех операций ввода-вывода, за исключением запросов на чтение или запись. |
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE (3) | Сопоставляйте буфер для всех операций ввода-вывода, включая запросы на чтение и запись. Это значение допустимо начиная с Windows 8. |
NeedPhysicalAddresses
Необходимо задать значение TRUE. Значение TRUE указывает, что драйвер минипорта должен переводить определенные типы адресов на физические адреса. Минипорт-драйверы, работающие с драйвером Storport, должны поддерживать DMA главного автобуса, поэтому они всегда должны выполнять перевод адресов.
TaggedQueuing
Необходимо задать значение TRUE. Значение TRUE указывает, что драйвер минипорта поддерживает очередь с тегами SCSI. Все драйверы минипорта, работающие с драйвером Storport, должны поддерживать пометку очереди.
AutoRequestSense
Должен быть TRUE. Значение TRUE указывает, что HBA может выполнять операцию", не требуя явного запроса для этого. Все драйверы минипорта, работающие с драйвером Storport, должны поддерживать функцию автозапуска SCSI.
MultipleRequestPerLu
Необходимо задать значение TRUE. Значение TRUE указывает, что драйвер мини-порта может очереди нескольких запросов на логическую единицу. Минипорт-драйверы, работающие с драйвером Storport, должны поддерживать несколько запросов на логическую единицу.
ReceiveEvent
Драйвер Storport игнорирует этот элемент.
VendorIdLength
Драйвер Storport игнорирует этот элемент, так как драйверы минипорта, работающие с драйвером Storport, должны поддерживать PnP.
VendorId
Драйвер Storport игнорирует этот элемент, так как драйверы минипорта, работающие с драйвером Storport, должны поддерживать PnP.
ReservedUshort
PortVersionFlags
Флаги, указывающие поддерживаемые функции.
DeviceIdLength
Драйвер Storport игнорирует этот элемент, так как драйверы минипорта, работающие с драйвером Storport, должны поддерживать PnP.
DeviceId
Драйвер Storport игнорирует этот элемент, так как драйверы минипорта, работающие с драйвером Storport, должны поддерживать PnP.
HwAdapterControl
Указатель на
HwBuildIo
Указатель на необязательную процедуру
HwFreeAdapterResources
Указатель на драйвера виртуального минипорта HwStorFreeAdapterResources подпрограммой, которая является обязательной точкой входа для всех драйверов виртуального минипорта. Этот обратный вызов зависит от виртуальных мини-портов и имеет значение NULL для физических мини-портов.
Этот обратный вызов добавляется в Windows 8. Виртуальные мини-порты для предыдущих версий Windows должны использовать VIRTUAL_HW_INITIALIZATION_DATA вместо этой структуры.
HwProcessServiceRequest
Указатель на
Этот обратный вызов добавляется в Windows 8. Виртуальные мини-порты для предыдущих версий Windows должны использовать VIRTUAL_HW_INITIALIZATION_DATA вместо этой структуры.
HwCompleteServiceIrp
Указатель на
Этот обратный вызов добавляется в Windows 8. Виртуальные мини-порты для предыдущих версий Windows должны использовать VIRTUAL_HW_INITIALIZATION_DATA вместо этой структуры.
HwInitializeTracing
Указатель на
Этот обратный вызов добавляется в Windows 8. Виртуальные мини-порты для предыдущих версий Windows должны использовать VIRTUAL_HW_INITIALIZATION_DATA вместо этой структуры.
HwCleanupTracing
Указатель на
Этот обратный вызов добавляется в Windows 8. Виртуальные мини-порты для предыдущих версий Windows должны использовать VIRTUAL_HW_INITIALIZATION_DATA вместо этой структуры.
HwTracingEnabled
Указатель на необязательный HwStorTracingEnabled подпрограммой, которую драйвер портов вызывает для уведомления минипорта о том, включена ли трассировка.
FeatureSupport
Флаги, указывающие функции, поддерживаемые минипортом. FeatureSupport задано сочетание следующих значений:
Ценность | Значение |
---|---|
STOR_FEATURE_VIRTUAL_MINIPORT (0x00000001) | Это виртуальный минипорт-драйвер. |
STOR_FEATURE_ATA_PASS_THROUGH (0x00000002) | Минипорт поддерживает передачу ATA. |
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES (0x00000004) | Минипорт предоставляет полные параметры в своей STOR_DEVICE_CAPABILITIES_EX структуре. |
STOR_FEATURE_DUMP_POINTERS (0x00000008) | Минипорт поддерживает указатели дампа. |
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX (0x00000010) | Минипорт-драйвер не хочет, чтобы суффикс "SCSI тип устройство" в составе понятного имени устройства. |
STOR_FEATURE_DUMP_RESUME_CAPABLE (0x00000020) | Возможность дампа мини-порта работает для возобновления работы с гибернацией. |
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD (0x00000040) | Драйвер Storport инициализирует STORAGE_DEVICE_DESCRIPTOR на странице СВЕДЕНИЙ ATA, а не из данных ЗАПРОСА. |
STOR_FEATURE_EXTRA_IO_INFORMATION (0x00000080) | Минипорт-драйвер хочет SRBEX_DATA_IO_INFO в SRBEX, если он доступен. |
STOR_FEATURE_ADAPTER_CONTROL_PRE_FINDADAPTER (0x00000100) | Драйвер минипорта может безопасно обрабатывать вызов AdapterControl из Storport перед получением HwFindAdapter. |
STOR_FEATURE_ADAPTER_NOT_REQUIRE_IO_PORT (0x00000200) | Драйвер минипорта не требует ресурса порта ввода-вывода для своего адаптера. |
STOR_FEATURE_DUMP_16_BYTE_ALIGNMENT (0x00000400) | Минипорт-драйвер хочет, чтобы его HwDeviceExtension было 16 байтов, выровненных в режиме дампа. |
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE (0x00000800) | Минипорт хочет, чтобы Storport установил тип интерфейса адаптера. |
STOR_FEATURE_DUMP_INFO (0x00001000) | Минипорт-драйвер поддерживает сведения о дампах. |
STOR_FEATURE_DMA_ALLOCATION_NO_BOUNDARY (0x00002000) | Минипорт-драйвер поддерживает выделение DMA физической памяти без границ. |
STOR_FEATURE_SUPPORTS_NVME_ADAPTER (0x00004000) | Минипорт-драйвер поддерживает адаптеры хранилища на основе NVMe. |
STOR_FEATURE_REPORT_INTERNAL_DATA (0x00008000) | Драйвер минипорта поддерживает отчеты о внутренних данных. |
STOR_FEATURE_EARLY_DUMP (0x00010000) | Минипорт-драйвер поддерживает раннее создание дампа аварийного сбоя. |
STOR_FEATURE_NVME_ICE (0x00020000) | Минипорт-драйвер поддерживает NVMe ICE. |
SrbTypeFlags
Флаги, указывающие типы SRB, поддерживаемые минипортом. SrbTypeFlags имеет значение 0 или сочетание следующих значений:
Ценность | Значение |
---|---|
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK (0x1) | Минипорт использует стандартные SRB. |
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK (0x2) | Минипорт поддерживает расширенные ССР. |
AddressTypeFlags
Схемы адресов, поддерживаемые минипортом. В настоящее время поддерживается только одна схема адресов, а минипорт должен задать для этого элемента значение ADDRESS_TYPE_FLAG_BTL8.
Ценность | Значение |
---|---|
ADDRESS_TYPE_FLAG_BTL8 (0x1) | 8-разрядная адресация шины, целевого объекта и LUN (BTL). |
Reserved1
Зарезервировано, задайте значение 0.
HwUnitControl
Указатель на
Замечания
Каждый драйвера минипорта Storport DriverEntry должен вызывать StorPortInitialize после того, как драйвер минипорта сначала обнулился, а затем задать члены HW_INITIALIZATION_DATA.
Требования
Требование | Ценность |
---|---|
заголовка | storport.h (include Storport.h) |