From 3952e41ab1f1dfaa2f97a6a486528e4ea0bfc5a1 Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Wed, 2 Jan 2008 12:20:15 -0800 Subject: Add functional PrintReq command for memory-system debugging. --HG-- extra : convert_revision : 73b753e57c355b7e6873f047ddc8cb371c3136b7 --- src/mem/physical.cc | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/mem/physical.cc') diff --git a/src/mem/physical.cc b/src/mem/physical.cc index a3a9df64e..40dc30afb 100644 --- a/src/mem/physical.cc +++ b/src/mem/physical.cc @@ -314,18 +314,22 @@ PhysicalMemory::doFunctionalAccess(PacketPtr pkt) uint8_t *hostAddr = pmemAddr + pkt->getAddr() - start(); - if (pkt->cmd == MemCmd::ReadReq) { + if (pkt->isRead()) { memcpy(pkt->getPtr(), hostAddr, pkt->getSize()); TRACE_PACKET("Read"); - } else if (pkt->cmd == MemCmd::WriteReq) { + pkt->makeAtomicResponse(); + } else if (pkt->isWrite()) { memcpy(hostAddr, pkt->getPtr(), pkt->getSize()); TRACE_PACKET("Write"); + pkt->makeAtomicResponse(); + } else if (pkt->isPrint()) { + Packet::PrintReqState *prs = dynamic_cast(pkt->senderState); + prs->printLabels(); + ccprintf(prs->os, "%s%#x\n", prs->curPrefix(), *hostAddr); } else { panic("PhysicalMemory: unimplemented functional command %s", pkt->cmdString()); } - - pkt->makeAtomicResponse(); } @@ -405,12 +409,16 @@ PhysicalMemory::MemoryPort::recvAtomic(PacketPtr pkt) void PhysicalMemory::MemoryPort::recvFunctional(PacketPtr pkt) { + pkt->pushLabel(memory->name()); + if (!checkFunctional(pkt)) { // Default implementation of SimpleTimingPort::recvFunctional() // calls recvAtomic() and throws away the latency; we can save a // little here by just not calculating the latency. memory->doFunctionalAccess(pkt); } + + pkt->popLabel(); } unsigned int -- cgit v1.2.3