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;
Member
Function
Gibt die Kategorie an, zu der die Anforderung gehört. In der folgenden Tabelle wird die Klassifizierung der E/A-Anforderungen beschrieben.
Function | 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 der 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 ein CDB enthält, das 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 angemessen zu interpretieren. |
IrbStatus
Der Miniport muss diesen Member so festlegen, dass die status des angegebenen Vorgangs angegeben wird. 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 mit diesem Wert. Ein Miniporttreiber sollte den IrbStatus-Member niemals auf diesen Wert festlegen. |
IRB_STATUS_SUCCESS | Gibt an, dass die Anforderung erfolgreich abgeschlossen wurde. |
IRB_STATUS_DATALENGTH_MISMATCH | Gibt an, dass ein Datenunter- oder Überlauffehler aufgetreten ist. Der Miniport muss das Feld DataTransferLength im IRB aktualisieren, um die tatsächliche Datenmenge anzugeben, die im Falle einer Unterausführung übertragen wurde. |
IRB_STATUS_DEVICE_ERROR | Gibt an, dass das Gerät einen Fehler zurückgegeben hat. Der Miniporttreiber muss die Felder AtaStatus und AtaError im Irb auf den Inhalt der ATA-status des Geräts aktualisieren und beim Abschluss des Befehls fehlerregistrieren. |
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 Busrücksetzung erfolgt 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 wiederholt jede Anforderung, die mit diesem status abgeschlossen wurde. Eine Anforderung, die mit ausgelasteten status abgeschlossen wurde, wird nur einmal wiederholt. Es liegt in der Verantwortung des Miniporttreibers, die Anforderungswarteschlange mithilfe von 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-Element des IRB angibt. |
IRB_STATUS_RETURN_TASKFILE_VALID | IRB_STATUS_RETURN_TASKFILE_VALID ist eine Bitmaske, die eine gültige Rückgabetaskdatei im SenseInfoBuffer-Element des IRB angibt. |
AtaStatus
Gibt die status an, die vom Gerät im status-Register zurückgegeben wird. Der Miniporttreiber sollte dieses Feld aktualisieren, wenn ein IRB mit IRB_STATUS_DEVICE_ERROR abgeschlossen wird.
AtaError
Gibt den Fehlerwert an, der vom Gerät im Fehlerregister zurückgegeben wird. Der Miniporttreiber sollte dieses Feld aktualisieren, wenn ein IRB mit IRB_STATUS_DEVICE_ERROR abgeschlossen wird.
Channel
Gibt die Kanalnummer an.
TargetId
Gibt die Ziel-ID des Geräts an.
Lun
Gibt die Nummer der logischen Einheit des Geräts an.
CdbLength
Gibt die Länge des Puffers in Bytes an, auf den cdb verweist.
SenseInfoBufferLength
Gibt die Länge des Puffers in Bytes an, auf den SenseInfoBuffer verweist.
SenseInfoBufferType
Gibt den Typ der in SenseInfoBuffer zurückgegebenen Datenstruktur an. Da ATA-Befehle den Befehl request sense nicht benötigen, verwenden ATA_PASS_THROUGH Befehle SenseInfoBuffer , um Informationen zur Taskdatei 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 gemeldet werden.
SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE.
QueueTag
Das Warteschlangentag für dieses IRB. Der Porttreiber legt dieses Feld auf 0 fest.
ReservedAsUlong
Für die zukünftige Verwendung reserviert.
IrbFlags
Qualifiziert die Anforderung mit bestimmten Aktionen, die ausgeführt werden müssen. In der folgenden Tabelle werden sie ausführlich beschrieben.
Flag | Beschreibung |
IRB_FLAGS_DRDY_REQUIRED | Gibt an, dass der Miniporttreiber warten muss, bis das Gerät das DRDY-Bit im ATA-status-Register festgelegt hat, bevor dieser Befehl ausgegeben wird. |
IRB_FLAGS_USE_DMA | Gibt an, dass die Anforderung über eine zugeordnete Scatter/Gather-Liste verfügt und der Miniporttreiber DMA verwenden kann, um Daten für diese Anforderung zu übertragen. |
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 auffordern, den Datenpuffer zuzuordnen, indem er dieses Flag im IRB in seiner IdeHwBuildIo-Routine festlegt. |
IRB_FLAGS_48BIT | Gibt an, dass der ATA-Befehl im IRB zum 48-Bit-LBA-Featuresatz gehört. Das Feld Zurück in der _IDE_TASK_FILE-Struktur ist gültig, wenn dieses Flag 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ückgabetaskdatei in SenseInfoBuffer kopiert werden soll. |
IRB_FLAGS_DATA_IN | Gibt an, dass die Daten vom Gerät an das Hostsystem übertragen werden sollen (ein Lesevorgang). |
IRB_FLAGS_DATA_OUT | Gibt an, dass die Daten vom Hostsystem auf das Gerät übertragen werden sollen (schreibvorgang). |
IRB_FLAGS_DISCARDABLE | Gibt an, dass der Befehl in bestmöglicher Weise ausgeführt werden soll. (Hinweis: Dies wird derzeit nicht von ATAport verwendet). |
IRB_FLAGS_HIGH_PRIORITY | Gibt an, dass dieser IRB so schnell wie möglich vor IRBs ohne hohe Priorität verarbeitet werden soll, die sich derzeit im ATA-Miniport befinden. |
TimeOutValue
Gibt die Zeit in Sekunden an, nach der ein Timeout für die Anforderung erfolgt.
DataTransferLength
Enthält die Länge des Datenpuffers in Bytes, der zu übertragende Daten enthält.
IrbExtension
Zeiger auf die vom Porttreiber zugewiesene Erweiterung pro Anforderung.
DataBuffer
Zeiger auf den Puffer, in dem sich die Daten befinden.
SenseInfoBuffer
Zeiger auf den Puffer, der die Sinndaten 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
Für die zukünftige Verwendung reserviert.
IdeTaskFile
Enthält eine Struktur vom Typ IDE_TASK_FILE , die die IDE-Aufgabendatei für den angegebenen Controller enthält. Dieser Member wird immer dann definiert, wenn das Ergebnis eines bitweisen AND zwischen dem Funktionsmember und IRB_FUNCTION_ATA_COMMAND nonzero ist.
Cdb[16]
Enthält einen Befehlsdeskriptorblock (CDB). Dieser Member wird immer dann definiert, wenn das Ergebnis eines bitweisen AND zwischen dem Funktionsmember und IRB_FUNCTION_ATAPI_COMMAND nichtzero ist.
PowerChange
Gibt einen Enumerationswert vom Typ POWER_CHANGE_INFO an, der einen Energiezustandsübergang definiert. Dieser Member wird immer dann definiert, wenn Die Funktion gleich IRB_FUNCTION_POWER_CHANGE ist.
AsUChar[16]
Ermöglicht den Zugriff auf die Member IdeTaskFile, PowerChange und Cdb als Zeichendaten ohne Vorzeichen.
Hinweise
Die IDE_REQUEST_BLOCK-Struktur bietet eine Funktionalität, die der SCSI_REQUEST_BLOCK ähnelt, aber mit Merkmalen, die sich besser für die Verwaltung von Geräten auf einem IDE-Bus eignen.
Anforderungen
Anforderung | Wert |
---|---|
Header | irb.h (include Irb.h) |