MEM: Add a snooping DMA port subclass for table walker
This patch makes the (device) DmaPort non-snooping and removes the recvSnoop constructor parameter and instead introduces a SnoopingDmaPort subclass for the ARM table walker. Functionality is unchanged, as are the stats, and the patch merely clarifies that the normal DMA ports are not snooping (although they may issue requests that are snooped by others, as done with PCI, PCIe, AMBA4 ACE etc). Currently this port is declared in the ARM table walker as it is not used anywhere else. If other ports were to have similar behaviour it could be moved in a future patch.
This commit is contained in:
@@ -120,13 +120,12 @@ BasicPioDevice::getAddrRanges()
|
||||
}
|
||||
|
||||
|
||||
DmaPort::DmaPort(MemObject *dev, System *s, Tick min_backoff, Tick max_backoff,
|
||||
bool recv_snoops)
|
||||
: MasterPort(dev->name() + "-dmaport", dev), device(dev), sys(s),
|
||||
DmaPort::DmaPort(MemObject *dev, System *s, Tick min_backoff, Tick max_backoff)
|
||||
: MasterPort(dev->name() + "-dma", dev), device(dev), sys(s),
|
||||
masterId(s->getMasterId(dev->name())),
|
||||
pendingCount(0), actionInProgress(0), drainEvent(NULL),
|
||||
backoffTime(0), minBackoffDelay(min_backoff),
|
||||
maxBackoffDelay(max_backoff), inRetry(false), recvSnoops(recv_snoops),
|
||||
maxBackoffDelay(max_backoff), inRetry(false),
|
||||
backoffEvent(this)
|
||||
{ }
|
||||
|
||||
|
||||
@@ -143,34 +143,10 @@ class DmaPort : public MasterPort
|
||||
* it is that it's sending. */
|
||||
bool inRetry;
|
||||
|
||||
/** Port accesses a cache which requires snooping */
|
||||
bool recvSnoops;
|
||||
|
||||
virtual bool recvTimingResp(PacketPtr pkt);
|
||||
|
||||
virtual void recvTimingSnoopReq(PacketPtr pkt)
|
||||
{
|
||||
if (!recvSnoops)
|
||||
panic("%s was not expecting a snoop\n", name());
|
||||
}
|
||||
|
||||
virtual Tick recvAtomicSnoop(PacketPtr pkt)
|
||||
{
|
||||
if (!recvSnoops)
|
||||
panic("%s was not expecting a snoop\n", name());
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual void recvFunctionalSnoop(PacketPtr pkt)
|
||||
{
|
||||
if (!recvSnoops)
|
||||
panic("%s was not expecting a snoop\n", name());
|
||||
}
|
||||
|
||||
virtual void recvRetry() ;
|
||||
|
||||
virtual bool isSnooping() const { return recvSnoops; }
|
||||
|
||||
void queueDma(PacketPtr pkt, bool front = false);
|
||||
void sendDma();
|
||||
|
||||
@@ -178,8 +154,7 @@ class DmaPort : public MasterPort
|
||||
EventWrapper<DmaPort, &DmaPort::sendDma> backoffEvent;
|
||||
|
||||
public:
|
||||
DmaPort(MemObject *dev, System *s, Tick min_backoff, Tick max_backoff,
|
||||
bool recv_snoops = false);
|
||||
DmaPort(MemObject *dev, System *s, Tick min_backoff, Tick max_backoff);
|
||||
|
||||
void dmaAction(Packet::Command cmd, Addr addr, int size, Event *event,
|
||||
uint8_t *data, Tick delay, Request::Flags flag = 0);
|
||||
|
||||
Reference in New Issue
Block a user