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