- if (pkt->needsResponse()) {
- pkt->makeTimingResponse();
- sendTimingLater(pkt, latency);
- }
- else {
- if (pkt->cmd != Packet::UpgradeReq)
- {
- delete pkt->req;
- delete pkt;
- }
- }
- return true;
-}
-
-void
-SimpleTimingPort::recvRetry()
-{
- assert(outTiming > 0);
- assert(!transmitList.empty());
- if (sendTiming(transmitList.front())) {
- transmitList.pop_front();
- outTiming--;
- DPRINTF(Bus, "No Longer waiting on retry\n");
- if (!transmitList.empty())
- sendTimingLater(transmitList.front(), 1);
- }
-
- if (transmitList.empty() && drainEvent) {
- drainEvent->process();
- drainEvent = NULL;
- }
-}
-
-void
-SimpleTimingPort::SendEvent::process()
-{
- assert(port->outTiming > 0);
- if (!port->transmitList.empty() && port->transmitList.front() != packet) {
- //We are not the head of the list
- port->transmitList.push_back(packet);
- } else if (port->sendTiming(packet)) {
- // send successful
- if (port->transmitList.size()) {
- port->transmitList.pop_front();
- port->outTiming--;
- if (!port->transmitList.empty())
- port->sendTimingLater(port->transmitList.front(), 1);
- }
- if (port->transmitList.empty() && port->drainEvent) {
- port->drainEvent->process();
- port->drainEvent = NULL;
- }