struktur IDE_REQUEST_BLOCK (irb.h)

Struktur IDE_REQUEST_BLOCK mendefinisikan blok permintaan IDE.

Catatan Driver port ATA dan model driver miniport ATA dapat diubah atau tidak tersedia di masa depan. Sebagai gantinya, sebaiknya gunakan driver Storport dan model driver miniport Storport .
 

Sintaks

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;

Anggota

Function

Menentukan kategori tempat permintaan berada. Tabel di bawah ini menjelaskan klasifikasi permintaan I/O.

Fungsi Sub-perintah Deskripsi
IRB_FUNCTION_ATA_COMMAND IRB_FUNCTION_ATA_IDENTIFY

IRB_FUNCTION_ATA_READ

IRB_FUNCTION_ATA_WRITE

IRB_FUNCTION_ATA_FLUSH

IRB_FUNCTION_ATA_SMART

Menunjukkan bahwa IRB berisi IdeTaskFile yang menjelaskan perintah ATA. Sub-perintah menunjukkan pengelompokan permintaan yang lebih baik untuk pencarian yang lebih cepat.
IRB_FUNCTION_ATAPI_COMMAND IRB_FUNCTION_REQUEST_SENSE Menunjukkan bahwa IRB berisi CDB yang menjelaskan perintah ATAPI.
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

Menunjukkan bahwa IRB adalah untuk miniport. Adalah tanggung jawab miniport untuk menafsirkan perintah dengan tepat.

IrbStatus

Miniport harus mengatur anggota ini untuk menunjukkan status operasi yang ditentukan. Tabel di bawah ini menjelaskan berbagai nilai IrbStatus dan maknanya.

Nilai Makna
IRB_STATUS_PENDING Menunjukkan bahwa permintaan sedang berlangsung. Driver port menginisialisasi IrbStatus ke nilai ini. Driver miniport tidak boleh mengatur anggota IrbStatus ke nilai ini.
IRB_STATUS_SUCCESS Menunjukkan bahwa permintaan berhasil diselesaikan.
IRB_STATUS_DATALENGTH_MISMATCH Menunjukkan bahwa terjadi kesalahan underrun atau overrun data. Miniport harus memperbarui bidang DataTransferLength di IRB untuk menunjukkan jumlah data aktual yang ditransfer dalam kasus underrun.
IRB_STATUS_DEVICE_ERROR Menunjukkan bahwa perangkat mengembalikan kesalahan. Driver miniport harus memperbarui bidang AtaStatus dan AtaError di Irb ke konten status ATA perangkat dan register kesalahan pada penyelesaian perintah.
IRB_STATUS_INVALID_REQUEST Menunjukkan bahwa miniport tidak mendukung permintaan yang diberikan.
IRB_STATUS_BUS_RESET Menunjukkan bahwa reset bus terjadi saat memproses permintaan yang diberikan.
IRB_STATUS_SELECTION_TIMEOUT Menunjukkan bahwa perangkat tujuan tidak dapat dipilih.
IRB_STATUS_BUSY Menunjukkan bahwa perangkat sibuk. Driver port mencoba kembali permintaan apa pun yang diselesaikan dengan status ini. Permintaan yang diselesaikan dengan status sibuk hanya dicoba kembali sekali. Driver miniport bertanggung jawab untuk menjeda antrean permintaan menggunakan AtaPortDeviceBusy jika perangkat tidak dapat menangani permintaan untuk jangka waktu tertentu.
IRB_STATUS_AUTOSENSE_VALID IRB_STATUS_AUTOSENSE_VALID adalah bitmask yang menunjukkan data indera yang valid di anggota SenseInfoBuffer dari IRB.
IRB_STATUS_RETURN_TASKFILE_VALID IRB_STATUS_RETURN_TASKFILE_VALID adalah bitmask yang menunjukkan file tugas pengembalian yang valid di anggota SenseInfoBuffer dari IRB.

AtaStatus

Menunjukkan status yang dikembalikan oleh perangkat dalam daftar statusnya. Driver miniport harus memperbarui bidang ini saat menyelesaikan IRB dengan IRB_STATUS_DEVICE_ERROR.

AtaError

Menunjukkan nilai kesalahan yang dikembalikan oleh perangkat dalam register kesalahannya. Driver miniport harus memperbarui bidang ini saat menyelesaikan IRB dengan IRB_STATUS_DEVICE_ERROR.

Channel

Menentukan nomor saluran.

TargetId

Menentukan ID target perangkat.

Lun

Menentukan nomor unit logis perangkat.

CdbLength

Menentukan panjang dalam byte buffer yang diacu oleh Cdb.

SenseInfoBufferLength

Menentukan panjang dalam byte buffer yang diacu oleh SenseInfoBuffer.

SenseInfoBufferType

