IDE_REQUEST_BLOCK Struktur (irb.h)
Die IDE_REQUEST_BLOCK Struktur definiert einen IDE-Anforderungsblock.
Syntax
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;
Angehörige
Function
Gibt die Kategorie an, zu der die Anforderung gehört. In der folgenden Tabelle wird die Klassifizierung der E/A-Anforderungen beschrieben.
Funktion | Unterbefehle | Beschreibung |
IRB_FUNCTION_ATA_COMMAND |
IRB_FUNCTION_ATA_IDENTIFY IRB_FUNCTION_ATA_READ IRB_FUNCTION_ATA_WRITE IRB_FUNCTION_ATA_FLUSH IRB_FUNCTION_ATA_SMART |
Gibt an, dass das IRB eine IdeTaskFile enthält, die den ATA-Befehl beschreibt. Die Unterbefehle geben eine feinere Gruppierung der Anforderung für eine schnellere Suche an. |
IRB_FUNCTION_ATAPI_COMMAND | IRB_FUNCTION_REQUEST_SENSE | Gibt an, dass der IRB einen CDB enthält, der den ATAPI-Befehl beschreibt. |
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 |
Gibt an, dass der IRB für den Miniport gilt. Es liegt in der Verantwortung des Miniports, den Befehl entsprechend zu interpretieren. |
IrbStatus
Der Miniport muss dieses Element so festlegen, dass er den Status des angegebenen Vorgangs angibt. In der folgenden Tabelle werden die verschiedenen IrbStatus- Werte und deren Bedeutung beschrieben.
Wert | Bedeutung |
IRB_STATUS_PENDING | Gibt an, dass die Anforderung ausgeführt wird. Der Porttreiber initialisiert IrbStatus- zu diesem Wert. Ein Miniporttreiber sollte nie den IrbStatus- Member auf diesen Wert festlegen. |
IRB_STATUS_SUCCESS | Gibt an, dass die Anforderung erfolgreich abgeschlossen wurde. |
IRB_STATUS_DATALENGTH_MISMATCH | Gibt an, dass ein Fehler beim Ausführen oder Überlauf von Daten aufgetreten ist. Der Miniport muss das Feld "DataTransferLength" im IRB aktualisieren, um die tatsächliche Datenmenge anzugeben, die im Falle einer Unterläufe übertragen wurde. |
IRB_STATUS_DEVICE_ERROR | Gibt an, dass das Gerät einen Fehler zurückgegeben hat. Der Miniporttreiber muss die AtaStatus- und AtaError- Felder im Irb auf den Inhalt des AtA-Status des Geräts aktualisieren und beim Abschluss des Befehls fehlerregistern. |
IRB_STATUS_INVALID_REQUEST | Gibt an, dass der Miniport die angegebene Anforderung nicht unterstützt. |
IRB_STATUS_BUS_RESET | Gibt an, dass beim Verarbeiten der angegebenen Anforderung eine Buszurücksetzung aufgetreten ist. |
IRB_STATUS_SELECTION_TIMEOUT | Gibt an, dass das Zielgerät nicht ausgewählt werden konnte. |
IRB_STATUS_BUSY | Gibt an, dass das Gerät ausgelastet ist. Der Porttreiber ruft alle mit diesem Status abgeschlossenen Anforderungen erneut auf. Eine Anforderung, die mit dem Beschäftigt-Status abgeschlossen wurde, wird nur einmal wiederholt. Es liegt in der Verantwortung des Miniporttreibers, die Anforderungswarteschlange mit AtaPortDeviceBusy anzuhalten, wenn das Gerät die Anforderung für einen bestimmten Zeitraum nicht verarbeiten kann. |
IRB_STATUS_AUTOSENSE_VALID | IRB_STATUS_AUTOSENSE_VALID ist eine Bitmaske, die gültige Sinndaten im SenseInfoBuffer Mitglied des IRB angibt. |
IRB_STATUS_RETURN_TASKFILE_VALID | IRB_STATUS_RETURN_TASKFILE_VALID ist eine Bitmaske, die eine gültige Rückgabeaufgabendatei im SenseInfoBuffer Mitglied des IRB angibt. |
AtaStatus
Gibt den Status an, der vom Gerät im Statusregister zurückgegeben wird. Der Miniporttreiber sollte dieses Feld aktualisieren, wenn ein IRB mit IRB_STATUS_DEVICE_ERRORabgeschlossen wird.
AtaError
Gibt den fehlerwert an, der vom Gerät in seinem Fehlerregister zurückgegeben wird. Der Miniporttreiber sollte dieses Feld aktualisieren, wenn ein IRB mit IRB_STATUS_DEVICE_ERRORabgeschlossen wird.
Channel
Gibt die Kanalnummer an.
TargetId
Gibt die Ziel-ID des Geräts an.
Lun
Gibt die logische Einheitennummer des Geräts an.
CdbLength
Gibt die Länge in Byte des Puffers an, auf den Cdb-verweist.
SenseInfoBufferLength
Gibt die Länge in Byte des Puffers an, auf den SenseInfoBufferverweist.
SenseInfoBufferType
Gibt den Typ der Datenstruktur an, die in SenseInfoBuffer-zurückgegeben wird. Da ATA-Befehle keinen Anforderungssinn-Befehl benötigen, verwenden ATA_PASS_THROUGH Befehle SenseInfoBuffer-, um Aufgabendateiinformationen zurückzugeben. Für ATA_PASS_THROUGH Befehle, wie im IrbFlags Member angegeben, sollte die entsprechende Rückgabe TaskFile- Größe entweder als SENSE_INFO_BUFFER_RETURN_TYPE_28BIT_TASKFILE oder
SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE.
QueueTag
Das Warteschlangentag für dieses IRB. Der Porttreiber legt dieses Feld auf 0 fest.
ReservedAsUlong
Reserviert für die zukünftige Verwendung.
IrbFlags
Qualifiziert die Anforderung mit bestimmten Aktionen, die ausgeführt werden müssen. Die folgende Tabelle beschreibt sie ausführlich.
Kennzeichnung | Beschreibung |
IRB_FLAGS_DRDY_REQUIRED | Gibt an, dass der Miniporttreiber warten muss, bis das Gerät das DRDY-Bit im ATA-Statusregister festgelegt hat, bevor er diesen Befehl ausgibt. |
IRB_FLAGS_USE_DMA | Gibt an, dass die Anforderung über eine zugeordnete Punkt/Gather-Liste verfügt und der Miniporttreiber DMA zum Übertragen von Daten für diese Anforderung verwenden kann. |
IRB_FLAGS_MAP_BUFFERS | Gibt an, dass das DataBuffer Feld im IRB zugeordnet ist. Der Miniport kann sicher auf DataBuffer- zugreifen, wenn dieses Flag festgelegt ist. Der Miniporttreiber darf nicht auf DataBuffer- zugreifen, wenn das Flag nicht festgelegt ist. Der Miniporttreiber kann den Porttreiber anfordern, um den Datenpuffer zuzuordnen, indem dieses Flag im IRB in seiner IdeHwBuildIo Routine festgelegt wird. |
IRB_FLAGS_48BIT | Gibt an, dass der ATA-Befehl im IRB zum 48-Bit-LBA-Featuresatz gehört. Das Feld Vorherigen in der _IDE_TASK_FILE-Struktur ist gültig, wenn dieses Kennzeichen festgelegt ist. |
IRB_FLAGS_PIO_MULTIPLE | Gibt an, dass der ATA-Befehl mit der ATA PIO Multiple-Methode übertragen werden soll. |
IRB_FLAGS_RETURN_RESULTS | Gibt an, dass die ATA-Rückgabeaufgabendatei in SenseInfoBufferkopiert werden soll. |
IRB_FLAGS_DATA_IN | Gibt an, dass die Daten vom Gerät an das Hostsystem (lesevorgang) übertragen werden sollen. |
IRB_FLAGS_DATA_OUT | Gibt an, dass die Daten vom Hostsystem an das Gerät übertragen werden sollen ( ein Schreibvorgang). |
IRB_FLAGS_DISCARDABLE | Gibt an, dass der Befehl auf optimale Weise durchgeführt werden soll. (Hinweis: Dies ist derzeit nicht von ATAport beschäftigt). |
IRB_FLAGS_HIGH_PRIORITY | Gibt an, dass dieser IRB so schnell wie möglich verarbeitet werden soll, bevor sich irBs mit nicht hoher Priorität derzeit im ATA-Miniport befinden. |
TimeOutValue
Gibt die Zeit in Sekunden an, nach der die Anforderung timeout wird.
DataTransferLength
Enthält die Länge in Byte des Datenpuffers, der zu übertragende Daten enthält.
IrbExtension
Zeiger auf die vom Porttreiber zugewiesene Erweiterung pro Anforderung.
DataBuffer
Zeigen Sie auf den Puffer, in dem sich die Daten befinden.
SenseInfoBuffer
Zeigen Sie auf den Puffer, der die Sinnesdaten enthält.
NextIrb
Zeiger auf den nächsten zu verarbeitenden IRB. Der Porttreiber legt dies auf NULL-fest. Der Miniporttreiber kann dieses Feld verwenden, um IRBs miteinander zu verknüpfen.
Reserved
Reserviert für die zukünftige Verwendung.
IdeTaskFile
Enthält eine Struktur vom Typ IDE_TASK_FILE, die die IDE-Aufgabendatei für den angegebenen Controller enthält. Dieses Element wird immer dann definiert, wenn das Ergebnis eines bitweisen AND zwischen dem Function Member und IRB_FUNCTION_ATA_COMMAND ungleich Null ist.
Cdb[16]
Enthält einen Befehlsdeskriptorblock (CDB). Dieses Element wird immer definiert, wenn das Ergebnis eines bitweisen AND zwischen dem Function--Element und IRB_FUNCTION_ATAPI_COMMAND ungleich Null ist.
PowerChange
Gibt einen Enumerationswert vom Typ POWER_CHANGE_INFO an, der einen Energiezustandsübergang definiert. Dieses Element wird immer dann definiert, wenn Function gleich IRB_FUNCTION_POWER_CHANGE ist.
AsUChar[16]
Stellt eine Möglichkeit für den Zugriff auf Member IdeTaskFile-, PowerChange-und cdb- als nicht signierte Zeichendaten bereit.
Bemerkungen
Die IDE_REQUEST_BLOCK-Struktur bietet eine Funktionalität, die dem SCSI_REQUEST_BLOCK ähnelt, aber mit Merkmalen, die für die Verwaltung von Geräten auf einem IDE-Bus besser geeignet sind.
Anforderungen
Anforderung | Wert |
---|---|
Header- | irb.h (include Irb.h) |