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.
Mehr ...
#include <lapic.h>
|
enum | |
| System Programming Guide 3A, p. 9-8 - 9-10.
|
|
|
friend | APICSystem |
| The APIC System is our friend to call init and setLAPICID()
|
|
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.
In Multiprozessorsystem ist es darüberhinaus noch möglich mit Hilfe des lokalen APICs Nachrichten in Form von Interprozessorinterrupts an andere CPUs zu schicken bzw. zu empfangen.
◆ LAPIC()
◆ ackIRQ()
Signalisiert EOI(End of interrupt)
Teilt dem local APIC mit, dass die aktuelle Interruptbehandlung abgeschlossen ist. Diese Funktion muss gegen Ende der Unterbrechungsbehandlung aufgerufen werden und zwar bevor prozessorseitig die Unterbrechungen wieder zugelassen werden.
◆ getLAPICID()
uint8_t LAPIC::getLAPICID |
( |
| ) |
|
Liefert die ID des in der aktuellen CPU integrieren APICs.
- Rückgabe
- lAPIC ID
◆ getVersion()
uint8_t LAPIC::getVersion |
( |
| ) |
|
Liefert Versionsnummer des local APICs.
- Rückgabe
- Versionsnummer
◆ init()
Initalisiert den local APIC der jeweiligen CPU.
◆ isExternalAPIC()
bool LAPIC::isExternalAPIC |
( |
| ) |
|
◆ isIPIDelivered()
bool LAPIC::isIPIDelivered |
( |
| ) |
|
Kehrt mit true zurück, falls zum Zeitpunkt des Aufrufs kein IPI aktiv ist.
- Rückgabe
- false, falls der letzte gesendete IPI noch nicht vom Zielprozessor akzeptiert wurde
◆ isLocalAPIC()
bool LAPIC::isLocalAPIC |
( |
| ) |
|
◆ isPentium4()
bool LAPIC::isPentium4 |
( |
| ) |
|
Ist diese CPU ein PentiumIV?
◆ sendIPI()
void LAPIC::sendIPI |
( |
uint8_t |
destination, |
|
|
struct ICR_L |
data |
|
) |
| |
Verschickt einen IPI an die adressieren CPU(s)
Zum schicken von "normalen" IPIs sind folgende Einstellung im struct ICR_L notwerndig:
- destination_shorthand: 0
- level : 1 (Kein Init-IPI)
- destination_mode : 1 (Logical Destination Mode)
- delivery_mode : 0 (Fixed Delivery Mode)
- vector : Anwendungsspezifisch
- Parameter
-
destination | Maske mit Zielcpu(s) |
data | Einstellungen |
◆ setLogicalLAPICID()
void LAPIC::setLogicalLAPICID |
( |
uint8_t |
id | ) |
|
|
private |
Setzt die local APIC ID im LDR Register.
- Parameter
-
◆ setTimer()
void LAPIC::setTimer |
( |
uint32_t |
counter, |
|
|
uint8_t |
divide, |
|
|
uint8_t |
vector, |
|
|
bool |
periodic, |
|
|
bool |
masked = false |
|
) |
| |
Stellt den LAPIC-Timer ein.
- Parameter
-
counter | Startwert des Zählers, der bei jedem Bus-Takt dekrementiert wird. |
divide | Zweipotenz durch den der Bustakt geteilt werden soll (in numerischer Form, siehe LAPIC::timer_div zur Umrechnung) |
vector | Nummer des auszulösenden Interrupts. |
periodic | Gibt an, ob die Unterbrechung periodisch kommen soll |
masked | Unterdrückt Unterbrechungen bei Zählerablauf |
◆ setTimerMasked()
void LAPIC::setTimerMasked |
( |
bool |
masked = false | ) |
|
Setzt die LAPIC-Timer Interrupt Make.
- Parameter
-
masked | Unterdrückt Unterbrechungen bei Zählerablauf |
◆ timer_div()
uint8_t LAPIC::timer_div |
( |
uint8_t |
div | ) |
|
Berechnet die Bitmaske für den Teiler des LAPIC-Timers.
- Parameter
-
div | Teiler, Möglichkeiten: 1, 2, 4, 8, 16, 32, 64, 128 |
- Rückgabe
- Bitmaske für LAPIC::setTimer() oder 0xff falls div ungültig ist.
◆ timer_ticks()
uint32_t LAPIC::timer_ticks |
( |
| ) |
|
Ermittelt die Frequenz des LAPIC-Timers.
- Rückgabe
- Anzahl der Timerticks pro Millisekunde
◆ LAPIC_BASE
uint32_t LAPIC::LAPIC_BASE = 0xfee00000 |
|
static |
Basisadresse der local APIC-Register.
Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: