2c2
< * Copyright (c) 2011-2014 ARM Limited
---
> * Copyright (c) 2011-2015 ARM Limited
58c58,59
< : BaseXBar(p), system(p->system), snoopFilter(p->snoop_filter)
---
> : BaseXBar(p), system(p->system), snoopFilter(p->snoop_filter),
> snoopResponseLatency(p->snoop_response_latency)
170,171c171,172
< calcPacketTiming(pkt);
< Tick packetFinishTime = curTick() + pkt->payloadDelay;
---
> // store the old header delay so we can restore it if needed
> Tick old_header_delay = pkt->headerDelay;
172a174,182
> // a request sees the frontend and forward latency
> Tick xbar_delay = (frontendLatency + forwardLatency) * clockPeriod();
>
> // set the packet header and payload delay
> calcPacketTiming(pkt, xbar_delay);
>
> // determine how long to be crossbar layer is busy
> Tick packetFinishTime = clockEdge(Cycles(1)) + pkt->payloadDelay;
>
179a190,193
> // If SnoopFilter is enabled, the total time required by a packet
> // to be delivered through the xbar has to be charged also with
> // to lookup latency of the snoop filter (sf_res.second).
> pkt->headerDelay += sf_res.second * clockPeriod();
224,225c238,239
< // undo the calculation so we can check for 0 again
< pkt->headerDelay = pkt->payloadDelay = 0;
---
> // restore the header delay
> pkt->headerDelay = old_header_delay;
232c246
< clockEdge(headerCycles));
---
> clockEdge(Cycles(1)));
303,304c317,318
< calcPacketTiming(pkt);
< Tick packetFinishTime = curTick() + pkt->payloadDelay;
---
> // a response sees the response latency
> Tick xbar_delay = responseLatency * clockPeriod();
305a320,325
> // set the packet header and payload delay
> calcPacketTiming(pkt, xbar_delay);
>
> // determine how long to be crossbar layer is busy
> Tick packetFinishTime = clockEdge(Cycles(1)) + pkt->payloadDelay;
>
429,430c449,453
< calcPacketTiming(pkt);
< Tick packetFinishTime = curTick() + pkt->payloadDelay;
---
> // a snoop response sees the snoop response latency, and if it is
> // forwarded as a normal response, the response latency
> Tick xbar_delay =
> (forwardAsSnoop ? snoopResponseLatency : responseLatency) *
> clockPeriod();
431a455,460
> // set the packet header and payload delay
> calcPacketTiming(pkt, xbar_delay);
>
> // determine how long to be crossbar layer is busy
> Tick packetFinishTime = clockEdge(Cycles(1)) + pkt->payloadDelay;
>