diff options
Diffstat (limited to 'src/cpu/base.hh')
-rw-r--r-- | src/cpu/base.hh | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/cpu/base.hh b/src/cpu/base.hh index 75c8f7263..3673a5f18 100644 --- a/src/cpu/base.hh +++ b/src/cpu/base.hh @@ -64,11 +64,26 @@ #include "sim/insttracer.hh" #include "sim/probe/pmu.hh" #include "sim/system.hh" +#include "debug/Mwait.hh" +class BaseCPU; struct BaseCPUParams; class CheckerCPU; class ThreadContext; +struct AddressMonitor +{ + AddressMonitor(); + bool doMonitor(PacketPtr pkt); + + bool armed; + Addr vAddr; + Addr pAddr; + uint64_t val; + bool waiting; // 0=normal, 1=mwaiting + bool gotWakeup; +}; + class CPUProgressEvent : public Event { protected: @@ -536,6 +551,16 @@ class BaseCPU : public MemObject Stats::Scalar numCycles; Stats::Scalar numWorkItemsStarted; Stats::Scalar numWorkItemsCompleted; + + private: + AddressMonitor addressMonitor; + + public: + void armMonitor(Addr address); + bool mwait(PacketPtr pkt); + void mwaitAtomic(ThreadContext *tc, TheISA::TLB *dtb); + AddressMonitor *getCpuAddrMonitor() { return &addressMonitor; } + void atomicNotify(Addr address); }; #endif // THE_ISA == NULL_ISA |