idevice(4) (Nur RM400) idevice(4)
NAME
idevice - Interrupt-Konfigurationsdatei
BESCHREIBUNG
Jedes Paket, das EISA/ISA-Bus-Interrupts verwendet, muß auch über eine
Datei idevice verfügen, in der die Interrupt-Anforderungen des Pakets
angegeben sind.
Beim Installieren des Pakets (mit idinstall), wird der idevice-Teil
des Pakets in das Verzeichnis idevice.d des Kernverbindungskit
kopiert. Bei der Kernverbindung werden die Dateien zu dieser Kompo-
nente zu einer einzigen Datei verkettet, die dann von idintconf verar-
beitet wird. Dieses Kommando generiert eine Datenstruktur, die beim
Booten des Kerns den jeweiligen Verwendungszweck der Interrupt-
Ressourcen des EISA/ISA-Busses zuordnet.
Die Datei idevice besteht aus einer oder mehreren Zeilen, wobei in
jeder Zeile eine vom Gerät benötigte Interrupt-Ressource beschrieben
wird. Jede Zeile enthält neun durch Leerraum getrennte Felder. Der
Name im ersten Feld kann in Anführungszeichen angegeben werden. In den
übrigen Feldern ist dies nicht möglich. Alle Felder müssen angegeben
sein. Kommentarzeilen sind Zeilen, die mit "#" oder "*" beginnen.
Wenn zulässig, wird das Zeichen "-" verwendet, um anzugeben, daß das
Feld nicht definiert sein sollte. Das Zeichen "*" wird verwendet, um
den Standardwert für das Feld anzugeben. Normalerweise besteht dieser
aus dem im Feld Internal name angegebenen internen Namen mit einer
angehängten, feldabhängigen Zeichenkette.
Es wird davon ausgegangen, daß jeder Zeile bei späteren, überarbeite-
ten Versionen der Datei noch weitere Felder hinzugefügt werden. Daher
sollten keine Kommentare an das Zeilenende gestellt werden.
In der aktuelle Implementierung sind folgende Felder enthalten:
Colloquial name
Das erste Feld in jeder Zeile ist ein vom Benutzer lesbarer Name
für das Gerät, der verwendet wird, wenn idintconf oder der Kern
eine Diagnose durchführen muß. Dieses Feld darf in den zu einem
Treiber gehörenden Zeilen nur einmal vorkommen. Der Name in die-
sem Feld kann in Anführungszeichen angegeben werden. Es ist das
einzige Feld, bei dem dies möglich ist.
Internal name
Das zweite Feld besteht aus dem Namen, der zum Generieren von
Symbolen für den Kern verwendet wird. Es ist mit dem Feld Device
name in sdevice identisch. Mit diesem Feld werden andere Felder
generiert, die auf den Standardwert gesetzt wurden.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
idevice(4) (Nur RM400) idevice(4)
Wird das Feld auf "-" oder "*" gesetzt, entspricht der Feldwert
dem des Feldes Colloquial name. Dies ist nicht zulässig, wenn
Colloquial name Leerzeichen enthält.
Bus type
Dieses Feld gibt an, über welche Art von Busschnittstelle die
Hardware verfügt, und kann den Wert ISA oder EISA enthalten. Für
das Feld gibt es keinen Standardwert. Es kann durch "I" bzw. "E"
abgekürzt werden.
Interrupt type
Verfügt die Hardware über eine ISA-Schnittstelle, kann für dieses
Feld EDGE oder ein "-" (hierbei wird das Feld standardmäßig auf
EDGE gesetzt) angegeben werden. Für ISA-Karten sind keine anderen
Werte möglich. Der Grund hierfür ist eine Hardwarebeschränkung im
Originaldesign des AT-Busses.
Verfügt die Hardware über eine EISA-Schnittstelle, wird mit die-
sem Feld die Art des Interrupts angegeben, den die Hardware ver-
arbeiten kann. Dies kann entweder EDGE (für flanken-getriggerte
Geräte), LEVEL (für zustands-getriggerte Geräte) oder SHARED
sein. Es gibt keinen Standardwert für dieses Feld bei einem Gerät
mit EISA-Bus.
SHARED kann für Geräte verwendet werden, die zustands-getriggerte
Interrupts einsetzen und beim Interrupt feststellen können, ob
die Hardware tatsächlich einen Interrupt verwendet hat. Alle
Interrupt-Routinen mit einem gemeinsamen Interrupt werden aufge-
rufen, wenn ein Interrupt festgestellt wird. Die Reihenfolge, in
der diese Routinen aufgerufen werden, ist NICHT definiert.
Falls erforderlich kann dieses Feld mit dem ersten Buchstaben des
jeweiligen Werts abgekürzt werden.
Number of Interrupts
Normalerweise verwenden die meisten Geräte nur einen Interrupt
für jede Karte, so daß das Feld auf 1 gesetzt wird. Es gibt
allerdings auch Karten, die mehrere Interrupts pro Hardwarekarte
verwenden, wie zum Beispiel die chase-Karte. In diesem Fall wird
dieses Feld auf die Anzahl der von jeder Karte verwendeten Inter-
rupts gesetzt. Für die chase-Karte würde der Wert z. B. 2 lauten.
Für dieses Feld gibt es keinen Standardwert.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
idevice(4) (Nur RM400) idevice(4)
Possible Interrupts
Dieses Feld enthält eine durch Kommata getrennte Liste möglicher
Interrupts, die die Karte verwenden kann. Diese Liste ist logisch
in Gruppen aus n-Tupel eingeteilt. Die Größe jedes n-Tupel wird
durch das Feld Number of interrupts bestimmt. Im Normalfall gilt
für n-Tupel die Länge 1, so daß jeder Wert separat behandelt
wird.
Bei Geräten mit ISA-Bus kann die Interrupt-Nummer durch die Soft-
waresteuerung nicht geändert werden. Bei einigen Karten mag dies
möglich sein, dies ist jedoch nicht der Normalfall. Dies bedeu-
tet, daß nur der erste n-Tupel verwendet wird. idintconf und der
Kern geben bei kollidierenden Interrupt-Nummern Warnungen aus. In
diesem Fall werden die folgenden n-Tupel dazu verwendet, den
Benutzer über eine Änderung der Jumper zu informieren, durch die
ein Einsatz der Karte möglich wäre. Bei einer Interrupt-Kollision
zwischen zwei ISA-Bus-Geräten werden beide Geräte deaktiviert.
Der Grund ist eine Hardwarebeschränkung im Design des AT-Busses.
Bei Geräten mit EISA-Bus kann die Interrupt-Anzahl dynamisch
zugeordnet werden, so daß es nicht zu Konflikten mit anderen
Geräten kommen kann. In diesem Fall wird jeder n-Tupel nacheinan-
der ausprobiert. Kommt es bei einem n-Tupel zu keinem Konflikt
mit anderen Interrupts, wird der Karte dieser n-Tupel zugeordnet.
Kommt es allerdings bei allen n-Tupel zu Konflikten, versucht der
Kern, alle Konflikte verursachende Interrupts neu anzuordnen, so
daß sie nicht mehr kollidieren. Wenn zwei oder mehr Geräte einen
Interrupt gemeinsam verwenden, werden sie nicht neu angeordnet.
Auf diese Weise wird versucht, alle Interrupt-Konflikte zu ver-
meiden. Wird der Konflikt durch ein ISA-Gerät verursacht, kann
dessen Interrupt-Nummer nicht geändert werden. Wenn bei allen
möglichen Interrupt-Anordnungen Konflikte auftreten, wird das
Gerät nicht aktiviert, und dem Gerät wird kein Interrupt zugeord-
net.
Die n-Tupel dieses Feldes sollten nach bevorzugter Reihenfolge
angeordnet werden, d. h. die am meisten bevorzugte Interrupt-
Nummer sollte ganz oben in der Liste stehen.
Interrupt routine
Dieses Feld gibt den Namen der vom Gerät verwendeten Funktion zur
Bearbeitung von Interrupts an. Im Normalfall, wenn der Treiber
nur einen Interrupt je Gerät verwendet, kann dieses Feld durch
einen "*" auf den Standardwert gesetzt werden. In diesem Fall
heißt die Funktion internalnameintr.
Benötigt der Treiber mehrere Interrupts pro Gerät, enthält dieses
Feld eine durch Kommata abgetrennte Liste der zu verwendenden
Interrupt-Funktionen. In diesem Fall gibt es keine Standardak-
tion, da genügend Interrupt-Routinen pro Gerät zur Verfügung
gestellt werden müssen. Die Reihenfolge ist in Bezug auf die
Interrupt-Nummern lexikalisch, d. h., die erste Interrupt-Routine
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
idevice(4) (Nur RM400) idevice(4)
wird durch einen Interrupt an der ersten Interrupt-Nummer aufge-
rufen, die zweite Interrupt-Routine durch einen Interrupt an der
zweiten Nummer.
Enthält das Feld ein "-", ist keine Interrupt-Funktion angegeben;
die Verwendung dieses Wertes ist für spätere Versionen vorgese-
hen.
Existence routine
Dieses Feld enthält den Namen einer Routine, die als erste Rou-
tine des Treibers aufgerufen wird. Sie wird vor der Treiberrou-
tine init aufgerufen. Diese Routine soll feststellen, ob das
Gerät tatsächlich existiert. Existiert das Gerät, sollte die Rou-
tine PROBEOK ausgeben. Existiert das Gerät nicht, sollte die
Routine PROBEFAIL ausgeben. Kann der Treiber nicht feststellen,
ob das Gerät existiert, sollte diese Routine PROBEOK ausgeben.
Damit der Treiber feststellen kann, welches Hardwaregerät geprüft
werden soll, wird dieser Routine die Adresse einer intrparamt-
Struktur übergeben. Anhand der Felder in dieser Struktur kann
festgestellt werden, welches Gerät geprüft wird.
Enthält dieses Feld ein "-", ist keine Existenzroutine angegeben.
In diesem Fall nimmt der Kern an, daß das Gerät existiert und
setzt die Verarbeitung wie bei der Ausgabe von PROBEOK fort.
Enthält dieses Feld einen "*", lautet der Name der Routine
internalnameexist.
Weitere Informationen finden Sie in der Beschreibung von XXe-
xist(5).
Set interrupt routine
Dieses Feld gibt den Namen einer Funktion an, die nach der Rou-
tine exist, aber vor der Routine init aufgerufen wird. Diese
Funktion wird aufgerufen, wenn der Kern Interrupts für das Gerät
zuordnen konnte. Wird diese Routine nicht aufgerufen, konnte der
Kern keine Interrupts für das Gerät zuordnen, d. h. das Gerät
darf sich nicht selbst initialisieren. Ein Treiber, der durch
eine exist-Routine die Meldung PROBEFAIL für ein bestimmtes
Gerät ausgibt, ruft niemals die setint-Routine für dieses Gerät
auf.
Dieser Routine werden zwei Optionen übergeben. Die erste ist ein
Zeiger auf eine Liste mit Ganzzahlen, die die Interrupt-Zeilen
darstellen, die dem jeweiligen Gerät zugeordnet wurden. Hierfür
wird ein Zeiger verwendet, weil für einige Geräte mehr als ein
Interrupt erforderlich ist. Es wird angenommen, daß die Routine
setint weiß, wieviele Interrupts sie zugeordnet hat.
Bei der zweiten Option handelt es sich um einen Zeiger auf eine
intrparamt-Struktur. Anhand der Elemente dieser Struktur läßt
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
idevice(4) (Nur RM400) idevice(4)
sich feststellen, welchem Gerät die Interrupts zugeordnet wurden.
Enthält das Feld einen "*", lautet die Routine
internalnamesetint. Enthält das Feld ein "-", wurde keine
setint-Funktion angegeben; die Verwendung dieses Wertes ist für
spätere Versionen vorgesehen.
Wenn weder die Routine setint noch die Routine exist aufgerufen
ist, kann der Treiber davon ausgehen, daß er auf einem System
ohne dynamische Interrupt-Zuordnung läuft, d. h., ein System vor
Kernversion 5.42.
Verwendung von idevice
Jede Zeile in der Datei idevice beschreibt ein Treiber-/Gerätepaar und
muß einen entsprechenden Eintrag in der Datei sdevice haben. Jede
Zeile in der Datei idevice definiert die Anforderungen eines Hardware-
teils. Kann ein Treiber mehrere EISA-Geräte unterstützen, die Ressour-
cen gemeinsam benutzen, d. h. Interrupt-Nummern und Interrupt-Geräte,
muß in der Datei idevice nur eine Zeile angegeben werden. In diesem
Fall aktiviert bzw. deaktiviert der sdevice-Eintrag alle Geräte und
dann ist der Treiber dafür verantwortlich, daß die Routinen exist und
setint korrekt bearbeitet werden.
DATEIEN
idevice
sdevice
SIEHE AUCH
idintconf(1M), XXexist(5), XXsetint(5).
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98