18 #ifndef __PASSTHROUGH_TARGET_SOCKET_H__
19 #define __PASSTHROUGH_TARGET_SOCKET_H__
26 template <
typename MODULE,
27 unsigned int BUSWIDTH = 32,
43 m_process(this->name())
50 m_process(this->name())
63 m_process.set_nb_transport_ptr(mod, cb);
70 m_process.set_b_transport_ptr(mod, cb);
76 m_process.set_transport_dbg_ptr(mod, cb);
83 m_process.set_get_direct_mem_ptr(mod, cb);
99 process(
const std::string& name) :
102 m_nb_transport_ptr(0),
103 m_b_transport_ptr(0),
104 m_transport_dbg_ptr(0),
105 m_get_direct_mem_ptr(0)
109 void set_nb_transport_ptr(MODULE* mod, NBTransportPtr p)
111 if (m_nb_transport_ptr) {
113 s << m_name <<
": non-blocking callback allready registered";
117 assert(!m_mod || m_mod == mod);
119 m_nb_transport_ptr = p;
123 void set_b_transport_ptr(MODULE* mod, BTransportPtr p)
125 if (m_b_transport_ptr) {
127 s << m_name <<
": blocking callback allready registered";
130 assert(!m_mod || m_mod == mod);
132 m_b_transport_ptr = p;
136 void set_transport_dbg_ptr(MODULE* mod, TransportDbgPtr p)
138 if (m_transport_dbg_ptr) {
140 s << m_name <<
": debug callback allready registered";
143 assert(!m_mod || m_mod == mod);
145 m_transport_dbg_ptr = p;
149 void set_get_direct_mem_ptr(MODULE* mod, GetDirectMem_ptr p)
151 if (m_get_direct_mem_ptr) {
153 s << m_name <<
": get DMI pointer callback allready registered";
156 assert(!m_mod || m_mod == mod);
158 m_get_direct_mem_ptr = p;
166 if (m_nb_transport_ptr) {
169 return (m_mod->*m_nb_transport_ptr)(trans, phase, t);
173 s << m_name <<
": no non-blocking callback registered";
181 if (m_b_transport_ptr) {
184 return (m_mod->*m_b_transport_ptr)(trans, t);
188 s << m_name <<
": no blocking callback registered";
195 if (m_transport_dbg_ptr) {
198 return (m_mod->*m_transport_dbg_ptr)(trans);
209 if (m_get_direct_mem_ptr) {
212 return (m_mod->*m_get_direct_mem_ptr)(trans, dmi_data);
224 const std::string m_name;
226 NBTransportPtr m_nb_transport_ptr;
227 BTransportPtr m_b_transport_ptr;
228 TransportDbgPtr m_transport_dbg_ptr;
229 GetDirectMem_ptr m_get_direct_mem_ptr;
237 template <
typename MODULE,
238 unsigned int BUSWIDTH = 32,
254 m_process(this->name())
261 m_process(this->name())
276 m_process.set_nb_transport_ptr(mod, cb);
277 m_process.set_nb_transport_user_id(
id);
281 void (MODULE::*cb)(
int id,
286 m_process.set_b_transport_ptr(mod, cb);
287 m_process.set_b_transport_user_id(
id);
291 unsigned int (MODULE::*cb)(
int id,
295 m_process.set_transport_dbg_ptr(mod, cb);
296 m_process.set_transport_dbg_user_id(
id);
300 bool (MODULE::*cb)(
int id,
305 m_process.set_get_direct_mem_ptr(mod, cb);
306 m_process.set_get_dmi_user_id(
id);
317 typedef void (MODULE::*BTransportPtr)(
int id,
320 typedef unsigned int (MODULE::*TransportDbgPtr)(
int id,
322 typedef bool (MODULE::*GetDirectMem_ptr)(
int id,
326 process(
const std::string& name) :
329 m_nb_transport_ptr(0),
330 m_b_transport_ptr(0),
331 m_transport_dbg_ptr(0),
332 m_get_direct_mem_ptr(0),
333 m_nb_transport_user_id(0),
334 m_b_transport_user_id(0),
335 m_transport_dbg_user_id(0),
340 void set_nb_transport_user_id(
int id) { m_nb_transport_user_id = id; }
341 void set_b_transport_user_id(
int id) { m_b_transport_user_id = id; }
342 void set_transport_dbg_user_id(
int id) { m_transport_dbg_user_id = id; }
343 void set_get_dmi_user_id(
int id) { m_get_dmi_user_id = id; }
345 void set_nb_transport_ptr(MODULE* mod, NBTransportPtr p)
347 if (m_nb_transport_ptr) {
349 s << m_name <<
": non-blocking callback allready registered";
352 assert(!m_mod || m_mod == mod);
354 m_nb_transport_ptr = p;
358 void set_b_transport_ptr(MODULE* mod, BTransportPtr p)
360 if (m_b_transport_ptr) {
362 s << m_name <<
": blocking callback allready registered";
365 assert(!m_mod || m_mod == mod);
367 m_b_transport_ptr = p;
371 void set_transport_dbg_ptr(MODULE* mod, TransportDbgPtr p)
373 if (m_transport_dbg_ptr) {
375 s << m_name <<
": debug callback allready registered";
378 assert(!m_mod || m_mod == mod);
380 m_transport_dbg_ptr = p;
384 void set_get_direct_mem_ptr(MODULE* mod, GetDirectMem_ptr p)
386 if (m_get_direct_mem_ptr) {
388 s << m_name <<
": get DMI pointer callback allready registered";
391 assert(!m_mod || m_mod == mod);
393 m_get_direct_mem_ptr = p;
401 if (m_nb_transport_ptr) {
404 return (m_mod->*m_nb_transport_ptr)(m_nb_transport_user_id, trans, phase, t);
408 s << m_name <<
": no non-blocking callback registered";
416 if (m_b_transport_ptr) {
419 return (m_mod->*m_b_transport_ptr)(m_b_transport_user_id, trans, t);
423 s << m_name <<
": no blocking callback registered";
430 if (m_transport_dbg_ptr) {
433 return (m_mod->*m_transport_dbg_ptr)(m_transport_dbg_user_id, trans);
444 if (m_get_direct_mem_ptr) {
447 return (m_mod->*m_get_direct_mem_ptr)(m_get_dmi_user_id, trans, dmi_data);
459 const std::string m_name;
461 NBTransportPtr m_nb_transport_ptr;
462 BTransportPtr m_b_transport_ptr;
463 TransportDbgPtr m_transport_dbg_ptr;
464 GetDirectMem_ptr m_get_direct_mem_ptr;
465 int m_nb_transport_user_id;
466 int m_b_transport_user_id;
467 int m_transport_dbg_user_id;
468 int m_get_dmi_user_id;
tlm::tlm_fw_transport_if< TYPES > fw_interface_type
TYPES::tlm_phase_type phase_type
void register_b_transport(MODULE *mod, void(MODULE::*cb)(int id, transaction_type &, sc_core::sc_time &), int id)
void set_end_address(sc_dt::uint64 addr)
void register_b_transport(MODULE *mod, void(MODULE::*cb)(transaction_type &, sc_core::sc_time &))
void register_nb_transport_fw(MODULE *mod, sync_enum_type(MODULE::*cb)(int id, transaction_type &, phase_type &, sc_core::sc_time &), int id)
tlm::tlm_sync_enum sync_enum_type
#define SC_REPORT_WARNING(msg_type, msg)
void register_get_direct_mem_ptr(MODULE *mod, bool(MODULE::*cb)(transaction_type &, tlm::tlm_dmi &))
TYPES::tlm_payload_type transaction_type
tlm::tlm_bw_transport_if< TYPES > bw_interface_type
tlm::tlm_target_socket< BUSWIDTH, TYPES > base_type
void register_transport_dbg(MODULE *mod, unsigned int(MODULE::*cb)(int id, transaction_type &), int id)
void set_start_address(sc_dt::uint64 addr)
tlm::tlm_sync_enum sync_enum_type
const char * sc_gen_unique_name(const char *, bool preserve_first)
TYPES::tlm_payload_type transaction_type
passthrough_target_socket(const char *n)
tlm::tlm_target_socket< BUSWIDTH, TYPES > base_type
void allow_read_write(void)
void register_get_direct_mem_ptr(MODULE *mod, bool(MODULE::*cb)(int id, transaction_type &, tlm::tlm_dmi &), int id)
virtual void bind(base_initiator_socket_type &s)
#define SC_REPORT_ERROR(msg_type, msg)
passthrough_target_socket_tagged()
passthrough_target_socket()
TYPES::tlm_phase_type phase_type
passthrough_target_socket_tagged(const char *n)
void register_nb_transport_fw(MODULE *mod, sync_enum_type(MODULE::*cb)(transaction_type &, phase_type &, sc_core::sc_time &))
void register_transport_dbg(MODULE *mod, unsigned int(MODULE::*cb)(transaction_type &))
tlm::tlm_bw_transport_if< TYPES > bw_interface_type
tlm::tlm_fw_transport_if< TYPES > fw_interface_type