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.
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:
|
| Ereignisse | Dieses Feld wird festgelegt, um anzugeben, welche Ereignisse gemeldet werden. Die folgenden Werte sind in der Datei /usr/include/sys/scsi.h definiert:
|
| 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. |
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.