16#ifndef SIMICS_SYSTEMC_TOOLS_SC_TOOL_H
17#define SIMICS_SYSTEMC_TOOLS_SC_TOOL_H
19#include <simics/cc-api.h>
20#include <simics/simulator-iface/instrumentation-tool.h>
37namespace scla = scl::awareness;
38namespace scli = scl::iface::instrumentation;
44class ScTool :
public simics::ConfObject,
45 public scli::EventActionInterface,
46 public scli::ProcessActionInterface,
47 public scli::SignalActionInterface,
48 public scli::SignalPortActionInterface,
49 public scli::TlmFwActionInterface,
50 public scli::TlmBwActionInterface,
51 public scli::ToolInterface {
53 explicit ScTool(simics::ConfObjectRef o)
56 conf_object_t *
connect(conf_object_t *controller,
57 attr_value_t args)
override;
63 std::string name, std::string long_name, std::string documentation);
68 const char *event_type,
69 const char *class_type,
71 sc_core::sc_time *timestamp)
override {}
75 const char *event_type,
76 const char *class_type,
78 sc_core::sc_time *timestamp,
79 bool internal)
override {}
82 void fired(scla::ProxyInterface *proxy)
override {}
86 sc_core::sc_object *signal)
override {}
90 tlm::tlm_generic_payload *trans,
91 tlm::tlm_phase *phase,
92 sc_core::sc_time *delay)
override {}
94 tlm::tlm_generic_payload *trans,
95 tlm::tlm_phase *phase,
96 sc_core::sc_time *delay,
97 tlm::tlm_sync_enum *ret)
override {}
99 tlm::tlm_generic_payload *trans,
100 sc_core::sc_time *delay)
override {}
102 tlm::tlm_generic_payload *trans,
103 sc_core::sc_time *delay)
override {}
105 tlm::tlm_generic_payload *trans,
106 tlm::tlm_dmi *dmi_data)
override {}
108 tlm::tlm_generic_payload *trans,
109 tlm::tlm_dmi *dmi_data,
110 bool *ret)
override {}
112 tlm::tlm_generic_payload *trans)
override {}
114 tlm::tlm_generic_payload *trans,
115 unsigned int *ret)
override {}
119 tlm::tlm_generic_payload *trans,
120 tlm::tlm_phase *phase,
121 sc_core::sc_time *delay)
override {}
123 tlm::tlm_generic_payload *trans,
124 tlm::tlm_phase *phase,
125 sc_core::sc_time *delay,
126 tlm::tlm_sync_enum *ret)
override {}
129 uint64 *end_range)
override {}
132 uint64 *end_range)
override {}
137 std::string long_name,
138 std::string documentation) {
139 auto cls = simics::make_class<T>(name, long_name,
141 Sim_Class_Kind_Pseudo);
142 cls->add(scl::iface::createAdapter<scli::ToolSimicsAdapter<T>>());