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 要求の分類について説明します。
Function | サブコマンド | 説明 |
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 値とその意味について説明します。
Value | 意味 |
IRB_STATUS_PENDING | 要求が進行中であることを示します。 ポート ドライバーは、この値に IrbStatus を初期化します。 ミニポート ドライバーは、 IrbStatus メンバーをこの値に設定しないでください。 |
IRB_STATUS_SUCCESS | 要求が正常に完了したことを示します。 |
IRB_STATUS_DATALENGTH_MISMATCH | データのアンダーランまたはオーバーラン エラーが発生したことを示します。 ミニポートは、アンダーランの場合に転送されたデータの実際の量を示すために、IRB の DataTransferLength フィールドを更新する必要があります。 |
IRB_STATUS_DEVICE_ERROR | デバイスがエラーを返したことを示します。 ミニポート ドライバーは、コマンドの完了時にデバイスの ATA 状態とエラー レジスタの内容に Irb の AtaStatus フィールドと 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 コマンドには request sense コマンドは必要ないため、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 に設定 します。 ミニポート ドライバーは、このフィールドを使用して、IRB を一緒にリンクできます。
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 型の列挙値を示します。 このメンバーは、 Function が IRB_FUNCTION_POWER_CHANGE と等しいたびに定義されます。
AsUChar[16]
メンバー IdeTaskFile、 PowerChange、 および Cdb に符号なし文字データとしてアクセスする手段を提供します。
注釈
IDE_REQUEST_BLOCK構造は、 SCSI_REQUEST_BLOCK と同様の機能を提供しますが、IDE バス上のデバイスの管理に適した特性を備えています。
要件
要件 | 値 |
---|---|
Header | irb.h (Irb.h を含む) |