OOStuBS/MPStuBS
APICSystem Klassenreferenz

Abstraktion für die Erkennung und das Booten eines PCs mit APIC. Mehr ...

#include <apicsystem.h>

Öffentliche Typen

enum  SystemType { MP_APIC, UP_APIC, UNDETECTED }
 Art des Systems. Mehr ...
 

Öffentliche Methoden

void detectSystemType ()
 Führt Systemerkennung aus. Mehr ...
 
bool bootCPU (unsigned int cpu_id, void *top_of_stack)
 Startet einen Applikationsprozessor. Mehr ...
 
int getCPUID ()
 Liefert die CPUID der aktuellen CPU. Mehr ...
 
void sendCustomIPI (unsigned char logicalDestination, unsigned char vector)
 Auslösen eines Interprozessorinterrupts. Mehr ...
 
unsigned char getIOAPICSlot (APICSystem::Device device)
 Liefert die Nummer des Pins, an dem das Gerät device hängt. Mehr ...
 
SystemType getSystemType ()
 Abfrage des Systemtyps. Mehr ...
 
unsigned int getNumberOfCPUs ()
 Gibt die Anzahl der CPUs zurück. Mehr ...
 
unsigned int getNumberOfOnlineCPUs ()
 Gibt die Anzahl der erfolgreich gebooteten CPUs zurück. Mehr ...
 
unsigned char getIOAPICID ()
 Liefert die während des Bootvorgangs ausgelesene ID des IOAPICs. Mehr ...
 
unsigned char getBSPID ()
 Liefert die ID des Bootprozessors (BSP)
 
unsigned char getLogicalLAPICID (unsigned char cpu)
 Liefert die logische ID des LAPICs der übergebenen cpu. Mehr ...
 

Private Attribute

unsigned int onlineCPUs
 running CPUs
 
int compatibilityMode
 the compatibility mode that was detected (PIC, virtual wire, symmetric I/O)
 
int cpuFamily [CPU_MAX]
 the CPU family per CPU
 
int cpuModel [CPU_MAX]
 the CPU model per CPU
 
unsigned char cpuID [255]
 local CPU ID indexed with local APIC ID
 
unsigned int lapicVersion [CPU_MAX]
 the version of the local APICs per CPU
 
unsigned char logicalLAPICID [CPU_MAX]
 logical LAPIC IDs per CPU, needed for IPI
 
volatile char callout_cpu_number
 set by BSP, taken by next booting CPU
 
void * relocatedSetupAP
 Zeiger auf den Setupcode für die Applikation.
 

Ausführliche Beschreibung

Abstraktion für die Erkennung und das Booten eines PCs mit APIC.

Dokumentation der Aufzählungstypen

◆ SystemType

Art des Systems.

Aufzählungswerte
MP_APIC 

Multiprozessor System.

UP_APIC 

Singleprozessor System mit APIC HW.

UNDETECTED 

Unbekannte Systemkonfiguration.

Dokumentation der Elementfunktionen

◆ bootCPU()

bool APICSystem::bootCPU ( unsigned int  cpu_id,
void *  top_of_stack 
)

Startet einen Applikationsprozessor.

Parameter
cpu_idGib an, welcher Prozessor gestartet werden soll. Applikationsprozessoren haben die IDs 1 bis n-1
top_of_stackZeiger auf die oberste Adresse des Stacks, der von der zu startenden CPU verwendet werden soll.
Rückgabe
True, falls CPU Bootup erfolgreich; sonst false.

◆ detectSystemType()

void APICSystem::detectSystemType ( )

Führt Systemerkennung aus.

Diese Funktion erkennt ein eventuell vorhandenes Mehrprozessorsystem. Nach erfolgter Erkennung kann der Systemtyp mit Hilfe der Methode getSystemType() abgefragt werden.

◆ getCPUID()

int APICSystem::getCPUID ( )

Liefert die CPUID der aktuellen CPU.

Rückgabe
CPUID der aktuellen CPU.

◆ getIOAPICID()

unsigned char APICSystem::getIOAPICID ( )
inline

Liefert die während des Bootvorgangs ausgelesene ID des IOAPICs.

◆ getIOAPICSlot()

unsigned char APICSystem::getIOAPICSlot ( APICSystem::Device  device)

Liefert die Nummer des Pins, an dem das Gerät device hängt.

◆ getLogicalLAPICID()

unsigned char APICSystem::getLogicalLAPICID ( unsigned char  cpu)
inline

Liefert die logische ID des LAPICs der übergebenen cpu.

Die logische ID der LAPICs wird von uns beim Boot-Vorgang so initialisiert, dass genau ein Bit pro CPU gesetzt ist. Dabei ist in der logischen ID des LAPICs von CPU 0 Bit 0 gesetzt, in der ID des LAPICs von CPU 1 Bit 1, usw.

Parameter
cpuDie abzufragende CPU

◆ getNumberOfCPUs()

unsigned int APICSystem::getNumberOfCPUs ( )
inline

Gibt die Anzahl der CPUs zurück.

◆ getNumberOfOnlineCPUs()

unsigned int APICSystem::getNumberOfOnlineCPUs ( )
inline

Gibt die Anzahl der erfolgreich gebooteten CPUs zurück.

◆ getSystemType()

SystemType APICSystem::getSystemType ( )
inline

Abfrage des Systemtyps.

Rückgabe
Gibt den Systemtyp zurück

◆ sendCustomIPI()

void APICSystem::sendCustomIPI ( unsigned char  logicalDestination,
unsigned char  vector 
)

Auslösen eines Interprozessorinterrupts.

Mit Hilfe dieser Methode kann ein Interprozessorinterrupt (IPI) an eine ganze Gruppe von Prozessoren geschickt werden. In MPStuBS ist das System derart konfiguriert, dass insgesamt 8 CPUs bzw. deren Local APICs angesprochen werden können. Jeder Local APIC wird dabei durch ein Bit in logicalDestination repräsentiert. Dabei entspricht ein gesetztes Bit 0 der logischen LAPIC-ID der CPU 0, Bit 1 der ID der CPU 1 usw.. Welcher Interruptvektor auf den Ziel-CPUs ausgelöst werden soll, wird durch vector festgelegt. Zum konkreten Absenden eines IPIs wird die Methode LAPIC::sendIPI() verwendet.

Parameter
logicalDestinationMenge von Prozessoren, die einen IPI erhalten sollen.
vectorInterruptvektor, der ausgelöst werden soll.

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: