16#ifndef SIMICS_SYSTEMC_AWARENESS_TLM_FW_TRANSPORT_IF_HANDLER_H
17#define SIMICS_SYSTEMC_AWARENESS_TLM_FW_TRANSPORT_IF_HANDLER_H
26#include <unordered_map>
32template <
typename TYPES = tlm::tlm_base_protocol_types>
36 typedef tlm::tlm_fw_transport_if<TYPES>
FW_IF;
44 sc_core::sc_time &t) {
47 nb_transport_fw_pre,
proxy(), &trans, &phase, &t);
49 tlm::tlm_sync_enum ret =
fw_if()->nb_transport_fw(trans, phase, t);
54 (&trans)->set_dmi_allowed(
false);
59 proxy(), &trans, &phase, &t, &ret);
63 sc_core::sc_time &local_time_offset) {
66 b_transport_pre,
proxy(), &trans,
68 fw_if()->b_transport(trans, local_time_offset);
73 (&trans)->set_dmi_allowed(
false);
77 b_transport_post,
proxy(), &trans,
81 tlm::tlm_dmi &dmi_data) {
84 get_direct_mem_ptr_pre,
proxy(), &trans, &dmi_data);
86 bool ret =
fw_if()->get_direct_mem_ptr(trans, dmi_data);
90 get_direct_mem_ptr_post,
91 proxy(), &trans, &dmi_data, &ret);
103 transport_dbg_pre,
proxy(), &trans);
105 unsigned int ret =
fw_if()->transport_dbg(trans);
110 (&trans)->set_dmi_allowed(
false);
114 transport_dbg_post,
proxy(), &trans, &ret);
119 sc_core::sc_interface* sc_iface =
iface();
120 if (fw_if_map_.find(sc_iface) == fw_if_map_.end()) {
123 fw_if_map_.emplace(sc_iface,
dynamic_cast<FW_IF*
>(sc_iface));
125 return fw_if_map_[sc_iface];
129 std::unordered_map<sc_core::sc_interface*, FW_IF*> fw_if_map_;
132template <
typename IF_PROVIDER = sc_core::sc_port_base,
133 typename TYPES = tlm::tlm_base_protocol_types>
137 typedef tlm::tlm_fw_transport_if<TYPES>
FW_IF;
142 first_.set_tlm_iface(
new TlmIface(&second_));
144 TYPES,
FW_IF>(fw_if));
147 first_.set_tlm_iface(
new TlmIface(&second_));
148 second_.set_tlm_iface(
new TlmIface(fw_if));
151 tlm_utils::callback_binder_fw<TYPES> *binder_fw)
152 : registry_(binder_fw, this) {
153 first_.set_tlm_iface(
new TlmIface(&second_));
154 second_.set_tlm_iface(
new TlmIface(binder_fw));
159 sc_core::sc_time &t) {
160 return first_.nb_transport_fw(trans, phase, t);
163 sc_core::sc_time &local_time_offset) {
164 first_.b_transport(trans, local_time_offset);
168 tlm::tlm_dmi &dmi_data) {
169 return first_.get_direct_mem_ptr(trans, dmi_data);
172 return first_.transport_dbg(trans);
Definition: tlm_base_handler.h:68
virtual instrumentation::ToolController * controller()
Definition: tlm_base_handler.h:81
virtual sc_core::sc_interface * iface()
Definition: tlm_base_handler.h:92
virtual ProxyInterface * proxy()
Definition: tlm_base_handler.h:84
Definition: tlm_fw_transport_if_handler.h:34
unsigned int transport_dbg(transaction_type &trans)
Definition: tlm_fw_transport_if_handler.h:100
TYPES::tlm_payload_type transaction_type
Definition: tlm_fw_transport_if_handler.h:39
TYPES::tlm_phase_type phase_type
Definition: tlm_fw_transport_if_handler.h:40
tlm::tlm_sync_enum nb_transport_fw(transaction_type &trans, phase_type &phase, sc_core::sc_time &t)
Definition: tlm_fw_transport_if_handler.h:42
FW_IF * fw_if()
Definition: tlm_fw_transport_if_handler.h:118
bool get_direct_mem_ptr(transaction_type &trans, tlm::tlm_dmi &dmi_data)
Definition: tlm_fw_transport_if_handler.h:80
tlm::tlm_fw_transport_if< TYPES > FW_IF
Definition: tlm_fw_transport_if_handler.h:36
void b_transport(transaction_type &trans, sc_core::sc_time &local_time_offset)
Definition: tlm_fw_transport_if_handler.h:62
TlmFwTransportIfHandlerBase()
Definition: tlm_fw_transport_if_handler.h:37
Definition: tlm_fw_transport_if_handler.h:135
void b_transport(transaction_type &trans, sc_core::sc_time &local_time_offset)
Definition: tlm_fw_transport_if_handler.h:162
TlmFwTransportIfHandler(tlm_utils::callback_binder_fw< TYPES > *binder_fw)
Definition: tlm_fw_transport_if_handler.h:150
virtual TlmHandlerInterface * firstHandler()
Definition: tlm_fw_transport_if_handler.h:174
tlm::tlm_sync_enum nb_transport_fw(transaction_type &trans, phase_type &phase, sc_core::sc_time &t)
Definition: tlm_fw_transport_if_handler.h:157
TlmFwTransportIfHandler(IF_PROVIDER *fw_if)
Definition: tlm_fw_transport_if_handler.h:141
bool get_direct_mem_ptr(transaction_type &trans, tlm::tlm_dmi &dmi_data)
Definition: tlm_fw_transport_if_handler.h:167
TYPES::tlm_payload_type transaction_type
Definition: tlm_fw_transport_if_handler.h:138
tlm::tlm_fw_transport_if< TYPES > FW_IF
Definition: tlm_fw_transport_if_handler.h:137
unsigned int transport_dbg(transaction_type &trans)
Definition: tlm_fw_transport_if_handler.h:171
TYPES::tlm_phase_type phase_type
Definition: tlm_fw_transport_if_handler.h:139
virtual TlmHandlerInterface * secondHandler()
Definition: tlm_fw_transport_if_handler.h:177
TlmFwTransportIfHandler(FW_IF *fw_if)
Definition: tlm_fw_transport_if_handler.h:146
Definition: tlm_handler_interface.h:26
Definition: tlm_base_handler.h:55
Definition: tlm_base_handler.h:39
Definition: tlm_multi_handler_interface.h:25
Definition: tlm_multi_handler_registry.h:30
Definition: tlm_fw_action_interface.h:31
Definition: pci_bus_interface.h:24