HW_INITIALIZATION_DATA 結構 (srb.h)
每個 SCSI 迷你埠驅動程式的 DriverEntry 例程都必須以零初始化,然後填入 OS 特定埠驅動程式的相關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 連接的 I/O 總線類型,可以是下列其中一項:Internal、Isa、Eisa、MicroChannel、TurboChannel 或 PCIBus。 不過,未來將會支援其他類型的公交車。 支援的總線類型上限一律為 MaximumInterfaceType。
如果這設定為PCIBus,迷你埠驅動程序必須提供 VendorIdLength、VendorId、DeviceIdLength 和 DeviceId 成員的值,稍後所述。
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 例程指標,這是 HBA 迷你埠驅動程式的必要進入點,其與操作系統相依、僅限 x86 平臺的埠驅動程序必須切換 x86 受保護和實際處理器模式。 如果迷你埠驅動程式不需要 HwScsiAdapterState 例程,請將此成員設定為 NULL。 具有 BIOS 之 HBA 的迷你埠驅動程式必須具有 HwScsiAdapterState 例程,才能與僅限 x86 的埠驅動程式相容,並可移植到僅限 x86 的操作系統環境。 此例程的原型PHW_ADAPTER_STATE。
DeviceExtensionSize
針對每個 HBA 裝置擴充功能,指定迷你埠驅動程式所需的位元組大小。 迷你埠驅動程式會使用其裝置擴充功能作為驅動程序決定 HBA 資訊的記憶體。 OS 特定的埠驅動程式會初始化其配置零的每個裝置擴充功能,並在每次呼叫迷你埠驅動程式時傳遞 HBA 特定裝置延伸模組的指標,但 DriverEntry 例程除外。 指定的大小不包含每個邏輯單元記憶體所要求的任何迷你埠驅動程式,如下所述。
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 時,迷你埠驅動程式必須視 HBA 的需求,將其裝置、任何個別 LU 和任何個別 SRB 擴充位址以及 SRB 緩衝區地址轉譯為實體位址。 當為 FALSE 時,這些位址都不需要轉譯為實體位址。
TaggedQueuing
指出 當為 TRUE 時,迷你埠驅動程式可以支援 SCSI 標記的佇列。 當 為 FALSE 時,迷你埠驅動程式不支援 SCSI 標記的佇列。
AutoRequestSense
表示當 為 TRUE 時,HBA 可以執行要求感知作業,而不需要明確要求。 當 為 FALSE 時,HBA 需要明確的要求,才能執行要求感知作業。 只有驅動具有內建韌體執行要求感知作業之 HBA 的迷你埠驅動程式應將此成員設定為 TRUE。
MultipleRequestPerLu
指出當 為 TRUE 時,迷你埠驅動程式可以針對每個邏輯單元排入多個要求,特別是 HBA 內。 當 為 FALSE 時,迷你埠驅動程式無法針對每個邏輯單元排入多個要求佇列。 請注意,HBA 必須支援其迷你埠驅動程序的自動要求感知,才能啟用這項功能。 如果迷你埠驅動程式將此成員設定為 TRUE,則必須針對此類型的要求使用每個 SRB QueueTag 成員,但SRB_FLAGS_QUEUE_ACTION_ENABLE未在SCSI_REQUEST_BLOCK 結構的 SrbFlags 成員中設定。
ReceiveEvent
指出當 為 TRUE 時,迷你埠驅動程式會驅動可支援 SCSI 異步事件的接收事件 SRB 的 HBA。 當為 FALSE 時,HBA 不支援 SCSI 異步事件的接收事件 SRB。
VendorIdLength
指定 VendorId 字串的位元組大小,如下所述。
VendorId
識別 HBA 製造商的 ASCII 位元組字串指標。 此成員與 隨插即用 驅動程序無關。
如果指定的 AdapterInterfaceType 是 PCIBus,廠商識別碼是 PCI SIG 所配置的 USHORT 值,此值必須由迷你埠驅動程式轉換成位元組字元串。 例如,如果指派的PCI廠商標識碼值為1001,則迷你埠驅動程式提供的 VendorId 字串會 ('1'、'0'、'0'、'0'、'1') 。
ReservedUshort
保留供系統使用,且無法供迷你埠驅動程式使用。
PortVersionFlags
DeviceIdLength
指定 DeviceId 字串的位元組大小,如下所述。
DeviceId
識別迷你埠驅動程式所支援之 HBA 模型的 ASCII 位元組位元串指標 (s) 。 此成員與 隨插即用 驅動程序無關。
如果指定的 AdapterInterfaceType 是 PCIBus,則裝置識別碼是由 HBA 製造商指派的 USHORT 值。 迷你埠驅動程序必須將 HBA () s (s) 的任何 PCI 裝置識別碼值轉換成 DeviceId 位元元元串 (s) ,如同 VendorId 成員一樣。 例如,如果迷你埠驅動程式可以使用PCI裝置標識碼8040和8050支援HBA,它可能會使用位元組字串的指標來設定 DeviceId , ('8'、'0') 。
HwAdapterControl
迷你埠驅動程式 的 HwScsiAdapterControl 例程指標,這是所有 PnP 迷你埠驅動程式的必要進入點。 如果迷你埠驅動程式不支援 隨插即用,請將此設定為 NULL。
備註
每個迷你埠驅動程式都必須使用零初始化HW_INITIALIZATION_DATA結構,才能設定這個結構中相關成員的值,並呼叫 ScsiPortInitialize。
HW_INITIALIZATION_DATA的 Dma64BitAddresses 成員已在 Windows 2000 中排除 (如需進一步的詳細數據,請參閱PORT_CONFIGURATION_DATA下的討論) 。
HW_INITIALIZATION_DATA和PORT_CONFIGURATION_INFORMATION都有一組稱為 SpecificLuExtensionSize 和 SrbExtensionSize 的成員,其值處理方式與 Windows 2000 之前的值不同。 迷你埠驅動程式必須根據 HBA 能夠處理 32 位位址的假設,在 HW_INITIALIZATION_DATA 中計算 SpecificLuExtensionSize 和 SrbExtensionSize 的初始值,而不論控制器可以實際支持什麼。 (如需詳細資訊,請參閱PORT_CONFIGURATION_DATA下的討論。)
規格需求
需求 | 值 |
---|---|
標頭 | srb.h (包含 Srb.h、Strmini.h) |