Pyrogenesis  trunk
Functions | Variables
apic.cpp File Reference
#include "precompiled.h"
#include "lib/sysdep/arch/x86_x64/apic.h"
#include "lib/bits.h"
#include "lib/module_init.h"
#include "lib/sysdep/cpu.h"
#include "lib/sysdep/os_cpu.h"
#include "lib/sysdep/arch/x86_x64/x86_x64.h"
Include dependency graph for apic.cpp:

Functions

ApicId GetApicId ()
 
static Status GetAndValidateApicIds ()
 
static Status InitApicIds ()
 
bool AreApicIdsReliable ()
 
static size_t IndexFromApicId (const ApicId *apicIds, ApicId apicId)
 
size_t ProcessorFromApicId (ApicId apicId)
 
size_t ContiguousIdFromApicId (ApicId apicId)
 
static ApicId ApicIdFromIndex (const ApicId *apicIds, size_t index)
 
ApicId ApicIdFromProcessor (size_t processor)
 
ApicId ApicIdFromContiguousId (size_t contiguousId)
 

Variables

static size_t numIds
 
static ApicId processorApicIds [os_cpu_MaxProcessors]
 
static ApicId sortedApicIds [os_cpu_MaxProcessors]
 
static ModuleInitState apicInitState
 

Function Documentation

ApicId ApicIdFromContiguousId ( size_t  contiguousId)
static ApicId ApicIdFromIndex ( const ApicId apicIds,
size_t  index 
)
static
ApicId ApicIdFromProcessor ( size_t  processor)
bool AreApicIdsReliable ( )
size_t ContiguousIdFromApicId ( ApicId  apicId)
static Status GetAndValidateApicIds ( )
static
ApicId GetApicId ( )
Returns
APIC ID of the currently executing processor or zero if the platform does not have an xAPIC (i.e. 7th generation x86 or below).

rationale: the alternative of accessing the APIC mmio registers is not feasible - mahaf_MapPhysicalMemory only works reliably on WinXP. we also don't want to interfere with the OS's constant use of the APIC registers.

static size_t IndexFromApicId ( const ApicId apicIds,
ApicId  apicId 
)
static
static Status InitApicIds ( )
static
size_t ProcessorFromApicId ( ApicId  apicId)

Variable Documentation

ModuleInitState apicInitState
static
size_t numIds
static
ApicId processorApicIds[os_cpu_MaxProcessors]
static
ApicId sortedApicIds[os_cpu_MaxProcessors]
static