1/* 2 * Copyright (c) 2011-2015, 2018 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 --- 230 unchanged lines hidden (view full) --- 239{ 240 // responses never block on forwarding them, so the retry will 241 // always be coming from a port to which we tried to forward a 242 // request 243 reqLayers[master_port_id]->recvRetry(); 244} 245 246Tick |
247NoncoherentXBar::recvAtomicBackdoor(PacketPtr pkt, PortID slave_port_id, 248 MemBackdoorPtr *backdoor) |
249{ 250 DPRINTF(NoncoherentXBar, "recvAtomic: packet src %s addr 0x%x cmd %s\n", 251 slavePorts[slave_port_id]->name(), pkt->getAddr(), 252 pkt->cmdString()); 253 254 unsigned int pkt_size = pkt->hasData() ? pkt->getSize() : 0; 255 unsigned int pkt_cmd = pkt->cmdToIndex(); 256 257 // determine the destination port 258 AddrRange addr_range = RangeSize(pkt->getAddr(), pkt->getSize()); 259 PortID master_port_id = findPort(addr_range); 260 261 // stats updates for the request 262 pktCount[slave_port_id][master_port_id]++; 263 pktSize[slave_port_id][master_port_id] += pkt_size; 264 transDist[pkt_cmd]++; 265 266 // forward the request to the appropriate destination |
267 auto master = masterPorts[master_port_id]; 268 Tick response_latency = backdoor ? 269 master->sendAtomicBackdoor(pkt, *backdoor) : master->sendAtomic(pkt); |
270 271 // add the response data 272 if (pkt->isResponse()) { 273 pkt_size = pkt->hasData() ? pkt->getSize() : 0; 274 pkt_cmd = pkt->cmdToIndex(); 275 276 // stats updates 277 pktCount[slave_port_id][master_port_id]++; --- 56 unchanged lines hidden --- |