gem5 v24.0.0.0
Loading...
Searching...
No Matches
RubyRequest.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2019,2021 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
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Copyright (c) 2011 Mark D. Hill and David A. Wood
15 * All rights reserved.
16 *
17 * Redistribution and use in source and binary forms, with or without
18 * modification, are permitted provided that the following conditions are
19 * met: redistributions of source code must retain the above copyright
20 * notice, this list of conditions and the following disclaimer;
21 * redistributions in binary form must reproduce the above copyright
22 * notice, this list of conditions and the following disclaimer in the
23 * documentation and/or other materials provided with the distribution;
24 * neither the name of the copyright holders nor the names of its
25 * contributors may be used to endorse or promote products derived from
26 * this software without specific prior written permission.
27 *
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 */
40
42
43#include <iostream>
44
46
47namespace gem5
48{
49
50namespace ruby
51{
52
53void
54RubyRequest::print(std::ostream& out) const
55{
56 out << "[RubyRequest: ";
57 out << std::hex << "LineAddress = 0x" << m_LineAddress << std::dec << " ";
58 out << std::hex << "PhysicalAddress = 0x" << m_PhysicalAddress;
59 out << std::dec << " " << "Type = " << m_Type << " ";
60 out << std::hex << "ProgramCounter = 0x" << m_ProgramCounter << std::dec;
61 out << " " << "AccessMode = " << m_AccessMode << " ";
62 out << "Size = " << m_Size << " ";
63 out << "Prefetch = " << m_Prefetch << " ";
64 out << "isGLCSet = " << m_isGLCSet << "";
65 out << "isSLCSet = " << m_isSLCSet << "";
66 // out << "Time = " << getTime() << " ";
67 out << "]";
68}
69
70bool
72{
73 // This needs a little explanation. Initially I thought that this
74 // message should be read. But the way the memtester works for now,
75 // we should not be reading this message as memtester updates the
76 // functional memory only after a write has actually taken place.
77 return false;
78}
79
80bool
82{
83 return false;
84}
85
86bool
88{
89 // This needs a little explanation. I am not sure if this message
90 // should be written. Essentially the question is how are writes
91 // ordered. I am assuming that if a functional write is issued after
92 // a timing write to the same address, then the functional write
93 // has to overwrite the data for the timing request, even if the
94 // timing request has still not been ordered globally.
95
96 if (!pkt->hasData() || !m_pkt->hasData())
97 return false;
98
99 uint8_t *data = m_pkt->getPtr<uint8_t>();
100
101 if (pkt->isMaskedWrite() || m_pkt->isMaskedWrite()) {
102 warn("Skiping functional write to/from a masked write packet"
103 " (addr: %#x, other addr: %#x).\n", m_PhysicalAddress,
104 pkt->getAddr());
105 return false;
106 }
107
108 Addr wBase = pkt->getAddr();
109 Addr wTail = wBase + pkt->getSize();
110 Addr mBase = m_PhysicalAddress;
111 Addr mTail = mBase + m_Size;
112
113 const uint8_t * pktData = pkt->getConstPtr<uint8_t>();
114
115 Addr cBase = std::max(wBase, mBase);
116 Addr cTail = std::min(wTail, mTail);
117
118 for (Addr i = cBase; i < cTail; ++i) {
119 data[i - mBase] = pktData[i - wBase];
120 }
121
122 // also overwrite the WTData
124
125 return cBase < cTail;
126}
127
128void
135
136
137} // namespace ruby
138} // namespace gem5
const char data[]
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition packet.hh:295
Addr getAddr() const
Definition packet.hh:807
bool hasData() const
Definition packet.hh:614
T * getPtr()
get a pointer to the data ptr.
Definition packet.hh:1225
unsigned getSize() const
Definition packet.hh:817
const T * getConstPtr() const
Definition packet.hh:1234
bool isMaskedWrite() const
Definition packet.hh:1450
void setWriteMask(uint32_t offset, uint32_t len, std::vector< std::pair< int, AtomicOpFunctor * > > atomicOps)
RubyRequestType m_Type
bool functionalWrite(Packet *pkt)
void print(std::ostream &out) const
bool functionalRead(Packet *pkt)
The two functions below are used for reading / writing the message functionally.
RubyAccessMode m_AccessMode
void setMask(int offset, int len, bool val=true)
Definition WriteMask.hh:95
void setAtomicOps(const AtomicOpVector &atomicOps)
Definition WriteMask.hh:243
STL pair class.
Definition stl.hh:58
STL vector class.
Definition stl.hh:37
#define warn(...)
Definition logging.hh:256
Bitfield< 3, 0 > mask
Definition pcstate.hh:63
Bitfield< 18, 16 > len
Bitfield< 7 > i
Definition misc_types.hh:67
Bitfield< 23, 0 > offset
Definition types.hh:144
bool testAndWrite(Addr addr, DataBlock &blk, Packet *pkt)
This function accepts an address, a data block and a packet.
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition types.hh:147

Generated on Tue Jun 18 2024 16:24:05 for gem5 by doxygen 1.11.0