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 virtual sc_core::sc_interface *iface() {
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 virtual sc_core::sc_interface *iface() {
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 virtual void init(ProxyInterface *proxy,
78 proxy_ = proxy;
79 controller_ = controller;
80 }
82 return controller_;
83 }
84 virtual ProxyInterface *proxy() {
85 return proxy_;
86 }
87 virtual void enable() {}
88 virtual void disable() {}
89 virtual void set_tlm_iface(TlmIfaceInterface *tlm_iface) {
90 tlm_iface_ = tlm_iface;
91 }
92 virtual sc_core::sc_interface *iface() {
93 return tlm_iface_->iface();
94 }
95 template <typename TYPES>
96 static tlm::tlm_base_socket_if *initiatorSocket(
97 tlm_utils::callback_binder_fw<TYPES> *cb) {
98 return dynamic_cast<tlm::tlm_base_socket_if *>(
99 cb->get_other_side());
100 }
101 template <typename TYPES>
103 tlm_utils::callback_binder_fw<TYPES> *cb) {
104 tlm::tlm_base_socket_if *base = initiatorSocket(cb);
105 if (!base)
106 return NULL;
107
108 sc_core::sc_export_base &export_base = base->get_export_base();
109 return dynamic_cast<TlmMultiHandlerInterface *>(
110 export_base.get_interface());
111 }
113 sc_core::sc_object *obj) {
114 tlm::tlm_base_socket_if *base =
115 dynamic_cast<tlm::tlm_base_socket_if *>(obj);
116 if (!base)
117 return NULL;
118
120 base->get_port_base().get_interface());
121 if (!mh)
122 return NULL;
123
124 return mh->firstHandler();
125 }
127 sc_core::sc_object *obj) {
128 tlm::tlm_base_socket_if *base =
129 dynamic_cast<tlm::tlm_base_socket_if *>(obj);
130 if (!base)
131 return NULL;
132
134 base->get_export_base().get_interface());
135 if (!mh)
136 return NULL;
137
138 return mh->secondHandler();
139 }
141 sc_core::sc_object *obj) {
142 tlm::tlm_base_socket_if *base =
143 dynamic_cast<tlm::tlm_base_socket_if *>(obj);
144 if (!base)
145 return NULL;
146
148 base->get_export_base().get_interface());
149 if (!mh)
150 return NULL;
151
152 return mh->secondHandler();
153 }
155 sc_core::sc_object *obj) {
156 tlm::tlm_base_socket_if *base =
157 dynamic_cast<tlm::tlm_base_socket_if *>(obj);
158 if (!base)
159 return NULL;
160
162 base->get_port_base().get_interface());
163 if (!mh)
164 return NULL;
165
166 return mh->firstHandler();
167 }
168 template <typename TYPES>
170 tlm::tlm_fw_transport_if<TYPES> *socket) {
172 dynamic_cast<TlmMultiHandlerInterface *> (socket);
173 if (!mh)
174 return NULL;
175
176 return mh->firstHandler();
177 }
178 template <typename TYPES>
180 tlm::tlm_fw_transport_if<TYPES> *socket) {
181 return dynamic_cast<TlmHandlerInterface *> (socket);
182 }
183 template <typename TYPES>
185 tlm_utils::callback_binder_bw<TYPES> *cb) {
188 if (!mh)
189 return NULL;
190
191 return mh->secondHandler();
192 }
193 template <typename TYPES>
195 tlm_utils::callback_binder_fw<TYPES> *cb) {
198 if (!mh)
199 return NULL;
200
201 return mh->secondHandler();
202 }
203 template <typename TYPES>
205 tlm_utils::callback_binder_fw<TYPES> *cb) {
207 if (!mh)
208 return NULL;
209
210 return mh->firstHandler();
211 }
212 template <typename TYPES>
214 tlm::tlm_bw_transport_if<TYPES> *socket) {
215 return dynamic_cast<TlmHandlerInterface *> (socket);
216 }
217
218 private:
219 TlmIfaceInterface *tlm_iface_;
220 ProxyInterface *proxy_;
222};
223
224} // namespace awareness
225} // namespace systemc
226} // namespace simics
227
228#endif
Definition: proxy_interface.h:29
Definition: tlm_base_handler.h:68
virtual void init(ProxyInterface *proxy, instrumentation::ToolController *controller)
Definition: tlm_base_handler.h:76
static TlmHandlerInterface * targetFwSocketHandler(sc_core::sc_object *obj)
Definition: tlm_base_handler.h:140
virtual instrumentation::ToolController * controller()
Definition: tlm_base_handler.h:81
static TlmMultiHandlerInterface * initiatorExPortHandler(tlm_utils::callback_binder_fw< TYPES > *cb)
Definition: tlm_base_handler.h:102
static TlmHandlerInterface * mPInitiatorFwSocketHandler(tlm::tlm_fw_transport_if< TYPES > *socket)
Definition: tlm_base_handler.h:169
virtual void disable()
Definition: tlm_base_handler.h:88
virtual void set_tlm_iface(TlmIfaceInterface *tlm_iface)
Definition: tlm_base_handler.h:89
static TlmHandlerInterface * targetBwSocketHandler(sc_core::sc_object *obj)
Definition: tlm_base_handler.h:154
virtual sc_core::sc_interface * iface()
Definition: tlm_base_handler.h:92
static tlm::tlm_base_socket_if * initiatorSocket(tlm_utils::callback_binder_fw< TYPES > *cb)
Definition: tlm_base_handler.h:96
virtual ProxyInterface * proxy()
Definition: tlm_base_handler.h:84
TlmBaseHandler()
Definition: tlm_base_handler.h:70
static TlmHandlerInterface * mPInitiatorBwSocketHandler(tlm_utils::callback_binder_bw< TYPES > *cb)
Definition: tlm_base_handler.h:184
static TlmHandlerInterface * mPtargetBwSocketHandler(tlm::tlm_bw_transport_if< TYPES > *socket)
Definition: tlm_base_handler.h:213
static TlmHandlerInterface * initiatorFwSocketHandler(sc_core::sc_object *obj)
Definition: tlm_base_handler.h:112
virtual void enable()
Definition: tlm_base_handler.h:87
static TlmHandlerInterface * mPTargetFwSocketHandler(tlm_utils::callback_binder_fw< TYPES > *cb)
Definition: tlm_base_handler.h:194
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:204
static TlmHandlerInterface * mPInitiatorFwMpSocketHandler(tlm::tlm_fw_transport_if< TYPES > *socket)
Definition: tlm_base_handler.h:179
static TlmHandlerInterface * initiatorBwSocketHandler(sc_core::sc_object *obj)
Definition: tlm_base_handler.h:126
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
virtual sc_core::sc_interface * iface()
Definition: tlm_base_handler.h:60
Definition: tlm_base_handler.h:39
virtual sc_core::sc_interface * iface()
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: pci_bus_interface.h:24