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),
81 setStreamId(params.set_stream_id)
97 else if (if_name ==
"amba")
100 return amba_pv::amba_pv_to_tlm_bridge<64>::gem5_getPort(if_name, idx);
129 targetProxy->invalidate_direct_mem_ptr(start_range, end_range);
134 amba_pv::amba_pv_transaction &trans)
137 trans.get_extension(atomic_ex);
141 pv_userpayload_extension *user_ex =
nullptr;
142 trans.get_extension(user_ex);
146 pv::UserPayloadBase *upb = user_ex->get_user_payload();
147 uint32_t appid = upb->get_appID();
148 if (appid != pv::UserPayloadBase::SERVICE_REQUEST)
152 far_atomic::FarAtomic *
fa =
static_cast<far_atomic::FarAtomic *
>(
158 fa->getDataValueSizeInBytes() >
sizeof(dummy_buffer),
159 "atomic operation(%d) is larger than dummy buffer(%d)",
160 fa->getDataValueSizeInBytes(),
sizeof(dummy_buffer));
161 trans.set_data_length(
fa->getDataValueSizeInBytes());
162 trans.set_data_ptr(dummy_buffer);
167 std::make_shared<FarAtomicOpFunctor>(
fa),
false);
169 trans.set_auto_extension(atomic_ex);
171 trans.set_extension(atomic_ex);
178 trans.get_extension(control_ex);
183 amba_pv::amba_pv_extension *amba_ex =
nullptr;
184 trans.get_extension(amba_ex);
192 control_ex->
setSecure(!amba_ex->is_non_secure());
199 if (trans.has_mm()) {
200 trans.set_auto_extension(control_ex);
202 trans.set_extension(control_ex);