
Eintrag in der Redirection Tablle. Mehr ...
#include <machine/ioapic_registers.h>
Öffentliche Methoden | |
RedirectionTableEntry (Register value_low, Register value_high) | |
Öffentliche Attribute | |
struct { | |
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. 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. | |
DestinationMode destination_mode: 1 | |
Destination Mode legt fest, wie Logical Destination interpretiert werden soll. In OO/MPStubs soll hier DestinationMode::Logical verwendet werden. | |
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. OO/MPStubs soll hier Polarity::High verwenden. | |
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. OO/MPStubs verwendet hier TriggerMode::Edge für die Tastatur und den Timer, die (optionale) serielle Schnittstelle benötigt jedoch TriggerMode::Level. | |
InterruptMask interrupt_mask: 1 | |
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. | |
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. 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. Mehr ... | |
}; | |
struct { | |
Register value_low | |
Erstes (niederwertiges) Register. | |
Register value_high | |
Zweites (höherwertiges) Register. | |
}; | |
Eintrag in der IO Redirection Table. Mehr ... | |
Eintrag in der Redirection Tablle.
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 das niederwertige Wort, value_high das 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 in einer Bitfeldstruktur gesetzt werden und anschliessend die Werte für die beiden Register verwendet werden.
struct { ... } |
Eintrag in der IO Redirection Table.
Jeder Eintrag in der IO Redirection Table symbolisiert eine externe Interruptquelle und ist 64 Byte groß. Jedoch wird er wegen des 32bit-Zugriffs aufgeteilt in nieder- (low) und höherwertigen (high) Eintrag aufgeteilt.
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. uint64_t IOAPIC::RedirectionTableEntry::remote_irr |
Das Remote IRR Bit wird bei pegelgesteuerte Interrupts gesetzt, wenn der LAPIC den Interrupt akzeptiert.