io_device.cc (8922:17f037ad8918) io_device.cc (8948:e95ee70f876c)
1/*
1/*
2 * Copyright (c) 2012 ARM Limited
3 * All rights reserved.
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
2 * Copyright (c) 2006 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;
9 * redistributions in binary form must reproduce the above copyright

--- 106 unchanged lines hidden (view full) ---

116 backoffTime(0), minBackoffDelay(min_backoff),
117 maxBackoffDelay(max_backoff), inRetry(false), recvSnoops(recv_snoops),
118 backoffEvent(this)
119{ }
120
121bool
122DmaPort::recvTiming(PacketPtr pkt)
123{
14 * Copyright (c) 2006 The Regents of The University of Michigan
15 * All rights reserved.
16 *
17 * Redistribution and use in source and binary forms, with or without
18 * modification, are permitted provided that the following conditions are
19 * met: redistributions of source code must retain the above copyright
20 * notice, this list of conditions and the following disclaimer;
21 * redistributions in binary form must reproduce the above copyright

--- 106 unchanged lines hidden (view full) ---

128 backoffTime(0), minBackoffDelay(min_backoff),
129 maxBackoffDelay(max_backoff), inRetry(false), recvSnoops(recv_snoops),
130 backoffEvent(this)
131{ }
132
133bool
134DmaPort::recvTiming(PacketPtr pkt)
135{
136 assert(pkt->isResponse());
124 if (pkt->wasNacked()) {
125 DPRINTF(DMA, "Received nacked %s addr %#x\n",
126 pkt->cmdString(), pkt->getAddr());
127
128 if (backoffTime < minBackoffDelay)
129 backoffTime = minBackoffDelay;
130 else if (backoffTime < maxBackoffDelay)
131 backoffTime <<= 1;
132
133 device->reschedule(backoffEvent, curTick() + backoffTime, true);
134
135 DPRINTF(DMA, "Backoff time set to %d ticks\n", backoffTime);
136
137 pkt->reinitNacked();
138 queueDma(pkt, true);
137 if (pkt->wasNacked()) {
138 DPRINTF(DMA, "Received nacked %s addr %#x\n",
139 pkt->cmdString(), pkt->getAddr());
140
141 if (backoffTime < minBackoffDelay)
142 backoffTime = minBackoffDelay;
143 else if (backoffTime < maxBackoffDelay)
144 backoffTime <<= 1;
145
146 device->reschedule(backoffEvent, curTick() + backoffTime, true);
147
148 DPRINTF(DMA, "Backoff time set to %d ticks\n", backoffTime);
149
150 pkt->reinitNacked();
151 queueDma(pkt, true);
139 } else if (pkt->isRequest() && recvSnoops) {
140 return true;
141 } else if (pkt->senderState) {
142 DmaReqState *state;
143 backoffTime >>= 2;
144
145 DPRINTF(DMA, "Received response %s addr %#x size %#x\n",
146 pkt->cmdString(), pkt->getAddr(), pkt->req->getSize());
147 state = dynamic_cast<DmaReqState*>(pkt->senderState);
148 pendingCount--;

--- 232 unchanged lines hidden ---
152 } else if (pkt->senderState) {
153 DmaReqState *state;
154 backoffTime >>= 2;
155
156 DPRINTF(DMA, "Received response %s addr %#x size %#x\n",
157 pkt->cmdString(), pkt->getAddr(), pkt->req->getSize());
158 state = dynamic_cast<DmaReqState*>(pkt->senderState);
159 pendingCount--;

--- 232 unchanged lines hidden ---