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 バスの種類を指定します。内部、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 プラットフォーム専用ポート ドライバーとリンクされている BIOS を持つ HBA のミニポート ドライバーに必要なエントリ ポイントであり、x86 保護されたプロセッサ モードと実際のプロセッサ モードを切り替える必要があります。 ミニポート ドライバーに HwScsiAdapterState ルーチン 必要がない場合は、このメンバーを NULLに設定します。 BIOS を備えた HBA のミニポート ドライバーは、x86 専用ポート ドライバーと互換性があり、x86 専用オペレーティング システム環境に移植できるようにするために HwScsiAdapterState ルーチンを持っている必要があります。 このルーチンのプロトタイプは PHW_ADAPTER_STATEです。
DeviceExtensionSize
ミニポート ドライバーの HBA ごとのデバイス拡張機能に必要なバイト単位のサイズを指定します。 ミニポート ドライバーは、ドライバーによって決定された HBA 情報の記憶域として、そのデバイス拡張機能を使用します。 OS 固有のポート ドライバーは、割り当てる各デバイス拡張機能を 0 で初期化し、ミニポート ドライバーの呼び出しごとに HBA 固有のデバイス拡張機能へのポインターを渡しますが、その DriverEntry ルーチンを除きます。 指定されたサイズには、ミニポート ドライバーが要求する論理ユニットごとの記憶域は含まれません。次に説明します。
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 では、I/O ポート用とデバイス メモリ範囲用の 2 つの範囲を使用します。
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 を呼び出す前に、HW_INITIALIZATION_DATA構造体初期化する必要があります。
HW_INITIALIZATION_DATA の Dma64BitAddresses メンバーは Windows 2000 で削除されました (詳細については、PORT_CONFIGURATION_DATAの説明を参照してください)。
HW_INITIALIZATION_DATAとPORT_CONFIGURATION_INFORMATIONの両方に、SpecificLuExtensionSize と SrbExtensionSize という名前のメンバーのペアがあり、その値は Windows 2000 より前とは異なる方法で処理されます。 ミニポート ドライバーは、SpecificLuExtensionSize の初期値を計算し、HW_INITIALIZATION_DATAで SrbExtensionSize を する必要があります。これは、コントローラーが実際にサポートできる内容に関係なく、HBA が 32 ビット アドレスを処理できる前提に基づいています。 (詳細については、「PORT_CONFIGURATION_DATA」の説明を参照してください)。
必要条件
要件 | 価値 |
---|---|
ヘッダー | srb.h (Srb.h、Strmini.h を含む) |
関連項目
SCSI ミニポート ドライバー の DriverEntry
HwScsiInitialize の
ScsiPortInitialize の