
Eintrag in der Redirection-Tabelle. Mehr ...
#include <machine/ioapic_registers.h>
Öffentliche Methoden | |
RedirectionTableEntry (Register value_low, Register value_high) | |
Konstruktor eines Eintrags In der Redirection-Tabelle. Mehr ... | |
Öffentliche Attribute | |
uint64_t | vector: 8 |
Der Wert gibt an, welcher Vektor in der Interruptvektortabelle für den entsprechenden Interrupt aktiviert werden soll. | |
DeliveryMode | delivery_mode: 3 |
Delivery Mode gibt an, wie die adressierten CPUs (bzw. ihre local APICs) auf das Interruptsignal reagieren sollen. Mehr ... | |
DestinationMode | destination_mode: 1 |
Destination Mode legt fest, wie Logical Destination interpretiert werden soll. Mehr ... | |
DeliveryStatus | delivery_status: 1 |
Delivery Status gibt den aktuellen Status über den Versand des Interrupts an. Mehr ... | |
Polarity | polarity: 1 |
polarity gibt an, wann ein Interrupt signalisiert werden soll. Mehr ... | |
uint64_t | remote_irr: 1 |
Das Remote IRR Bit wird bei pegelgesteuerte Interrupts gesetzt, wenn der LAPIC den Interrupt akzeptiert. Mehr ... | |
TriggerMode | trigger_mode: 1 |
Trigger Mode gibt an, ob die Interruptsignalisierung pegel- oder flankengesteuert ist. Mehr ... | |
InterruptMask | interrupt_mask: 1 |
Die Interruptmaske gibt an, ob für die entsprechende Quelle Interrupts zugelassen werden sollen oder nicht. Mehr ... | |
uint64_t | __pad0__: 39 |
Reserviert, Nicht ändern. | |
uint64_t | destination: 8 |
Destination beschreibt im Logical Mode als Bitmaske eine Menge von Prozessoren, die potentiell als Empfänger der Interruptnachricht in Frage kommen. Mehr ... | |
Register | value_low |
Erster (niederwertiges) Wert des Eintrags. | |
Register | value_high |
Zweiter (höherwertiger) Wert des Eintrags. | |
Eintrag in der Redirection-Tabelle.
Die Redirection-Tabelle beginnt bei IOAPIC-Register 0x10
und endet bei 0x3f
.
Jeder Eintrag umfasst 64 bit, also 2 Register des IOAPICs. value_low
ist der niederwertigere Teil, value_high
der höherwertige. Eintrag 0 in der Tabelle wären dann die Register 0x10
(entspricht value_low
) und 0x11
(entspricht value_high
).
Durch die Überlagerung (union
) kann der Eintrag durch Setzen der einzelnen Bitfelder konfiguriert werden und anschliessend die dadurch erzeugten 32 Bit-Werte (value_low
undvalue_high
) für die Registerzugriffe verwendet werden.
|
inline |
Konstruktor eines Eintrags In der Redirection-Tabelle.
Jeder Eintrag in der Redirection-Tabelle symbolisiert eine externe Interruptquelle und ist 64 Byte groß. Jedoch wird er wegen des 32 Bit-Zugriffs (vorgegeben durch die Breite der IOAPIC-Register) aufgeteilt in einen nieder- (low
) und einen höherwertigen (high
) Eintrag.
value_low | Erster (niederwertiges) Wert des Eintrags |
value_high | Zweiter (höherwertiger) Wert des Eintrags |
DeliveryMode IOAPIC::RedirectionTableEntry::delivery_mode |
Delivery Mode gibt an, wie die adressierten CPUs (bzw. ihre local APICs) auf das Interruptsignal reagieren sollen.
In OO/MPStubs soll DeliveryMode::LowestPriority
verwendet werden. Da die einzelnen CPUs alle dieselbe Priorität besitzen, werden so die auftretenden Interrupts gleich über alle CPUs verteilt.
DeliveryStatus IOAPIC::RedirectionTableEntry::delivery_status |
Delivery Status gibt den aktuellen Status über den Versand des Interrupts an.
uint64_t IOAPIC::RedirectionTableEntry::destination |
Destination beschreibt im Logical Mode als Bitmaske eine Menge von Prozessoren, die potentiell als Empfänger der Interruptnachricht in Frage kommen.
Für OOStuBS ist dies logischerweise 1
, für MPStuBS müssen in der Bitmaske die untersten n
Bits auf 1
gesetzt sein, wobei n
die Anzahl der im System vorhandenen CPUs ist (siehe System::getNumberOfCPUs() ). Damit kommen alle CPUs als Empfänger infrage und die Interruptlast wird so gleichmäßig über alle CPUs verteilt.
CPU 0
(also der BSP) alle Interrupts. DestinationMode IOAPIC::RedirectionTableEntry::destination_mode |
Destination Mode legt fest, wie Logical Destination interpretiert werden soll.
In OO/MPStubs soll hier DestinationMode::Logical
verwendet werden.
InterruptMask IOAPIC::RedirectionTableEntry::interrupt_mask |
Die Interruptmaske gibt an, ob für die entsprechende Quelle Interrupts zugelassen werden sollen oder nicht.
Dabei gibt InterruptMask::Masked
an, dass die Interruptquelle derzeit deaktiviert (maskiert) ist. Entsprechend gibt InterruptMask::Unmasked
an, dass die Quelle aktiviert (demaskiert) ist.
Polarity IOAPIC::RedirectionTableEntry::polarity |
polarity gibt an, wann ein Interrupt signalisiert werden soll.
OO/MPStubs soll hier Polarity::High
verwenden.
uint64_t IOAPIC::RedirectionTableEntry::remote_irr |
Das Remote IRR Bit wird bei pegelgesteuerte Interrupts gesetzt, wenn der LAPIC den Interrupt akzeptiert.
TriggerMode IOAPIC::RedirectionTableEntry::trigger_mode |
Trigger Mode gibt an, ob die Interruptsignalisierung pegel- oder flankengesteuert ist.
OO/MPStubs verwendet hier TriggerMode::Edge
für die Tastatur und den Timer, die (optionale) serielle Schnittstelle benötigt jedoch TriggerMode::Level