HW_INITIALIZATION_DATA 结构 (srb.h)

每个 SCSI 微型端口驱动程序的 DriverEntry 例程都必须使用零初始化,然后填写特定于 OS 的端口驱动程序的相关HW_INITIALIZATION_DATA (SCSI) 信息。

注意 SCSI 端口驱动程序和 SCSI 微型端口驱动程序模型将来可能会更改或不可用。 建议改用 Storport 驱动程序Storport 微型端口 驱动程序模型。
 

语法

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 连接到的 I/O 总线类型,可以是以下类型之一: InternalIsaEisaMicroChannelTurboChannelPCIBus。 但是,将来将支持其他类型的总线。 支持的总线类型的上限始终为 MaximumInterfaceType

如果此值设置为 PCIBus,则微型端口驱动程序必须为 VendorIdLengthVendorIdDeviceIdLengthDeviceId 成员提供值,如后面所述。

HwInitialize

指向微型端口驱动程序的 HwScsiInitialize 例程的指针,该例程是所有微型端口驱动程序的必需入口点。 此例程的原型是 PHW_INITIALIZE

HwStartIo

指向微型端口驱动程序的 HwScsiStartIo 例程的指针,该例程是所有微型端口驱动程序的必需入口点。 此例程的原型是 PHW_STARTIO

HwInterrupt

指向微型端口驱动程序的 HwScsiInterrupt 例程的指针,该例程是生成中断的 HBA 的任何微型端口驱动程序所需的入口点。 如果微型端口驱动程序不需要 ISR,则将此设置为 NULL 。 此例程的原型PHW_INTERRUPT。

HwFindAdapter

指向微型端口驱动程序的 HwScsiFindAdapter 例程的指针,该例程是所有微型端口驱动程序的必需入口点。 此例程的原型是 PHW_FIND_ADAPTER

HwResetBus

指向微型端口驱动程序的 HwScsiResetBus 例程的指针,该例程是所有微型端口驱动程序的必需入口点。 此例程的原型PHW_RESET_BUS。

HwDmaStarted

指向微型端口驱动程序的 HwScsiDmaStarted 例程的指针(如果其 HBA 使用系统 DMA,即系统 DMA 控制器)。 如果 HBA 是总线主机或使用 PIO,则将此设置为 NULL 。 此例程的原型是 PHW_DMA_STARTED

HwAdapterState

指向微型端口驱动程序的 HwScsiAdapterState 例程的指针,该例程是具有 BIOS 的 HBA 的微型端口驱动程序所需的入口点,这些驱动程序与必须在 x86 保护模式和实际处理器模式之间切换的操作系统相关、仅限 x86 平台的端口驱动程序相关联。 如果微型端口驱动程序不需要 HwScsiAdapterState 例程,请将此成员设置为 NULL。 具有 BIOS 的 HBA 的微型端口驱动程序必须具有 HwScsiAdapterState 例程,才能与仅限 x86 的端口驱动程序兼容,并可移植到仅限 x86 的操作系统环境。 此例程的原型PHW_ADAPTER_STATE。

DeviceExtensionSize

指定微型端口驱动程序为其每个 HBA 设备扩展所需的大小(以字节为单位)。 微型端口驱动程序使用其设备扩展作为驱动程序确定的 HBA 信息的存储。 特定于 OS 的端口驱动程序使用零初始化它分配的每个设备扩展,并在每次调用微型端口驱动程序(除其 DriverEntry 例程外)中传递一个指向特定于 HBA 的设备扩展的指针。 给定的大小不包括任何微型端口驱动程序请求的每个逻辑单元存储,如下所述。

SpecificLuExtensionSize

指定微型端口驱动程序为其每个逻辑单元存储(如果有)所需的大小(以字节为单位)。 微型端口驱动程序可以使用其 LU 扩展作为存储,存储有关总线上的 SCSI 外设的驱动程序确定的逻辑单元信息。 特定于 OS 的端口驱动程序使用零初始化它分配的每个 LU 扩展。 如果微型端口驱动程序不维护需要存储的每个 LU 信息,请将此成员设置为零。 此值基于以下假设:HBA 能够接收 32 位地址,而不管控制器实际支持什么。 如果在 LUN 或 SRB 扩展中需要额外的空间来处理 64 位地址,则必须对此值进行适当的调整,然后再将其与例程(如 ScsiPortGetUncachedExtension)配合使用。

SrbExtensionSize

