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 ---