1/* |
2 * Copyright (c) 2012, 2018 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 --- 26 unchanged lines hidden (view full) --- 37 * Authors: Andreas Hansson 38 */ 39 40#include "mem/port_proxy.hh" 41 42#include "base/chunk_generator.hh" 43 44void |
45PortProxy::readBlobPhys(Addr addr, Request::Flags flags, 46 uint8_t *p, int size) const |
47{ 48 for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done(); 49 gen.next()) { |
50 Request req(gen.addr(), gen.size(), flags, Request::funcMasterId); |
51 Packet pkt(&req, MemCmd::ReadReq); 52 pkt.dataStatic(p); 53 _port.sendFunctional(&pkt); 54 p += gen.size(); 55 } 56} 57 58void |
59PortProxy::writeBlobPhys(Addr addr, Request::Flags flags, 60 const uint8_t *p, int size) const |
61{ 62 for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done(); 63 gen.next()) { |
64 Request req(gen.addr(), gen.size(), flags, Request::funcMasterId); |
65 Packet pkt(&req, MemCmd::WriteReq); 66 pkt.dataStaticConst(p); 67 _port.sendFunctional(&pkt); 68 p += gen.size(); 69 } 70} 71 72void |
73PortProxy::memsetBlobPhys(Addr addr, Request::Flags flags, 74 uint8_t v, int size) const |
75{ 76 // quick and dirty... 77 uint8_t *buf = new uint8_t[size]; 78 79 std::memset(buf, v, size); |
80 PortProxy::writeBlobPhys(addr, flags, buf, size); |
81 82 delete [] buf; 83} |
84 85 86void 87SecurePortProxy::readBlob(Addr addr, uint8_t *p, int size) const 88{ 89 readBlobPhys(addr, Request::SECURE, p, size); 90} 91 92void 93SecurePortProxy::writeBlob(Addr addr, const uint8_t *p, int size) const 94{ 95 writeBlobPhys(addr, Request::SECURE, p, size); 96} 97 98void 99SecurePortProxy::memsetBlob(Addr addr, uint8_t v, int size) const 100{ 101 memsetBlobPhys(addr, Request::SECURE, v, size); 102} |