dma_device.hh (13892:0182a0601f66) dma_device.hh (13930:c5e728ccd2e2)
1/*
1/*
2 * Copyright (c) 2012-2013, 2015, 2017 ARM Limited
2 * Copyright (c) 2012-2013, 2015, 2017, 2019 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
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

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

129
130 /** Number of outstanding packets the dma port has. */
131 uint32_t pendingCount;
132
133 /** If the port is currently waiting for a retry before it can
134 * send whatever it is that it's sending. */
135 bool inRetry;
136
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
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

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

129
130 /** Number of outstanding packets the dma port has. */
131 uint32_t pendingCount;
132
133 /** If the port is currently waiting for a retry before it can
134 * send whatever it is that it's sending. */
135 bool inRetry;
136
137 /** Default streamId */
138 const uint32_t defaultSid;
139
140 /** Default substreamId */
141 const uint32_t defaultSSid;
142
137 protected:
138
139 bool recvTimingResp(PacketPtr pkt) override;
140 void recvReqRetry() override;
141
142 void queueDma(PacketPtr pkt);
143
144 public:
145
143 protected:
144
145 bool recvTimingResp(PacketPtr pkt) override;
146 void recvReqRetry() override;
147
148 void queueDma(PacketPtr pkt);
149
150 public:
151
146 DmaPort(ClockedObject *dev, System *s);
152 DmaPort(ClockedObject *dev, System *s,
153 uint32_t sid = 0, uint32_t ssid = 0);
147
154
148 RequestPtr dmaAction(Packet::Command cmd, Addr addr, int size, Event *event,
149 uint8_t *data, Tick delay, Request::Flags flag = 0);
155 RequestPtr
156 dmaAction(Packet::Command cmd, Addr addr, int size, Event *event,
157 uint8_t *data, Tick delay, Request::Flags flag = 0);
150
158
159 RequestPtr
160 dmaAction(Packet::Command cmd, Addr addr, int size, Event *event,
161 uint8_t *data, uint32_t sid, uint32_t ssid, Tick delay,
162 Request::Flags flag = 0);
163
151 bool dmaPending() const { return pendingCount > 0; }
152
153 DrainState drain() override;
154};
155
156class DmaDevice : public PioDevice
157{
158 protected:
159 DmaPort dmaPort;
160
161 public:
162 typedef DmaDeviceParams Params;
163 DmaDevice(const Params *p);
164 virtual ~DmaDevice() { }
165
166 void dmaWrite(Addr addr, int size, Event *event, uint8_t *data,
164 bool dmaPending() const { return pendingCount > 0; }
165
166 DrainState drain() override;
167};
168
169class DmaDevice : public PioDevice
170{
171 protected:
172 DmaPort dmaPort;
173
174 public:
175 typedef DmaDeviceParams Params;
176 DmaDevice(const Params *p);
177 virtual ~DmaDevice() { }
178
179 void dmaWrite(Addr addr, int size, Event *event, uint8_t *data,
180 uint32_t sid, uint32_t ssid, Tick delay = 0)
181 {
182 dmaPort.dmaAction(MemCmd::WriteReq, addr, size, event, data,
183 sid, ssid, delay);
184 }
185
186 void dmaWrite(Addr addr, int size, Event *event, uint8_t *data,
167 Tick delay = 0)
168 {
169 dmaPort.dmaAction(MemCmd::WriteReq, addr, size, event, data, delay);
170 }
171
172 void dmaRead(Addr addr, int size, Event *event, uint8_t *data,
187 Tick delay = 0)
188 {
189 dmaPort.dmaAction(MemCmd::WriteReq, addr, size, event, data, delay);
190 }
191
192 void dmaRead(Addr addr, int size, Event *event, uint8_t *data,
193 uint32_t sid, uint32_t ssid, Tick delay = 0)
194 {
195 dmaPort.dmaAction(MemCmd::ReadReq, addr, size, event, data,
196 sid, ssid, delay);
197 }
198
199 void dmaRead(Addr addr, int size, Event *event, uint8_t *data,
173 Tick delay = 0)
174 {
175 dmaPort.dmaAction(MemCmd::ReadReq, addr, size, event, data, delay);
176 }
177
178 bool dmaPending() const { return dmaPort.dmaPending(); }
179
180 void init() override;

--- 323 unchanged lines hidden ---
200 Tick delay = 0)
201 {
202 dmaPort.dmaAction(MemCmd::ReadReq, addr, size, event, data, delay);
203 }
204
205 bool dmaPending() const { return dmaPort.dmaPending(); }
206
207 void init() override;

--- 323 unchanged lines hidden ---