Deleted Added
sdiff udiff text old ( 4918:3214e3694fb2 ) new ( 5534:9eaf72819836 )
full compact
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;

--- 124 unchanged lines hidden (view full) ---

133 pendingCount--;
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 state->completionEvent->process();
142 delete state;
143 }
144 delete pkt->req;
145 delete pkt;
146
147 if (pendingCount == 0 && drainEvent) {
148 drainEvent->process();
149 drainEvent = NULL;

--- 61 unchanged lines hidden (view full) ---

211 DPRINTF(DMA, "TransmitList: %d, backoffTime: %d inRetry: %d es: %d\n",
212 transmitList.size(), backoffTime, inRetry,
213 backoffEvent.scheduled());
214}
215
216
217void
218DmaPort::dmaAction(Packet::Command cmd, Addr addr, int size, Event *event,
219 uint8_t *data)
220{
221 assert(event);
222
223 assert(device->getState() == SimObject::Running);
224
225 DmaReqState *reqState = new DmaReqState(event, this, size);
226
227
228 DPRINTF(DMA, "Starting DMA for addr: %#x size: %d sched: %d\n", addr, size,
229 event->scheduled());
230 for (ChunkGenerator gen(addr, size, peerBlockSize());
231 !gen.done(); gen.next()) {
232 Request *req = new Request(gen.addr(), gen.size(), 0);
233 PacketPtr pkt = new Packet(req, cmd, Packet::Broadcast);

--- 75 unchanged lines hidden (view full) ---

309 state->numBytes += pkt->req->getSize();
310
311 DPRINTF(DMA, "--Received response for DMA for addr: %#x size: %d nb: %d, tot: %d sched %d\n",
312 pkt->req->getPaddr(), pkt->req->getSize(), state->numBytes,
313 state->totBytes, state->completionEvent->scheduled());
314
315 if (state->totBytes == state->numBytes) {
316 assert(!state->completionEvent->scheduled());
317 state->completionEvent->schedule(curTick + lat);
318 delete state;
319 delete pkt->req;
320 }
321 pendingCount--;
322 assert(pendingCount >= 0);
323 delete pkt;
324
325 if (pendingCount == 0 && drainEvent) {

--- 13 unchanged lines hidden ---