diff options
Diffstat (limited to 'src/arch/arm')
-rw-r--r-- | src/arch/arm/table_walker.cc | 24 | ||||
-rw-r--r-- | src/arch/arm/table_walker.hh | 6 |
2 files changed, 15 insertions, 15 deletions
diff --git a/src/arch/arm/table_walker.cc b/src/arch/arm/table_walker.cc index a10eb4a20..e4c6209d6 100644 --- a/src/arch/arm/table_walker.cc +++ b/src/arch/arm/table_walker.cc @@ -51,7 +51,7 @@ using namespace ArmISA; TableWalker::TableWalker(const Params *p) - : MemObject(p), port(this, params()->sys), drainEvent(NULL), + : MemObject(p), port(this, params()->sys), drainManager(NULL), tlb(NULL), currState(NULL), pending(false), masterId(p->sys->getMasterId(name())), numSquashable(p->num_squash_per_cycle), @@ -68,30 +68,30 @@ TableWalker::~TableWalker() void TableWalker::completeDrain() { - if (drainEvent && stateQueueL1.empty() && stateQueueL2.empty() && + if (drainManager && stateQueueL1.empty() && stateQueueL2.empty() && pendingQueue.empty()) { - changeState(Drained); + setDrainState(Drainable::Drained); DPRINTF(Drain, "TableWalker done draining, processing drain event\n"); - drainEvent->process(); - drainEvent = NULL; + drainManager->signalDrainDone(); + drainManager = NULL; } } unsigned int -TableWalker::drain(Event *de) +TableWalker::drain(DrainManager *dm) { - unsigned int count = port.drain(de); + unsigned int count = port.drain(dm); if (stateQueueL1.empty() && stateQueueL2.empty() && pendingQueue.empty()) { - changeState(Drained); + setDrainState(Drainable::Drained); DPRINTF(Drain, "TableWalker free, no need to drain\n"); // table walker is drained, but its ports may still need to be drained return count; } else { - drainEvent = de; - changeState(Draining); + drainManager = dm; + setDrainState(Drainable::Draining); DPRINTF(Drain, "TableWalker not drained\n"); // return port drain count plus the table walker itself needs to drain @@ -101,9 +101,9 @@ TableWalker::drain(Event *de) } void -TableWalker::resume() +TableWalker::drainResume() { - MemObject::resume(); + Drainable::drainResume(); if ((params()->sys->getMemoryMode() == Enums::timing) && currState) { delete currState; currState = NULL; diff --git a/src/arch/arm/table_walker.hh b/src/arch/arm/table_walker.hh index 22c5d03b4..23464f56d 100644 --- a/src/arch/arm/table_walker.hh +++ b/src/arch/arm/table_walker.hh @@ -364,7 +364,7 @@ class TableWalker : public MemObject SnoopingDmaPort port; /** If we're draining keep the drain event around until we're drained */ - Event *drainEvent; + DrainManager *drainManager; /** TLB that is initiating these table walks */ TLB *tlb; @@ -397,8 +397,8 @@ class TableWalker : public MemObject /** Checks if all state is cleared and if so, completes drain */ void completeDrain(); - virtual unsigned int drain(Event *de); - virtual void resume(); + unsigned int drain(DrainManager *dm); + void drainResume(); virtual BaseMasterPort& getMasterPort(const std::string &if_name, PortID idx = InvalidPortID); |