структура HW_INITIALIZATION_DATA (srb.h)
Подпрограмма DriverEntry каждого драйвера SCSI miniport должна инициализироваться с нулями, а затем заполнить соответствующие сведения о HW_INITIALIZATION_DATA (SCSI) для драйвера портов для конкретной ОС.
Синтаксис
typedef struct _HW_INITIALIZATION_DATA {
ULONG HwInitializationDataSize;
INTERFACE_TYPE AdapterInterfaceType;
PHW_INITIALIZE HwInitialize;
PHW_STARTIO HwStartIo;
PHW_INTERRUPT HwInterrupt;
PHW_FIND_ADAPTER HwFindAdapter;
PHW_RESET_BUS HwResetBus;
PHW_DMA_STARTED HwDmaStarted;
PHW_ADAPTER_STATE HwAdapterState;
ULONG DeviceExtensionSize;
ULONG SpecificLuExtensionSize;
ULONG SrbExtensionSize;
ULONG NumberOfAccessRanges;
PVOID Reserved;
BOOLEAN 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;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
Члены
HwInitializationDataSize
Задает размер этой структуры в байтах, возвращаемый методом sizeof(). По сути, этот элемент указывает версию этой структуры, используемой драйвером мини-порта. Подпрограмма DriverEntry драйвера мини-порта должна задать значение этого члена для драйвера порта.
AdapterInterfaceType
Указывает тип шины ввода-вывода, к которой подключен адаптер HBA, который может быть одним из следующих: Internal, Isa, Eisa, MicroChannel, TurboChannel или PCIBus. Однако в будущем будут поддерживаться дополнительные типы автобусов. Верхняя граница поддерживаемых типов шин всегда имеет значение MaximumInterfaceType.
Если для этого параметра задано значение PCIBus, драйвер мини-порта должен предоставить значения для членов VendorIdLength, VendorId, DeviceIdLength и DeviceId , описанных ниже.
HwInitialize
Указатель на подпрограмму HwScsiInitialize драйвера мини-порта, которая является обязательной точкой входа для всех драйверов мини-портов. Прототипом этой процедуры является PHW_INITIALIZE.
HwStartIo
Указатель на подпрограмму HwScsiStartIo драйвера мини-порта, которая является обязательной точкой входа для всех драйверов мини-портов. Прототипом этой процедуры является PHW_STARTIO.
HwInterrupt
Указатель на подпрограмму HwScsiInterrupt драйвера мини-порта, которая является обязательной точкой входа для любого драйвера минипорта адаптера HBA, который создает прерывания. Присвойте этому параметру значение NULL , если драйверу мини-порта не требуется ISR. Прототипом этой процедуры является PHW_INTERRUPT.
HwFindAdapter
Указатель на подпрограмму HwScsiFindAdapter драйвера мини-порта, которая является обязательной точкой входа для всех драйверов мини-портов. Прототипом этой процедуры является PHW_FIND_ADAPTER.
HwResetBus
Указатель на подпрограмму HwScsiResetBus драйвера мини-порта, которая является обязательной точкой входа для всех драйверов мини-портов. Прототипом этой процедуры является PHW_RESET_BUS.
HwDmaStarted
Указатель на подпрограмму HwScsiDmaStarted драйвера мини-порта, если его адаптер HBA использует системный DMA, то есть системный контроллер DMA. Присвойте этому параметру значение NULL, если HBA является шиной master или использует piO. Прототипом этой процедуры является PHW_DMA_STARTED.
HwAdapterState
Указатель на подпрограмму HwScsiAdapterState драйвера мини-порта, которая является обязательной точкой входа для драйверов мини-портов HBA с BIOS, связанных с зависящим от операционной системы драйвером портов только для платформы x86, который должен переключаться между режимами x86, защищенными x86, и режимами реального процессора. Если драйверу мини-порта не требуется подпрограмма HwScsiAdapterState , задайте для этого элемента значение NULL. Драйвер мини-порта для адаптера HBA с BIOS должен иметь подпрограмму HwScsiAdapterState, чтобы быть совместимым с драйвером портов только x86 и переноситься в среду операционной системы только x86. Прототипом этой процедуры является PHW_ADAPTER_STATE.
DeviceExtensionSize
Указывает размер в байтах, необходимый драйверу мини-порта для расширения устройства для каждого адаптера HBA. Драйвер мини-порта использует расширение устройства в качестве хранилища для сведений о HBA, определяемых драйвером. Драйвер порта, зависящий от ОС, инициализирует каждое расширение устройства, выделяемое им, с нулями, и передает указатель на расширение устройства для конкретного адаптера HBA при каждом вызове драйвера мини-порта, за исключением его подпрограммы DriverEntry . Указанный размер не включает в себя запрошенное драйвером мини-порта хранилище на логическую единицу, описанное далее.
SpecificLuExtensionSize
Указывает размер в байтах, необходимый драйверу мини-порта для его логического хранилища, если таковой есть. Драйвер мини-порта может использовать свои расширения LU в качестве хранилища для определяемых драйвером логических единиц сведений о периферийных устройствах SCSI в шине. Драйвер порта, зависящий от ОС, инициализирует каждое выделяемое расширение LU с нулями. Оставьте этот член равным нулю, если драйвер мини-порта не поддерживает сведения об отдельных LU, для которых ему требуется хранилище. Это значение основано на предположении, что HBA может получать 32-разрядные адреса независимо от того, что контроллер может фактически поддерживать. Если в расширениях LUN или SRB требуется дополнительное пространство для обработки 64-разрядных адресов, то перед использованием этого значения с такими подпрограммами, как ScsiPortGetUncachedExtension, необходимо внести соответствующие корректировки.
SrbExtensionSize
Указывает размер в байтах, необходимый драйверу мини-порта для хранилища для каждого запроса, если таковой есть. Драйвер мини-порта может использовать расширения SRB в качестве хранилища для определяемых драйвером сведений о конкретных запросах, таких как данные, необходимые для обработки конкретного запроса. Драйвер портов, зависящий от ОС, не инициализирует расширения SRB, но задает указатель на это хранилище в каждом SRB, отправляемом драйверу мини-порта. Аппаратное обеспечение HBA может безопасно получить доступ к расширению SRB. Оставьте этот элемент равным нулю, если драйвер мини-порта не поддерживает сведения по SRB, для которых ему требуется хранилище. Это значение основано на предположении, что HBA может получать 32-разрядные адреса независимо от того, что контроллер может фактически поддерживать. Если в расширениях LUN или SRB требуется дополнительное пространство для обработки 64-разрядных адресов, то перед использованием этого значения с такими подпрограммами, как ScsiPortGetUncachedExtension, необходимо внести соответствующие корректировки.
NumberOfAccessRanges
Указывает, сколько диапазонов доступа использует адаптер. Каждый из них является диапазоном адресов памяти или адресов портов ввода-вывода. Типичный адаптер HBA использует два диапазона: один для портов ввода-вывода, а другой — для диапазона памяти устройства.
Reserved
Зарезервировано для системного использования и недоступно для использования драйверами мини-портов.
MapBuffers
Указывает, если задано значение TRUE, все адреса буфера данных должны быть сопоставлены с виртуальными адресами для доступа драйвера мини-порта. При значении FALSE адреса буфера данных не нужно сопоставлять с виртуальными адресами.
NeedPhysicalAddresses
Указывает, если задано значение TRUE, драйверу мини-порта необходимо перевести свое устройство, все адреса расширений для lu и SRB, а также адреса буфера SRB в физические адреса в соответствии с требованиями HBA. При значении FALSE ни один из этих адресов не должен быть преобразован в физические адреса.
TaggedQueuing
Указывает, что при значении TRUE драйвер мини-порта может поддерживать постановку в очередь с тегами SCSI. Если задано значение FALSE, драйвер мини-порта не может поддерживать очередь с тегами SCSI.
AutoRequestSense
При значении TRUE указывает, что HBA может выполнять операцию со смыслом запроса, не требуя для этого явного запроса. При значении FALSE адаптеру HBA требуется явный запрос, прежде чем он сможет выполнить операцию управления запросом. Только драйверы мини-портов, направляемые на HBA со встроенным встроенным встроенным по встроенному ПО, для выполнения операций с контрольом запросов должны устанавливать для этого члена значение TRUE.
MultipleRequestPerLu
При значении TRUE драйвер мини-порта может ставить в очередь несколько запросов на логическую единицу, в частности в пределах адаптера безопасности. При значении FALSE драйвер мини-порта не может ставить в очередь несколько запросов на логическую единицу. Обратите внимание, что адаптер HBA должен поддерживать функцию автозапроса для своего драйвера мини-порта, чтобы включить эту функцию. Если драйвер мини-порта задает этому члену значение TRUE, он должен использовать каждый член SRB QueueTag для запросов этого типа, но SRB_FLAGS_QUEUE_ACTION_ENABLE не задан в элементе SrbFlags структуры SCSI_REQUEST_BLOCK.
ReceiveEvent
При значении TRUE указывает, что драйвер мини-порта управляет адаптером HBA, который может поддерживать SRB событий получения для асинхронных событий SCSI. При значении FALSE адаптер HBA не может поддерживать SRB события получения для асинхронных событий SCSI.
VendorIdLength
Указывает размер строки VendorId в байтах, как описано далее.
VendorId
Указатель на байтовую строку ASCII, определяющую производителя адаптера безопасности. Этот элемент не имеет отношения к драйверам Plug and Play.
Если данный тип AdapterInterfaceType — PCIBus, идентификатор поставщика — это значение USHORT, выделенное PCI SIG, которое должно быть преобразовано драйвером мини-порта в строку байтов. Например, если назначенное значение идентификатора поставщика PCI равно 1001, строка VendorId , предоставляемая драйвером мини-порта, будет иметь значение ('1', '0', '0', '1').
ReservedUshort
Зарезервировано для использования в системе и недоступно для использования драйверами мини-портов.
PortVersionFlags
DeviceIdLength
Указывает размер строки DeviceId в байтах, описанный далее.
DeviceId
Указатель на строку байтов ASCII, определяющую модели HBA, поддерживаемые драйвером мини-порта. Этот элемент не имеет отношения к драйверам Plug and Play.
Если данный adapterInterfaceType — PCIBus, идентификатор устройства — это значение USHORT, присвоенное производителем адаптера HBA. Драйвер мини-порта должен преобразовать все значения идентификаторов устройств PCI для адаптеров HBA, которые он может поддерживать, в строки байтов DeviceId , как и для члена VendorId . Например, если драйвер мини-порта может поддерживать HBA с идентификаторами устройств PCI 8040 и 8050, он может задать DeviceId с указателем на строку байтов ('8', '0').
HwAdapterControl
Указатель на подпрограмму HwScsiAdapterControl драйвера мини-порта, которая является обязательной точкой входа для всех драйверов мини-портов PnP. Установите для этого параметра значение NULL, если драйвер мини-порта не поддерживает Plug and Play.
Комментарии
Каждый драйвер мини-порта должен инициализировать структуру HW_INITIALIZATION_DATA нулями, прежде чем он задает значения соответствующих элементов в этой структуре и вызывает ScsiPortInitialize.
Член Dma64BitAddresses HW_INITIALIZATION_DATA был исключен в Windows 2000 (дополнительные сведения см. в обсуждении в разделе PORT_CONFIGURATION_DATA).
И HW_INITIALIZATION_DATA, и PORT_CONFIGURATION_INFORMATION имеют пару элементов SpecificLuExtensionSize и SrbExtensionSize , значения которых обрабатываются иначе, чем до Windows 2000. Драйвер мини-порта должен вычислять начальные значения SpecificLuExtensionSize и SrbExtensionSize в HW_INITIALIZATION_DATA исходя из предположения, что адаптер HBA способен обрабатывать 32-разрядные адреса независимо от того, что фактически поддерживает контроллер. (Дополнительные сведения см. в разделе PORT_CONFIGURATION_DATA.)
Требования
Требование | Значение |
---|---|
Заголовок | srb.h (включая Srb.h, Strmini.h) |