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.