io_device.cc (5539:6a27bc3fc267) | io_device.cc (5606:6da7a58b0bc8) |
---|---|
1/* 2 * Copyright (c) 2006 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 103 unchanged lines hidden (view full) --- 112 DPRINTF(DMA, "Received nacked %s addr %#x\n", 113 pkt->cmdString(), pkt->getAddr()); 114 115 if (backoffTime < device->minBackoffDelay) 116 backoffTime = device->minBackoffDelay; 117 else if (backoffTime < device->maxBackoffDelay) 118 backoffTime <<= 1; 119 | 1/* 2 * Copyright (c) 2006 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 103 unchanged lines hidden (view full) --- 112 DPRINTF(DMA, "Received nacked %s addr %#x\n", 113 pkt->cmdString(), pkt->getAddr()); 114 115 if (backoffTime < device->minBackoffDelay) 116 backoffTime = device->minBackoffDelay; 117 else if (backoffTime < device->maxBackoffDelay) 118 backoffTime <<= 1; 119 |
120 backoffEvent.reschedule(curTick + backoffTime, true); | 120 reschedule(backoffEvent, curTick + backoffTime, true); |
121 122 DPRINTF(DMA, "Backoff time set to %d ticks\n", backoffTime); 123 124 pkt->reinitNacked(); 125 queueDma(pkt, true); 126 } else if (pkt->senderState) { 127 DmaReqState *state; 128 backoffTime >>= 2; --- 5 unchanged lines hidden (view full) --- 134 135 assert(pendingCount >= 0); 136 assert(state); 137 138 state->numBytes += pkt->req->getSize(); 139 assert(state->totBytes >= state->numBytes); 140 if (state->totBytes == state->numBytes) { 141 if (state->delay) | 121 122 DPRINTF(DMA, "Backoff time set to %d ticks\n", backoffTime); 123 124 pkt->reinitNacked(); 125 queueDma(pkt, true); 126 } else if (pkt->senderState) { 127 DmaReqState *state; 128 backoffTime >>= 2; --- 5 unchanged lines hidden (view full) --- 134 135 assert(pendingCount >= 0); 136 assert(state); 137 138 state->numBytes += pkt->req->getSize(); 139 assert(state->totBytes >= state->numBytes); 140 if (state->totBytes == state->numBytes) { 141 if (state->delay) |
142 state->completionEvent->schedule(state->delay + curTick); | 142 schedule(state->completionEvent, curTick + state->delay); |
143 else 144 state->completionEvent->process(); 145 delete state; 146 } 147 delete pkt->req; 148 delete pkt; 149 150 if (pendingCount == 0 && drainEvent) { --- 53 unchanged lines hidden (view full) --- 204 inRetry = true; 205 DPRINTF(DMA, "-- Failed, queued\n"); 206 } 207 } while (!backoffTime && result && transmitList.size()); 208 209 if (transmitList.size() && backoffTime && !inRetry) { 210 DPRINTF(DMA, "Scheduling backoff for %d\n", curTick+backoffTime); 211 if (!backoffEvent.scheduled()) | 143 else 144 state->completionEvent->process(); 145 delete state; 146 } 147 delete pkt->req; 148 delete pkt; 149 150 if (pendingCount == 0 && drainEvent) { --- 53 unchanged lines hidden (view full) --- 204 inRetry = true; 205 DPRINTF(DMA, "-- Failed, queued\n"); 206 } 207 } while (!backoffTime && result && transmitList.size()); 208 209 if (transmitList.size() && backoffTime && !inRetry) { 210 DPRINTF(DMA, "Scheduling backoff for %d\n", curTick+backoffTime); 211 if (!backoffEvent.scheduled()) |
212 backoffEvent.schedule(backoffTime+curTick); | 212 schedule(backoffEvent, backoffTime + curTick); |
213 } 214 DPRINTF(DMA, "TransmitList: %d, backoffTime: %d inRetry: %d es: %d\n", 215 transmitList.size(), backoffTime, inRetry, 216 backoffEvent.scheduled()); 217} 218 219 220void --- 71 unchanged lines hidden (view full) --- 292 DPRINTF(DMA, "-- Failed: queued\n"); 293 } 294 } while (result && !backoffTime && transmitList.size()); 295 296 if (transmitList.size() && backoffTime && !inRetry && 297 !backoffEvent.scheduled()) { 298 DPRINTF(DMA, "-- Scheduling backoff timer for %d\n", 299 backoffTime+curTick); | 213 } 214 DPRINTF(DMA, "TransmitList: %d, backoffTime: %d inRetry: %d es: %d\n", 215 transmitList.size(), backoffTime, inRetry, 216 backoffEvent.scheduled()); 217} 218 219 220void --- 71 unchanged lines hidden (view full) --- 292 DPRINTF(DMA, "-- Failed: queued\n"); 293 } 294 } while (result && !backoffTime && transmitList.size()); 295 296 if (transmitList.size() && backoffTime && !inRetry && 297 !backoffEvent.scheduled()) { 298 DPRINTF(DMA, "-- Scheduling backoff timer for %d\n", 299 backoffTime+curTick); |
300 backoffEvent.schedule(backoffTime+curTick); | 300 schedule(backoffEvent, backoffTime + curTick); |
301 } 302 } else if (state == Enums::atomic) { 303 transmitList.pop_front(); 304 305 Tick lat; 306 DPRINTF(DMA, "--Sending DMA for addr: %#x size: %d\n", 307 pkt->req->getPaddr(), pkt->req->getSize()); 308 lat = sendAtomic(pkt); 309 assert(pkt->senderState); 310 DmaReqState *state = dynamic_cast<DmaReqState*>(pkt->senderState); 311 assert(state); 312 state->numBytes += pkt->req->getSize(); 313 314 DPRINTF(DMA, "--Received response for DMA for addr: %#x size: %d nb: %d, tot: %d sched %d\n", 315 pkt->req->getPaddr(), pkt->req->getSize(), state->numBytes, 316 state->totBytes, state->completionEvent->scheduled()); 317 318 if (state->totBytes == state->numBytes) { 319 assert(!state->completionEvent->scheduled()); | 301 } 302 } else if (state == Enums::atomic) { 303 transmitList.pop_front(); 304 305 Tick lat; 306 DPRINTF(DMA, "--Sending DMA for addr: %#x size: %d\n", 307 pkt->req->getPaddr(), pkt->req->getSize()); 308 lat = sendAtomic(pkt); 309 assert(pkt->senderState); 310 DmaReqState *state = dynamic_cast<DmaReqState*>(pkt->senderState); 311 assert(state); 312 state->numBytes += pkt->req->getSize(); 313 314 DPRINTF(DMA, "--Received response for DMA for addr: %#x size: %d nb: %d, tot: %d sched %d\n", 315 pkt->req->getPaddr(), pkt->req->getSize(), state->numBytes, 316 state->totBytes, state->completionEvent->scheduled()); 317 318 if (state->totBytes == state->numBytes) { 319 assert(!state->completionEvent->scheduled()); |
320 state->completionEvent->schedule(curTick + lat + state->delay); | 320 schedule(state->completionEvent, curTick + lat + state->delay); |
321 delete state; 322 delete pkt->req; 323 } 324 pendingCount--; 325 assert(pendingCount >= 0); 326 delete pkt; 327 328 if (pendingCount == 0 && drainEvent) { --- 13 unchanged lines hidden --- | 321 delete state; 322 delete pkt->req; 323 } 324 pendingCount--; 325 assert(pendingCount >= 0); 326 delete pkt; 327 328 if (pendingCount == 0 && drainEvent) { --- 13 unchanged lines hidden --- |