dma_device.cc (9307:98e05d58f9eb) | dma_device.cc (9342:6fec8f26e56d) |
---|---|
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 --- 37 unchanged lines hidden (view full) --- 46#include "debug/DMA.hh" 47#include "debug/Drain.hh" 48#include "dev/dma_device.hh" 49#include "sim/system.hh" 50 51DmaPort::DmaPort(MemObject *dev, System *s) 52 : MasterPort(dev->name() + ".dma", dev), device(dev), sendEvent(this), 53 sys(s), masterId(s->getMasterId(dev->name())), | 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 --- 37 unchanged lines hidden (view full) --- 46#include "debug/DMA.hh" 47#include "debug/Drain.hh" 48#include "dev/dma_device.hh" 49#include "sim/system.hh" 50 51DmaPort::DmaPort(MemObject *dev, System *s) 52 : MasterPort(dev->name() + ".dma", dev), device(dev), sendEvent(this), 53 sys(s), masterId(s->getMasterId(dev->name())), |
54 pendingCount(0), drainEvent(NULL), | 54 pendingCount(0), drainManager(NULL), |
55 inRetry(false) 56{ } 57 58void 59DmaPort::handleResp(PacketPtr pkt, Tick delay) 60{ 61 // should always see a response with a sender state 62 assert(pkt->isResponse()); --- 30 unchanged lines hidden (view full) --- 93 delete state; 94 } 95 96 // delete the request that we created and also the packet 97 delete pkt->req; 98 delete pkt; 99 100 // we might be drained at this point, if so signal the drain event | 55 inRetry(false) 56{ } 57 58void 59DmaPort::handleResp(PacketPtr pkt, Tick delay) 60{ 61 // should always see a response with a sender state 62 assert(pkt->isResponse()); --- 30 unchanged lines hidden (view full) --- 93 delete state; 94 } 95 96 // delete the request that we created and also the packet 97 delete pkt->req; 98 delete pkt; 99 100 // we might be drained at this point, if so signal the drain event |
101 if (pendingCount == 0 && drainEvent) { 102 drainEvent->process(); 103 drainEvent = NULL; | 101 if (pendingCount == 0 && drainManager) { 102 drainManager->signalDrainDone(); 103 drainManager = NULL; |
104 } 105} 106 107bool 108DmaPort::recvTimingResp(PacketPtr pkt) 109{ 110 // We shouldn't ever get a block in ownership state 111 assert(!(pkt->memInhibitAsserted() && !pkt->sharedAsserted())); --- 11 unchanged lines hidden (view full) --- 123DmaDevice::init() 124{ 125 if (!dmaPort.isConnected()) 126 panic("DMA port of %s not connected to anything!", name()); 127 PioDevice::init(); 128} 129 130unsigned int | 104 } 105} 106 107bool 108DmaPort::recvTimingResp(PacketPtr pkt) 109{ 110 // We shouldn't ever get a block in ownership state 111 assert(!(pkt->memInhibitAsserted() && !pkt->sharedAsserted())); --- 11 unchanged lines hidden (view full) --- 123DmaDevice::init() 124{ 125 if (!dmaPort.isConnected()) 126 panic("DMA port of %s not connected to anything!", name()); 127 PioDevice::init(); 128} 129 130unsigned int |
131DmaDevice::drain(Event *de) | 131DmaDevice::drain(DrainManager *dm) |
132{ | 132{ |
133 unsigned int count = pioPort.drain(de) + dmaPort.drain(de); | 133 unsigned int count = pioPort.drain(dm) + dmaPort.drain(dm); |
134 if (count) | 134 if (count) |
135 changeState(Draining); | 135 setDrainState(Drainable::Draining); |
136 else | 136 else |
137 changeState(Drained); | 137 setDrainState(Drainable::Drained); |
138 return count; 139} 140 141unsigned int | 138 return count; 139} 140 141unsigned int |
142DmaPort::drain(Event *de) | 142DmaPort::drain(DrainManager *dm) |
143{ 144 if (pendingCount == 0) 145 return 0; | 143{ 144 if (pendingCount == 0) 145 return 0; |
146 drainEvent = de; | 146 drainManager = dm; |
147 DPRINTF(Drain, "DmaPort not drained\n"); 148 return 1; 149} 150 151void 152DmaPort::recvRetry() 153{ 154 assert(transmitList.size()); --- 117 unchanged lines hidden --- | 147 DPRINTF(Drain, "DmaPort not drained\n"); 148 return 1; 149} 150 151void 152DmaPort::recvRetry() 153{ 154 assert(transmitList.size()); --- 117 unchanged lines hidden --- |