In diesem Kapitel wurden die folgenden Symbole aus dem Bereich der Speicherverwaltung eingeführt. Die Liste enthält nicht die Symbole, die im ersten Abschnitt eingeführt wurden, weil dieser Abschnitt schon selbst eine große Liste ist und die dort genannten Symbole selten für Gerätetreiber nützlich sind.
In dieser Header-Datei sind alle Funktionen und Strukturen aus dem Bereich der Speicherverwaltung definiert.
Diese Funktion ist der Kern von mmap. Sie bildet size Bytes einer physikalischen Adresse, die bei phys_addr beginnt, auf die virtuelle Adresse virt_addr ab. Die Zugriffsbits für den virtuellen Adreßraum werden in prot angegeben.
Diese Makros konvertieren zwischen logischen Kernel-Adressen und deeren zugehörigen Speichertabellen-Einträgen. page_address funktioniert nur auf Seiten im niedrigen Speicher sowie auf Seiten im hohen Speicher, die explizit eingeblendet worden sind.
Diese Makros konvertieren zwischen logischen Kernel-Adressen und physikalischen Adressen.
kmap gibt eine virtuelle Kernel-Adresse zurück, die auf die angegebene Seite eingeblendet ist. Dabei wird die Einblendung bei Bedarf erzeugt. kunmap löscht die Einblendung für die angegebene Seite.
Diese Funktionen erledigen die Allokation, Initialisierung und Freigabe von Kernel-I/O-Puffern. kiobuf_init initialisiert einen einzelnen kiobuf, wird aber nur selten verwendet. alloc_kiovec wird meistens statt dessen verwendet und alloziert und initialisiert einen Vektor von kiobufs. Ein solcher Vektor von kiobufs wird mit free_kiovec wieder freigegeben.
Diese Funktionen sperren einen kiovec im Speicher und geben ihn wieder frei. Sie sind nicht notwendig, wenn kiobufs für I/O in User Space-Speicher verwendet werden.
map_user_kiobuf blendet einen Puffer im User Space in den angegebenen Kernel-I/O-Puffer ein; unmap_kiobuf hebt diese Einblendung wieder auf.
Diese Funktionen konvertieren zwischen virtuellen Kernel-Adressen und Bus-Adressen. Bus-Adressen müssen für die Kommunikation mit Peripherie-Geräten verwendet werden.
Die Header-Datei, die die folgenden Funktionen definiert.
Für Peripherie-Geräte, die den vollen 32-Bit-Bereich nicht adressieren können, bestimmt diese Funktion, ob DMA überhaupt auf dem Host-System unterstützt wird.
Diese Funktionen allozieren konsistente DMA-Einblendungen für einen Puffer, der während der gesamten Lebensdauer des Treibers existiert, und geben sie wieder frei.
Diese Symbole werden dazu verwendet, den Funktionen für Streaming-Einblendungen mitzuteilen, in welche Richtung Daten vom oder zum Puffer transportiert werden.
Erzeugen und zerstören eine Streaming-DMA-Einblendung zur einmaligen Verwendung.
Synchronisieren einen Puffer, der eine Streaming-Einblendung hat. Diese Funktion muß verwendet werden, wenn der Prozessor auf einen Puffer zugreifen muß, während die Streaming-Einblendung noch besteht (also während der Puffer dem Gerät gehört).
Die Struktur scatterlist beschreibt eine I/O-Operation, die mehr als einen Puffer betrifft. Die Makros sg_dma_address und sg_dma_len können dazu verwendet werden, bei der Implementierung von Scatter-Gather-Operationen Bus-Adressen und Puffer-Längen zu extrahieren, die dann an das Gerät übergeben werden.
pci_map_sg blendet eine Scatter-Gather-Operation ein und pci_unmap_sg hebt diese Einblendung wieder auf. Wenn auf die Puffer zugegriffen werden muß, während die Einblendung noch aktiv ist, kann pci_dma_sync_sg zum Synchronisieren verwendet werden.
Diese Daten enthält einen textuellen Snapshot der allozierten Kanäle in den DMA-Controllern. PCI-basierte DmA wird hier nicht gezeigt, weil jede Karte unabhängig von den anderen arbeitet, ohne einen Kanal im DMA-Controller allozieren zu müssen.
Diese Header-Datei definiert oder deklariert alle Funktionen und Makros aus dem DMA-Bereich. Sie muß vor der Verwendung eines der folgenden Symbole eingebunden werden.
Diese Funktionen greifen auf die DMA-Registry zu. Die Registrierung muß vor der Verwendung der ISA-DMA-Kanäle erfolgen.
Diese Funktionen holen das DMA-Spinlock und geben es wieder frei. Dieses Spinlock muß gehalten werden, bevor eine der anderen ISA-DMA-Funktionen, die unten in dieser Liste beschrieben werden, aufgerufen wird. Sie schalten auch die Interrupts im lokalen Prozessor aus und wieder ein.
Diese Funktionen dienen zum Programmieren von DMA-Informationen im DMA-Controller. addr ist eine Bus-Adresse.
Ein DMA-Kanal muß während der Konfiguration abgeschaltet sein. Diese Funktionen ändern den Status des DMA-Kanals.
Wenn der Treiber wissen muß, wie eine DMA-Übertragung fortschreitet, kann er diese Funktion aufrufen, die die Anzahl der noch ausstehenden Datenübertragungen zurückgibt. Nach erfolgreichem Abschluß der DMA-Übertragung gibt die Funktion 0 zurück; während der Übertragung von Daten ist der Wert nicht vorhersagbar.
Das DMA-Flip-Flop wird vom Controller verwendet, um 16-Bit-Werte mit Hilfe zweier 8-Bit-Operationen zu übertragen. Es muß zurückgesetzt werden, bevor irgendwelche Daten an den Controller geschickt werden.