14#ifndef SIMICS_SYSTEMC_AWARENESS_TLM_FW_TRANSPORT_IF_HANDLER_H
15#define SIMICS_SYSTEMC_AWARENESS_TLM_FW_TRANSPORT_IF_HANDLER_H
24#include <unordered_map>
30template <
typename TYPES = tlm::tlm_base_protocol_types>
34 typedef tlm::tlm_fw_transport_if<TYPES>
FW_IF;
42 sc_core::sc_time &t)
override {
45 nb_transport_fw_pre,
proxy(), &trans, &phase, &t);
47 tlm::tlm_sync_enum ret =
fw_if()->nb_transport_fw(trans, phase, t);
52 (&trans)->set_dmi_allowed(
false);
57 proxy(), &trans, &phase, &t, &ret);
61 sc_core::sc_time &local_time_offset)
override {
64 b_transport_pre,
proxy(), &trans,
66 fw_if()->b_transport(trans, local_time_offset);
71 (&trans)->set_dmi_allowed(
false);
75 b_transport_post,
proxy(), &trans,
79 tlm::tlm_dmi &dmi_data)
override {
82 get_direct_mem_ptr_pre,
proxy(), &trans, &dmi_data);
84 bool ret =
fw_if()->get_direct_mem_ptr(trans, dmi_data);
88 get_direct_mem_ptr_post,
89 proxy(), &trans, &dmi_data, &ret);
101 transport_dbg_pre,
proxy(), &trans);
103 unsigned int ret =
fw_if()->transport_dbg(trans);
108 (&trans)->set_dmi_allowed(
false);
112 transport_dbg_post,
proxy(), &trans, &ret);
117 sc_core::sc_interface* sc_iface =
iface();
118 if (fw_if_map_.find(sc_iface) == fw_if_map_.end()) {
121 fw_if_map_.emplace(sc_iface,
dynamic_cast<FW_IF*
>(sc_iface));
123 return fw_if_map_[sc_iface];
127 std::unordered_map<sc_core::sc_interface*, FW_IF*> fw_if_map_;
130template <
typename IF_PROVIDER = sc_core::sc_port_base,
131 typename TYPES = tlm::tlm_base_protocol_types>
135 typedef tlm::tlm_fw_transport_if<TYPES>
FW_IF;
140 first_.set_tlm_iface(
new TlmIface(&second_));
142 TYPES,
FW_IF>(fw_if));
145 first_.set_tlm_iface(
new TlmIface(&second_));
146 second_.set_tlm_iface(
new TlmIface(fw_if));
149 tlm_utils::callback_binder_fw<TYPES> *binder_fw)
150 : registry_(binder_fw, this) {
151 first_.set_tlm_iface(
new TlmIface(&second_));
152 second_.set_tlm_iface(
new TlmIface(binder_fw));
158 sc_core::sc_time &t)
override {
159 return first_.nb_transport_fw(trans, phase, t);
162 sc_core::sc_time &local_time_offset)
override {
163 first_.b_transport(trans, local_time_offset);
167 tlm::tlm_dmi &dmi_data)
override {
168 return first_.get_direct_mem_ptr(trans, dmi_data);
171 return first_.transport_dbg(trans);
Definition: tlm_base_handler.h:66
virtual instrumentation::ToolController * controller()
Definition: tlm_base_handler.h:83
virtual sc_core::sc_interface * iface()
Definition: tlm_base_handler.h:93
virtual ProxyInterface * proxy()
Definition: tlm_base_handler.h:86
Definition: tlm_fw_transport_if_handler.h:32
TYPES::tlm_payload_type transaction_type
Definition: tlm_fw_transport_if_handler.h:37
void b_transport(transaction_type &trans, sc_core::sc_time &local_time_offset) override
Definition: tlm_fw_transport_if_handler.h:60
unsigned int transport_dbg(transaction_type &trans) override
Definition: tlm_fw_transport_if_handler.h:98
tlm::tlm_sync_enum nb_transport_fw(transaction_type &trans, phase_type &phase, sc_core::sc_time &t) override
Definition: tlm_fw_transport_if_handler.h:40
TYPES::tlm_phase_type phase_type
Definition: tlm_fw_transport_if_handler.h:38
FW_IF * fw_if()
Definition: tlm_fw_transport_if_handler.h:116
bool get_direct_mem_ptr(transaction_type &trans, tlm::tlm_dmi &dmi_data) override
Definition: tlm_fw_transport_if_handler.h:78
tlm::tlm_fw_transport_if< TYPES > FW_IF
Definition: tlm_fw_transport_if_handler.h:34
TlmFwTransportIfHandlerBase()
Definition: tlm_fw_transport_if_handler.h:35
Definition: tlm_fw_transport_if_handler.h:133
tlm::tlm_sync_enum nb_transport_fw(transaction_type &trans, phase_type &phase, sc_core::sc_time &t) override
Definition: tlm_fw_transport_if_handler.h:155
void b_transport(transaction_type &trans, sc_core::sc_time &local_time_offset) override
Definition: tlm_fw_transport_if_handler.h:161
bool get_direct_mem_ptr(transaction_type &trans, tlm::tlm_dmi &dmi_data) override
Definition: tlm_fw_transport_if_handler.h:166
TlmFwTransportIfHandler(tlm_utils::callback_binder_fw< TYPES > *binder_fw)
Definition: tlm_fw_transport_if_handler.h:148
unsigned int transport_dbg(transaction_type &trans) override
Definition: tlm_fw_transport_if_handler.h:170
TlmFwTransportIfHandler(IF_PROVIDER *fw_if)
Definition: tlm_fw_transport_if_handler.h:139
TlmHandlerInterface * firstHandler() override
Definition: tlm_fw_transport_if_handler.h:173
TYPES::tlm_payload_type transaction_type
Definition: tlm_fw_transport_if_handler.h:136
tlm::tlm_fw_transport_if< TYPES > FW_IF
Definition: tlm_fw_transport_if_handler.h:135
TlmHandlerInterface * secondHandler() override
Definition: tlm_fw_transport_if_handler.h:176
TYPES::tlm_phase_type phase_type
Definition: tlm_fw_transport_if_handler.h:137
TlmFwTransportIfHandler(FW_IF *fw_if)
Definition: tlm_fw_transport_if_handler.h:144
Definition: tlm_handler_interface.h:24
Definition: tlm_base_handler.h:53
Definition: tlm_base_handler.h:37
Definition: tlm_multi_handler_interface.h:23
Definition: tlm_multi_handler_registry.h:28
Definition: tlm_fw_action_interface.h:29