
Enthält die Klasse LAPIC zum Zugriff auf den Local APIC. Mehr ...
#include "types.h"
Namensbereiche | |
LAPIC | |
Abstraktion des in der CPU integrierten local APICs.In modernen PCs besitzt jede CPU einen sogenannten "local APIC". Dieser vermittelt zwischen dem I/O APIC, an den die externen Interruptquellen angeschlossen sind, und der CPU. Interruptnachrichten, welche den lokalen APIC von aussen erreichen, werden an den zugeordneten Prozessorkern weitergereicht, um dort die Interruptbearbeitung anzustoßen. | |
Funktionen | |
void | LAPIC::init (uint8_t logicalID) |
Initialisiert den local APIC der jeweiligen CPU und setzt die lokale APIC ID im LDR Register. Mehr ... | |
void | LAPIC::endOfInterrupt () |
Signalisiert EOI (End of interrupt) Mehr ... | |
uint8_t | LAPIC::getID () |
Liefert die ID des in der aktuellen CPU integrieren APICs. Mehr ... | |
uint8_t | LAPIC::getLogicalID () |
void | LAPIC::setLogicalID (uint8_t id) |
uint8_t | LAPIC::getVersion () |
Liefert Versionsnummer des local APICs. Mehr ... | |
bool | LAPIC::IPI::isDelivered () |
Kehrt mit true zurück, falls zum Zeitpunkt des Aufrufs kein IPI aktiv ist. Mehr ... | |
void | LAPIC::IPI::send (uint8_t destination, uint8_t vector) |
Sende einen Inter-Prozessor Interrupt. Mehr ... | |
void | LAPIC::IPI::sendGroup (uint8_t logical_destination, uint8_t vector) |
Sende einen Inter-Prozessor Interrupt an eine Gruppe von Zielprozessoren. Mehr ... | |
void | LAPIC::IPI::sendAll (uint8_t vector) |
Sende einen Inter-Prozessor Interrupt an alle Prozessoren. Mehr ... | |
void | LAPIC::IPI::sendOthers (uint8_t vector) |
Sende einen Inter-Prozessor Interrupt an alle anderen Prozessoren (jedoch nicht an sich selbst) Mehr ... | |
void | LAPIC::IPI::sendInit (bool assert=true) |
void | LAPIC::IPI::sendStartup (uint8_t vector) |
uint32_t | LAPIC::Timer::ticks (void) |
Ermittelt die Frequenz des LAPIC-Timers. Unter Verwendung des PIT wird eine gewisse (längere) Zeit gewartet und davor sowie danach der aktuelle LAPIC Timer Zähler ausgelesen. Aus der Differenz der beiden Zählerwerte sowie der Wartezeit werden die LAPIC Timer Ticks pro Millisekunden errechnet. Mehr ... | |
void | LAPIC::Timer::set (uint32_t counter, uint8_t divide, uint8_t vector, bool periodic, bool masked=false) |
Stellt den LAPIC-Timer ein. Mehr ... | |
void | LAPIC::Timer::setMasked (bool masked) |
Setzt die LAPIC-Timer Interrupt Make. Mehr ... | |
Enthält die Klasse LAPIC zum Zugriff auf den Local APIC.
Local APIC referenziert in Intel System Programming Guide 3A
bool LAPIC::IPI::isDelivered | ( | ) |
Kehrt mit true zurück, falls zum Zeitpunkt des Aufrufs kein IPI aktiv ist.
void LAPIC::IPI::send | ( | uint8_t | destination, |
uint8_t | vector | ||
) |
Sende einen Inter-Prozessor Interrupt.
destination | ID des Zielprozessors (unter Verwendung von System::getLogicalLAPICID() ) |
vector | Auszulösender Interrupt |
void LAPIC::IPI::sendAll | ( | uint8_t | vector | ) |
Sende einen Inter-Prozessor Interrupt an alle Prozessoren.
vector | Auszulösender Interrupt |
void LAPIC::IPI::sendGroup | ( | uint8_t | logical_destination, |
uint8_t | vector | ||
) |
Sende einen Inter-Prozessor Interrupt an eine Gruppe von Zielprozessoren.
logical_destination | Maske mit den LAPIC IDs der Zielprozessors (unter Verwendung von System::getLogicalLAPICID() ) |
vector | Auszulösender Interrupt |
void LAPIC::IPI::sendOthers | ( | uint8_t | vector | ) |
Sende einen Inter-Prozessor Interrupt an alle anderen Prozessoren (jedoch nicht an sich selbst)
vector | Auszulösender Interrupt |
void LAPIC::Timer::set | ( | uint32_t | counter, |
uint8_t | divide, | ||
uint8_t | vector, | ||
bool | periodic, | ||
bool | masked = false |
||
) |
Stellt den LAPIC-Timer ein.
counter | Startwert des Zählers, der bei jedem Bus-Takt dekrementiert wird. |
divide | Zweierpotenz, durch die der Bustakt geteilt werden soll (wird als numerischer Wert (1, 2, 4, 8, ...) übergeben, zur Umrechnung in die passende Bitmaske siehe lokale Funktion getClockDiv() ) |
vector | Nummer des auszulösenden Interrupts. |
periodic | Gibt an, ob die Unterbrechung periodisch kommen soll |
masked | Unterdrückt Unterbrechungen bei Zählerablauf |
void LAPIC::Timer::setMasked | ( | bool | masked | ) |
Setzt die LAPIC-Timer Interrupt Make.
masked | Unterdrückt Unterbrechungen bei Zählerablauf |
uint32_t LAPIC::Timer::ticks | ( | void | ) |
Ermittelt die Frequenz des LAPIC-Timers. Unter Verwendung des PIT wird eine gewisse (längere) Zeit gewartet und davor sowie danach der aktuelle LAPIC Timer Zähler ausgelesen. Aus der Differenz der beiden Zählerwerte sowie der Wartezeit werden die LAPIC Timer Ticks pro Millisekunden errechnet.
Für die Messung wird mittels set() der LAPIC Zähler in einen Single-Shot Modus ohne Interrupts gesetzt, nach der Messung wird er wieder deaktiviert.