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 |
表示 IRB 包含描述 ATA 命令的 IdeTaskFile。 子命令表示更精細的要求分組,以加快查閱速度。 |
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 值及其意義。
ReplTest1 | 意義 |
IRB_STATUS_PENDING | 表示要求正在進行中。 埠驅動程式會將 IrbStatus 初始化為此值。 迷你埠驅動程序不應該將 IrbStatus 成員設定為此值。 |
IRB_STATUS_SUCCESS | 表示要求已順利完成。 |
IRB_STATUS_DATALENGTH_MISMATCH | 表示發生數據執行不足或過度執行錯誤。 迷你埠必須更新 IRB 中的 DataTransferLength 欄位,以指出在執行不足時傳輸的實際數據量。 |
IRB_STATUS_DEVICE_ERROR | 表示裝置傳回錯誤。 迷你埠驅動程序必須將 Irb 中的 AtaStatus 和 AtaError 欄位更新為裝置 ATA 狀態的內容,並在命令完成時註冊錯誤。 |
IRB_STATUS_INVALID_REQUEST | 表示迷你埠不支援指定的要求。 |
IRB_STATUS_BUS_RESET | 指出處理指定要求時發生總線重設。 |
IRB_STATUS_SELECTION_TIMEOUT | 表示無法選取目的地裝置。 |
IRB_STATUS_BUSY | 表示裝置忙碌中。 埠驅動程式會重試使用此狀態完成的任何要求。 完成且忙碌狀態的要求只會重試一次。 如果裝置無法處理特定時間的要求,則迷你埠驅動程式會負責使用 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
指定裝置的目標識別碼。
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 結構中的 [上一個] 字段有效。 |
IRB_FLAGS_PIO_MULTIPLE | 指出 ATA 命令是使用 ATA PIO Multiple 方法來傳輸。 |
IRB_FLAGS_RETURN_RESULTS | 指出 ATA 傳回工作檔案要複製到 SenseInfoBuffer。 |
IRB_FLAGS_DATA_IN | 指出數據要從裝置傳輸到主機系統, (讀取作業) 。 |
IRB_FLAGS_DATA_OUT | 表示數據要從主機系統傳輸至裝置, ( 寫入作業) 。 |
IRB_FLAGS_DISCARDABLE | 表示命令應以最佳方式完成。 (注意:ATAport) 目前未採用此專案。 |
IRB_FLAGS_HIGH_PRIORITY | 指出此 IRB 會在 ATA 迷你埠目前非高優先順序 IRB 之前儘快處理。 |
TimeOutValue
指出要求逾時的時間以秒為單位。
DataTransferLength
包含包含要傳輸之數據之數據緩衝區的位元組長度。
IrbExtension
埠驅動程式所配置之個別要求延伸模組的指標。
DataBuffer
數據所在的緩衝區指標。
SenseInfoBuffer
保留感知數據的緩衝區指標。
NextIrb
要處理的下一個 IRB 指標。 埠驅動程式會將此設定為 NULL。 迷你埠驅動程式可以使用此欄位將 IRB 連結在一起。
Reserved
保留供未來使用。
IdeTaskFile
包含類型 為 IDE_TASK_FILE 的結構,這個結構會保存所指示控制器的 IDE 工作檔。 每當 Function 成員與 IRB_FUNCTION_ATA_COMMAND 之間的位 AND 結果為非零時,就會定義這個成員。
Cdb[16]
包含CDB) (命令描述元區塊。 每當 Function 成員與 IRB_FUNCTION_ATAPI_COMMAND 之間的位 AND 結果為非零時,就會定義這個成員。
PowerChange
指出定義電源狀態轉換之類型 POWER_CHANGE_INFO 的列舉值。 每當 Function 等於IRB_FUNCTION_POWER_CHANGE時,就會定義這個成員。
AsUChar[16]
提供存取成員 IdeTaskFile、 PowerChange 和 Cdb 作為未簽署字元數據的方法。
備註
IDE_REQUEST_BLOCK 結構提供類似 SCSI_REQUEST_BLOCK 的功能,但特性更適合用於管理 IDE 總線上的裝置。
規格需求
需求 | 值 |
---|---|
標頭 | irb.h (包含 Irb.h) |