SystemC Library API Reference Manual
Reference documentation for the Simics SystemC Library.
 
Loading...
Searching...
No Matches
tlm_base_handler.h
Go to the documentation of this file.
1/*
2 © 2017 Intel Corporation
3
4 This software and the related documents are Intel copyrighted materials, and
5 your use of them is governed by the express license under which they were
6 provided to you ("License"). Unless the License provides otherwise, you may
7 not use, modify, copy, publish, distribute, disclose or transmit this software
8 or the related documents without Intel's prior written permission.
9
10 This software and the related documents are provided as is, with no express or
11 implied warranties, other than those that are expressly stated in the License.
12*/
13
14#ifndef SIMICS_SYSTEMC_AWARENESS_TLM_BASE_HANDLER_H
15#define SIMICS_SYSTEMC_AWARENESS_TLM_BASE_HANDLER_H
16
17#include <systemc>
18#include <tlm>
19#include <tlm_utils/multi_socket_bases.h>
20
26
27namespace simics {
28namespace systemc {
29namespace awareness {
30
32 public:
33 virtual ~TlmIfaceInterface() {}
34 virtual sc_core::sc_interface *iface() = 0;
35};
36
38 public:
39 explicit TlmIface(sc_core::sc_interface *iface) {
40 if_ = iface;
41 }
42 sc_core::sc_interface *iface() override {
43 return if_;
44 }
45
46 private:
47 sc_core::sc_interface *if_;
48};
49
50template <typename IF_PROVIDER = sc_core::sc_port_base,
51 typename TYPES = tlm::tlm_base_protocol_types,
52 typename IF = tlm::tlm_fw_transport_if<TYPES> >
54 public:
55 explicit TlmIfaceProvider(IF_PROVIDER *if_provider) {
56 if_provider_ = if_provider;
57 }
58 sc_core::sc_interface *iface() override {
59 return dynamic_cast<IF*>(if_provider_->get_interface());
60 }
61
62 private:
63 IF_PROVIDER *if_provider_;
64};
65
67 public:
68 TlmBaseHandler() : tlm_iface_(NULL), proxy_(NULL), controller_(NULL) {}
70 delete tlm_iface_;
71 }
74 // TlmHandlerInterface
77 proxy_ = proxy;
78 controller_ = controller;
79 }
80 void enable() override {}
81 void disable() override {}
82
84 return controller_;
85 }
86 virtual ProxyInterface *proxy() {
87 return proxy_;
88 }
89
90 virtual void set_tlm_iface(TlmIfaceInterface *tlm_iface) {
91 tlm_iface_ = tlm_iface;
92 }
93 virtual sc_core::sc_interface *iface() {
94 return tlm_iface_->iface();
95 }
96 template <typename TYPES>
97 static tlm::tlm_base_socket_if *initiatorSocket(
98 tlm_utils::callback_binder_fw<TYPES> *cb) {
99 return dynamic_cast<tlm::tlm_base_socket_if *>(
100 cb->get_other_side());
101 }
102 template <typename TYPES>
104 tlm_utils::callback_binder_fw<TYPES> *cb) {
105 const tlm::tlm_base_socket_if *base = initiatorSocket(cb);
106 if (!base)
107 return NULL;
108
109 TlmMultiHandlerInterface *mh = nullptr;
110#ifdef SYSTEMC_2_3_3
111 const auto *iface = base->get_export_base().get_interface();
112#elif defined SYSTEMC_2_3_4 || defined SYSTEMC_3_0_0
113 const auto *iface = base->get_base_export().get_interface();
114#endif
115 mh = const_cast<TlmMultiHandlerInterface *>(
116 dynamic_cast<const TlmMultiHandlerInterface *>(iface));
117 return mh;
118 }
120 sc_core::sc_object *obj) {
121 const tlm::tlm_base_socket_if *base =
122 dynamic_cast<tlm::tlm_base_socket_if *>(obj);
123 if (!base)
124 return NULL;
125
126 TlmMultiHandlerInterface *mh = nullptr;
127#ifdef SYSTEMC_2_3_3
128 const auto *iface = base->get_port_base().get_interface();
129#elif defined SYSTEMC_2_3_4 || defined SYSTEMC_3_0_0
130 const auto *iface = base->get_base_port().get_interface();
131#endif
132 mh = const_cast<TlmMultiHandlerInterface *>(
133 dynamic_cast<const TlmMultiHandlerInterface *>(iface));
134 if (!mh)
135 return NULL;
136
137 return mh->firstHandler();
138 }
140 sc_core::sc_object *obj) {
141 const tlm::tlm_base_socket_if *base =
142 dynamic_cast<tlm::tlm_base_socket_if *>(obj);
143 if (!base)
144 return NULL;
145
146 TlmMultiHandlerInterface *mh = nullptr;
147#ifdef SYSTEMC_2_3_3
148 const auto *iface = base->get_export_base().get_interface();
149#elif defined SYSTEMC_2_3_4 || defined SYSTEMC_3_0_0
150 const auto *iface = base->get_base_export().get_interface();
151#endif
152 mh = const_cast<TlmMultiHandlerInterface *>(
153 dynamic_cast<const TlmMultiHandlerInterface *>(iface));
154 if (!mh)
155 return NULL;
156
157 return mh->secondHandler();
158 }
160 sc_core::sc_object *obj) {
161 const tlm::tlm_base_socket_if *base =
162 dynamic_cast<tlm::tlm_base_socket_if *>(obj);
163 if (!base)
164 return NULL;
165
166 TlmMultiHandlerInterface *mh = nullptr;
167#ifdef SYSTEMC_2_3_3
168 const auto *iface = base->get_export_base().get_interface();
169#elif defined SYSTEMC_2_3_4 || defined SYSTEMC_3_0_0
170 const auto *iface = base->get_base_export().get_interface();
171#endif
172 mh = const_cast<TlmMultiHandlerInterface *>(
173 dynamic_cast<const TlmMultiHandlerInterface *>(iface));
174 if (!mh)
175 return NULL;
176
177 return mh->secondHandler();
178 }
180 sc_core::sc_object *obj) {
181 const tlm::tlm_base_socket_if *base =
182 dynamic_cast<tlm::tlm_base_socket_if *>(obj);
183 if (!base)
184 return NULL;
185
186 TlmMultiHandlerInterface *mh = nullptr;
187#ifdef SYSTEMC_2_3_3
188 const auto *iface = base->get_port_base().get_interface();
189#elif defined SYSTEMC_2_3_4 || defined SYSTEMC_3_0_0
190 const auto *iface = base->get_base_port().get_interface();
191#endif
192 mh = const_cast<TlmMultiHandlerInterface *>(
193 dynamic_cast<const TlmMultiHandlerInterface *>(iface));
194 if (!mh)
195 return NULL;
196
197 return mh->firstHandler();
198 }
199 template <typename TYPES>
201 tlm::tlm_fw_transport_if<TYPES> *socket) {
203 dynamic_cast<TlmMultiHandlerInterface *> (socket);
204 if (!mh)
205 return NULL;
206
207 return mh->firstHandler();
208 }
209 template <typename TYPES>
211 tlm::tlm_fw_transport_if<TYPES> *socket) {
212 return dynamic_cast<TlmHandlerInterface *> (socket);
213 }
214 template <typename TYPES>
216 tlm_utils::callback_binder_bw<TYPES> *cb) {
219 if (!mh)
220 return NULL;
221
222 return mh->secondHandler();
223 }
224 template <typename TYPES>
226 tlm_utils::callback_binder_fw<TYPES> *cb) {
229 if (!mh)
230 return NULL;
231
232 return mh->secondHandler();
233 }
234 template <typename TYPES>
236 tlm_utils::callback_binder_fw<TYPES> *cb) {
238 if (!mh)
239 return NULL;
240
241 return mh->firstHandler();
242 }
243 template <typename TYPES>
245 tlm::tlm_bw_transport_if<TYPES> *socket) {
246 return dynamic_cast<TlmHandlerInterface *> (socket);
247 }
248
249 private:
250 TlmIfaceInterface *tlm_iface_;
251 ProxyInterface *proxy_;
253};
254
255} // namespace awareness
256} // namespace systemc
257} // namespace simics
258
259#endif
Definition: proxy_interface.h:27
Definition: tlm_base_handler.h:66
void enable() override
Definition: tlm_base_handler.h:80
static TlmHandlerInterface * targetFwSocketHandler(sc_core::sc_object *obj)
Definition: tlm_base_handler.h:159
virtual instrumentation::ToolController * controller()
Definition: tlm_base_handler.h:83
static TlmMultiHandlerInterface * initiatorExPortHandler(tlm_utils::callback_binder_fw< TYPES > *cb)
Definition: tlm_base_handler.h:103
static TlmHandlerInterface * mPInitiatorFwSocketHandler(tlm::tlm_fw_transport_if< TYPES > *socket)
Definition: tlm_base_handler.h:200
virtual void set_tlm_iface(TlmIfaceInterface *tlm_iface)
Definition: tlm_base_handler.h:90
static TlmHandlerInterface * targetBwSocketHandler(sc_core::sc_object *obj)
Definition: tlm_base_handler.h:179
virtual sc_core::sc_interface * iface()
Definition: tlm_base_handler.h:93
void disable() override
Definition: tlm_base_handler.h:81
static tlm::tlm_base_socket_if * initiatorSocket(tlm_utils::callback_binder_fw< TYPES > *cb)
Definition: tlm_base_handler.h:97
virtual ProxyInterface * proxy()
Definition: tlm_base_handler.h:86
TlmBaseHandler()
Definition: tlm_base_handler.h:68
static TlmHandlerInterface * mPInitiatorBwSocketHandler(tlm_utils::callback_binder_bw< TYPES > *cb)
Definition: tlm_base_handler.h:215
static TlmHandlerInterface * mPtargetBwSocketHandler(tlm::tlm_bw_transport_if< TYPES > *socket)
Definition: tlm_base_handler.h:244
static TlmHandlerInterface * initiatorFwSocketHandler(sc_core::sc_object *obj)
Definition: tlm_base_handler.h:119
void init(ProxyInterface *proxy, instrumentation::ToolController *controller) override
Definition: tlm_base_handler.h:75
static TlmHandlerInterface * mPTargetFwSocketHandler(tlm_utils::callback_binder_fw< TYPES > *cb)
Definition: tlm_base_handler.h:225
TlmBaseHandler(const TlmBaseHandler &)=delete
~TlmBaseHandler()
Definition: tlm_base_handler.h:69
TlmBaseHandler & operator=(const TlmBaseHandler &)=delete
static TlmHandlerInterface * mPTargetBwSocketHandler(tlm_utils::callback_binder_fw< TYPES > *cb)
Definition: tlm_base_handler.h:235
static TlmHandlerInterface * mPInitiatorFwMpSocketHandler(tlm::tlm_fw_transport_if< TYPES > *socket)
Definition: tlm_base_handler.h:210
static TlmHandlerInterface * initiatorBwSocketHandler(sc_core::sc_object *obj)
Definition: tlm_base_handler.h:139
Definition: tlm_handler_interface.h:24
Definition: tlm_base_handler.h:31
virtual sc_core::sc_interface * iface()=0
virtual ~TlmIfaceInterface()
Definition: tlm_base_handler.h:33
Definition: tlm_base_handler.h:53
TlmIfaceProvider(IF_PROVIDER *if_provider)
Definition: tlm_base_handler.h:55
sc_core::sc_interface * iface() override
Definition: tlm_base_handler.h:58
Definition: tlm_base_handler.h:37
sc_core::sc_interface * iface() override
Definition: tlm_base_handler.h:42
TlmIface(sc_core::sc_interface *iface)
Definition: tlm_base_handler.h:39
Definition: tlm_multi_handler_interface.h:23
virtual TlmHandlerInterface * secondHandler()=0
virtual TlmHandlerInterface * firstHandler()=0
static TlmMultiHandlerInterface * getHandler(sc_core::sc_interface *binder)
Definition: tlm_multi_handler_registry.h:39
Definition: tool_controller.h:72
Definition: adapter.h:79