ddconfig-Eingangspunkt des Einheitentreibers
Zweck
Führt Konfigurationsfunktionen für einen Einheitentreiber aus.
Syntax
Parameter
| Element | Beschreibung |
|---|---|
| Devno | Gibt die Haupt-und Nebeneinheitennummern an. |
| cmd | Gibt die von der ddconfig -Routine auszuführende Funktion an. |
| Uiop | Verweist auf eine UIO -Struktur, die den relevanten Datenbereich für Konfigurationsdaten beschreibt. |
Beschreibung
Der Eingangspunkt ddconfig wird verwendet, um einen Einheitentreiber zu konfigurieren. Er kann aufgerufen werden, um die folgenden Aufgaben auszuführen:
- Initialisieren Sie den Einheitentreiber.
- Beenden Sie den Einheitentreiber.
- Fordert Konfigurationsdaten für die unterstützte Einheit an.
- Führen Sie weitere einheitenspezifische Konfigurationsfunktionen aus.
Die Routine ddconfig wird von der Methode Configure, Unconfigure oder Change der Einheit aufgerufen. Normalerweise wird sie einmal für jede zu unterstützende Einheitennummer (Haupt-und Nebeneinheitennummer) aufgerufen. Dies ist jedoch geräteabhängig. Die bestimmte Einheitenmethode und ddconfig -Routine bestimmt, wie oft sie aufgerufen wird.
Die Routine ddconfig kann auch zusätzliche einheitenspezifische Funktionen bereitstellen, die sich auf die Konfiguration beziehen, wie z. B. die Rückgabe elementarer Produktdaten (VPD-Vital Product Data). Die Routine ddconfig wird normalerweise von der einheitenspezifischen Konfigurationsmethode über die Subroutine sysconfig aufgerufen.
Einheitentreiber und ihre Methoden unterstützen normalerweise die folgenden Werte für den Parameter Bef :
| Wert | Beschreibung |
|---|---|
| CFG_INIT | Initialisiert den Einheitentreiber und die internen Datenbereiche. Dies bezieht in der Regel die mit dem Parameter Devno angegebene Nebennummer ein, damit sie gültig ist. Die ddconfig -Routine des Einheitentreibers installiert auch die Eingangspunkte des Einheitentreibers in der Einheitenschaltertabelle, wenn dies das erste Mal aufgerufen wurde (für die angegebene Hauptnummer). Dies kann erreicht werden, indem der DevSWADD -Kernelservice zusammen mit einer Devsw -Struktur verwendet wird, um die Eingangspunkte des Einheitentreibers zur Einheitenswitchtabelle für die im Parameter Devno angegebene Haupteinheitennummer hinzuzufügen. Der Befehlsparameter CFG_INIT sollte auch die einheitenabhängigen Informationen (in der vom Aufrufenden bereitgestellten einheitenabhängigen Struktur) in einen statischen oder dynamisch zugeordneten Sicherungsbereich für die angegebene Einheit kopieren. Diese Informationen sollten verwendet werden, wenn die Routine ddopen später aufgerufen wird. Die Adresse und die Länge der einheitenabhängigen Struktur werden in der UIO -Struktur beschrieben, auf die der Parameter Uiop verweist. Der Kernel-Service Uiomove kann verwendet werden, um die einheitenabhängige Struktur in den Datenbereich des Einheitentreibers zu kopieren. Wenn die Routine ddopen aufgerufen wird, übergibt der Einheitentreiber einheitenabhängige Informationen an die Routinen oder andere Einheitentreiber, die die Einheitenhandlerrolle bereitstellen, um die Einheit zu initialisieren. Die Verzögerung bei der Initialisierung der Einheit bis zum Empfang des ddopen -Aufrufs ist nützlich, um die Nutzung wertvoller Systemressourcen (z. B. DMA-Kanäle und Interruptebenen) zu verzögern, bis die Einheit tatsächlich benötigt wird. |
| FG_TERM | Beendet den Einheitentreiber, der der angegebenen Einheitennummer zugeordnet ist, wie durch den Parameter Devno dargestellt. Die Routine ddconfig bestimmt, ob Öffnungen für den angegebenen Devno Parameter. ausstehen. Ist dies nicht der Fall, markiert die Verarbeitung des Befehls FG_TERM die Einheit als beendet und lässt keine nachfolgenden Öffnungsvorgänge für die Einheit zu. Alle dynamisch zugeordneten Datenbereiche, die der angegebenen Einheitennummer zugeordnet sind, sollten freigegeben werden. Wenn diese Beendigung die letzte Nebennummer, die vom Einheitentreiber unterstützt wird, aus der Verwendung entfernt, sollte der Devswdel -Kernel-Service aufgerufen werden, um die Eingangspunkte des Einheitentreibers aus der Einheitenwechseltabelle für den angegebenen Parameter Devno zu entfernen. Wenn Öffnungen für die angegebene Einheit ausstehen, wird die Beendigungsoperation mit einem entsprechenden Fehlercode zurückgewiesen. Die Dekonfigurationsmethode kann den Einheitentreiber anschließend entladen, wenn alle Verwendungen des Einheitentreibers beendet wurden. Um festzustellen, ob alle Verwendungen des Einheitentreibers beendet wurden, kann eine Einheitenmethode einen sysconfig -Subroutinenaufruf ausführen. Mithilfe der sysconfig SYS_QDVSW (QDVSW) -Operation kann die Einheitenmethode ermitteln, ob sich der Einheitentreiber selbst aus der Einheitenwechseltabelle entfernt hat. |
| CG_QVPD | Fragt einheitenspezifische elementare Produktdaten (VPD) ab. Für diese Funktion richtet die aufrufende Routine eine UIO -Struktur ein, auf die der Parameter Uiop auf die ddconfig -Routine verweist. Diese UIO -Struktur definiert einen Bereich im Speicher des aufrufenden Programms, in den die ddconfig -Routine die elementaren Produktdaten schreiben muss. Der Uiomove -Kernel-Service kann verwendet werden, um die Datenkopieroperation bereitzustellen. |
Der Datenbereich, auf den der Parameter Uiop verweist, hat je nach Funktion Bef zwei unterschiedliche Zwecke. Wenn der Befehl CFG_INIT angefordert wurde, beschreibt die Struktur Uiop die Position und Länge der einheitenabhängigen Datenstruktur (DDS), aus der die Informationen gelesen werden sollen. Wenn der Befehl CG_QVPD angefordert wurde, beschreibt die Struktur Uiop den Bereich, in den elementare Produktdateninformationen geschrieben werden sollen. Inhalt und Format dieser Informationen werden von den jeweiligen Einheitenmethoden in Verbindung mit dem Einheitentreiber festgelegt.
Der Uiomove -Kernel-Service kann verwendet werden, um das Kopieren von Informationen in oder aus diesem Datenbereich zu vereinfachen. Das Format der uio -Struktur ist in der Datei /usr/include/sys/uio.h definiert und in der Struktur uio weiter beschrieben.
Ausführungsumgebung
Die Routine ddconfig und ihre Operationen werden nur in der Prozessumgebung aufgerufen.
Rückgabewerte
Die Routine ddconfig setzt den Rückkehrcode auf 0, wenn keine Fehler für die angegebene Operation erkannt werden. Wenn ein Fehler an den Aufrufenden zurückgegeben werden soll, muss ein Rückgabecode ungleich null angegeben werden. Der verwendete Rückgabecode sollte einem der Werte entsprechen, die in der Datei /usr/include/sys/errno.h definiert sind.
Wenn diese Routine von einem sysconfig -Subroutinenaufruf aufgerufen wurde, wird der Rückgabecode an den Aufrufenden übergeben (normalerweise eine Einheitenmethode). Die Übergabe erfolgt durch die Anzeige des Fehlercodes im Fehler globale Variable und Bereitstellung einer-1 Rückgabecode zur Subroutine.