diff options
author | Andreas Hansson <andreas.hansson@arm.com> | 2014-12-02 06:07:38 -0500 |
---|---|---|
committer | Andreas Hansson <andreas.hansson@arm.com> | 2014-12-02 06:07:38 -0500 |
commit | 0706a252031b3f160bac65fac00b22f8a5ebf4f9 (patch) | |
tree | 7f34dd2ef0a6d19fa5f5e1e43268d0be9a0963bb /src/mem/port_proxy.cc | |
parent | 9779ba2e37a753df407b976fc4b299d936ea62b8 (diff) | |
download | gem5-0706a252031b3f160bac65fac00b22f8a5ebf4f9.tar.xz |
mem: Use const pointers for port proxy write functions
This patch changes the various write functions in the port proxies
to use const pointers for all sources (similar to how memcpy works).
The one unfortunate aspect is the need for a const_cast in the packet,
to avoid having to juggle a const and a non-const data pointer. This
design decision can always be re-evaluated at a later stage.
Diffstat (limited to 'src/mem/port_proxy.cc')
-rw-r--r-- | src/mem/port_proxy.cc | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/mem/port_proxy.cc b/src/mem/port_proxy.cc index ea6dd0fc2..cce8f6ff4 100644 --- a/src/mem/port_proxy.cc +++ b/src/mem/port_proxy.cc @@ -41,14 +41,14 @@ #include "mem/port_proxy.hh" void -PortProxy::blobHelper(Addr addr, uint8_t *p, int size, MemCmd cmd) const +PortProxy::readBlob(Addr addr, uint8_t *p, int size) const { Request req; - for (ChunkGenerator gen(addr, size, _cacheLineSize); - !gen.done(); gen.next()) { + for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done(); + gen.next()) { req.setPhys(gen.addr(), gen.size(), 0, Request::funcMasterId); - Packet pkt(&req, cmd); + Packet pkt(&req, MemCmd::ReadReq); pkt.dataStatic(p); _port.sendFunctional(&pkt); p += gen.size(); @@ -56,13 +56,28 @@ PortProxy::blobHelper(Addr addr, uint8_t *p, int size, MemCmd cmd) const } void +PortProxy::writeBlob(Addr addr, const uint8_t *p, int size) const +{ + Request req; + + for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done(); + gen.next()) { + req.setPhys(gen.addr(), gen.size(), 0, Request::funcMasterId); + Packet pkt(&req, MemCmd::WriteReq); + pkt.dataStaticConst(p); + _port.sendFunctional(&pkt); + p += gen.size(); + } +} + +void PortProxy::memsetBlob(Addr addr, uint8_t v, int size) const { // quick and dirty... uint8_t *buf = new uint8_t[size]; std::memset(buf, v, size); - blobHelper(addr, buf, size, MemCmd::WriteReq); + PortProxy::writeBlob(addr, buf, size); delete [] buf; } |