ACCESS_RANGE 構造体 (srb.h)

ACCESS_RANGEでは、HBA によって使用されるメモリまたは I/O ポート範囲について説明します。

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

構文

typedef struct _ACCESS_RANGE {
  SCSI_PHYSICAL_ADDRESS RangeStart;
  ULONG                 RangeLength;
  BOOLEAN               RangeInMemory;
} ACCESS_RANGE, *PACCESS_RANGE;

メンバー

RangeStart

範囲のバス相対ベース アドレスを指定する SCSI_PHYSICAL_ADDRESS 型のアドレスが含まれます。 これは、 ScsiPortGetDeviceBase に渡すことができるアドレスです。

RangeLength

範囲内のポートのサイズ 、バイト数、または数を指定します。 ミニポート ドライバーは、この値がアダプターによって実際にデコードされた範囲と一致することを確認する必要があります。 たとえば、HBA が 7 つのレジスタを使用し、8 に応答する場合、このメンバーは 8 に設定する必要があります。

RangeInMemory

I/O 領域ではなく、 TRUE の場合に範囲がメモリ内に配置されていることを示します。 FALSE の場合、範囲は I/O 領域にあります。

注釈

各ACCESS_RANGEは、ミニポート ドライバーの HwScsiFindAdapter ルーチンに渡されるPORT_CONFIGURATION_INFORMATION構造体内の AccessRanges 配列要素です。

可能であれば、OS 固有のポート ドライバーは、ミニポート ドライバーの HwScsiFindAdapter ルーチンを呼び出す前に、ミニポート ドライバーのバス相対 HBA 範囲で各アクセス範囲要素を設定します。 それ以外の場合、ポート ドライバーは、構成情報を提供できない範囲要素をゼロにします。

ポート ドライバーが範囲を指定する場合、ミニポート ドライバーの HwScsiFindAdapter ルーチンは、指定されたアドレスのみを使用する必要があり、独自の工夫のアドレスを使用して、同じバス上の他の HBA を検索しようと しないでください 。 ポート ドライバーが範囲情報 (特に x86 実モードで初期化されている x86 専用システム) で他のバス相対ポートまたはメモリ範囲にアクセスしようとすると、バス上の他のデバイスが初期化に失敗したり、システムがブート プロセスを失敗させたりする可能性があります。

各ミニポート ドライバーには、OS 固有のポート ドライバーが情報を提供できない場合に試行するバス相対既定の範囲のセットが必要です。 ミニポート ドライバーは ScsiPortValidateRange を呼び出して、ミニポート ドライバーが提供するアクセス範囲の安全性をチェックする必要があります。その前に、このような範囲を ScsiPortGetDeviceBase にマップし、返された論理アドレスを使用してアダプターにアクセスする必要があります(特に、HBA の 1 つに BIOS がある場合)。

ミニポート ドライバーがPORT_CONFIGURATION_INFORMATIONの OS 固有のポート ドライバーに対して入力するすべてのアクセス範囲には、バス相対アドレス (ScsiPortGetBusData によって返される値など) に RangeStart メンバーが設定されている必要があります。

ScsiPortGetDeviceBase によって返される対応する基本論理アドレスは、ScsiPortRead Xxx ルーチンと ScsiPortWriteXxx ルーチンを呼び出すために使用される I/O ポートまたはメモリ アドレスのマップされた範囲の RangeStart アドレスとして、通常はミニポート ドライバーのデバイス拡張機能に格納する必要があります。

要件

要件
Header srb.h (Srb.h、Storport.h、Strmini.h を含む)

こちらもご覧ください

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortConvertUlongToPhysicalAddress

ScsiPortGetBusData

ScsiPortGetDeviceBase

ScsiPortValidateRange