16#ifndef SIMICS_SYSTEMC_AWARENESS_PROXY_FACTORY_H
17#define SIMICS_SYSTEMC_AWARENESS_PROXY_FACTORY_H
19#include <simics/base/types.h>
20#include <simics/base/sim-exception.h>
21#include <simics/simulator/sim-get-class.h>
43template <
typename TProxy = Proxy>
46 virtual bool mapToProxy(sc_core::sc_object *
object)
const {
47 if (suppress_proxy_build_.find(
object) != suppress_proxy_build_.end())
55#if INTC_EXT && USE_SIMICS_CCI
57 return cfg.getParameters(
object).size() > 0;
63 sc_core::sc_object *
object)
const {
64 return &sc_class_attributes;
67 sc_core::sc_object *
object)
const {
68 return &sc_instance_attributes;
72 std::string description,
73 std::string documentation)
const {
74 return *make_class<TProxy>(name, description, documentation,
75 Sim_Class_Kind_Pseudo).get();
78 conf_class_t *cls)
const {
82#if INTC_EXT && USE_SIMICS_CCI
84 std::vector <cci::cci_param_handle> parameters =
85 cfg.getParameters(
object);
86 std::vector <cci::cci_param_handle>::iterator i;
87 for (i = parameters.begin(); i != parameters.end(); ++i) {
88 const char *type = cfg.simicsType(*i);
96 "CCI Attribute %s is now %s.",
98 attribute_name.c_str());
101 char *key_arg = NULL;
103 SIM_register_typed_attribute(
104 cls, attribute_name.c_str(),
107 Sim_Attr_Pseudo, cfg.simicsType(*i), 0,
108 i->get_description().c_str());
109 if (SIM_clear_exception() != SimExc_No_Exception) {
111 "Failed to register CCI attribute: '%s'",
112 attribute_name.c_str());
118 conf_class_t *cls)
const {
119 registerInterface<iface::ScObjectSimicsAdapter<TProxy> >(cls);
120 if (
dynamic_cast<sc_core::sc_module *
>(
object)) {
124 static sc_module_interface_t iface = {};
125 iface._not_valid = NULL;
126 SIM_register_interface(cls, SC_MODULE_INTERFACE, &iface);
130 conf_class_t *cls)
const {
136 const char *class_name)
const {
137 std::string name = sc_class_attributes.
name(class_name);
139 if (SIM_clear_exception() != SimExc_No_Exception) {
140 std::string description = std::string(
"SystemC ") + sc_kind;
141 std::string documentation = std::string(
"The <class>") +
142 name +
"</class> class corresponds to the generic " +
143 description +
" class.";
145 std::move(documentation));
147 SIM_clear_exception();
162 static sc_module_interface_t iface = {};
163 iface._not_valid = NULL;
164 SIM_register_interface(cls, SC_MODULE_INTERFACE, &iface);
171 std::string name = sc_class_attributes.
name(sc_kind.c_str());
173 return SIM_clear_exception() == SimExc_No_Exception;
176 suppress_proxy_build_.insert(obj);
181 SIM_register_interface(cls, adapter.name().c_str(),
188 std::set<sc_core::sc_object *> suppress_proxy_build_;
Definition: cci_configuration.h:37
static int define(std::string parameter_name)
Definition: class_attributes_interface.h:26
Definition: class_attributes.h:27
virtual std::string name(std::string class_name) const
Definition: instance_attributes_interface.h:26
Definition: instance_attributes.h:27
Definition: proxy_attribute_name.h:32
Definition: proxy_factory_base.h:25
static ConfObjectRef log_object_
Definition: proxy_factory_base.h:30
Definition: proxy_factory_interface.h:31
Definition: proxy_factory.h:44
virtual void registerFeatures(sc_core::sc_object *object, ProxyInterface *proxy) const
Definition: proxy_factory.h:132
virtual void registerLogGroups(sc_core::sc_object *object, conf_class_t *cls) const
Definition: proxy_factory.h:129
virtual void registerInterfaces(sc_core::sc_object *object, conf_class_t *cls) const
Definition: proxy_factory.h:117
virtual bool needUniqueConfClassName(sc_core::sc_object *object) const
Definition: proxy_factory.h:54
virtual const ClassAttributesInterface * classAttributes(sc_core::sc_object *object) const
Definition: proxy_factory.h:62
void registerInterface(conf_class_t *cls) const
Definition: proxy_factory.h:179
virtual const InstanceAttributesInterface * instanceAttributes(sc_core::sc_object *object) const
Definition: proxy_factory.h:66
virtual void registerAttributes(sc_core::sc_object *object, conf_class_t *cls) const
Definition: proxy_factory.h:77
virtual conf_class_t * createConfClass(sc_core::sc_object *object, std::string name, std::string description, std::string documentation) const
Definition: proxy_factory.h:70
virtual bool registerClass(std::string sc_kind, const char *class_name) const
Definition: proxy_factory.h:135
virtual bool canManufacture(sc_core::sc_object *object) const
Definition: proxy_factory.h:51
virtual bool isClassRegistered(std::string sc_kind) const
Definition: proxy_factory.h:170
void addSuppressProxyBuild(sc_core::sc_object *obj)
Definition: proxy_factory.h:175
virtual bool mapToProxy(sc_core::sc_object *object) const
Definition: proxy_factory.h:46
Definition: proxy_interface.h:29
static set_error_t setAttribute(lang_void *ptr, conf_object_t *obj, attr_value_t *val, attr_value_t *idx)
static attr_value_t getAttribute(lang_void *ptr, conf_object_t *obj, attr_value_t *idx)
conf_class_t * SIM_get_class(const char *NOTNULL name)
@ Log_Awareness
Definition: adapter_log_groups.h:26
Definition: pci_bus_interface.h:24