IDE_REQUEST_BLOCK 結構 (irb.h)

IDE_REQUEST_BLOCK 結構會定義IDE要求區塊。

注意 ATA 埠驅動程式和 ATA 迷你埠驅動程式模型未來可能會改變或無法使用。 相反地,我們建議使用 Storport 驅動程式Storport 迷你埠 驅動程式模型。
 

語法

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 中的 AtaStatusAtaError 欄位更新為裝置 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]

提供存取成員 IdeTaskFilePowerChangeCdb 作為未簽署字元數據的方法。

備註

IDE_REQUEST_BLOCK 結構提供類似 SCSI_REQUEST_BLOCK 的功能,但特性更適合用於管理 IDE 總線上的裝置。

規格需求

需求
標頭 irb.h (包含 Irb.h)

另請參閱

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK