ACCESS_RANGE 構造体 (strmini.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 領域にあります。
Reserved
注釈
各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 によって返される対応する基本論理アドレスは、通常、ミニポート ドライバーのデバイス拡張機能に格納する必要があります。これは、マップされた I/O ポートの範囲の RangeStart アドレス、または ScsiPortReadXxx ルーチンと ScsiPortWriteXxx ルーチンを呼び出すために使用されるメモリ アドレスとして格納されます。
要件
要件 | 値 |
---|---|
Header | strmini.h (Srb.h、Storport.h、Strmini.h を含む) |
こちらもご覧ください
PORT_CONFIGURATION_INFORMATION (SCSI)