|
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 |
1.8.17