From fa753c14549a768f0b8475e4e183acbdc394c248 Mon Sep 17 00:00:00 2001 From: Mitchell Hayenga Date: Thu, 1 Dec 2011 00:15:22 -0800 Subject: Device: Make changes necessary to support a coherent page walker cache. Adds the flag 'recvSnoops' which enables pagewalkers using DmaPorts, to properly configure snoops. --HG-- extra : rebase_source : 64207bef62c3268ddff2236ee4adae873812325f --- src/dev/io_device.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/dev/io_device.cc') diff --git a/src/dev/io_device.cc b/src/dev/io_device.cc index 5e2395bf9..5c13b5091 100644 --- a/src/dev/io_device.cc +++ b/src/dev/io_device.cc @@ -115,11 +115,13 @@ BasicPioDevice::addressRanges(AddrRangeList &range_list) } -DmaPort::DmaPort(MemObject *dev, System *s, Tick min_backoff, Tick max_backoff) +DmaPort::DmaPort(MemObject *dev, System *s, Tick min_backoff, Tick max_backoff, + bool recv_snoops) : Port(dev->name() + "-dmaport", dev), device(dev), sys(s), pendingCount(0), actionInProgress(0), drainEvent(NULL), backoffTime(0), minBackoffDelay(min_backoff), - maxBackoffDelay(max_backoff), inRetry(false), backoffEvent(this) + maxBackoffDelay(max_backoff), inRetry(false), recvSnoops(recv_snoops), + snoopRangeSent(false), backoffEvent(this) { } bool @@ -141,6 +143,12 @@ DmaPort::recvTiming(PacketPtr pkt) pkt->reinitNacked(); queueDma(pkt, true); } else if (pkt->senderState) { + if (recvSnoops) { + if (pkt->isRequest()) { + return true; + } + } + DmaReqState *state; backoffTime >>= 2; -- cgit v1.2.3