Menentukan jenis struktur data yang dikembalikan di SenseInfoBuffer. Karena perintah ATA tidak memerlukan perintah request sense, perintah ATA_PASS_THROUGH menggunakan SenseInfoBuffer untuk mengembalikan informasi file tugas. Untuk perintah ATA_PASS_THROUGH, seperti yang diidentifikasi dalam anggota IrbFlags , ukuran TaskFile pengembalian yang sesuai harus dilaporkan sebagai SENSE_INFO_BUFFER_RETURN_TYPE_28BIT_TASKFILE atau

SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE.

QueueTag

Tag antrean untuk IRB ini. Driver port mengatur bidang ini ke 0.

ReservedAsUlong

Disiapkan untuk penggunaan masa mendatang.

IrbFlags

Memenuhi syarat permintaan dengan tindakan tertentu yang perlu dilakukan. Tabel di bawah ini menjelaskannya secara rinci.

Bendera Deskripsi
IRB_FLAGS_DRDY_REQUIRED Menunjukkan bahwa driver miniport harus menunggu perangkat mengatur bit DRDY dalam register status ATA sebelum mengeluarkan perintah ini.
IRB_FLAGS_USE_DMA Menunjukkan bahwa permintaan memiliki daftar sebar/kumpulkan terkait dan driver miniport dapat menggunakan DMA untuk mentransfer data untuk permintaan ini.
IRB_FLAGS_MAP_BUFFERS Menunjukkan bahwa bidang DataBuffer di IRB dipetakan. Miniport dapat mengakses DataBuffer dengan aman saat bendera ini diatur. Driver miniport tidak boleh mengakses DataBuffer jika bendera tidak diatur. Driver miniport dapat meminta driver port untuk memetakan buffer data dengan mengatur bendera ini di IRB dalam rutinitas IdeHwBuildIo-nya .
IRB_FLAGS_48BIT Menunjukkan bahwa perintah ATA di IRB milik set fitur LBA 48 bit. Bidang Sebelumnya dalam struktur _IDE_TASK_FILE valid saat bendera ini diatur.
IRB_FLAGS_PIO_MULTIPLE Menunjukkan bahwa perintah ATA akan ditransfer menggunakan metode ATA PIO Multiple.
IRB_FLAGS_RETURN_RESULTS Menunjukkan bahwa file tugas pengembalian ATA akan disalin ke SenseInfoBuffer.
IRB_FLAGS_DATA_IN Menunjukkan bahwa data akan ditransfer dari perangkat ke sistem host (operasi baca).
IRB_FLAGS_DATA_OUT Menunjukkan bahwa data akan ditransfer ke perangkat dari sistem host (operasi tulis).
IRB_FLAGS_DISCARDABLE Menunjukkan bahwa perintah harus dilakukan dengan cara yang terbaik. (catatan: ini saat ini tidak digunakan oleh ATAport).
IRB_FLAGS_HIGH_PRIORITY Menunjukkan bahwa IRB ini akan diproses sesegera mungkin, sebelum IRB non-prioritas tinggi saat ini berada di miniport ATA.

TimeOutValue

Menunjukkan waktu dalam detik setelah permintaan akan kehabisan waktu.

DataTransferLength

Berisi panjang byte buffer data yang berisi data yang akan ditransfer.

IrbExtension

Penunjuk ke ekstensi per permintaan yang dialokasikan oleh driver port.

DataBuffer

Arahkan ke buffer tempat data berada.

SenseInfoBuffer

Penunjuk ke buffer yang menyimpan data indra.

NextIrb

Arahkan ke IRB berikutnya yang akan diproses. Driver porta mengatur ini ke NULL. Driver miniport dapat menggunakan bidang ini untuk menautkan IRB bersama-sama.

Reserved

Disiapkan untuk penggunaan masa mendatang.

IdeTaskFile

Berisi struktur jenis IDE_TASK_FILE yang menyimpan file tugas IDE untuk pengontrol yang ditunjukkan. Anggota ini didefinisikan setiap kali hasil bitwise AND antara anggota Fungsi dan IRB_FUNCTION_ATA_COMMAND bukan nol.

Cdb[16]

Berisi blok deskriptor perintah (CDB). Anggota ini didefinisikan setiap kali hasil bitwise AND antara anggota Fungsi dan IRB_FUNCTION_ATAPI_COMMAND bukan nol.

PowerChange

Menunjukkan nilai enumerasi jenis POWER_CHANGE_INFO yang menentukan transisi status daya. Anggota ini didefinisikan setiap kali Fungsi sama dengan IRB_FUNCTION_POWER_CHANGE.

AsUChar[16]

Menyediakan sarana untuk mengakses anggota IdeTaskFile, PowerChange, dan Cdb sebagai data karakter yang tidak ditandatangani.

Keterangan

Struktur IDE_REQUEST_BLOCK menyediakan fungsionalitas yang mirip dengan SCSI_REQUEST_BLOCK tetapi dengan karakteristik yang lebih cocok untuk mengelola perangkat pada bus IDE.

Persyaratan

Persyaratan Nilai
Header irb.h (termasuk Irb.h)

Lihat juga

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK