次の方法で共有


HW_INITIALIZATION_DATA 構造体 (srb.h)

各 SCSI ミニポート ドライバーの DriverEntry ルーチンは、0 で初期化し、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 に設定されている場合、ミニポート ドライバーは、後で説明する VendorIdLengthVendorIdDeviceIdLength、および 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 バイト文字列へのポインター。 このメンバーは、プラグ アンド プレイドライバーには関係ありません。

指定された AdapterInterfaceTypePCIBus の場合、ベンダー ID は PCI SIG によって割り当てられた USHORT 値であり、ミニポート ドライバーによってバイト文字列に変換される必要があります。 たとえば、割り当てられた PCI ベンダー ID の値が 1001 の場合、ミニポート ドライバーから提供される VendorId 文字列は ('1'、'0'、'0'、'1') になります。

ReservedUshort

システム使用用に予約されており、ミニポート ドライバーでは使用できません。

PortVersionFlags

DeviceIdLength

次に説明する DeviceId 文字列のサイズをバイト単位で指定します。

DeviceId

ミニポート ドライバーでサポートされている HBA モデルを識別する ASCII バイト文字列へのポインター。 このメンバーは、プラグ アンド プレイドライバーには関係ありません。

指定された AdapterInterfaceTypePCIBus の場合、デバイス 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の両方に 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