1/* |
2 * Copyright (c) 2011-2013, 2015 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 --- 134 unchanged lines hidden (view full) --- 145} 146 147bool 148Bridge::BridgeSlavePort::recvTimingReq(PacketPtr pkt) 149{ 150 DPRINTF(Bridge, "recvTimingReq: %s addr 0x%x\n", 151 pkt->cmdString(), pkt->getAddr()); 152 |
153 // sink inhibited packets without further action, also discard any 154 // packet that is not a read or a write 155 if (pkt->memInhibitAsserted() || 156 !(pkt->isWrite() || pkt->isRead())) { 157 assert(!pkt->needsResponse()); 158 pendingDelete.reset(pkt); 159 return true; 160 } |
161 |
162 // we should not get a new request after committing to retry the 163 // current one, but unfortunately the CPU violates this rule, so 164 // simply ignore it for now 165 if (retryReq) 166 return false; 167 |
168 DPRINTF(Bridge, "Response queue size: %d outresp: %d\n", 169 transmitList.size(), outstandingResponses); 170 171 // if the request queue is full then there is no hope 172 if (masterPort.reqQueueFull()) { 173 DPRINTF(Bridge, "Request queue full\n"); 174 retryReq = true; 175 } else { 176 // look at the response queue if we expect to see a response |
177 bool expects_response = pkt->needsResponse(); |
178 if (expects_response) { 179 if (respQueueFull()) { 180 DPRINTF(Bridge, "Response queue full\n"); 181 retryReq = true; 182 } else { 183 // ok to send the request with space for the response 184 DPRINTF(Bridge, "Reserving space for response\n"); 185 assert(outstandingResponses != respQueueLimit); --- 215 unchanged lines hidden --- |