OOStuBS/MPStuBS
IOREDTBL_H Strukturreferenz

Eintrag in der IO Redirection Table. Mehr ...

#include <ioapic_registers.h>

Öffentliche Attribute

unsigned int logical_destination:8
 Menge von Zielprozessoren.
 

Ausführliche Beschreibung

Eintrag in der IO Redirection Table.

Jeder Eintrag in der IO Redirection Table symbolisiert eine externe Interruptquelle. Für jeden externen Interrupt lassen sich hier folgende Einstellungen vornehmen:

  • vector gibt an, welcher Vektor in der Interruptvektortabelle für den entsprechenden Interrupt aktiviert werden soll.
  • delivery_mode gibt an, wie die adressierten CPUs (bzw. ihre local APICs) auf das Interruptsignal reagieren sollen. In OO/MPStubs soll DELIVERY_MODE_LOWESTPRI verwendet werden. Da die einzelnen CPUs alle dieselbe Priorität besitzen, werden so die auftretenden Interrupts gleich über alle CPUs verteilt.
  • destination_mode legt fest, wie logical_destination interpretiert werden soll. In OO/MPStubs soll hier DESTINATION_MODE_LOGICAL verwendet werden.
  • polarity gibt an, wann ein Interrupt signalisiert werden soll. OO/MPStubs soll hier POLARITY_HIGH verwenden.
  • trigger_mode gibt an, ob die Interruptsignalisierung pegel- oder flankengesteuert ist. OO/MPStubs verwendet hier TRIGGER_MODE_EDGE für die Tastatur und den Timer, die (optionale) serielle Schnittstelle jedoch TRIGGER_MODE_LEVEL
  • mask gibt an, ob für die entsprechende Quelle Interrupts zugelassen werden sollen oder nicht. 1 maskiert die dem Eintrag entsprechende Interruptquelle aus, 0 lässt den Interrupt zu.
  • logical_destination beschreibt 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 APICSystem::getNumberOfCPUs()). Damit kommen alle CPUs als Empfänger infrage und die Interruptlast wird so gleichmäßig über alle CPUs verteilt. Hinweis: In QEMU funktioniert dies nicht. Dort bekommt immer CPU 0, also der BSP alle Interrupts.

Ein Tabelleneintrag besteht dabei aus zwei 32bit breiten Wörtern IOREDTBL_H bzw. IOREDTBL_L

Die Redirection Tabelle beginnt bei IOAPIC-Register 0x10 und endet bei 0x3f. Jeder Eintrag umfasst 64 bit, also 2 Register des IOAPICs. IOREDTBL_L ist niederwertige Wort, IOREDTBL_H das höherwertige. Eintrag 0 in der Tabelle wären dann die Register 0x10 (entspricht IOREDTBL_L) und 0x11 (entspricht IOREDTBL_H).

Siehe auch
IO-APIC manual, p. 11-13

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