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 固有のポート ドライバーに対して入力するすべてのアクセス範囲には、RangeStart メンバーがバス相対アドレスに設定されている必要があります (ScsiPortGetBusData によって返される値など)。
ScsiPortGetDeviceBase によって返される対応する基本論理アドレスは、通常はミニポート ドライバーのデバイス拡張機能に格納する必要があります。これは、マップされた I/O ポートの範囲の RangeStart アドレスとして、または XxxScsiPortRead Xxxルーチンを呼び出すために使用されるメモリ アドレス ScsiPortWrite です。
必要条件
| 要件 | 価値 |
|---|---|
| ヘッダー | strmini.h (Srb.h、Storport.h、Strmini.h を含む) |
関連項目
PORT_CONFIGURATION_INFORMATION (SCSI)
ScsiPortGetBusData の
ScsiPortGetDeviceBase の
ScsiPortValidateRange の
ScsiPortConvertUlongToPhysicalAddress
HwScsiFindAdapter の