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