 
			
		Abstraktion für die Erkennung und das Booten eines PCs mit APIC. Mehr ...
#include <machine/apicsystem.h>
| Öffentliche Typen | |
| enum | SystemType { MP_APIC, UP_APIC, UNDETECTED } | 
| Art des Systems.  Mehr ... | |
| enum | Device { timer = 0, keyboard = 1, com1 = 4, com2 = 3, com3 = 4, com4 = 3, floppy = 6, lpt1 = 7, rtc = 8, ps2mouse = 12, ide1 = 14, ide2 = 15 } | 
| Ö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 ... | |
| const char * | getCPUModel (unsigned int cpuID) | 
| 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) | |
| void | setupThisProcessor () | 
| unsigned char | getLogicalLAPICID (unsigned char cpu) | 
| Liefert die logische ID des LAPICs der übergebenen cpu.  Mehr ... | |
Abstraktion für die Erkennung und das Booten eines PCs mit APIC.
| bool APICSystem::bootCPU | ( | unsigned int | cpu_id, | 
| void * | top_of_stack | ||
| ) | 
Startet einen Applikationsprozessor.
| cpu_id | Gib an, welcher Prozessor gestartet werden soll. Applikationsprozessoren haben die IDs 1 bis n-1 | 
| top_of_stack | Zeiger auf die oberste Adresse des Stacks, der von der zu startenden CPU verwendet werden soll. | 
| 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.
| 
 | inline | 
Liefert die während des Bootvorgangs ausgelesene ID des IOAPICs.
| unsigned char APICSystem::getIOAPICSlot | ( | APICSystem::Device | device | ) | 
Liefert die Nummer des Pins, an dem das Gerät device hängt.
| 
 | 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.
| cpu | Die abzufragende CPU | 
| 
 | inline | 
Gibt die Anzahl der CPUs zurück.
| 
 | inline | 
Gibt die Anzahl der erfolgreich gebooteten CPUs zurück.
| 
 | inline | 
Abfrage des Systemtyps.
| 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.
| logicalDestination | Menge von Prozessoren, die einen IPI erhalten sollen. | 
| vector | Interruptvektor, der ausgelöst werden soll. |