port_proxy.cc (11793:ef606668d247) port_proxy.cc (12532:a86ce386add1)
1/*
1/*
2 * Copyright (c) 2012 ARM Limited
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
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::readBlob(Addr addr, uint8_t *p, int size) const
45PortProxy::readBlobPhys(Addr addr, Request::Flags flags,
46 uint8_t *p, int size) const
46{
47 for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done();
48 gen.next()) {
47{
48 for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done();
49 gen.next()) {
49 Request req(gen.addr(), gen.size(), 0, Request::funcMasterId);
50 Request req(gen.addr(), gen.size(), flags, Request::funcMasterId);
50 Packet pkt(&req, MemCmd::ReadReq);
51 pkt.dataStatic(p);
52 _port.sendFunctional(&pkt);
53 p += gen.size();
54 }
55}
56
57void
51 Packet pkt(&req, MemCmd::ReadReq);
52 pkt.dataStatic(p);
53 _port.sendFunctional(&pkt);
54 p += gen.size();
55 }
56}
57
58void
58PortProxy::writeBlob(Addr addr, const uint8_t *p, int size) const
59PortProxy::writeBlobPhys(Addr addr, Request::Flags flags,
60 const uint8_t *p, int size) const
59{
60 for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done();
61 gen.next()) {
61{
62 for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done();
63 gen.next()) {
62 Request req(gen.addr(), gen.size(), 0, Request::funcMasterId);
64 Request req(gen.addr(), gen.size(), flags, Request::funcMasterId);
63 Packet pkt(&req, MemCmd::WriteReq);
64 pkt.dataStaticConst(p);
65 _port.sendFunctional(&pkt);
66 p += gen.size();
67 }
68}
69
70void
65 Packet pkt(&req, MemCmd::WriteReq);
66 pkt.dataStaticConst(p);
67 _port.sendFunctional(&pkt);
68 p += gen.size();
69 }
70}
71
72void
71PortProxy::memsetBlob(Addr addr, uint8_t v, int size) const
73PortProxy::memsetBlobPhys(Addr addr, Request::Flags flags,
74 uint8_t v, int size) const
72{
73 // quick and dirty...
74 uint8_t *buf = new uint8_t[size];
75
76 std::memset(buf, v, size);
75{
76 // quick and dirty...
77 uint8_t *buf = new uint8_t[size];
78
79 std::memset(buf, v, size);
77 PortProxy::writeBlob(addr, buf, size);
80 PortProxy::writeBlobPhys(addr, flags, buf, size);
78
79 delete [] buf;
80}
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}