指定微型端口驱动程序为其每个请求存储(如果有)所需的大小(以字节为单位)。 微型端口驱动程序可以使用 SRB 扩展作为驱动程序确定的特定于请求的信息的存储,例如处理特定请求所需的数据。 特定于 OS 的端口驱动程序不会初始化 SRB 扩展,而是在发送到微型端口驱动程序的每个 SRB 中设置指向此存储的指针。 HBA 硬件可以安全地访问 SRB 扩展。 如果微型端口驱动程序不维护需要存储的每个 SRB 信息,请将此成员设置为零。 此值基于以下假设:HBA 能够接收 32 位地址,而不管控制器实际支持什么。 如果在 LUN 或 SRB 扩展中需要额外的空间来处理 64 位地址,则必须对此值进行适当的调整,然后再将其与例程(如 ScsiPortGetUncachedExtension)配合使用。

NumberOfAccessRanges

指定适配器使用的访问范围数。 每个都是内存地址或 I/O 端口地址的范围。 典型的 HBA 使用两个范围,一个用于其 I/O 端口,另一个用于其设备内存范围。

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 时,指示微型端口驱动程序可以为每个逻辑单元(特别是在 HBA 内)排队多个请求。 如果 为 FALSE,微型端口驱动程序无法为每个逻辑单元排队多个请求。 请注意,HBA 必须支持其微型端口驱动程序的自动请求感知才能启用此功能。 如果微型端口驱动程序将此成员设置为 TRUE,则必须将每个 SRB QueueTag 成员用于此类型的请求,但不在 SCSI_REQUEST_BLOCK 结构的 SrbFlags 成员中设置SRB_FLAGS_QUEUE_ACTION_ENABLE。

ReceiveEvent

为 TRUE 时,指示微型端口驱动程序驱动可支持 SCSI 异步事件的接收事件 SRB 的 HBA。 如果 为 FALSE,则 HBA 不支持 SCSI 异步事件的接收事件 SRB。

VendorIdLength

指定 VendorId 字符串的大小(以字节为单位),如下所述。

VendorId

指向标识 HBA 制造商的 ASCII 字节字符串的指针。 此成员与即插即用驱动程序无关。

如果给定的 AdapterInterfaceTypePCIBus,则供应商 ID 是 PCI SIG 分配的 USHORT 值,必须由微型端口驱动程序将其转换为字节字符串。 例如,如果分配的 PCI 供应商 ID 值为 1001,则微型端口驱动程序提供的 VendorId 字符串将为 ('1'、'0'、'0'、'1') 。

ReservedUshort

保留供系统使用,不能供微型端口驱动程序使用。

PortVersionFlags

DeviceIdLength

指定 DeviceId 字符串的大小(以字节为单位),如下所述。

DeviceId

指向 ASCII 字节字符串的指针,标识微型端口驱动程序支持的 HBA 模型 () 。 此成员与即插即用驱动程序无关。

如果给定的 AdapterInterfaceTypePCIBus,则设备 ID 是 HBA 制造商分配的 USHORT 值。 微型端口驱动程序必须将 HBA (s) 支持的任何 PCI 设备 ID 值 () 转换为 DeviceId 字节字符串 (s) ,对于 VendorId 成员。 例如,如果微型端口驱动程序可以使用 PCI 设备 ID 8040 和 8050 支持 HBA,则它可能会使用指向字节字符串 ('8'、'0') 的指针设置 DeviceId

HwAdapterControl

指向微型端口驱动程序的 HwScsiAdapterControl 例程的指针,该例程是所有 PnP 微型端口驱动程序的必需入口点。 如果微型端口驱动程序不支持即插即用,则将此设置为 NULL

注解

每个微型端口驱动程序必须先用零初始化 HW_INITIALIZATION_DATA 结构,然后才能设置此结构中相关成员的值并调用 ScsiPortInitialize

HW_INITIALIZATION_DATA的 Dma64BitAddresses 成员已在 Windows 2000 (请参阅PORT_CONFIGURATION_DATA下的讨论,了解) 的更多详细信息。

HW_INITIALIZATION_DATA和PORT_CONFIGURATION_INFORMATION都有一对名为 SpecificLuExtensionSizeSrbExtensionSize 的成员,其值的处理方式与 Windows 2000 之前不同。 微型端口驱动程序必须基于 HBA 能够处理 32 位地址的假设,计算 HW_INITIALIZATION_DATA 中的 SpecificLuExtensionSizeSrbExtensionSize 的初始值,而不管控制器实际支持什么。 (有关更多详细信息,请参阅PORT_CONFIGURATION_DATA下的讨论。)

要求

要求
Header srb.h (包括 Srb.h、Strmini.h)

另请参阅

SCSI 微型端口驱动程序的 DriverEntry

HwScsiInitialize

SCSI_REQUEST_BLOCK

ScsiPortInitialize