18#include <FreeNOS/System.h>
73 ERROR(
"MP header not found");
79 DEBUG(
"MP header found at " << (
void *) mpc);
104 ERROR(
"failed to send startup IPI via APIC");
List< uint > m_cores
List of core ids found.
Result map(Address phys, Size size=4096, Memory::Access access=Memory::Readable|Memory::Writable|Memory::User)
Map I/O address space.
Address getBase() const
Get memory I/O base offset.
Intel Advanced Programmable Interrupt Controller (APIC)
IntController::Result sendStartupIPI(uint cpuId, Address addr)
Send startup Intercore-Processor-Interrupt.
IntelIO & getIO()
Get I/O object.
static const uint IOBase
APIC memory mapped I/O register base offset (physical address).
IntelIO m_bios
I/O instance for BIOS memory.
IntelIO m_lastMemory
I/O instance for the last 1MB of physical memory.
IntelMP(IntelAPIC &apic)
Constructor.
MPEntry * parseEntry(MPEntry *entry)
Parse Multiprocessor Config entry.
static const uint MPFloatSignature
Multiprocessor Floating Structure Signature.
MPConfig * scanMemory(Address addr)
Scan memory for a Multiprocessor Config structure.
static const uint MPEntryProc
Multiprocessor Configuration Type ID for processors.
virtual Result boot(CoreInfo *info)
Boot a processor.
IntelAPIC & m_apic
APIC instance.
virtual Result initialize()
Perform initialization.
virtual Result discover()
Discover processors.
static const Size MPAreaSize
BIOS memory area size to search for MP tables.
static const Address MPInfoAddr
Physical memory address for the CoreInfo structure.
static const Address MPEntryAddr
Physical memory address at which cores start (bootEntry16).
static const Address MPAreaAddr
BIOS memory area to search for MP tables.
void append(T t)
Insert an item at the end of the list.
virtual void clear()
Clears the entire List.
API::Result VMCopy(const ProcessID proc, const API::Operation how, const Address ours, const Address theirs, const Size sz)
Prototype for user applications.
#define PAGESIZE
ARM uses 4K pages.
C void bootEntry16()
Entry point in 16-bit real mode.
unsigned long Address
A memory address.
#define MegaByte(v)
Convert megabytes to bytes.
#define ERROR(msg)
Output an error message.
unsigned int uint
Unsigned integer number.
#define DEBUG(msg)
Output a debug message to standard output.
Per-Core information structure.
uint coreId
Core identifier.
Memory::Range memory
Defines the physical memory available to the core.
uint booted
Set to non-zero by early boot code when this core is running.
char kernelCommand[KERNEL_PATHLEN]
Kernel command.
Multiprocessor Configuration Structure.
Multiprocessor Configuration Entry.
Multiprocessor Floating Structure.
Address phys
Physical address.