131a132,137
> /** Port accesses a cache which requires snooping */
> bool recvSnoops;
>
> /** Records snoop response so we only reply once to a status change */
> bool snoopRangeSent;
>
134c140,144
< { panic("dma port shouldn't be used for pio access."); M5_DUMMY_RETURN }
---
> {
> if (recvSnoops) return 0;
>
> panic("dma port shouldn't be used for pio access."); M5_DUMMY_RETURN
> }
136c146,147
< { panic("dma port shouldn't be used for pio access."); }
---
> {
> if (recvSnoops) return;
137a149,151
> panic("dma port shouldn't be used for pio access.");
> }
>
139c153,164
< { ; }
---
> {
> if (recvSnoops) {
> if (status == RangeChange) {
> if (!snoopRangeSent) {
> snoopRangeSent = true;
> sendStatusChange(Port::RangeChange);
> }
> return;
> }
> panic("Unexpected recvStatusChange\n");
> }
> }
145c170
< { resp.clear(); snoop = false; }
---
> { resp.clear(); snoop = recvSnoops; }
154c179,180
< DmaPort(MemObject *dev, System *s, Tick min_backoff, Tick max_backoff);
---
> DmaPort(MemObject *dev, System *s, Tick min_backoff, Tick max_backoff,
> bool recv_snoops = false);