SCIOCMD-SCSI-Adapter-Einheitentreiber ioctl-Operation

Zweck

Bietet die Möglichkeit, einen SCSI-Befehl an eine SCSI-Einheit auszugeben.

Beschreibung

Die Operation SCIOCMD-Befehl ermöglicht dem Aufrufenden, einen SCSI-Befehl an einen ausgewählten Adapter auszugeben. Dieser Befehl kann von Systemverwaltungsroutinen verwendet werden, um die Konfiguration von SCSI-Einheiten zu unterstützen.

Der Parameter arg für die Operation SCIOCMD ist die Adresse einer sc_passthru -Struktur, die im Feld /usr/include/sys/scsi.h definiert ist. Mit dem Parameter sc_passthru (Durchgriff) kann der Aufrufende auswählen, welches SCSI-und LUN-IDS den Befehl senden soll.

Das SCSI-Statusbyte und die Adapterstatusbyte werden über die Struktur sc_passthru (Durchgriff) zurückgegeben. Wenn das SCIOCMD Operation gibt einen Wert zurück von-1 und die globale Variable „errno“ auf einen Wert ungleich Null gesetzt ist, ist der angeforderte Vorgang fehlgeschlagen. In diesem Fall muss der Aufrufende die zurückgegebenen Statusbyte auswerten, um festzustellen, warum die Operation fehlgeschlagen ist und welche Wiederherstellungsaktionen ausgeführt werden müssen.

Wenn das SCIOCMD Der Vorgang schlägt fehl, weil ein Feld im sc_passthru Struktur hat einen ungültigen Wert, die Subroutine gibt einen Wert zurück von-1 wird die globale Variable errno auf EINVAL , und das einval_arg Das Feld wird auf die Feldnummer (beginnend mit 1 für das Versionsfeld) des Felds gesetzt, das einen ungültigen Wert hatte. Der Wert 0 für das Feld Einval_Argument gibt an, dass keine weiteren Informationen verfügbar sind.

Das Versionsfeld der Struktur sc_passthru kann auf den Wert von SC_VERSION_2 in der Datei /usr/include/sys/scsi.h gesetzt werden und der Benutzer kann die folgenden Felder angeben:
  • variable_cdb_ptr ist ein Zeiger auf einen Puffer, der die Variable SCSI cdb enthält.
  • variable_cdb_länge bestimmt die Länge der Variablen CDB , auf die das Feld variable_cdb_ptr verweist.
Bei Beendigung der SCIOCMD-Befehl ioctl-Anforderung gibt das Feld Residuum die übrig gebliebenen Daten an, die die Einheit für diese Anforderung nicht vollständig erfüllt hat. Nach einem erfolgreichen Abschluss gibt das Feld Residuum an, dass die Einheit nicht über alle angeforderten Daten verfügt oder dass die Einheit weniger Daten enthält als angefordert wurden. Bei einem Fehler muss der Benutzer das Feld Statusgültigkeit überprüfen, um festzustellen, ob ein gültiger SCSI-Busfehler vorliegt. In diesem Fall gibt das Feld Residuum die Anzahl Byte an, die die Einheit für diese Anforderung nicht ausführen konnte.

Die Struktur Devinfo definiert die maximale Übertragungsgröße für den Befehl. Wenn versucht wird, mehr als die maximale Übertragungsgröße zu übertragen, gibt die Subroutine einen Wert von zurück-1 setzt die globale Variable errno auf einen Wert von EINVAL und legt den einval_arg auf den Wert 18.

Informationen zum Format der Prüfdaten für Anforderungen für eine bestimmte Einheit finden Sie im SCSI-Spezifikation (Small Computer System Interface) .

Rückgabewerte

Die Operation SCIOCMD-Befehl gibt nach erfolgreichem Abschluss den Wert 0 zurück. Bei Misserfolg wird ein Wert von-1 wird zurückgegeben und die globale Variable „errno“ auf einen der folgenden Werte gesetzt:
Element Beschreibung
EIO Ein Systemfehler ist aufgetreten. Versuchen Sie die Operation mehrere (drei) Male, da ein weiterer Versuch erfolgreich sein könnte. Wenn ein E/A -Fehler auftritt und das Feld Statusgültigkeit auf SC_SCSI_FEHLERgesetzt ist, enthält das Feld scsi_status einen gültigen Wert und muss überprüft werden.

Wenn das Feld Statusgültigkeit den Wert null hat und bei aufeinanderfolgenden Versuchen so bleibt, ist ein nicht behebbarer Fehler aufgetreten.

Wenn das Feld Statusgültigkeit den Wert SC_SCSI_FEHLER hat und das Feld scsi_status den Status Bedingung prüfen enthält, muss ein SCSI-Anforderungsprüfcode mit SCIOCMD-Befehl ioctl ausgegeben werden, um die Prüfdaten wiederherzustellen.

EFAULT Das Kopieren eines Benutzerprozesses ist fehlgeschlagen.
EINVAL Die Einheit ist nicht geöffnet oder der Aufrufende hat ein Feld in der Struktur sc_passthru (Durchgriff) auf einen ungültigen Wert gesetzt.
EACCES Der Adapter befindet sich im Diagnosemodus.
ENOMEM Eine Speicheranforderung ist fehlgeschlagen.
EZEITDOUT Das Zeitlimit für den Befehl wurde überschritten. Versuchen Sie die Operation möglicherweise mehrmals, da ein weiterer Versuch erfolgreich sein könnte.
ENODEW Die Einheit antwortet nicht.
EZEITDOUT Die Operation wurde nicht abgeschlossen, bevor der Zeitlimitwert überschritten wurde.

Dateien

Element Beschreibung
/dev/scsi0, /dev/scsi1, ... /dev/scsin Stellt eine Schnittstelle für alle SCSI-Einheitentreiber für den Zugriff auf SCSI-Einheiten oder -Adapter bereit.