共用方式為


IDE_REQUEST_BLOCK結構 (irb.h)

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

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

語法

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 值及其意義。

意義
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。 迷你埠驅動程式可以在 IRB 的 IdeHwBuildIo 例程中設定此旗標,以要求埠驅動程式對應數據緩衝區。
IRB_FLAGS_48BIT 指出 IRB 中的 ATA 命令屬於 48 位 LBA 功能集。 設定此旗標時,_IDE_TASK_FILE 結構中的 Previous 欄位有效。
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 表示在 ATA 迷你埠中目前非高優先順序 IRB 之前,此 IRB 會儘快進行處理。

TimeOutValue

指出要求逾時的時間,以秒為單位。

DataTransferLength

包含數據緩衝區的位元組長度,其中包含要傳輸的數據。

IrbExtension

埠驅動程式所配置之每個要求延伸模組的指標。

DataBuffer

數據所在緩衝區的指標。

SenseInfoBuffer

保留感知數據的緩衝區指標。

NextIrb

要處理的下一個 IRB 指標。 連接埠驅動程式會將此設定為 NULL。 迷你埠驅動程式可以使用此欄位將 IRB 連結在一起。

Reserved

保留供日後使用。

IdeTaskFile

包含類型為 IDE_TASK_FILE 的結構,此結構會保存所指示控制器的 IDE 工作檔案。 每當 函式 成員與IRB_FUNCTION_ATA_COMMAND之間的位 AND 結果為非零時,就會定義這個成員。

Cdb[16]

包含命令描述元區塊 (CDB)。 每當 函式 成員與IRB_FUNCTION_ATAPI_COMMAND之間的位 AND 結果為非零時,就會定義這個成員。

PowerChange

表示定義電源狀態轉換之類型 POWER_CHANGE_INFO 的列舉值。 每當 函式 等於IRB_FUNCTION_POWER_CHANGE時,就會定義這個成員。

AsUChar[16]

提供存取 IdeTaskFile PowerChangeCdb 做為無符號字元數據的成員存取方式。

言論

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

要求

要求 價值
標頭 irb.h (包括 Irb.h)

另請參閱

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK