31 #include "params/AmbaToTlmBridge64.hh"
32 #include "pv/FarAtomicService.h"
33 #include "pv_userpayload_extension.h"
47 uint8_t dummy_buffer[64] = {};
49 struct FarAtomicOpFunctor :
public AtomicOpFunctor
51 FarAtomicOpFunctor(far_atomic::FarAtomic *_fa) :
fa(_fa) {}
54 operator() (uint8_t *
p)
override
56 fa->serviceWasFound();
57 fa->doAtomicOperation(
p);
63 return new FarAtomicOpFunctor(*
this);
66 far_atomic::FarAtomic *
fa;
76 amba_pv::amba_pv_to_tlm_bridge<64>(
name),
77 targetProxy(
"target_proxy"),
78 initiatorProxy(
"initiator_proxy"),
79 tlmWrapper(initiatorProxy,
std::string(
name) +
".tlm", -1),
80 ambaWrapper(amba_pv_s,
std::string(
name) +
".amba", -1)
96 else if (if_name ==
"amba")
99 return amba_pv::amba_pv_to_tlm_bridge<64>::gem5_getPort(if_name, idx);
128 targetProxy->invalidate_direct_mem_ptr(start_range, end_range);
133 amba_pv::amba_pv_transaction &trans)
136 trans.get_extension(atomic_ex);
140 pv_userpayload_extension *user_ex =
nullptr;
141 trans.get_extension(user_ex);
145 pv::UserPayloadBase *upb = user_ex->get_user_payload();
146 uint32_t appid = upb->get_appID();
147 if (appid != pv::UserPayloadBase::SERVICE_REQUEST)
151 far_atomic::FarAtomic *
fa =
static_cast<far_atomic::FarAtomic *
>(
157 fa->getDataValueSizeInBytes() >
sizeof(dummy_buffer),
158 "atomic operation(%d) is larger than dummy buffer(%d)",
159 fa->getDataValueSizeInBytes(),
sizeof(dummy_buffer));
160 trans.set_data_length(
fa->getDataValueSizeInBytes());
161 trans.set_data_ptr(dummy_buffer);
166 std::make_shared<FarAtomicOpFunctor>(
fa),
false);
168 trans.set_auto_extension(atomic_ex);
170 trans.set_extension(atomic_ex);
177 trans.get_extension(control_ex);
182 amba_pv::amba_pv_extension *amba_ex =
nullptr;
183 trans.get_extension(amba_ex);
191 control_ex->
setSecure(!amba_ex->is_non_secure());
194 if (trans.has_mm()) {
195 trans.set_auto_extension(control_ex);
197 trans.set_extension(control_ex);
204 AmbaToTlmBridge64Params::create()
const
far_atomic::FarAtomic * fa
void setPrivileged(bool p)
void setInstruction(bool i)
Ports are used to interface objects to each other.
tlm_utils::simple_target_socket< AmbaToTlmBridge64, 64, tlm::tlm_base_protocol_types > targetProxy
void setupControlExtension(amba_pv::amba_pv_transaction &trans)
gem5::Port & gem5_getPort(const std::string &if_name, int idx=-1) override
tlm_utils::simple_initiator_socket< AmbaToTlmBridge64, 64, tlm::tlm_base_protocol_types > initiatorProxy
unsigned int transportDbg(amba_pv::amba_pv_transaction &trans)
sc_gem5::TlmInitiatorWrapper< 64 > tlmWrapper
void bTransport(amba_pv::amba_pv_transaction &trans, sc_core::sc_time &t)
void maybeSetupAtomicExtension(amba_pv::amba_pv_transaction &trans)
bool getDirectMemPtr(amba_pv::amba_pv_transaction &trans, tlm::tlm_dmi &dmi_data)
AmbaToTlmBridge64(const sc_core::sc_module_name &name)
void invalidateDirectMemPtr(sc_dt::uint64 start_range, sc_dt::uint64 end_range)
#define fatal_if(cond,...)
Conditional fatal macro that checks the supplied condition and only causes a fatal error if the condi...
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
GEM5_DEPRECATED_NAMESPACE(GuestABI, guest_abi)
Overload hash function for BasicBlockRange type.
const std::string & name()