HW_INITIALIZATION_DATA 構造体 (srb.h)
各 SCSI ミニポート ドライバーの DriverEntry ルーチンは、0 で初期化し、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 ルーチンへのポインター。これは、オペレーティング システムに依存する x86 プラットフォーム専用のポート ドライバーとリンクされ、x86 で保護されたプロセッサ モードと実際のプロセッサ モードを切り替える必要がある BIOS を持つ HBA のミニポート ドライバーに必要なエントリ ポイントです。 ミニポート ドライバーに HwScsiAdapterState ルーチンが必要ない場合は、このメンバーを NULL に設定 します。 X86 専用ポート ドライバーと互換性があり、x86 専用オペレーティング システム環境に移植するには、BIOS を持つ HBA のミニポート ドライバーに HwScsiAdapterState ルーチンが必要です。 このルーチンのプロトタイプは PHW_ADAPTER_STATE。
DeviceExtensionSize
ミニポート ドライバーの HBA ごとのデバイス拡張機能に必要なバイト単位のサイズを指定します。 ミニポート ドライバーは、ドライバーによって決定された HBA 情報の記憶域として、そのデバイス拡張機能を使用します。 OS 固有のポート ドライバーは、割り当てる各デバイス拡張機能を 0 で初期化し、 DriverEntry ルーチンを除くミニポート ドライバーの呼び出しごとに HBA 固有のデバイス拡張機能へのポインターを渡します。 指定されたサイズには、次に説明するミニポート ドライバー要求の論理ユニットごとの記憶域は含まれません。
SpecificLuExtensionSize
ミニポート ドライバーが論理ユニットごとの記憶域に必要なサイズ (存在する場合) をバイト単位で指定します。 ミニポート ドライバーは、バス上の SCSI 周辺機器に関するドライバーによって決定された論理ユニット情報の記憶域として、その LU 拡張機能を使用できます。 OS 固有のポート ドライバーは、割り当てる各 LU 拡張機能をゼロで初期化します。 ミニポート ドライバーが記憶域を必要とする LU ごとの情報を保持しない場合は、このメンバーを 0 のままにします。 この値は、コントローラーが実際にサポートできる内容に関係なく、HBA が 32 ビット アドレスを受け取ることができるという前提に基づいています。 64 ビット アドレスを処理するために LUN または SRB 拡張機能に追加の領域が必要な場合は、 ScsiPortGetUncachedExtension などのルーチンで使用する前に、この値に対して適切な調整を行う必要があります。
SrbExtensionSize
要求ごとの記憶域のミニポート ドライバーに必要なサイズをバイト単位で指定します (存在する場合)。 ミニポート ドライバーは、特定の要求を処理するために必要なデータなど、ドライバーによって決定された要求固有の情報の記憶域として SRB 拡張機能を使用できます。 OS 固有のポート ドライバーは SRB 拡張機能を初期化しませんが、ミニポート ドライバーに送信する各 SRB 内のこの記憶域へのポインターを設定します。 SRB 拡張機能には、HBA ハードウェアから安全にアクセスできます。 ミニポート ドライバーが記憶域を必要とする SRB ごとの情報を維持しない場合は、このメンバーを 0 のままにします。 この値は、コントローラーが実際にサポートできる内容に関係なく、HBA が 32 ビット アドレスを受け取ることができるという前提に基づいています。 64 ビット アドレスを処理するために LUN または SRB 拡張機能に追加の領域が必要な場合は、 ScsiPortGetUncachedExtension などのルーチンで使用する前に、この値に対して適切な調整を行う必要があります。
NumberOfAccessRanges
アダプターが使用するアクセス範囲の数を指定します。 各アドレスは、メモリ アドレスまたは I/O ポート アドレスの範囲です。 一般的な HBA では、2 つの範囲 (1 つは I/O ポート用、もう 1 つはデバイス メモリ範囲) を使用します。
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 メンバーを使用する必要がありますが、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 の場合、ベンダー ID は PCI SIG によって割り当てられた USHORT 値であり、ミニポート ドライバーによってバイト文字列に変換される必要があります。 たとえば、割り当てられた PCI ベンダー ID の値が 1001 の場合、ミニポート ドライバーから提供される VendorId 文字列は ('1'、'0'、'0'、'1') になります。
ReservedUshort
システム使用用に予約されており、ミニポート ドライバーでは使用できません。
PortVersionFlags
DeviceIdLength
次に説明する DeviceId 文字列のサイズをバイト単位で指定します。
DeviceId
ミニポート ドライバーでサポートされている HBA モデルを識別する ASCII バイト文字列へのポインター。 このメンバーは、プラグ アンド プレイドライバーには関係ありません。
指定された AdapterInterfaceType が PCIBus の場合、デバイス ID は HBA の製造元によって割り当てられた USHORT 値です。 ミニポート ドライバーは、サポートできる HBA の PCI デバイス ID 値を VendorId メンバーと同様に DeviceId バイト文字列に変換する必要があります。 たとえば、ミニポート ドライバーが PCI デバイス ID 8040 と 8050 で HBA をサポートできる場合は、バイト文字列 ('8'、'0') へのポインターを持つ DeviceId を設定できます。
HwAdapterControl
ミニポート ドライバーの HwScsiAdapterControl ルーチンへのポインター。これは、すべての PnP ミニポート ドライバーに必要なエントリ ポイントです。 ミニポート ドライバーがプラグ アンド プレイをサポートしていない場合は、これを NULL に設定します。
注釈
各ミニポート ドライバーは、この構造体の関連するメンバーの値を設定し、 ScsiPortInitialize を呼び出す前に、0 でHW_INITIALIZATION_DATA構造体を初期化する必要があります。
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」の説明を参照してください)。
要件
要件 | 値 |
---|---|
Header | srb.h (Srb.h、Strmini.h を含む) |