port_proxy.cc (14008:e36048ba1c2c) port_proxy.cc (14009:a4b36ce75361)
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

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

38 */
39
40#include "mem/port_proxy.hh"
41
42#include "base/chunk_generator.hh"
43
44void
45PortProxy::readBlobPhys(Addr addr, Request::Flags flags,
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

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

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
46 void *p, int size) const
47{
48 for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done();
49 gen.next()) {
50
51 auto req = std::make_shared<Request>(
52 gen.addr(), gen.size(), flags, Request::funcMasterId);
53
54 Packet pkt(req, MemCmd::ReadReq);
47{
48 for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done();
49 gen.next()) {
50
51 auto req = std::make_shared<Request>(
52 gen.addr(), gen.size(), flags, Request::funcMasterId);
53
54 Packet pkt(req, MemCmd::ReadReq);
55 pkt.dataStatic(p);
55 pkt.dataStatic(static_cast<uint8_t *>(p));
56 _port.sendFunctional(&pkt);
56 _port.sendFunctional(&pkt);
57 p += gen.size();
57 p = static_cast<uint8_t *>(p) + gen.size();
58 }
59}
60
61void
62PortProxy::writeBlobPhys(Addr addr, Request::Flags flags,
58 }
59}
60
61void
62PortProxy::writeBlobPhys(Addr addr, Request::Flags flags,
63 const uint8_t *p, int size) const
63 const void *p, int size) const
64{
65 for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done();
66 gen.next()) {
67
68 auto req = std::make_shared<Request>(
69 gen.addr(), gen.size(), flags, Request::funcMasterId);
70
71 Packet pkt(req, MemCmd::WriteReq);
64{
65 for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done();
66 gen.next()) {
67
68 auto req = std::make_shared<Request>(
69 gen.addr(), gen.size(), flags, Request::funcMasterId);
70
71 Packet pkt(req, MemCmd::WriteReq);
72 pkt.dataStaticConst(p);
72 pkt.dataStaticConst(static_cast<const uint8_t *>(p));
73 _port.sendFunctional(&pkt);
73 _port.sendFunctional(&pkt);
74 p += gen.size();
74 p = static_cast<const uint8_t *>(p) + gen.size();
75 }
76}
77
78void
79PortProxy::memsetBlobPhys(Addr addr, Request::Flags flags,
80 uint8_t v, int size) const
81{
82 // quick and dirty...

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

87
88 delete [] buf;
89}
90
91bool
92PortProxy::tryWriteString(Addr addr, const char *str) const
93{
94 do {
75 }
76}
77
78void
79PortProxy::memsetBlobPhys(Addr addr, Request::Flags flags,
80 uint8_t v, int size) const
81{
82 // quick and dirty...

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

87
88 delete [] buf;
89}
90
91bool
92PortProxy::tryWriteString(Addr addr, const char *str) const
93{
94 do {
95 if (!tryWriteBlob(addr++, (uint8_t *)str, 1))
95 if (!tryWriteBlob(addr++, str, 1))
96 return false;
97 } while (*str++);
98 return true;
99}
100
101bool
102PortProxy::tryReadString(std::string &str, Addr addr) const
103{
104 while (true) {
105 uint8_t c;
106 if (!tryReadBlob(addr++, &c, 1))
107 return false;
108 if (!c)
109 return true;
110 str += c;
111 }
112}
96 return false;
97 } while (*str++);
98 return true;
99}
100
101bool
102PortProxy::tryReadString(std::string &str, Addr addr) const
103{
104 while (true) {
105 uint8_t c;
106 if (!tryReadBlob(addr++, &c, 1))
107 return false;
108 if (!c)
109 return true;
110 str += c;
111 }
112}