14#ifndef SIMICS_SYSTEMC_AWARENESS_TLM_BW_TRANSPORT_IF_HANDLER_H
15#define SIMICS_SYSTEMC_AWARENESS_TLM_BW_TRANSPORT_IF_HANDLER_H
26#include <unordered_map>
32template <
typename TYPES = tlm::tlm_base_protocol_types>
35 public tlm::tlm_bw_transport_if<TYPES> {
37 typedef tlm::tlm_bw_transport_if<TYPES>
BW_IF;
39 : is_active_(false) {}
48 bw_if()->invalidate_direct_mem_ptr(0,
49 static_cast<sc_dt::uint64
>(-1));
58 sc_dt::uint64 end_range)
override {
61 invalidate_direct_mem_ptr_pre,
62 proxy(), &start_range, &end_range);
69 bw->invalidate_direct_mem_ptr(start_range, end_range);
73 invalidate_direct_mem_ptr_post,
74 proxy(), &start_range, &end_range);
78 sc_core::sc_time &t)
override {
82 (&trans)->set_dmi_allowed(
false);
87 proxy(), &trans, &phase, &t);
89 tlm::tlm_sync_enum ret = tlm::TLM_COMPLETED;
93 ret = bw->nb_transport_bw(trans, phase, t);
98 proxy(), &trans, &phase, &t, &ret);
103 sc_core::sc_interface* sc_iface =
iface();
104 if (bw_if_map_.find(sc_iface) == bw_if_map_.end()) {
107 bw_if_map_.emplace(sc_iface,
dynamic_cast<BW_IF*
>(sc_iface));
109 return bw_if_map_[sc_iface];
114 std::unordered_map<sc_core::sc_interface*, BW_IF*> bw_if_map_;
117template <
typename IF_PROVIDER = sc_core::sc_port_base,
118 typename TYPES = tlm::tlm_base_protocol_types>
122 typedef tlm::tlm_bw_transport_if<TYPES>
BW_IF;
127 first_.set_tlm_iface(
new TlmIface(&second_));
132 first_.set_tlm_iface(
new TlmIface(&second_));
133 second_.set_tlm_iface(
new TlmIface(bw_if));
136 tlm_utils::callback_binder_bw<TYPES> *binder_bw)
137 : registry_(binder_bw, this) {
138 first_.set_tlm_iface(
new TlmIface(&second_));
139 second_.set_tlm_iface(
new TlmIface(binder_bw));
143 sc_dt::uint64 end_range)
override {
144 first_.invalidate_direct_mem_ptr(start_range, end_range);
148 sc_core::sc_time &t)
override {
149 return first_.nb_transport_bw(trans, phase, t);
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_bw_transport_if_handler.h:35
void disable() override
Definition: tlm_bw_transport_if_handler.h:51
void enable() override
Definition: tlm_bw_transport_if_handler.h:40
TlmBwTransportIfHandlerBase()
Definition: tlm_bw_transport_if_handler.h:38
tlm::tlm_bw_transport_if< TYPES > BW_IF
Definition: tlm_bw_transport_if_handler.h:37
BW_IF * bw_if()
Definition: tlm_bw_transport_if_handler.h:102
tlm::tlm_sync_enum nb_transport_bw(transaction_type &trans, phase_type &phase, sc_core::sc_time &t) override
Definition: tlm_bw_transport_if_handler.h:76
void invalidate_direct_mem_ptr(sc_dt::uint64 start_range, sc_dt::uint64 end_range) override
Definition: tlm_bw_transport_if_handler.h:57
TYPES::tlm_phase_type phase_type
Definition: tlm_bw_transport_if_handler.h:56
TYPES::tlm_payload_type transaction_type
Definition: tlm_bw_transport_if_handler.h:55
Definition: tlm_bw_transport_if_handler.h:120
TlmBwTransportIfHandler(IF_PROVIDER *bw_if)
Definition: tlm_bw_transport_if_handler.h:126
tlm::tlm_bw_transport_if< TYPES > BW_IF
Definition: tlm_bw_transport_if_handler.h:122
TlmHandlerInterface * firstHandler() override
Definition: tlm_bw_transport_if_handler.h:152
TYPES::tlm_phase_type phase_type
Definition: tlm_bw_transport_if_handler.h:124
TYPES::tlm_payload_type transaction_type
Definition: tlm_bw_transport_if_handler.h:123
TlmHandlerInterface * secondHandler() override
Definition: tlm_bw_transport_if_handler.h:155
TlmBwTransportIfHandler(BW_IF *bw_if)
Definition: tlm_bw_transport_if_handler.h:131
tlm::tlm_sync_enum nb_transport_bw(transaction_type &trans, phase_type &phase, sc_core::sc_time &t) override
Definition: tlm_bw_transport_if_handler.h:146
TlmBwTransportIfHandler(tlm_utils::callback_binder_bw< TYPES > *binder_bw)
Definition: tlm_bw_transport_if_handler.h:135
void invalidate_direct_mem_ptr(sc_dt::uint64 start_range, sc_dt::uint64 end_range) override
Definition: tlm_bw_transport_if_handler.h:142
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_bw_action_interface.h:29