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 --- 137 unchanged lines hidden (view full) --- 146RubyPort::PioPort::recvTimingResp(PacketPtr pkt) 147{ 148 // In FS mode, ruby memory will receive pio responses from devices 149 // and it must forward these responses back to the particular CPU. 150 DPRINTF(RubyPort, "Pio response for address %#x\n", pkt->getAddr()); 151 152 // First we must retrieve the request port from the sender State 153 RubyPort::SenderState *senderState = |
154 safe_cast<RubyPort::SenderState *>(pkt->popSenderState()); |
155 M5Port *port = senderState->port; 156 assert(port != NULL); |
157 delete senderState; 158 159 port->sendTimingResp(pkt); 160 161 return true; 162} 163 164bool --- 14 unchanged lines hidden (view full) --- 179 // snooper will supply based on copy of packet 180 // still target's responsibility to delete packet 181 delete pkt; 182 return true; 183 } 184 185 // Save the port in the sender state object to be used later to 186 // route the response |
187 pkt->pushSenderState(new SenderState(this)); |
188 189 // Check for pio requests and directly send them to the dedicated 190 // pio port. 191 if (!isPhysMemAddress(pkt->getAddr())) { 192 assert(ruby_port->pio_port.isConnected()); 193 DPRINTF(RubyPort, 194 "Request for address 0x%#x is assumed to be a pio request\n", 195 pkt->getAddr()); --- 26 unchanged lines hidden (view full) --- 222 ruby_port->addToRetryList(this); 223 } 224 225 DPRINTF(RubyPort, 226 "Request for address %#x did not issue because %s\n", 227 pkt->getAddr(), RequestStatus_to_string(requestStatus)); 228 229 SenderState* senderState = safe_cast<SenderState*>(pkt->senderState); |
230 pkt->senderState = senderState->predecessor; |
231 delete senderState; 232 return false; 233} 234 235void 236RubyPort::M5Port::recvFunctional(PacketPtr pkt) 237{ 238 DPRINTF(RubyPort, "Functional access caught for address %#x\n", --- 58 unchanged lines hidden (view full) --- 297{ 298 // Retrieve the request port from the sender State 299 RubyPort::SenderState *senderState = 300 safe_cast<RubyPort::SenderState *>(pkt->senderState); 301 M5Port *port = senderState->port; 302 assert(port != NULL); 303 304 // pop the sender state from the packet |
305 pkt->senderState = senderState->predecessor; |
306 delete senderState; 307 308 port->hitCallback(pkt); 309 310 // 311 // If we had to stall the M5Ports, wake them up because the sequencer 312 // likely has free resources now. 313 // --- 197 unchanged lines hidden --- |