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);
127 targetProxy->invalidate_direct_mem_ptr(start_range, end_range);
132 amba_pv::amba_pv_transaction &trans)
135 trans.get_extension(atomic_ex);
139 pv_userpayload_extension *user_ex =
nullptr;
140 trans.get_extension(user_ex);
144 pv::UserPayloadBase *upb = user_ex->get_user_payload();
145 uint32_t appid = upb->get_appID();
146 if (appid != pv::UserPayloadBase::SERVICE_REQUEST)
150 far_atomic::FarAtomic *
fa =
static_cast<far_atomic::FarAtomic *
>(
156 fa->getDataValueSizeInBytes() >
sizeof(dummy_buffer),
157 "atomic operation(%d) is larger than dummy buffer(%d)",
158 fa->getDataValueSizeInBytes(),
sizeof(dummy_buffer));
159 trans.set_data_length(
fa->getDataValueSizeInBytes());
160 trans.set_data_ptr(dummy_buffer);
165 std::make_shared<FarAtomicOpFunctor>(
fa),
false);
167 trans.set_auto_extension(atomic_ex);
169 trans.set_extension(atomic_ex);
175 AmbaToTlmBridge64Params::create()
const