Eingangspunkt des Einheitentreibers ddmpx

Zweck

Ordnet einen Kanal für einen Multiplex-Einheitentreiber zu oder hebt die Zuordnung auf.

Syntax

#include <sys/device.h>
#include <sys/types.h>
int ddmpx ( devno,  chanp,  channame)
dev_t devno;
chan_t *chanp;
char *channame;

Parameter

Element Beschreibung
Devno Gibt die Major-und Minor-Einheitennummernan.
Chanp Gibt die Kanal-ID an, die nach Referenz übergeben wird.
Änderungsname Verweist auf die Pfadnamenserweiterung für den zuzuordnenden Kanal.

Beschreibung

Nur Einheitentreiber mit gemultiplexten Zeichenklassen können die Routine Ddmpx bereitstellen, und der Alle -Multiplexer-Treiber muss dies tun. Die Routine Ddmpx kann nicht von Blockeinheitentreibern bereitgestellt werden, selbst wenn Unformatiert -Schreib-/Lesezugriff bereitgestellt wird.

Ein Einheitentreiber mit Multiplexen ist ein Einheitentreiber für Zeichenklassen, der die Zuweisung von Kanälen unterstützt, um eine feinere Zugriffssteuerung für eine Einheit oder eine virtuelle Untereinheit bereitzustellen. Dieser Typ von Einheitentreiber ist in der Lage, spezielle kanalbezogene Informationen zu decodieren, die an das Ende des Pfadnamens der Gerätedatei der Einheit angehängt werden. Diese Pfadnamenerweiterung wird verwendet, um eine logische oder virtuelle Untereinheit oder einen Kanal anzugeben.

Wenn ein Öffnen oder Creat -Subroutinenaufruf an eine Einheiteninstanz ausgegeben wird, die von einem Multiplex-Einheitentreiber unterstützt wird, ruft der Kernel die Ddmpx -Routine des Einheitentreibers auf, um einen Kanal zuzuordnen.

Der Kernel ruft die Routine Ddmpx auf, wenn ein Kanal zugeordnet oder freigegeben werden soll. Bei der Zuordnung erstellt der Kernel dynamisch g-Knoten (In-Core-I-Nodes) für Kanäle auf einer Multiplexeinheit, damit die Schutzattribute für verschiedene Kanäle unterschiedlich sind.

Zum Zuordnen eines Kanals wird die Routine Ddmpx mit einem Änderungsname -Zeiger auf die Pfadnamenerweiterung aufgerufen. Die Pfadnamenerweiterung beginnt nach dem ersten / (Schrägstrich), der auf den Gerätedateinamen im Pfadnamen folgt. Die Routine Ddmpx sollte die folgenden Aktionen ausführen:

  • Diese Pfadnamenerweiterung syntaktisch analysieren.
  • Ordnen Sie den entsprechenden Kanal zu.
  • Kanal-ID über den Parameter Chanp zurückgeben.

Wenn keine Pfadnamenserweiterung vorhanden ist, zeigt der Zeiger Änderungsname auf eine Nullzeichenfolge. In diesem Fall sollte ein verfügbarer Kanal zugeordnet und seine Kanal-ID über den Parameter Chanp zurückgegeben werden.

Wenn von der Ddmpx -Routine kein Fehler zurückgegeben wird, wird die zurückgegebene Kanal-ID verwendet, um festzustellen, ob der Kanal bereits zugeordnet war. Wenn der g-Knoten für den zugeordneten Kanal bereits zugeordnet ist, wird der Referenzzähler erhöht. Wenn der Kanal noch nicht zugeordnet wurde, wird ein neuer g-Knoten für den Kanal erstellt. In beiden Fällen wird die Routine ddopen des Einheitentreibers mit der Kanalnummer aufgerufen, die von der Routine Ddmpx zugeordnet wird. Wenn die Ddmpx -Routine einen Rückkehrcode ungleich null zurückgibt, wird davon ausgegangen, dass der Kanal nicht zugeordnet wurde, und die ddopen -Routine des Einheitentreibers wird nicht aufgerufen.

Wenn das Schließen eines Kanals angefordert wird, sodass der Kanal nicht mehr verwendet wird (wie durch die g-Knoten -Referenzanzahl des Kanals festgelegt), ruft der Kernel die Routine Ddmpx auf. Die Routine Ddmpx gibt den Kanal frei, nachdem die Routine ddclose aufgerufen wurde, um die letzte Verwendung des Kanals zu schließen. Wenn die Routine ddclose einen Rückkehrcode ungleich null zurückgibt, wird die Routine Ddmpx weiterhin aufgerufen, um die Zuordnung des Kanals aufzuheben. Der Rückkehrcode der ddclose -Routine wird gespeichert und an den Aufrufenden zurückgegeben. Wenn die Routine ddclose keinen Fehler zurückgegeben hat, aber ein Rückkehrcode ungleich null von der Routine Ddmpx zurückgegeben wurde, wird angenommen, dass der Kanal freigegeben wurde, obwohl der Rückkehrcode an den Aufrufenden zurückgegeben wird.

Zum Freigeben eines Kanals wird die Routine Ddmpx mit einem Nullzeiger Änderungsname und der Kanal-ID aufgerufen, die durch Referenz im Parameter Chanp übergeben wird. Wenn der Kanal g-Knoten-Referenzzähler auf 0 gesetzt wurde, ruft der Kernel die Routine Ddmpx auf, um die Zuordnung des Kanals aufzuheben, nachdem die Routine ddclose aufgerufen wurde, um sie zu schließen. Die ddclose -Routine sollte den Kanal nicht selbst freigeben.

Ausführungsumgebung

Die Routine Ddmpx wird nur in der Prozessumgebung aufgerufen.

Rückgabewerte

Wenn die Zuordnung oder Freigabe eines Kanals erfolgreich ist, sollte die Routine Ddmpx den Rückkehrcode 0 zurückgeben. Wenn bei der Zuordnung oder Freigabe ein Fehler auftritt, gibt diese Routine einen Wert ungleich null zurück.

Der Rückkehrcode sollte den Rückkehrcodes entsprechen, die für die Subroutinen open und close im Standard POSIX 1003.1 beschrieben sind, soweit zutreffend. Andernfalls sollte der Rückkehrcode in der Datei /usr/include/sys/errno.h definiert sein.