Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik
IOAPIC::RedirectionTableEntry Variantenreferenz

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 ...
 

Ausführliche Beschreibung

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.

Siehe auch
IO-APIC manual, Seite 11-13

Dokumentation der Datenelemente

◆ @38

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.

◆ delivery_status

DeliveryStatus IOAPIC::RedirectionTableEntry::delivery_status

Delivery Status gibt den aktuellen Status über den Versand des Interrupts an.

Zu beachten
Dieses Feld kann nur gelesen werden, Schreibzugriffe werden ignoriert

◆ destination

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.

Zu beachten
In QEMU funktioniert dies nicht. Dort bekommt immer CPU 0 (also der BSP) alle Interrupts.

◆ remote_irr

uint64_t IOAPIC::RedirectionTableEntry::remote_irr

Das Remote IRR Bit wird bei pegelgesteuerte Interrupts gesetzt, wenn der LAPIC den Interrupt akzeptiert.

Zu beachten
Dieses Feld darf nur gelesen werden.

Die Dokumentation für diese Variante wurde erzeugt aufgrund der Datei: