20 #ifndef TLM_UTILS_PASSTHROUGH_TARGET_SOCKET_H_INCLUDED_ 21 #define TLM_UTILS_PASSTHROUGH_TARGET_SOCKET_H_INCLUDED_ 28 template<
typename MODULE,
unsigned int BUSWIDTH,
typename TYPES
57 sync_enum_type (MODULE::*cb)(transaction_type&,
61 m_process.set_nb_transport_ptr(mod, cb);
65 void (MODULE::*cb)(transaction_type&,
68 m_process.set_b_transport_ptr(mod, cb);
72 unsigned int (MODULE::*cb)(transaction_type&))
74 m_process.set_transport_dbg_ptr(mod, cb);
78 bool (MODULE::*cb)(transaction_type&,
81 m_process.set_get_direct_mem_ptr(mod, cb);
90 typedef sync_enum_type (MODULE::*NBTransportPtr)(transaction_type&,
93 typedef void (MODULE::*BTransportPtr)(transaction_type&,
95 typedef unsigned int (MODULE::*TransportDbgPtr)(transaction_type&);
96 typedef bool (MODULE::*GetDirectMem_ptr)(transaction_type&,
101 , m_nb_transport_ptr(0)
102 , m_b_transport_ptr(0)
103 , m_transport_dbg_ptr(0)
104 , m_get_direct_mem_ptr(0)
108 void set_nb_transport_ptr(MODULE* mod, NBTransportPtr p)
110 if (m_nb_transport_ptr) {
116 m_nb_transport_ptr = p;
119 void set_b_transport_ptr(MODULE* mod, BTransportPtr p)
121 if (m_b_transport_ptr) {
127 m_b_transport_ptr = p;
130 void set_transport_dbg_ptr(MODULE* mod, TransportDbgPtr p)
132 if (m_transport_dbg_ptr) {
138 m_transport_dbg_ptr = p;
141 void set_get_direct_mem_ptr(MODULE* mod, GetDirectMem_ptr p)
143 if (m_get_direct_mem_ptr) {
149 m_get_direct_mem_ptr = p;
152 sync_enum_type nb_transport_fw(transaction_type& trans,
156 if (m_nb_transport_ptr) {
159 return (m_mod->*m_nb_transport_ptr)(trans, phase, t);
167 if (m_b_transport_ptr) {
170 return (m_mod->*m_b_transport_ptr)(trans, t);
175 unsigned int transport_dbg(transaction_type& trans)
177 if (m_transport_dbg_ptr) {
180 return (m_mod->*m_transport_dbg_ptr)(trans);
186 bool get_direct_mem_ptr(transaction_type& trans,
189 if (m_get_direct_mem_ptr) {
192 return (m_mod->*m_get_direct_mem_ptr)(trans, dmi_data);
203 NBTransportPtr m_nb_transport_ptr;
204 BTransportPtr m_b_transport_ptr;
205 TransportDbgPtr m_transport_dbg_ptr;
206 GetDirectMem_ptr m_get_direct_mem_ptr;
215 template<
typename MODULE,
unsigned int BUSWIDTH = 32
226 template<
typename MODULE,
unsigned int BUSWIDTH = 32
238 template<
typename MODULE,
unsigned int BUSWIDTH,
typename TYPES
267 sync_enum_type (MODULE::*cb)(
int id,
273 m_process.set_nb_transport_ptr(mod, cb);
274 m_process.set_nb_transport_user_id(
id);
278 void (MODULE::*cb)(
int id,
283 m_process.set_b_transport_ptr(mod, cb);
284 m_process.set_b_transport_user_id(
id);
288 unsigned int (MODULE::*cb)(
int id,
292 m_process.set_transport_dbg_ptr(mod, cb);
293 m_process.set_transport_dbg_user_id(
id);
297 bool (MODULE::*cb)(
int id,
302 m_process.set_get_direct_mem_ptr(mod, cb);
303 m_process.set_get_dmi_user_id(
id);
316 typedef void (MODULE::*BTransportPtr)(
int id,
319 typedef unsigned int (MODULE::*TransportDbgPtr)(
int id,
321 typedef bool (MODULE::*GetDirectMem_ptr)(
int id,
327 , m_nb_transport_ptr(0)
328 , m_b_transport_ptr(0)
329 , m_transport_dbg_ptr(0)
330 , m_get_direct_mem_ptr(0)
331 , m_nb_transport_user_id(0)
332 , m_b_transport_user_id(0)
333 , m_transport_dbg_user_id(0)
334 , m_get_dmi_user_id(0)
338 void set_nb_transport_user_id(
int id) { m_nb_transport_user_id = id; }
339 void set_b_transport_user_id(
int id) { m_b_transport_user_id = id; }
340 void set_transport_dbg_user_id(
int id) { m_transport_dbg_user_id = id; }
341 void set_get_dmi_user_id(
int id) { m_get_dmi_user_id = id; }
343 void set_nb_transport_ptr(MODULE* mod, NBTransportPtr p)
345 if (m_nb_transport_ptr) {
351 m_nb_transport_ptr = p;
354 void set_b_transport_ptr(MODULE* mod, BTransportPtr p)
356 if (m_b_transport_ptr) {
362 m_b_transport_ptr = p;
365 void set_transport_dbg_ptr(MODULE* mod, TransportDbgPtr p)
367 if (m_transport_dbg_ptr) {
373 m_transport_dbg_ptr = p;
376 void set_get_direct_mem_ptr(MODULE* mod, GetDirectMem_ptr p)
378 if (m_get_direct_mem_ptr) {
384 m_get_direct_mem_ptr = p;
387 sync_enum_type nb_transport_fw(transaction_type& trans,
391 if (m_nb_transport_ptr) {
394 return (m_mod->*m_nb_transport_ptr)(m_nb_transport_user_id, trans, phase, t);
402 if (m_b_transport_ptr) {
405 return (m_mod->*m_b_transport_ptr)(m_b_transport_user_id, trans, t);
410 unsigned int transport_dbg(transaction_type& trans)
412 if (m_transport_dbg_ptr) {
415 return (m_mod->*m_transport_dbg_ptr)(m_transport_dbg_user_id, trans);
421 bool get_direct_mem_ptr(transaction_type& trans,
424 if (m_get_direct_mem_ptr) {
427 return (m_mod->*m_get_direct_mem_ptr)(m_get_dmi_user_id, trans, dmi_data);
438 NBTransportPtr m_nb_transport_ptr;
439 BTransportPtr m_b_transport_ptr;
440 TransportDbgPtr m_transport_dbg_ptr;
441 GetDirectMem_ptr m_get_direct_mem_ptr;
442 int m_nb_transport_user_id;
443 int m_b_transport_user_id;
444 int m_transport_dbg_user_id;
445 int m_get_dmi_user_id;
454 template<
typename MODULE,
unsigned int BUSWIDTH = 32
465 template<
typename MODULE,
unsigned int BUSWIDTH = 32
477 #endif // TLM_UTILS_PASSTHROUGH_TARGET_SOCKET_H_INCLUDED_ passthrough_target_socket_tagged()
passthrough_target_socket_tagged_optional()
void register_nb_transport_fw(MODULE *mod, sync_enum_type(MODULE::*cb)(transaction_type &, phase_type &, sc_core::sc_time &))
tlm::tlm_sync_enum sync_enum_type
void display_warning(const char *msg) const
passthrough_target_socket_tagged_optional(const char *name)
tlm::tlm_sync_enum sync_enum_type
tlm::tlm_fw_transport_if< TYPES > fw_interface_type
static const char * default_name()
passthrough_target_socket_tagged_b(const char *n=default_name())
tlm::tlm_fw_transport_if< TYPES > fw_interface_type
passthrough_target_socket_tagged(const char *name)
TYPES::tlm_payload_type transaction_type
passthrough_target_socket(const char *name)
void set_start_address(sc_dt::uint64 addr)
passthrough_target_socket()
void register_transport_dbg(MODULE *mod, unsigned int(MODULE::*cb)(transaction_type &))
void register_b_transport(MODULE *mod, void(MODULE::*cb)(transaction_type &, sc_core::sc_time &))
void register_transport_dbg(MODULE *mod, unsigned int(MODULE::*cb)(int id, transaction_type &), int id)
tlm::tlm_target_socket< BUSWIDTH, TYPES, 1, POL > base_type
TYPES::tlm_payload_type transaction_type
tlm::tlm_bw_transport_if< TYPES > bw_interface_type
void register_nb_transport_fw(MODULE *mod, sync_enum_type(MODULE::*cb)(int id, transaction_type &, phase_type &, sc_core::sc_time &), int id)
passthrough_target_socket_b(const char *n=default_name())
void register_get_direct_mem_ptr(MODULE *mod, bool(MODULE::*cb)(transaction_type &, tlm::tlm_dmi &))
tlm::tlm_target_socket< BUSWIDTH, TYPES, 1, POL > base_type
void allow_read_write(void)
void display_error(const char *msg) const
TYPES::tlm_phase_type phase_type
TYPES::tlm_phase_type phase_type
const char * name() const
SC_API const char * sc_gen_unique_name(const char *, bool preserve_first)
void register_b_transport(MODULE *mod, void(MODULE::*cb)(int id, transaction_type &, sc_core::sc_time &), int id)
virtual void bind(base_initiator_socket_type &s)
passthrough_target_socket_optional(const char *name)
passthrough_target_socket_optional()
static const char * default_name()
void register_get_direct_mem_ptr(MODULE *mod, bool(MODULE::*cb)(int id, transaction_type &, tlm::tlm_dmi &), int id)
tlm::tlm_bw_transport_if< TYPES > bw_interface_type
void set_end_address(sc_dt::uint64 addr)