43 #ifndef __ARCH_ARM_SYSTEM_HH__ 44 #define __ARCH_ARM_SYSTEM_HH__ 51 #include "params/ArmSystem.hh" 52 #include "params/GenericArmSystem.hh" 161 return dynamic_cast<const Params *
>(
_params);
204 _genericTimer = generic_timer;
228 if (_haveVirtualization)
340 uint32_t
op, uint64_t param);
344 uint32_t op, uint32_t param);
354 return dynamic_cast<const Params *
>(
_params);
ObjectFile * getBootLoader(ObjectFile *const obj)
Get a boot loader that matches the kernel.
const uint8_t _physAddrRange64
Supported physical address range in bits if the highest implemented exception level is 64 bits (ARMv8...
Addr physAddrMask() const
Returns the physical address mask.
const unsigned _sveVL
SVE vector length at reset, in quadwords.
bool haveSecurity() const
Returns true if this system implements the Security Extensions.
const bool _haveLargeAsid64
True if ASID is 16 bits in AArch64 (ARMv8)
const bool _haveSVE
True if SVE is implemented (ARMv8)
const unsigned _havePAN
True if Priviledge Access Never is implemented.
bool havePAN() const
Returns true if Priviledge Access Never is implemented.
GenericArmSystem(Params *p)
bool highestELIs64() const
Returns true if the register width of the highest implemented exception level is 64 bits (ARMv8) ...
const Addr _resetAddr
Reset address (ARMv8)
static uint64_t callSemihosting64(ThreadContext *tc, uint32_t op, uint64_t param)
Make a Semihosting call from aarch64.
ThreadContext is the external interface to all thread state for anything outside of the CPU...
void setGenericTimer(GenericTimer *generic_timer)
Sets the pointer to the Generic Timer.
ObjectFile * bootldr
Pointer to the bootloader object.
static bool haveEL(ThreadContext *tc, ExceptionLevel el)
Return true if the system implements a specific exception level.
bool haveSVE() const
Returns true if SVE is implemented (ARMv8)
uint8_t physAddrRange64() const
Returns the supported physical address range in bits if the highest implemented exception level is 64...
const Params * params() const
const bool _haveLSE
True if LSE is implemented (ARMv8.1)
std::vector< std::unique_ptr< ObjectFile > > bootLoaders
Bootloaders.
bool _highestELIs64
True if the register width of the highest implemented exception level is 64 bits (ARMv8) ...
bool multiProc
true if this a multiprocessor system
const bool _haveVirtualization
True if this system implements the virtualization Extensions.
Semihosting for AArch32 and AArch64.
unsigned sveVL() const
Returns the SVE vector length at reset, in quadwords.
static ArmSystem * getArmSystem(System *sys)
Casts the provided System object into a valid ArmSystem, it fails otherwise.
virtual ~GenericArmSystem()
BaseGic * getGIC() const
Get a pointer to the system's GIC.
static uint32_t callSemihosting32(ThreadContext *tc, uint32_t op, uint32_t param)
Make a Semihosting call from aarch32.
Linux::DebugPrintkEvent * debugPrintkEvent
PC based event to skip the dprink() call and emulate its functionality.
GenericArmSystemParams Params
bool haveVirtualization() const
Returns true if this system implements the virtualization Extensions.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
bool haveCrypto() const
Returns true if this system implements the Crypto Extension.
void setGIC(BaseGic *gic)
Sets the pointer to the GIC.
uint8_t physAddrRange() const
Returns the supported physical address range in bits.
ExceptionLevel highestEL() const
Returns the highest implemented exception level.
ArmSemihosting *const semihosting
True if the Semihosting interface is enabled.
virtual void initState()
Initialise the system.
GenericTimer * _genericTimer
Pointer to the Generic Timer wrapper.
virtual Addr fixFuncEventAddr(Addr addr)
Fix up an address used to match PCs for hooking simulator events on to target function executions...
bool haveLSE() const
Returns true if LSE is implemented (ARMv8.1)
GenericTimer * getGenericTimer() const
Get a pointer to the system's generic timer model.
const bool _haveLPAE
True if this system implements the Large Physical Address Extension.
const bool _haveCrypto
True if this system implements the Crypto Extension.
const bool _haveSecurity
True if this system implements the Security Extensions.
bool haveLargeAsid64() const
Returns true if ASID is 16 bits in AArch64 (ARMv8)
bool haveSemihosting() const
Is Arm Semihosting support enabled?
const Params * params() const
Addr resetAddr() const
Returns the reset address if the highest implemented exception level is 64 bits (ARMv8) ...
bool haveLPAE() const
Returns true if this system implements the Large Physical Address Extension.