14#ifndef SIMICS_SYSTEMC_AWARENESS_PROXY_FACTORY_H
15#define SIMICS_SYSTEMC_AWARENESS_PROXY_FACTORY_H
17#include <simics/base/types.h>
18#include <simics/base/sim-exception.h>
19#include <simics/simulator/sim-get-class.h>
41template <
typename TProxy = Proxy>
44 bool mapToProxy(sc_core::sc_object *
object)
const override {
45 if (suppress_proxy_build_.find(
object) != suppress_proxy_build_.end())
53#if INTC_EXT && USE_SIMICS_CCI
55 return cfg.getParameters(
object).size() > 0;
61 sc_core::sc_object *
object)
const override {
62 return &sc_class_attributes;
65 sc_core::sc_object *
object)
const override {
66 return &sc_instance_attributes;
70 std::string description,
71 std::string documentation)
const override {
72 return *make_class<TProxy>(name, description, documentation,
73 Sim_Class_Kind_Pseudo).get();
76 conf_class_t *cls)
const override {
80#if INTC_EXT && USE_SIMICS_CCI
82 for (
const auto ¶meter : cfg.getParameters(
object)) {
83 const char *type = cfg.simicsType(parameter);
91 "CCI Attribute %s is now %s.",
93 attribute_name.c_str());
98 SIM_register_typed_attribute(
99 cls, attribute_name.c_str(),
102 Sim_Attr_Pseudo, cfg.simicsType(parameter), 0,
103 parameter.get_description().c_str());
104 if (SIM_clear_exception() != SimExc_No_Exception) {
106 "Failed to register CCI attribute: '%s'",
107 attribute_name.c_str());
113 conf_class_t *cls)
const override {
114 registerInterface<iface::ScObjectSimicsAdapter<TProxy> >(cls);
115 if (
dynamic_cast<sc_core::sc_module *
>(
object)) {
119 static sc_module_interface_t iface = {};
120 iface._not_valid = NULL;
121 SIM_register_interface(cls, SC_MODULE_INTERFACE, &iface);
125 conf_class_t *cls)
const override {
131 const char *class_name)
const override {
132 std::string name = sc_class_attributes.
name(class_name);
134 if (SIM_clear_exception() != SimExc_No_Exception) {
135 std::string description = std::string(
"SystemC ") + sc_kind;
136 std::string documentation = std::string(
"The <class>") +
137 name +
"</class> class corresponds to the generic " +
138 description +
" class.";
140 std::move(documentation));
142 std::ignore = SIM_clear_exception();
157 static sc_module_interface_t iface = {};
158 iface._not_valid = NULL;
159 SIM_register_interface(cls, SC_MODULE_INTERFACE, &iface);
166 std::string name = sc_class_attributes.
name(sc_kind.c_str());
168 return SIM_clear_exception() == SimExc_No_Exception;
171 suppress_proxy_build_.insert(obj);
176 SIM_register_interface(cls, adapter.name().c_str(),
183 std::set<sc_core::sc_object *> suppress_proxy_build_;
Definition: cci_configuration.h:35
static int define(std::string parameter_name)
Definition: class_attributes_interface.h:24
Definition: class_attributes.h:25
std::string name(std::string class_name) const override
Definition: instance_attributes_interface.h:24
Definition: instance_attributes.h:25
Definition: proxy_attribute_name.h:30
Definition: proxy_factory_base.h:23
static ConfObjectRef log_object_
Definition: proxy_factory_base.h:28
Definition: proxy_factory_interface.h:29
Definition: proxy_factory.h:42
const InstanceAttributesInterface * instanceAttributes(sc_core::sc_object *object) const override
Definition: proxy_factory.h:64
bool needUniqueConfClassName(sc_core::sc_object *object) const override
Definition: proxy_factory.h:52
bool mapToProxy(sc_core::sc_object *object) const override
Definition: proxy_factory.h:44
bool isClassRegistered(std::string sc_kind) const override
Definition: proxy_factory.h:165
const ClassAttributesInterface * classAttributes(sc_core::sc_object *object) const override
Definition: proxy_factory.h:60
void registerInterface(conf_class_t *cls) const
Definition: proxy_factory.h:174
void registerLogGroups(sc_core::sc_object *object, conf_class_t *cls) const override
Definition: proxy_factory.h:124
bool registerClass(std::string sc_kind, const char *class_name) const override
Definition: proxy_factory.h:130
void registerInterfaces(sc_core::sc_object *object, conf_class_t *cls) const override
Definition: proxy_factory.h:112
void registerAttributes(sc_core::sc_object *object, conf_class_t *cls) const override
Definition: proxy_factory.h:75
conf_class_t * createConfClass(sc_core::sc_object *object, std::string name, std::string description, std::string documentation) const override
Definition: proxy_factory.h:68
void addSuppressProxyBuild(sc_core::sc_object *obj)
Definition: proxy_factory.h:170
bool canManufacture(sc_core::sc_object *object) const override
Definition: proxy_factory.h:49
void registerFeatures(sc_core::sc_object *object, ProxyInterface *proxy) const override
Definition: proxy_factory.h:127
Definition: proxy_interface.h:27
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:24