ScsiPortGetDeviceBase 関数 (srb.h)

ScsiPortGetDeviceBase ルーチンは、HBA との通信に使用できるマップされた論理ベース アドレスを返します。 すべてのミニポート ドライバーは、マップされた論理アクセス範囲のアドレスを ScsiPort に渡す必要があります 。ポートXxxScsiPort..Xxx ルーチンを登録して HBA と通信します。

メモ SCSI ポート ドライバーと SCSI ミニポート ドライバー モデルは、今後変更または使用できない可能性があります。 代わりに、 Storport ドライバーStorport ミニポート ドライバー モデルを使用することをお勧めします。
 

構文

SCSIPORT_API PVOID ScsiPortGetDeviceBase(
  [in] PVOID                 HwDeviceExtension,
  [in] INTERFACE_TYPE        BusType,
  [in] ULONG                 SystemIoBusNumber,
  [in] SCSI_PHYSICAL_ADDRESS IoAddress,
  [in] ULONG                 NumberOfBytes,
  [in] BOOLEAN               InIoSpace
);

パラメーター

[in] HwDeviceExtension

ハードウェア デバイス拡張機能へのポインター。 これは、ポート ドライバーが割り当て、ミニポート ドライバーの代わりに初期化する HBA ごとの記憶域です。 ミニポート ドライバーは通常、HBA の状態や HBA のマップされたアクセス範囲など、この拡張機能に HBA 固有の情報を格納します。 この領域は、ミニポート ドライバーが ScsiPortInitialize を呼び出した直後に、HBA のデバイス オブジェクトの DeviceExtension-HwDeviceExtension> メンバーのミニポート ドライバーで使用できます。 ポート ドライバーは、デバイスを削除すると、このメモリを解放します。

[in] BusType

HBA が接続されている I/O バスのインターフェイスの種類を指定します。 ミニポート ドライバーの HwScsiFindAdapter ルーチンは、入力PORT_CONFIGURATION_INFORMATIONの AdapterInterfaceType メンバーからこのパラメーターの値を取得します。

[in] SystemIoBusNumber

HBA が接続されている I/O バスのシステム割り当て番号を指定します。 HwScsiFindAdapter ルーチンは、入力PORT_CONFIGURATION_INFORMATIONの SystemIoBusNumber メンバーからこのパラメーターの値を取得します。

[in] IoAddress

HBA で使用される範囲のバス相対ベース アドレスを指定します。 HwScsiFindAdapter ルーチンは、ポート ドライバーが範囲構成情報を提供する場合、PORT_CONFIGURATION_INFORMATIONの AccessRanges 要素の 1 つからこのパラメーターの値を取得します。 それ以外の場合、このアドレスは 、ScsiPortGetBusData によって返される値またはミニポート ドライバーが提供する既定値にすることができます。 成功した戻り値の状態がエラー状態 (NULL) と競合する可能性があるため、ベース アドレス 0 を使用しないでください。

[in] NumberOfBytes

マッピングでカバーする範囲のサイズをバイト単位で指定します。 HwScsiFindAdapter ルーチンは、ポート ドライバーが範囲構成情報を提供する場合、IoAddress と同じ AccessRanges 要素からこのパラメーターの値を取得します。 それ以外の場合、この値は ScsiPortGetBusData またはミニポート ドライバーが提供する既定値で返すことができます。 いずれの場合も、ドライバーは、返されたマップされた範囲外のハードウェアにアクセスすることはできません。

[in] InIoSpace

TRUE は 、マップする範囲が I/O 領域であることを示し、ミニポート ドライバーは、この範囲のマップされたアドレスを ScsiPort に渡します。ポートXxx を使用して HBA と通信します。 HwScsiFindAdapter ルーチンは、IoAddress と同じ AccessRanges 要素からこのパラメーターの値を取得します。 ミニポート ドライバーは、InIoSpace 引数として ScsiPortGetDeviceBase に渡される前に、ACCESS_RANGE型要素の InMemorySpace メンバーの値を反転する必要があることに注意してくださいFALSE は 、マップする範囲がメモリ空間にあることを示します。

