Informationen zur Behandlung asynchroner SCSI-Ereignisse

Ein SCSI-Einheitentreiber kann eine bestimmte Einheiteninstanz für den Empfang asynchroner Ereignisstatus registrieren, indem er die SCIOEREIGNIS ioctl-Operation für den Einheitentreiber des SCSI-Adapters aufruft. Wenn ein von der SCIOEREIGNIS ioctl-Operation abgedecktes Ereignis vom Einheitentreiber des SCSI-Adapters erkannt wird, erstellt es eine sc_event_info -Struktur und übergibt einen Zeiger auf die Struktur und den Eingangspunkt der asynchronen Ereignishandlerroutine, der zuvor registriert wurde.

Anmerkung: Diese Operation wird nicht von allen SCSI-E/A-Controllern unterstützt.

Die Felder in der Struktur werden vom Einheitentreiber des SCSI-Adapters wie folgt ausgefüllt:

Element Beschreibung
id Für den Initiatormodus ist dies die SCSI-ID der angeschlossenen SCSI-Zieleinheit. Für den Zielmodus ist dies die SCSI-ID der angeschlossenen SCSI-Initiatoreinheit.
LUN Für den Initiatormodus wird die SCSI-LUN der angeschlossenen SCSI-Zieleinheit festgelegt. Für den Zielmodus wird dieser Wert auf 0 gesetzt.
Modus Gibt an, ob die Einheit im Initiator-oder Zielmodus gemeldet wird Folgende Werte sind möglich:
SC_IM_MODE
Eine Einheit im Initiatormodus wird gemeldet.
SC_TM_MODE
Eine Zielmoduseinheit wird gemeldet.
Ereignisse Dieses Feld wird festgelegt, um anzugeben, welche Ereignisse gemeldet werden. Die folgenden Werte sind in der Datei /usr/include/sys/scsi.h definiert:
SC_FATAL_HDW_ERR
Ein schwerwiegender Hardwarefehler des Adapters ist aufgetreten.
SC_ADAP_CMD_FAILED
Ein nicht behebbarer Adapterbefehl ist aufgetreten.
SC_SCSI_RESET_EVENT
Es wurde eine SCSI-Buszurücksetzung erkannt.
SC_BUFS_EXHAUSTED
Im Zielmodus ist ein Ereignis zur maximalen Pufferbelegung aufgetreten.
Adap_devno Dieses Feld gibt die Haupt-und Nebengerätenummern des Adapters an, auf dem sich die Einheit befindet.
async_correlator Dieses Feld wird auf den Wert gesetzt, der an den Einheitentreiber des SCSI-Adapters in der Struktur sc_event_struct übergeben wird. Der SCSI-Einheitentreiber kann dieses Feld optional verwenden, um ein effizientes Mittel zur Zuordnung des Ereignisstatus zu der Einheiteninstanz bereitzustellen, zu der er gehört. Alternativ verwendet der SCSI-Einheitentreiber die Kombination ausid,lun,modeundadap_devnoFelder zur Identifizierung der Einheiteninstanz.
Anmerkung: Reservierte Felder sollten vom Einheitentreiber des SCSI-Adapters auf 0 gesetzt werden.

Die in dersc_event_info.events-Feld stellt keine Warteschlange für den SCSI-Einheitentreiber, sondern wird stattdessen als ein oder mehrere Flags gemeldet, wenn sie auftreten. Da die Daten nicht in die Warteschlange eingereiht werden, kann der Writer des SCSI-Adaptereinheitentreibers eine einzelne sc_event_info -Struktur verwenden und diese nacheinander per Zeiger an jede asynchrone Ereignishandlerroutine für die entsprechende Einheiteninstanz übergeben. Nachdem festgestellt wurde, für welche Einheit die Ereignisse gemeldet werden, muss der SCSI-Einheitentreiber diesc_event_info.eventsin den lokalen Bereich und darf den Inhalt der restlichen sc_event_info -Struktur nicht ändern.

Da der Ereignisstatus optional ist, bestimmt der Autor des SCSI-Einheitentreibers, welche Aktion beim Empfangen des Ereignisstatus erforderlich ist. Das Ausgabeprogramm kann den Status speichern und an die aufrufende Anwendung zurückmelden, oder der SCSI-Einheitentreiber oder das Programm auf Anwendungsebene kann Maßnahmen zur Fehlerbehebung ergreifen.