Übungen zu BS - Dokumentation Aufgabe 6 (WS 2014/15)
Abstraktion des IO-APICs, der zur Verwaltung der externen Interrupts dient. Mehr ...
#include <ioapic.h>
| Öffentliche Methoden | |
| IOAPIC () | |
| Konstruktor Tut nichts. Initialisierung erfolgt mit init() | |
| void | init () | 
| Initialisierung der IOAPICs. | |
| void | config (unsigned char slot, Plugbox::Vector vector) | 
| Zuordnung eines Vektors in der Interruptvektortabelle zu einem externen Interrupt. | |
| void | allow (unsigned char slot) | 
| Sorgt dafür, dass Unterbrechungen des zugeordneten Gerätes an die CPU(s) weitergereicht werden. Um eine Unterbrechungsbehandlung zu ermöglichen, muss zusätzlich CPU::enable_int() aufgerufen werden. | |
| void | forbid (unsigned char slot) | 
| Ermöglicht einzelne Interrupts selektiv zu sperren. | |
| bool | status (unsigned char slot) | 
| Ermöglicht eine Abfrage des Maskierungsstatus für einzelne Interrupts. | |
| Statische öffentliche Attribute | |
| static volatile uint32_t * | IOREGSEL_REG = (volatile uint32_t*)0xfec00000 | 
| Memory-Mapped Register des IO-APIC im Adressraum der CPU. | |
| static volatile uint32_t * | IOWIN_REG = (volatile uint32_t*)0xfec00010 | 
| Memory-Mapped Register des IO-APIC im Adressraum der CPU. | |
Ausführliche Beschreibung
Abstraktion des IO-APICs, der zur Verwaltung der externen Interrupts dient.
Kernstück des IOAPICs ist die IO-Redirection Table. Dort lässt sich frei konfigurieren, welchem Interruptvektor eine bestimmte externe Unterbrechung zugeordnet werden soll. Ein Eintrag in dieser Tabelle ist 64 Bit breit. struct IOREDTBL_L und struct IOREDTBL_H sind Bitfelder, die die einzelnen Einstellungen eines Eintrages zugänglich machen.
Dokumentation der Elementfunktionen
| void IOAPIC::allow | ( | unsigned char | slot | ) | 
Sorgt dafür, dass Unterbrechungen des zugeordneten Gerätes an die CPU(s) weitergereicht werden. Um eine Unterbrechungsbehandlung zu ermöglichen, muss zusätzlich CPU::enable_int() aufgerufen werden.
- Parameter
- 
  slot Nummer des freizuschaltenden Slots 
| void IOAPIC::config | ( | unsigned char | slot, | 
| Plugbox::Vector | vector | ||
| ) | 
Zuordnung eines Vektors in der Interruptvektortabelle zu einem externen Interrupt.
- Parameter
- 
  slot Nummer des zu konfigurierend Slots (und damit des dazugehörigen externen Interrupts) in der IO-Redirection Table. vector Nummer des Vektors, der durch den mit slot ausgewählten Interrupt verknüpft werden soll. 
| void IOAPIC::forbid | ( | unsigned char | slot | ) | 
Ermöglicht einzelne Interrupts selektiv zu sperren.
- Parameter
- 
  slot Nummer des zu sperrenden Slots 
| void IOAPIC::init | ( | ) | 
Initialisierung der IOAPICs.
Dabei werden alle Einträge in der IO-Redirection Table mit einem sinnvollen Wert vorbelegt. Das Feld, welches den auszulösenden Interruptvektor angibt, sollte mit einer Vektornummer vorbelegt werden, die so konfiguriert ist, dass sie den Panic-Handler auslöst. Initial sollten auch alle externen Interrupts im IOAPIC deaktiviert werden. Neben der Vektortabelle muss auch die APICID im IOAPICID-Register auf den Wert gesetzt werden, der während des Bootvorgangs aus den Systembeschreibungstabellen gelesen wurde. (APICSystem::getIOAPICID())
| bool IOAPIC::status | ( | unsigned char | slot | ) | 
Ermöglicht eine Abfrage des Maskierungsstatus für einzelne Interrupts.
- Parameter
- 
  slot gibt an, für welchen Slot der Status abgefragt werden soll. 
- Rückgabe
- gibt true zurück, falls der Interrupt zugelassen ist und false, falls er ausmaskiert wurde.
Dokumentation der Datenelemente
| 
 | static | 
Memory-Mapped Register des IO-APIC im Adressraum der CPU.
Zugriff auf die eigentlichen Register des IO-APICs ist folgendermaßen möglich: An die Adresse von IOREGSEL_REG schreibt man zuerst die Nummer des IO-APIC-Registers, welches man lesen oder schreiben möchte. In IOWIN_REG kann man dann entweder den Wert des vorher ausgewählten IO-APIC-Registers lesen oder schreiben.
siehe: IO-APIC manual, p. 8
| 
 | static | 
Memory-Mapped Register des IO-APIC im Adressraum der CPU.
Zugriff auf die eigentlichen Register des IO-APICs ist folgendermaßen möglich: An die Adresse von IOREGSEL_REG schreibt man zuerst die Nummer des IO-APIC-Registers, welches man lesen oder schreiben möchte. In IOWIN_REG kann man dann entweder den Wert des vorher ausgewählten IO-APIC-Registers lesen oder schreiben.siehe: IO-APIC manual, p. 8
Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien:
- machine/ioapic.h
- machine/ioapic.cc


