 
			
		Abstraktion des IO-APICs, der zur Verwaltung der externen Interrupts dient. Mehr ...
#include <machine/ioapic.h>
| Ăffentliche Methoden | |
| IOAPIC () | |
| Konstruktor. Tut nichts. Initialisierung erfolgt mit init() | |
| void | init () | 
| Initialisierung der IOAPICs.  Mehr ... | |
| void | config (unsigned char slot, Plugbox::Vector vector, int triggermode=TRIGGER_MODE_EDGE, int polarity=POLARITY_HIGH) | 
| Zuordnung eines Vektors in der Interruptvektortabelle zu einem externen Interrupt.  Mehr ... | |
| void | allow (unsigned char slot) | 
| Sorgt dafĂŒr, dass Unterbrechungen des zugeordneten GerĂ€tes an die CPU(s) weitergereicht werden.  Mehr ... | |
| void | forbid (unsigned char slot) | 
| Ermöglicht einzelne Interrupts selektiv zu sperren.  Mehr ... | |
| bool | status (unsigned char slot) | 
| Ermöglicht eine Abfrage des Maskierungsstatus fĂŒr einzelne Interrupts.  Mehr ... | |
| Statische öffentliche Attribute | |
| static volatile uint32_t * | IOREGSEL_REG = (volatile uint32_t*)0xfec00000 | 
| Memory-Mapped Register des IO-APIC im Adressraum der CPU.  Mehr ... | |
| static volatile uint32_t * | IOWIN_REG = (volatile uint32_t*)0xfec00010 | 
| Memory-Mapped Register des IO-APIC im Adressraum der CPU.  Mehr ... | |
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. Die Strukturen IOREDTBL_L und IOREDTBL_H sind Bitfelder, die die einzelnen Einstellungen eines Eintrages zugĂ€nglich machen.
| 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() in der main() aufgerufen werden.
| slot | Nummer des freizuschaltenden Slots | 
| void IOAPIC::config | ( | unsigned char | slot, | 
| Plugbox::Vector | vector, | ||
| int | triggermode = TRIGGER_MODE_EDGE, | ||
| int | polarity = POLARITY_HIGH | ||
| ) | 
Zuordnung eines Vektors in der Interruptvektortabelle zu einem externen Interrupt.
| slot | Nummer des zu konfigurierenden Slots (und damit des dazugehörigen externen Interrupts) in der IO-Redirection Table. | 
| vector | Nummer des Vektors, der durch den mit slot ausgewÀhlten externen Interrupt aktiviert werden soll. | 
| triggermode | Flanken- oder pegelgesteuerte Interruptsignalisierung (letzteres wird bei der optionalen seriellen Schnittstelle benötigt) | 
| polarity | Art der Interruptsignalisierung | 
| void IOAPIC::forbid | ( | unsigned char | slot | ) | 
Ermöglicht einzelne Interrupts selektiv zu sperren.
| 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.
| slot | gibt an, fĂŒr welchen Slot der Status abgefragt werden soll. | 
true zurĂŒck, falls der Interrupt zugelassen ist und false, falls er ausmaskiert wurde. | 
 | 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 IOAPIC::IOREGSEL_REG schreibt man zuerst die Nummer des IO-APIC-Registers, welches man lesen oder schreiben möchte. In IOAPIC::IOWIN_REG kann man dann den Wert des vorher ausgewĂ€hlten IO-APIC-Registers entweder lesen oder schreiben.
| 
 | 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 IOAPIC::IOREGSEL_REG schreibt man zuerst die Nummer des IO-APIC-Registers, welches man lesen oder schreiben möchte. In IOAPIC::IOWIN_REG kann man dann den Wert des vorher ausgewĂ€hlten IO-APIC-Registers entweder lesen oder schreiben.