FreeNOS
|
Intel Multi-Processor Specification. More...
#include <IntelMP.h>
Data Structures | |
struct | MPConfig |
Multiprocessor Configuration Structure. More... | |
struct | MPEntry |
Multiprocessor Configuration Entry. More... | |
struct | MPFloat |
Multiprocessor Floating Structure. More... | |
Public Member Functions | |
IntelMP (IntelAPIC &apic) | |
Constructor. More... | |
virtual Result | initialize () |
Perform initialization. More... | |
virtual Result | discover () |
Discover processors. More... | |
virtual Result | boot (CoreInfo *info) |
Boot a processor. More... | |
Public Member Functions inherited from CoreManager | |
CoreManager () | |
Constructor. More... | |
List< uint > & | getCores () |
Get list of core identities. More... | |
Private Types | |
typedef struct IntelMP::MPFloat | MPFloat |
Multiprocessor Floating Structure. More... | |
typedef struct IntelMP::MPConfig | MPConfig |
Multiprocessor Configuration Structure. More... | |
typedef struct IntelMP::MPEntry | MPEntry |
Multiprocessor Configuration Entry. More... | |
Private Member Functions | |
MPEntry * | parseEntry (MPEntry *entry) |
Parse Multiprocessor Config entry. More... | |
MPConfig * | scanMemory (Address addr) |
Scan memory for a Multiprocessor Config structure. More... | |
Private Attributes | |
IntelIO | m_bios |
I/O instance for BIOS memory. More... | |
IntelIO | m_lastMemory |
I/O instance for the last 1MB of physical memory. More... | |
IntelAPIC & | m_apic |
APIC instance. More... | |
Static Private Attributes | |
static const uint | MPFloatSignature = 0x5f504d5f |
Multiprocessor Floating Structure Signature. More... | |
static const uint | MPEntryProc = 0 |
Multiprocessor Configuration Type ID for processors. More... | |
static const Address | MPEntryAddr = 0xf000 |
Physical memory address at which cores start (bootEntry16). More... | |
static const Address | MPInfoAddr = MPINFOADDR |
Physical memory address for the CoreInfo structure. More... | |
static const Address | MPAreaAddr = 0x1000 |
BIOS memory area to search for MP tables. More... | |
static const Size | MPAreaSize = 0x100000-0x1000 |
BIOS memory area size to search for MP tables. More... | |
Additional Inherited Members | |
Public Types inherited from CoreManager | |
enum | Result { Success, IOError, NotFound, InvalidArgument } |
Result codes. More... | |
Protected Attributes inherited from CoreManager | |
List< uint > | m_cores |
List of core ids found. More... | |
|
private |
Multiprocessor Configuration Structure.
|
private |
Multiprocessor Configuration Entry.
|
private |
Multiprocessor Floating Structure.
IntelMP::IntelMP | ( | IntelAPIC & | apic | ) |
Constructor.
Definition at line 24 of file IntelMP.cpp.
|
virtual |
Boot a processor.
info | CoreInfo object pointer. |
Implements CoreManager.
Definition at line 90 of file IntelMP.cpp.
References bootEntry16(), CoreInfo::coreId, DEBUG, ERROR, CoreManager::IOError, CoreInfo::kernelCommand, m_apic, CoreInfo::memory, MPEntryAddr, MPInfoAddr, PAGESIZE, Memory::Range::phys, API::Read, SELF, IntelAPIC::sendStartupIPI(), IntController::Success, CoreManager::Success, VMCopy(), and API::Write.
Referenced by IntelCoreServer::bootCore().
|
virtual |
Discover processors.
Implements CoreManager.
Definition at line 56 of file IntelMP.cpp.
References List< T >::clear(), DEBUG, entry, ERROR, IO::getBase(), m_bios, CoreManager::m_cores, m_lastMemory, CoreManager::NotFound, parseEntry(), scanMemory(), and CoreManager::Success.
Referenced by IntelCoreServer::discoverCores().
|
virtual |
Perform initialization.
Implements CoreManager.
Definition at line 30 of file IntelMP.cpp.
References IntelAPIC::getIO(), IntelAPIC::IOBase, m_apic, m_bios, m_lastMemory, IO::map(), MegaByte, SystemInformation::memorySize, MPAreaAddr, MPAreaSize, PAGESIZE, and CoreManager::Success.
Referenced by IntelCoreServer::discoverCores().
|
private |
Parse Multiprocessor Config entry.
Definition at line 121 of file IntelMP.cpp.
References List< T >::append(), entry, CoreManager::m_cores, and MPEntryProc.
Referenced by discover().
|
private |
Scan memory for a Multiprocessor Config structure.
Definition at line 41 of file IntelMP.cpp.
References IntelMP::MPFloat::configAddr, MPAreaAddr, MPAreaSize, MPFloatSignature, IntelMP::MPFloat::signature, and ZERO.
Referenced by discover().
|
private |
|
private |
I/O instance for BIOS memory.
Definition at line 190 of file IntelMP.h.
Referenced by discover(), and initialize().
|
private |
I/O instance for the last 1MB of physical memory.
Definition at line 193 of file IntelMP.h.
Referenced by discover(), and initialize().
|
staticprivate |
BIOS memory area to search for MP tables.
Definition at line 87 of file IntelMP.h.
Referenced by initialize(), and scanMemory().
|
staticprivate |
BIOS memory area size to search for MP tables.
Definition at line 90 of file IntelMP.h.
Referenced by initialize(), and scanMemory().
|
staticprivate |
|
staticprivate |
Multiprocessor Configuration Type ID for processors.
Definition at line 78 of file IntelMP.h.
Referenced by parseEntry().
|
staticprivate |
Multiprocessor Floating Structure Signature.
Definition at line 75 of file IntelMP.h.
Referenced by scanMemory().
|
staticprivate |