next up previous contents
Nächste Seite: Interrupt Behandlung Aufwärts: Der I/ O Server Vorherige Seite: Ressourcenverwaltung   Inhalt


PCI Support

Der Linuxkern beinhaltet ein PCI-Subsystem aus zwei Teilen -- einem architekturabhängigen und einem allgemeinen, plattformübergreifenden. Da auch in der Version 2.4 des Kerns eine eindeutig definierte Scnittstelle zu diesem existiert und nur wenige Anforderungen an die Kernumgebung gestellt werden, kann man das Subsystem einfach aus dem Kern herauslösen und in einer schmalen Emulationsumgebung verwenden.

Diese Eigenschaft macht sich der I/ O Server zunutze und nutzt eine interne Bibliothek bestehend aus unmodifizierten Linuxquellen des Subsystems und der notwendigen Emulationsumgebung für Zugriffe auf den PCI-Bus und Verwaltung der angeschlossenen Geräte.

Der Umfang der Emulation beschränkt sich hierbei auf einfache Speicherallokation und -freigabe sowie Prozeduren zum Aufruf des I/ O Ressourcen-Management.

Die kerninterne Schnittstelle des PCI-Subssystem wurde für den I/ O Server 1:1 übernommen, und es werden somit alle Funktionen, die Linux unterstützt, exportiert. Weiterhin wurde ein Datentyp für ein PCI-Gerät nach dem Originalvorbild definiert, der alle relevanten Informationen zur Verfügung stellt.

Geräteabstraktion
Der Konfigurationsbereich eines PCI-Gerätes beinhaltet Informationen wie Index und Funktionsnummer, Hersteller- und Geräteidentifikator usw, aber auch Adressen eingeblendeter Speicherbereiche (MMIO) oder Ports. Diese Informationen stellt der l4io_pci_dev_t Datentyp bereit. Außerdem erhält jedes Gerät ein Handle, um bei Zugriffen referenziert werden zu können (l4io_pdev_t).

Auffinden der Geräte
Ein angeschlossenes Gerät kann durch Angabe verschiedener Identifikatoren lokalisiert werden. Üblich sind hier Hersteller und Typ oder die Geräteklasse. Bei einem pci_find Aufruf wird die gesamte Informationsstruktur als Ergebnis zurückgegeben. Diese Funktionen initiieren keinen Zugriff auf den Bus, denn die Informationen hält das Subsystem in einer Datenbank im Speicher.

PCI Konfigurationsbereich
Zugriffe auf diesen Bereich können in Byte, Wort oder Doppelwort Granularität stattfinden und Lese- oder Schreiboperationen sein. Hierbei wird vorallem auf den Bereich außerhalb des Headers (die ersten 16 Doppelworte) zugegriffen, da dieser gerätespezifisch ist. l4io_read/write Aufrufe erfordern die Angabe des Handles für das gwünschte Gerät.

Weitere Funktionen
unterstützen die Konfiguration und Initialisierung der PCI-Geräte für Busmastering und Power Management. Auch hier wird das Handle zur Identifikation des Gerätes verwendet.


next up previous contents
Nächste Seite: Interrupt Behandlung Aufwärts: Der I/ O Server Vorherige Seite: Ressourcenverwaltung   Inhalt
Christian Helmuth 2001-12-11