Go to the documentation of this file.
41 #ifndef __ARCH_GENERIC_MEMHELPERS_HH__
42 #define __ARCH_GENERIC_MEMHELPERS_HH__
59 return xc->initiateMemRead(
addr, size,
flags, byte_enable);
65 template <
class XC,
class MemT>
76 template <ByteOrder Order,
class MemT>
80 mem = pkt->
get<MemT>(Order);
89 getMem<ByteOrder::little>(pkt,
mem, traceData);
96 getMem<ByteOrder::big>(pkt,
mem, traceData);
106 return xc->readMem(
addr,
mem, size,
flags, byte_enable);
110 template <ByteOrder Order,
class XC,
class MemT>
115 memset(&
mem, 0,
sizeof(
mem));
118 sizeof(MemT),
flags, byte_enable);
127 template <
class XC,
class MemT>
132 return readMemAtomic<ByteOrder::little>(
136 template <
class XC,
class MemT>
141 return readMemAtomic<ByteOrder::big>(xc, traceData,
addr,
mem,
flags);
151 return xc->writeMem(
mem, size,
addr,
flags, res, byte_enable);
154 template <ByteOrder Order,
class XC,
class MemT>
165 sizeof(MemT),
flags, res, byte_enable);
168 template <
class XC,
class MemT>
173 return writeMemTiming<ByteOrder::little>(
177 template <
class XC,
class MemT>
182 return writeMemTiming<ByteOrder::big>(
193 return xc->writeMem(
mem, size,
addr,
flags, res, byte_enable);
196 template <ByteOrder Order,
class XC,
class MemT>
204 MemT host_mem =
htog(
mem, Order);
207 addr,
sizeof(MemT),
flags, res, byte_enable);
208 if (fault ==
NoFault && res != NULL) {
210 *(MemT *)res =
gtoh(*(MemT *)res, Order);
212 *res =
gtoh(*res, Order);
217 template <
class XC,
class MemT>
222 return writeMemAtomic<ByteOrder::little>(
226 template <
class XC,
class MemT>
231 return writeMemAtomic<ByteOrder::big>(
236 template <ByteOrder Order,
class XC,
class MemT>
244 memset(&
mem, 0,
sizeof(
mem));
258 template <
class XC,
class MemT>
263 return amoMemAtomic<ByteOrder::little>(
267 template <
class XC,
class MemT>
272 return amoMemAtomic<ByteOrder::big>(
277 template <
class XC,
class MemT>
284 return xc->initiateMemAMO(
addr,
sizeof(MemT),
flags, std::move(amo_op));
constexpr decltype(nullptr) NoFault
Fault initiateMemRead(XC *xc, Addr addr, std::size_t size, Request::Flags flags, const std::vector< bool > &byte_enable)
void getMemBE(PacketPtr pkt, MemT &mem, trace::InstRecord *traceData)
Fault readMemAtomic(XC *xc, Addr addr, uint8_t *mem, std::size_t size, Request::Flags flags, const std::vector< bool > &byte_enable)
Read from memory in atomic mode.
Fault readMemAtomicBE(XC *xc, trace::InstRecord *traceData, Addr addr, MemT &mem, Request::Flags flags)
Fault initiateMemAMO(XC *xc, trace::InstRecord *traceData, Addr addr, MemT &mem, Request::Flags flags, AtomicOpFunctor *_amo_op)
Do atomic read-modify-wrote (AMO) in timing mode.
Fault writeMemAtomicBE(XC *xc, trace::InstRecord *traceData, const MemT &mem, Addr addr, Request::Flags flags, uint64_t *res)
Fault writeMemAtomicLE(XC *xc, trace::InstRecord *traceData, const MemT &mem, Addr addr, Request::Flags flags, uint64_t *res)
void setData(std::array< T, N > d)
Fault writeMemAtomic(XC *xc, uint8_t *mem, Addr addr, std::size_t size, Request::Flags flags, uint64_t *res, const std::vector< bool > &byte_enable)
Write to memory in atomic mode.
Fault readMemAtomicLE(XC *xc, trace::InstRecord *traceData, Addr addr, MemT &mem, Request::Flags flags)
Fault writeMemTimingBE(XC *xc, trace::InstRecord *traceData, MemT mem, Addr addr, Request::Flags flags, uint64_t *res)
std::shared_ptr< FaultBase > Fault
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
T gtoh(T value, ByteOrder guest_byte_order)
T htog(T value, ByteOrder guest_byte_order)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
void getMem(PacketPtr pkt, MemT &mem, trace::InstRecord *traceData)
Extract the data returned from a timing mode read.
@ MEM_SWAP
This request is for a memory swap.
T get(ByteOrder endian) const
Get the data in the packet byte swapped from the specified endianness.
Fault amoMemAtomicBE(XC *xc, trace::InstRecord *traceData, MemT &mem, Addr addr, Request::Flags flags, AtomicOpFunctor *_amo_op)
Fault amoMemAtomicLE(XC *xc, trace::InstRecord *traceData, MemT &mem, Addr addr, Request::Flags flags, AtomicOpFunctor *_amo_op)
Fault writeMemTimingLE(XC *xc, trace::InstRecord *traceData, MemT mem, Addr addr, Request::Flags flags, uint64_t *res)
Fault amoMemAtomic(XC *xc, trace::InstRecord *traceData, MemT &mem, Addr addr, Request::Flags flags, AtomicOpFunctor *_amo_op)
Do atomic read-modify-write (AMO) in atomic mode.
std::unique_ptr< AtomicOpFunctor > AtomicOpFunctorPtr
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
void getMemLE(PacketPtr pkt, MemT &mem, trace::InstRecord *traceData)
Fault writeMemTiming(XC *xc, uint8_t *mem, Addr addr, std::size_t size, Request::Flags flags, uint64_t *res, const std::vector< bool > &byte_enable)
Write to memory in timing mode.
Generated on Sun Jul 30 2023 01:56:50 for gem5 by doxygen 1.8.17