Deleted Added
sdiff udiff text old ( 10024:fc10e1f9f124 ) new ( 10621:b7bc5b1084a4 )
full compact
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

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

147
148void
149DmaPort::recvRetry()
150{
151 assert(transmitList.size());
152 trySendTimingReq();
153}
154
155void
156DmaPort::dmaAction(Packet::Command cmd, Addr addr, int size, Event *event,
157 uint8_t *data, Tick delay, Request::Flags flag)
158{
159 // one DMA request sender state for every action, that is then
160 // split into many requests and packets based on the block size,
161 // i.e. cache line size
162 DmaReqState *reqState = new DmaReqState(event, size, delay);
163
164 DPRINTF(DMA, "Starting DMA for addr: %#x size: %d sched: %d\n", addr, size,
165 event ? event->scheduled() : -1);
166 for (ChunkGenerator gen(addr, size, sys->cacheLineSize());
167 !gen.done(); gen.next()) {
168 Request *req = new Request(gen.addr(), gen.size(), flag, masterId);
169 req->taskId(ContextSwitchTaskId::DMA);
170 PacketPtr pkt = new Packet(req, cmd);
171
172 // Increment the data pointer on a write
173 if (data)
174 pkt->dataStatic(data + gen.complete());
175
176 pkt->senderState = reqState;
177
178 DPRINTF(DMA, "--Queuing DMA for addr: %#x size: %d\n", gen.addr(),
179 gen.size());
180 queueDma(pkt);
181 }
182
183 // in zero time also initiate the sending of the packets we have
184 // just created, for atomic this involves actually completing all
185 // the requests
186 sendDma();
187}
188
189void
190DmaPort::queueDma(PacketPtr pkt)
191{
192 transmitList.push_back(pkt);
193
194 // remember that we have another packet pending, this will only be

--- 74 unchanged lines hidden ---