39a40
> #include "base/range_ops.hh"
47c48,49
< int _resp_limit, bool fix_partial_write)
---
> int _resp_limit,
> std::vector<Range<Addr> > filter_ranges)
49c51
< delay(_delay), nackDelay(_nack_delay), fixPartialWrite(fix_partial_write),
---
> delay(_delay), nackDelay(_nack_delay), filterRanges(filter_ranges),
58c60
< p->req_size_a, p->resp_size_a, p->fix_partial_write_a),
---
> p->req_size_a, p->resp_size_a, p->filter_ranges_a),
60c62
< p->req_size_b, p->resp_size_b, p->fix_partial_write_b),
---
> p->req_size_b, p->resp_size_b, p->filter_ranges_b),
246,256d247
< // Ugly! @todo When multilevel coherence works this will be removed
< if (pkt->cmd == MemCmd::WriteInvalidateReq && fixPartialWrite &&
< !pkt->wasNacked()) {
< PacketPtr funcPkt = new Packet(pkt->req, MemCmd::WriteReq,
< Packet::Broadcast);
< funcPkt->dataStatic(pkt->getPtr<uint8_t>());
< sendFunctional(funcPkt);
< pkt->cmd = MemCmd::WriteReq;
< delete funcPkt;
< }
<
316,326d306
< // fix partial atomic writes... similar to the timing code that does the
< // same... will be removed once our code gets this right
< if (pkt->cmd == MemCmd::WriteInvalidateReq && fixPartialWrite) {
<
< PacketPtr funcPkt = new Packet(pkt->req, MemCmd::WriteReq,
< Packet::Broadcast);
< funcPkt->dataStatic(pkt->getPtr<uint8_t>());
< otherPort->sendFunctional(funcPkt);
< delete funcPkt;
< pkt->cmd = MemCmd::WriteReq;
< }
357a338
> FilterRangeList(filterRanges, resp);