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

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.
 

Ausführliche Beschreibung

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.

Siehe auch
IO-APIC manual, Seite 11-13

Beschreibung der Konstruktoren und Destruktoren

◆ RedirectionTableEntry()

IOAPIC::RedirectionTableEntry::RedirectionTableEntry ( Register  value_low,
Register  value_high 
)
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.

Parameter
value_lowErster (niederwertiges) Wert des Eintrags
value_highZweiter (höherwertiger) Wert des Eintrags

Dokumentation der Datenelemente

◆ delivery_mode

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.

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

◆ destination_mode

DestinationMode IOAPIC::RedirectionTableEntry::destination_mode

Destination Mode legt fest, wie Logical Destination interpretiert werden soll.

In OO/MPStubs soll hier DestinationMode::Logical verwendet werden.

◆ interrupt_mask

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

Polarity IOAPIC::RedirectionTableEntry::polarity

polarity gibt an, wann ein Interrupt signalisiert werden soll.

OO/MPStubs soll hier Polarity::High verwenden.

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

◆ trigger_mode

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


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