The Pedigree Project 0.1
Static Public Member Functions | List of all members
X86CommonProcessor Class Reference

#include <Processor.h>

+ Inheritance diagram for X86CommonProcessor:
+ Collaboration diagram for X86CommonProcessor:

Static Public Member Functions

static uint64_t readMachineSpecificRegister (uint32_t index)
 
static void writeMachineSpecificRegister (uint32_t index, uint64_t value)
 
static void cpuid (uint32_t inEax, uint32_t inEcx, uint32_t &eax, uint32_t &ebx, uint32_t &ecx, uint32_t &edx)
 
static physical_uintptr_t readCr3 ()
 
- Static Public Member Functions inherited from ProcessorBase
static void initialise1 (const BootstrapStruct_t &Info) INITIALISATION_ONLY
 first stage in the initialisation of the processor-specific interface
 
static void initialise2 (const BootstrapStruct_t &Info) INITIALISATION_ONLY
 second/last stage in the initialisation of the processor-specific interface
 
static void initialisationDone ()
 
static void deinitialise ()
 
static size_t isInitialised ()
 
static uintptr_t getBasePointer ()
 
static uintptr_t getStackPointer ()
 
static uintptr_t getInstructionPointer ()
 
static void switchAddressSpace (VirtualAddressSpace &AddressSpace)
 
static bool saveState (SchedulerState &state)
 
static void restoreState (SchedulerState &state, volatile uintptr_t *pLock=0) NORETURN
 
static void restoreState (SyscallState &state, volatile uintptr_t *pLock=0) NORETURN
 
static void contextSwitch (InterruptState *state) NORETURN
 
static void switchState (bool bInterrupts, SchedulerState &a, SchedulerState &b, volatile uintptr_t *pLock=0)
 
static void switchState (bool bInterrupts, SchedulerState &a, SyscallState &b, volatile uintptr_t *pLock=0)
 
static void saveAndJumpKernel (bool bInterrupts, SchedulerState &s, volatile uintptr_t *pLock, uintptr_t address, uintptr_t stack, uintptr_t p1=0, uintptr_t p2=0, uintptr_t p3=0, uintptr_t p4=0)
 
static void saveAndJumpUser (bool bInterrupts, SchedulerState &s, volatile uintptr_t *pLock, uintptr_t address, uintptr_t stack, uintptr_t p1=0, uintptr_t p2=0, uintptr_t p3=0, uintptr_t p4=0)
 
static void jumpKernel (volatile uintptr_t *pLock, uintptr_t address, uintptr_t stack, uintptr_t p1=0, uintptr_t p2=0, uintptr_t p3=0, uintptr_t p4=0) NORETURN
 
static void jumpUser (volatile uintptr_t *pLock, uintptr_t address, uintptr_t stack, uintptr_t p1=0, uintptr_t p2=0, uintptr_t p3=0, uintptr_t p4=0) NORETURN
 
static void breakpoint ()
 
static void halt ()
 
static void reset ()
 
static size_t getDebugBreakpointCount ()
 
static uintptr_t getDebugBreakpoint (size_t nBpNumber, DebugFlags::FaultType &nFaultType, size_t &nLength, bool &bEnabled)
 
static void enableDebugBreakpoint (size_t nBpNumber, uintptr_t nLinearAddress, DebugFlags::FaultType nFaultType, size_t nLength)
 
static void disableDebugBreakpoint (size_t nBpNumber)
 
static uintptr_t getDebugStatus ()
 
static void haltUntilInterrupt ()
 
static void pause ()
 
static void setInterrupts (bool bEnable)
 
static bool getInterrupts ()
 
static bool inDeviceHardIrq ()
 
static ExecutionContext executionContext ()
 
static bool guardDeviceHardIrqOperation (DeviceHardIrqOperation operation)
 
static void setSingleStep (bool bEnable, InterruptState &state)
 
static void invalidate (void *pAddress)
 
static MUST_USE_RESULT TlbInvalidationResult beginTlbInvalidation (TlbInvalidationGuard &guard)
 
static MUST_USE_RESULT TlbInvalidationResult invalidateAll (void *pAddress)
 
static MUST_USE_RESULT TlbInvalidationResult invalidateAll (void *pAddress, TlbInvalidationGuard &guard)
 
static bool tlbInvalidationFailureActive ()
 
static bool tlbInvalidationTerminal ()
 
static void invalidateICache (uintptr_t nAddr)
 
static void invalidateDCache (uintptr_t nAddr)
 
static void flushDCache (uintptr_t nAddr)
 
static void flushDCacheAndInvalidateICache (uintptr_t startAddr, uintptr_t endAddr)
 
static void identify (HugeStaticString &str)
 
static ProcessorId id ()
 
static size_t index ()
 
static ProcessorInformation & information ()
 
static ProcessorInformation * informationAt (size_t cpu)
 
static size_t getCount ()
 
static void setTlsBase (uintptr_t newBase)
 
static uintptr_t getUserGsBase ()
 
static void setUserGsBase (uintptr_t newBase)
 

Additional Inherited Members

- Static Public Attributes inherited from ProcessorBase
static size_t m_Initialised = 0
 

Detailed Description

Common x86 processor functionality. Cast needed to get these.

Definition at line 27 of file x86_common/Processor.h.

Member Function Documentation

◆ cpuid()

void X86CommonProcessor::cpuid ( uint32_t  inEax,
uint32_t  inEcx,
uint32_t &  eax,
uint32_t &  ebx,
uint32_t &  ecx,
uint32_t &  edx 
)
static

Executes the CPUID machine instruction

Parameters
[in]inEaxeax before the CPUID instruction
[in]inEcxecx before the CPUID instruction
[out]eaxeax afterwards
[out]ebxebx afterwards
[out]ecxecx afterwards
[out]edxedx afterwards

Definition at line 308 of file x86_common/Processor.cc.

Referenced by CpuInfoCommand::execute(), and NMFaultHandler::initialiseProcessor().

+ Here is the caller graph for this function:

◆ readMachineSpecificRegister()

uint64_t X86CommonProcessor::readMachineSpecificRegister ( uint32_t  index)
static

Read a Machine/Model-specific register

Parameters
[in]indexthe register index
Returns
the value of the register

Definition at line 158 of file x86_common/Processor.cc.

References ProcessorBase::index().

Referenced by X64SyscallManager::initialiseProcessor(), and Pic::initialiseThreaded().

+ Here is the caller graph for this function:

◆ writeMachineSpecificRegister()

void X86CommonProcessor::writeMachineSpecificRegister ( uint32_t  index,
uint64_t  value 
)
static

Write a Machine/Model-specific register

Parameters
[in]indexthe register index
[in]valuethe new value of the register

Definition at line 164 of file x86_common/Processor.cc.

References ProcessorBase::index().

Referenced by X64SyscallManager::initialiseProcessor().

+ Here is the caller graph for this function:

The documentation for this class was generated from the following files: