gem5  v20.1.0.0
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
ArchTimer Class Reference

Per-CPU architected timer. More...

#include <generic_timer.hh>

Inheritance diagram for ArchTimer:
SystemCounterListener Drainable Serializable ArchTimerKvm

Public Member Functions

 ArchTimer (const std::string &name, SimObject &parent, SystemCounter &sysctr, ArmInterruptPin *interrupt)
 
std::string name () const
 Returns the timer name. More...
 
uint64_t compareValue () const
 Returns the CompareValue view of the timer. More...
 
void setCompareValue (uint64_t val)
 Sets the CompareValue view of the timer. More...
 
uint32_t timerValue () const
 Returns the TimerValue view of the timer. More...
 
void setTimerValue (uint32_t val)
 Sets the TimerValue view of the timer. More...
 
uint32_t control () const
 Sets the control register. More...
 
void setControl (uint32_t val)
 
uint64_t offset () const
 
void setOffset (uint64_t val)
 
uint64_t value () const
 Returns the value of the counter which this timer relies on. More...
 
Tick whenValue (uint64_t target_val)
 
void notify (void) override
 Called from the SystemCounter when a change in counting speed occurred Events should be rescheduled properly inside this member function. More...
 
void serialize (CheckpointOut &cp) const override
 Serialize an object. More...
 
void unserialize (CheckpointIn &cp) override
 Unserialize an object. More...
 
DrainState drain () override
 Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are partially executed or are partially in flight. More...
 
void drainResume () override
 Resume execution after a successful drain. More...
 
- Public Member Functions inherited from Serializable
 Serializable ()
 
virtual ~Serializable ()
 
void serializeSection (CheckpointOut &cp, const char *name) const
 Serialize an object into a new section. More...
 
void serializeSection (CheckpointOut &cp, const std::string &name) const
 
void unserializeSection (CheckpointIn &cp, const char *name)
 Unserialize an a child object. More...
 
void unserializeSection (CheckpointIn &cp, const std::string &name)
 
- Public Member Functions inherited from Drainable
DrainState drainState () const
 Return the current drain state of an object. More...
 
virtual void notifyFork ()
 Notify a child process of a fork. More...
 

Protected Member Functions

 BitUnion32 (ArchTimerCtrl) Bitfield< 0 > enable
 Control register. More...
 
void updateCounter ()
 Timer settings or the offset has changed, re-evaluate trigger condition and raise interrupt if necessary. More...
 
void counterLimitReached ()
 Called when the upcounter reaches the programmed value. More...
 
virtual bool scheduleEvents ()
 
- Protected Member Functions inherited from Drainable
 Drainable ()
 
virtual ~Drainable ()
 
void signalDrainDone () const
 Signal that an object is drained. More...
 

Protected Attributes

Bitfield< 1 > imask
 
Bitfield< 2 > istatus
 
EndBitUnion(ArchTimerCtrl) const std SimObject_parent
 Name of this timer. More...
 
SystemCounter_systemCounter
 
ArmInterruptPin *const _interrupt
 
ArchTimerCtrl _control
 Value of the control register ({CNTP/CNTHP/CNTV}_CTL). More...
 
uint64_t _counterLimit
 Programmed limit value for the upcounter ({CNTP/CNTHP/CNTV}_CVAL). More...
 
uint64_t _offset
 Offset relative to the physical timer (CNTVOFF) More...
 
EventFunctionWrapper _counterLimitReachedEvent
 

Private Member Functions

 ArchTimer (const ArchTimer &t)
 

Additional Inherited Members

- Static Public Member Functions inherited from Serializable
static const std::string & currentSection ()
 Gets the fully-qualified name of the active section. More...
 
static void serializeAll (const std::string &cpt_dir)
 Serializes all the SimObjects. More...
 
static void unserializeGlobals (CheckpointIn &cp)
 

Detailed Description

Per-CPU architected timer.

Definition at line 168 of file generic_timer.hh.

Constructor & Destructor Documentation

◆ ArchTimer() [1/2]

ArchTimer::ArchTimer ( const std::string &  name,
SimObject parent,
SystemCounter sysctr,
ArmInterruptPin interrupt 
)

Definition at line 248 of file generic_timer.cc.

References counterLimitReached().

◆ ArchTimer() [2/2]

ArchTimer::ArchTimer ( const ArchTimer t)
private

Member Function Documentation

◆ BitUnion32()

ArchTimer::BitUnion32 ( ArchTimerCtrl  )
protected

Control register.

◆ compareValue()

uint64_t ArchTimer::compareValue ( ) const
inline

Returns the CompareValue view of the timer.

Definition at line 217 of file generic_timer.hh.

References _counterLimit.

Referenced by GenericTimer::readMiscReg(), GenericTimerFrame::timerRead(), and GenericTimerFrame::timerWrite().

◆ control()

uint32_t ArchTimer::control ( ) const
inline

Sets the control register.

Definition at line 227 of file generic_timer.hh.

References _control.

Referenced by GenericTimer::readMiscReg(), and GenericTimerFrame::timerRead().

◆ counterLimitReached()

void ArchTimer::counterLimitReached ( )
protected

Called when the upcounter reaches the programmed value.

Definition at line 261 of file generic_timer.cc.

References _control, _interrupt, DPRINTF, ArmInterruptPin::raise(), and scheduleEvents().

Referenced by ArchTimer(), and updateCounter().

◆ drain()

DrainState ArchTimer::drain ( )
overridevirtual

Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are partially executed or are partially in flight.

Draining is mostly used before forking and creating a check point.

This function notifies an object that it needs to drain its state.

If the object does not need further simulation to drain internal buffers, it returns DrainState::Drained and automatically switches to the Drained state. If the object needs more simulation, it returns DrainState::Draining and automatically enters the Draining state. Other return values are invalid.

Note
An object that has entered the Drained state can be disturbed by other objects in the system and consequently stop being drained. These perturbations are not visible in the drain state. The simulator therefore repeats the draining process until all objects return DrainState::Drained on the first call to drain().
Returns
DrainState::Drained if the object is drained at this point in time, DrainState::Draining if it needs further simulation.

Implements Drainable.

Definition at line 384 of file generic_timer.cc.

References _counterLimitReachedEvent, _parent, EventManager::deschedule(), Drained, and Event::scheduled().

◆ drainResume()

void ArchTimer::drainResume ( )
overridevirtual

Resume execution after a successful drain.

Reimplemented from Drainable.

Definition at line 393 of file generic_timer.cc.

References updateCounter().

◆ name()

std::string ArchTimer::name ( ) const
inline

Returns the timer name.

Definition at line 214 of file generic_timer.hh.

◆ notify()

void ArchTimer::notify ( void  )
overridevirtual

Called from the SystemCounter when a change in counting speed occurred Events should be rescheduled properly inside this member function.

Implements SystemCounterListener.

Definition at line 356 of file generic_timer.cc.

References updateCounter().

◆ offset()

uint64_t ArchTimer::offset ( ) const
inline

◆ scheduleEvents()

virtual bool ArchTimer::scheduleEvents ( )
inlineprotectedvirtual

Reimplemented in ArchTimerKvm.

Definition at line 205 of file generic_timer.hh.

Referenced by counterLimitReached(), and updateCounter().

◆ serialize()

void ArchTimer::serialize ( CheckpointOut cp) const
overridevirtual

Serialize an object.

Output an object's state into the current checkpoint section.

Parameters
cpCheckpoint state

Implements Serializable.

Definition at line 362 of file generic_timer.cc.

References _control, _counterLimit, _offset, paramOut(), and SERIALIZE_SCALAR.

◆ setCompareValue()

void ArchTimer::setCompareValue ( uint64_t  val)

Sets the CompareValue view of the timer.

Definition at line 302 of file generic_timer.cc.

References _counterLimit, updateCounter(), and X86ISA::val.

Referenced by GenericTimer::setMiscReg(), setTimerValue(), and GenericTimerFrame::timerWrite().

◆ setControl()

void ArchTimer::setControl ( uint32_t  val)

◆ setOffset()

void ArchTimer::setOffset ( uint64_t  val)

◆ setTimerValue()

void ArchTimer::setTimerValue ( uint32_t  val)

Sets the TimerValue view of the timer.

Definition at line 309 of file generic_timer.cc.

References setCompareValue(), X86ISA::val, and value().

Referenced by GenericTimer::setMiscReg(), and GenericTimerFrame::timerWrite().

◆ timerValue()

uint32_t ArchTimer::timerValue ( ) const
inline

Returns the TimerValue view of the timer.

Definition at line 222 of file generic_timer.hh.

References _counterLimit, and value().

Referenced by GenericTimer::readMiscReg(), and GenericTimerFrame::timerRead().

◆ unserialize()

void ArchTimer::unserialize ( CheckpointIn cp)
overridevirtual

Unserialize an object.

Read an object's state from the current checkpoint section.

Parameters
cpCheckpoint state

Implements Serializable.

Definition at line 370 of file generic_timer.cc.

References _control, _offset, paramIn(), and UNSERIALIZE_OPT_SCALAR.

◆ updateCounter()

void ArchTimer::updateCounter ( )
protected

◆ value()

uint64_t ArchTimer::value ( ) const

◆ whenValue()

Tick ArchTimer::whenValue ( uint64_t  target_val)
inline

Member Data Documentation

◆ _control

ArchTimerCtrl ArchTimer::_control
protected

Value of the control register ({CNTP/CNTHP/CNTV}_CTL).

Definition at line 189 of file generic_timer.hh.

Referenced by control(), counterLimitReached(), serialize(), setControl(), unserialize(), and updateCounter().

◆ _counterLimit

uint64_t ArchTimer::_counterLimit
protected

Programmed limit value for the upcounter ({CNTP/CNTHP/CNTV}_CVAL).

Definition at line 191 of file generic_timer.hh.

Referenced by compareValue(), serialize(), setCompareValue(), timerValue(), and updateCounter().

◆ _counterLimitReachedEvent

EventFunctionWrapper ArchTimer::_counterLimitReachedEvent
protected

Definition at line 203 of file generic_timer.hh.

Referenced by drain(), and updateCounter().

◆ _interrupt

ArmInterruptPin* const ArchTimer::_interrupt
protected

Definition at line 186 of file generic_timer.hh.

Referenced by counterLimitReached(), setControl(), and updateCounter().

◆ _offset

uint64_t ArchTimer::_offset
protected

Offset relative to the physical timer (CNTVOFF)

Definition at line 193 of file generic_timer.hh.

Referenced by offset(), serialize(), setOffset(), unserialize(), and value().

◆ _parent

EndBitUnion (ArchTimerCtrl) const std SimObject& ArchTimer::_parent
protected

Name of this timer.

Pointer to parent class.

Definition at line 176 of file generic_timer.hh.

Referenced by drain(), and updateCounter().

◆ _systemCounter

SystemCounter& ArchTimer::_systemCounter
protected

Definition at line 184 of file generic_timer.hh.

Referenced by value(), and whenValue().

◆ imask

Bitfield<1> ArchTimer::imask
protected

Definition at line 174 of file generic_timer.hh.

◆ istatus

Bitfield<2> ArchTimer::istatus
protected

Definition at line 175 of file generic_timer.hh.


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

Generated on Wed Sep 30 2020 14:02:20 for gem5 by doxygen 1.8.17