93c93,103
< if (pkt->isResponse()) {
---
> return otherPort->queueForSendTiming(pkt);
> }
>
>
> bool
> Bridge::BridgePort::queueForSendTiming(Packet *pkt)
> {
> if (queueFull())
> return false;
>
> if (pkt->isResponse()) {
101a112,113
> DPRINTF(BusBridge, "restoring sender state: %#X, from packet buffer: %#X\n",
> pkt->senderState, buf);
106,115d117
< return otherPort->queueForSendTiming(pkt);
< }
<
<
< bool
< Bridge::BridgePort::queueForSendTiming(Packet *pkt)
< {
< if (queueFull())
< return false;
<
117a120,121
> DPRINTF(BusBridge, "old sender state: %#X, new sender state: %#X\n",
> buf->origSenderState, buf);
129,132d132
< // Did we just become blocked? If yes, let other side know.
< if (queueFull())
< otherPort->sendStatusChange(Port::Blocked);
<
136d135
<
138,161d136
< Bridge::BridgePort::finishSend(PacketBuffer *buf)
< {
< if (buf->expectResponse) {
< // Must wait for response. We just need to count outstanding
< // responses (in case we want to cap them); PacketBuffer
< // pointer will be recovered on response.
< ++outstandingResponses;
< DPRINTF(BusBridge, " successful: awaiting response (%d)\n",
< outstandingResponses);
< } else {
< // no response expected... deallocate packet buffer now.
< DPRINTF(BusBridge, " successful: no response expected\n");
< delete buf;
< }
<
< // If there are more packets to send, schedule event to try again.
< if (!sendQueue.empty()) {
< buf = sendQueue.front();
< sendEvent.schedule(std::max(buf->ready, curTick + 1));
< }
< }
<
<
< void
165a141,142
> bool was_full = queueFull();
>
179c156,180
< finishSend(buf);
---
>
> if (buf->expectResponse) {
> // Must wait for response. We just need to count outstanding
> // responses (in case we want to cap them); PacketBuffer
> // pointer will be recovered on response.
> ++outstandingResponses;
> DPRINTF(BusBridge, " successful: awaiting response (%d)\n",
> outstandingResponses);
> } else {
> // no response expected... deallocate packet buffer now.
> DPRINTF(BusBridge, " successful: no response expected\n");
> delete buf;
> }
>
> // If there are more packets to send, schedule event to try again.
> if (!sendQueue.empty()) {
> buf = sendQueue.front();
> sendEvent.schedule(std::max(buf->ready, curTick + 1));
> }
> // Let things start sending again
> if (was_full) {
> DPRINTF(BusBridge, "Queue was full, sending retry\n");
> otherPort->sendRetry();
> }
>
186c187
< Packet *
---
> void
189,192c190
< PacketBuffer *buf = sendQueue.front();
< Packet *pkt = buf->pkt;
< finishSend(buf);
< return pkt;
---
> trySend();
226,228d223
< if (status == Port::Blocked || status == Port::Unblocked)
< return;
<