戻り値

ScsiPortGetDeviceBase は、IoAddress から NumberOfBytes に指定された範囲が正常にマップされた場合、指定された IoAddress のマップされた論理ベース アドレスを返します。 特定の範囲をマップできない場合、 ScsiPortGetDeviceBaseNULL を返します。

注釈

NT ベースのオペレーティング システム プラットフォームでは、複数の種類の I/O バスと同じ種類の複数の I/O バスを使用できます。 さらに、HAL は I/O 領域を一部のプラットフォームのメモリにマップできます。

したがって、ミニポート ドライバーは、バス相対アクセス範囲アドレスを使用してその HBA と通信することはできません。 CISC ベースと RISC ベースのマシン間でミニポート ドライバーの移植性を維持するには、HBA へのアクセスに使用するアドレスを ScsiPortGetDeviceBase で変換する必要があります。

すべてのミニポート ドライバーは、システム空間の論理範囲アドレスを使用する必要があります、 ScsiPortGetDeviceBase によってマップされ、その HBA と通信します。 ScsiPort を呼び出します...Xxx ルーチンのポート/登録には、これらのマップされた論理アドレスが必要です。

ミニポート ドライバーがサポートする HBA の数と、各 HBA で必要なアクセス範囲の数に応じて、ScsiPortGetDeviceBase を複数回呼び出すことができます。 マップされた各範囲は、 AccessRanges 配列のACCESS_RANGE型要素で指定されたバス相対デバイス アドレスの範囲に対応します。

ScsiPortGetDeviceBase は、ミニポート ドライバーの HwScsiFindAdapter ルーチンから、またはコントロールの種類が ScsiSetRunningConfig の場合は HwScsiAdapterControl からのみ呼び出すことができます。 他のミニポート ドライバー ルーチンからの呼び出しは、システムエラーまたは呼び出し元の不適切な操作になります。

ScsiPortGetDeviceBase を呼び出すには、次のガイドラインに従います。

  • HwScsiFindAdapter がミニポート ドライバーによって提供される既定のバス相対アクセス範囲または ScsiPortGetBusData によって返される値のセットを使用している場合は、ScsiPortGetDeviceBase を呼び出す前に ScsiPortValidateRange を呼び出す必要があります。
  • HwScsiFindAdapter が特定の HBA がミニポート ドライバーがサポートする HBA でないと判断した場合は、ScsiPortFreeDeviceBase を呼び出して、その HBA と通信するように設定したマッピングを解放する必要があります。
ScsiPortGetDeviceBase によって返される論理アドレスは、ハードウェアに対して行われる後続のすべての参照に使用する必要がありますが、PORT_CONFIGURATION_INFORMATIONの AccessRanges 仕様には追加しないでください。 ミニポート ドライバーのライターは、 ScsiPortGetDeviceBase によって返される論理ベース アドレスで使用されるビットの数に関する想定を行う必要はありません。

ScsiPortGetDeviceBase、バス 相対アドレスを表すためにSCSI_PHYSICAL_ADDRESSを使用します。

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

SCSI_PHYSICAL_ADDRESSの種類は、物理アドレスまたはバス相対アドレスを表すために SCSI ミニポート ドライバーが使用するオペレーティング システムに依存しないデータ型です。

メモ SCSI ポート ドライバーと SCSI ミニポート ドライバー モデルは、今後変更または使用できない可能性があります。 代わりに、 Storport ドライバーStorport ミニポート ドライバー モデルを使用することをお勧めします。
 

要件

要件
対象プラットフォーム デスクトップ
Header srb.h (Miniport.h、Scsi.h を含む)
Library Scsiport.lib

こちらもご覧ください

ACCESS_RANGE

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortFreeDeviceBase

ScsiPortGetBusData

ScsiPortValidateRange