IDE_REQUEST_BLOCK構造体 (irb.h)
IDE_REQUEST_BLOCK構造体は、IDE 要求ブロックを定義します。
構文
typedef struct _IDE_REQUEST_BLOCK {
USHORT Function;
UCHAR IrbStatus;
UCHAR AtaStatus;
UCHAR AtaError;
UCHAR Channel;
UCHAR TargetId;
UCHAR Lun;
UCHAR CdbLength;
UCHAR SenseInfoBufferLength;
UCHAR SenseInfoBufferType;
UCHAR QueueTag;
ULONG ReservedAsUlong;
ULONG IrbFlags;
ULONG TimeOutValue;
ULONG DataTransferLength;
PVOID IrbExtension;
PVOID DataBuffer;
PVOID SenseInfoBuffer;
PVOID NextIrb;
PVOID Reserved;
union {
IDE_TASK_FILE IdeTaskFile;
UCHAR Cdb[16];
IDE_POWER_INFO PowerChange;
UCHAR AsUChar[16];
};
} IDE_REQUEST_BLOCK, *PIDE_REQUEST_BLOCK;
メンバーズ
Function
要求が属するカテゴリを指定します。 次の表では、I/O 要求の分類について説明します。
関数の | サブコマンド を する | 説明 |
IRB_FUNCTION_ATA_COMMAND |
IRB_FUNCTION_ATA_IDENTIFY IRB_FUNCTION_ATA_READ IRB_FUNCTION_ATA_WRITE IRB_FUNCTION_ATA_FLUSH IRB_FUNCTION_ATA_SMART |
ATA コマンドを記述する IdeTaskFile が IRB に含まれていることを示します。 サブコマンドは、より高速な検索のための要求をより細かくグループ化したことを示します。 |
IRB_FUNCTION_ATAPI_COMMAND | IRB_FUNCTION_REQUEST_SENSE | IRB に ATAPI コマンドを記述する CDB が含まれていることを示します。 |
IRB_FUNCTION_MINIPORT_COMMAND |
IRB_FUNCTION_ADAPTER_FLUSH IRB_FUNCTION_SHUTDOWN IRB_FUNCTION_POWER_CHANGE IRB_FUNCTION_POWER_REBOOT IRB_FUNCTION_LUN_RESET IRB_FUNCTION_MINIPORT_IOCTL |
IRB がミニポート用であることを示します。 コマンドを適切に解釈するのは、ミニポートの役割です。 |
IrbStatus
ミニポートは、指定した操作の状態を示すこのメンバーを設定する必要があります。 次の表では、IrbStatus のさまざまな 値とその意味について説明します。
値の | 意味 |
IRB_STATUS_PENDING | 要求が進行中であることを示します。 ポート ドライバーは、この値 IrbStatus を初期化します。 ミニポート ドライバーは、IrbStatus メンバーをこの値に設定しないでください。 |
IRB_STATUS_SUCCESS | 要求が正常に完了したことを示します。 |
IRB_STATUS_DATALENGTH_MISMATCH | データのアンダーランまたはオーバーラン エラーが発生したことを示します。 ミニポートは、アンダーランの場合に転送されたデータの実際の量を示すために、IRB の DataTransferLength フィールドを更新する必要があります。 |
IRB_STATUS_DEVICE_ERROR | デバイスがエラーを返したことを示します。 ミニポート ドライバーは、AtaStatus を更新し、コマンドの完了時にデバイスの ATA 状態とエラー レジスタの内容に Irb の AtaError フィールドを する必要があります。 |
IRB_STATUS_INVALID_REQUEST | ミニポートが指定された要求をサポートしていないことを示します。 |
IRB_STATUS_BUS_RESET | 指定された要求の処理中にバスリセットが発生したことを示します。 |
IRB_STATUS_SELECTION_TIMEOUT | 宛先デバイスを選択できなかったことを示します。 |
IRB_STATUS_BUSY | デバイスがビジー状態であることを示します。 ポート ドライバーは、この状態で完了した要求を再試行します。 ビジー状態で完了した要求は、1 回だけ再試行されます。 デバイスが一定期間要求を処理できない場合は、AtaPortDeviceBusy を使用して要求キューを一時停止するミニポート ドライバーの責任です。 |
IRB_STATUS_AUTOSENSE_VALID | IRB_STATUS_AUTOSENSE_VALIDは、IRB の senseInfoBuffer メンバー 有効なセンス データを示すビットマスクです。 |
IRB_STATUS_RETURN_TASKFILE_VALID | IRB_STATUS_RETURN_TASKFILE_VALIDは、IRB の SenseInfoBuffer メンバー内の有効な戻りタスク ファイルを示すビットマスクです。 |
AtaStatus
デバイスが状態レジスタで返す状態を示します。 ミニポート ドライバーは、IRB_STATUS_DEVICE_ERRORで IRB を完了するときに、このフィールドを更新する必要があります。
AtaError
デバイスがエラー レジスタで返すエラー値を示します。 ミニポート ドライバーは、IRB_STATUS_DEVICE_ERRORで IRB を完了するときに、このフィールドを更新する必要があります。
Channel
チャネル番号を指定します。
TargetId
デバイスのターゲット ID を指定します。
Lun
デバイスの論理ユニット番号を指定します。
CdbLength
Cdbが指すバッファーの長さをバイト単位で指定します。
SenseInfoBufferLength
SenseInfoBuffer が指すバッファーの長さをバイト単位で指定します。
SenseInfoBufferType
SenseInfoBuffer で返されるデータ構造型を指定します。 ATA コマンドは要求センス コマンドを必要としないため、ATA_PASS_THROUGHコマンドは SenseInfoBuffer を使用してタスク ファイル情報を返します。 ATA_PASS_THROUGHコマンドの場合、IrbFlags メンバーで識別されているように、TaskFile サイズ 適切な戻り値は、SENSE_INFO_BUFFER_RETURN_TYPE_28BIT_TASKFILEまたは
SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE。
QueueTag
この IRB のキュー タグ。 ポート ドライバーは、このフィールドを 0 に設定します。
ReservedAsUlong
将来の使用のために予約されています。
IrbFlags
実行する必要がある特定のアクションで要求を修飾します。 次の表では、それらを詳しく説明します。
フラグの | 説明 |
IRB_FLAGS_DRDY_REQUIRED | ミニポート ドライバーは、このコマンドを発行する前に、デバイスが ATA 状態レジスタで DRDY ビットを設定するまで待機する必要があることを示します。 |
IRB_FLAGS_USE_DMA | 要求に関連する散布図/収集リストがあり、ミニポート ドライバーが DMA を使用してこの要求のデータを転送できることを示します。 |
IRB_FLAGS_MAP_BUFFERS | IRB の DataBuffer フィールドがマップされていることを示します。 ミニポートは、このフラグが設定されている場合 DataBuffer に安全にアクセスできます。 フラグが設定されていない場合、ミニポート ドライバー DataBuffer にアクセスできません。 ミニポート ドライバーは、IdeHwBuildIo ルーチンの IRB でこのフラグを設定することによって、データ バッファーをマップするポート ドライバーを要求できます。 |
IRB_FLAGS_48BIT | IRB の ATA コマンドが 48 ビット LBA 機能セットに属していることを示します。 _IDE_TASK_FILE 構造体の Previous フィールドは、このフラグが設定されている場合に有効です。 |
IRB_FLAGS_PIO_MULTIPLE | ATA PIO Multiple メソッドを使用して ATA コマンドを転送することを示します。 |
IRB_FLAGS_RETURN_RESULTS | ATA 戻りタスク ファイルを SenseInfoBuffer コピーすることを示します。 |
IRB_FLAGS_DATA_IN | デバイスからホスト システムにデータを転送することを示します (読み取り操作)。 |
IRB_FLAGS_DATA_OUT | ホスト システムからデバイスにデータを転送することを示します (書き込み操作)。 |
IRB_FLAGS_DISCARDABLE | コマンドがベスト エフォート方式で実行されることを示します。 (注: これは現在 ATAport では使用されていません)。 |
IRB_FLAGS_HIGH_PRIORITY | 現在 ATA ミニポート内の優先度の高い IRB 以外の IRB の前に、この IRB をできるだけ早く処理することを示します。 |
TimeOutValue
要求がタイムアウトになる時間を秒単位で示します。
DataTransferLength
転送するデータを含むデータ バッファーの長さをバイト単位で格納します。
IrbExtension
ポート ドライバーによって割り当てられた要求ごとの拡張機能へのポインター。
DataBuffer
データが存在するバッファーへのポインター。
SenseInfoBuffer
センス データを保持するバッファーへのポインター。
NextIrb
処理する次の IRB へのポインター。 ポート ドライバーは、これを NULL 設定します。 ミニポート ドライバーは、このフィールドを使用して、IRP を一緒にリンクできます。
Reserved
将来の使用のために予約されています。
IdeTaskFile
指定されたコントローラーの IDE タスク ファイルを保持する IDE_TASK_FILE 型の構造体を格納します。 このメンバーは、Function メンバーと IRB_FUNCTION_ATA_COMMAND の間のビットごとの AND の結果が 0 以外の場合に定義されます。
Cdb[16]
コマンド記述子ブロック (CDB) が含まれています。 このメンバーは、Function メンバーと IRB_FUNCTION_ATAPI_COMMAND の間のビットごとの AND の結果が 0 以外の場合に定義されます。
PowerChange
電源状態遷移を定義する POWER_CHANGE_INFO 型の列挙値を示します。 このメンバーは、関数 IRB_FUNCTION_POWER_CHANGEと等しいたびに定義されます。
AsUChar[16]
IdeTaskFile 、PowerChange、および Cdb を符号なし文字データとしてメンバーにアクセスする手段を提供します。
備考
IDE_REQUEST_BLOCK構造は、SCSI_REQUEST_BLOCK に似た機能を提供しますが、IDE バス上のデバイスの管理に適した特性を備えています。
必要条件
要件 | 価値 |
---|---|
ヘッダー | irb.h (Irb.h を含む) |