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 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 92 unchanged lines hidden (view full) --- 103{ 104 // determine the source port based on the id 105 SlavePort *src_port = slavePorts[slave_port_id]; 106 107 // we should never see express snoops on a non-coherent crossbar 108 assert(!pkt->isExpressSnoop()); 109 110 // determine the destination based on the address |
111 AddrRange addr_range = RangeSize(pkt->getAddr(), pkt->getSize()); 112 PortID master_port_id = findPort(addr_range); |
113 114 // test if the layer should be considered occupied for the current 115 // port 116 if (!reqLayers[master_port_id]->tryTiming(src_port)) { 117 DPRINTF(NoncoherentXBar, "recvTimingReq: src %s %s 0x%x BUSY\n", 118 src_port->name(), pkt->cmdString(), pkt->getAddr()); 119 return false; 120 } --- 128 unchanged lines hidden (view full) --- 249 DPRINTF(NoncoherentXBar, "recvAtomic: packet src %s addr 0x%x cmd %s\n", 250 slavePorts[slave_port_id]->name(), pkt->getAddr(), 251 pkt->cmdString()); 252 253 unsigned int pkt_size = pkt->hasData() ? pkt->getSize() : 0; 254 unsigned int pkt_cmd = pkt->cmdToIndex(); 255 256 // determine the destination port |
257 AddrRange addr_range = RangeSize(pkt->getAddr(), pkt->getSize()); 258 PortID master_port_id = findPort(addr_range); |
259 260 // stats updates for the request 261 pktCount[slave_port_id][master_port_id]++; 262 pktSize[slave_port_id][master_port_id] += pkt_size; 263 transDist[pkt_cmd]++; 264 265 // forward the request to the appropriate destination 266 Tick response_latency = masterPorts[master_port_id]->sendAtomic(pkt); --- 33 unchanged lines hidden (view full) --- 300 if (p->checkFunctional(pkt)) { 301 if (pkt->needsResponse()) 302 pkt->makeResponse(); 303 return; 304 } 305 } 306 307 // determine the destination port |
308 AddrRange addr_range = RangeSize(pkt->getAddr(), pkt->getSize()); 309 PortID dest_id = findPort(addr_range); |
310 311 // forward the request to the appropriate destination 312 masterPorts[dest_id]->sendFunctional(pkt); 313} 314 315NoncoherentXBar* 316NoncoherentXBarParams::create() 317{ --- 13 unchanged lines hidden --- |