SystemC Library API Reference Manual
Reference documentation for the Simics SystemC Library.
 
Loading...
Searching...
No Matches
interface_provider.h
Go to the documentation of this file.
1/*
2 © 2013 Intel Corporation
3
4 This software and the related documents are Intel copyrighted materials, and
5 your use of them is governed by the express license under which they were
6 provided to you ("License"). Unless the License provides otherwise, you may
7 not use, modify, copy, publish, distribute, disclose or transmit this software
8 or the related documents without Intel's prior written permission.
9
10 This software and the related documents are provided as is, with no express or
11 implied warranties, other than those that are expressly stated in the License.
12*/
13
14#ifndef SIMICS_SYSTEMC_INTERFACE_PROVIDER_H
15#define SIMICS_SYSTEMC_INTERFACE_PROVIDER_H
16
17#include <simics/conf-object.h>
19
20#include <set>
21
22namespace simics {
23namespace systemc {
24
31 public:
33 public:
35
36 virtual void update_target(ConfObjectRef old_target,
37 ConfObjectRef new_target) = 0;
38 };
39
40 explicit InterfaceProvider(const char *interface_name)
41 : interface_(NULL), interface_name_(interface_name), optional_(false),
43 }
47 // NOTE: The set cannot be owned by the class, it must be created and
48 // destroyed by the CTOR/DTOR; or else the DmiTransactionHandler could
49 // end up accessing an invalid set when invoking
50 // remove_target_update_listener() from its DTOR
53 }
54
55 // Interface for derived class to define how to set/use simics interface
56 virtual void set_target(const ConfObjectRef &obj) {
57 for (std::set<TargetUpdateListener*>::iterator it
58 = target_update_listeners_->begin();
59 it != target_update_listeners_->end(); ++it) {
60 (*it)->update_target(target_obj_, obj);
61 }
62 target_obj_ = simics::ConfObjectRef(obj);
63 interface_ = NULL;
64 }
65
67 if (l) {
68 target_update_listeners_->insert(l);
69 }
70 }
71
73 // NOTE: could be called from a DTOR, must check for valid set
76 }
77 }
78
79 virtual const simics::ConfObjectRef &target() const {
80 return target_obj_;
81 }
82
83 virtual bool has_interface() {
84 return get_interface() != NULL;
85 }
86
87 virtual const char *get_interface_name() const {
88 return interface_name_;
89 }
90
91 template<typename TInterface>
93 interface_t *iface = const_cast<interface_t *>(get_interface());
95 static_cast<TInterface*>(iface));
96 }
97
98 virtual void set_optional(bool optional) {
100 }
101 virtual bool optional() const {
102 return optional_;
103 }
104
105 protected:
106 virtual const interface_t *get_interface() {
107 if (interface_ == NULL) {
109 target_obj_.get_interface(interface_name_) : NULL;
110 }
111 return interface_;
112 }
113
114 simics::ConfObjectRef target_obj_;
115 const interface_t *interface_;
116 const char *interface_name_;
118 std::set<TargetUpdateListener*> *target_update_listeners_;
119};
120
123 public:
125 const char *interface_name)
126 : InterfaceProvider(interface_name), parent_(parent) {
129 }
132 }
133
134 void set_target(const ConfObjectRef &obj) override {
135 parent_->set_target(obj);
136 }
137
138 void set_optional(bool optional) override {
140 }
141 bool optional() const override {
142 return parent_->optional();
143 }
144
145 protected:
146 void update_target(ConfObjectRef old_target,
147 ConfObjectRef new_target) override {
149 }
150
152};
153
154} // namespace systemc
155} // namespace simics
156
157#endif
Definition: interface_provider.h:122
~InterfaceProviderAddOn()
Definition: interface_provider.h:130
void set_target(const ConfObjectRef &obj) override
Definition: interface_provider.h:134
void set_optional(bool optional) override
Definition: interface_provider.h:138
void update_target(ConfObjectRef old_target, ConfObjectRef new_target) override
Definition: interface_provider.h:146
InterfaceProviderAddOn(InterfaceProvider *parent, const char *interface_name)
Definition: interface_provider.h:124
bool optional() const override
Definition: interface_provider.h:141
InterfaceProvider * parent_
Definition: interface_provider.h:151
virtual ~TargetUpdateListener()
Definition: interface_provider.h:34
virtual void update_target(ConfObjectRef old_target, ConfObjectRef new_target)=0
Returns the interface provided by the associated Simics object.
Definition: interface_provider.h:30
simics::ConfObjectRef target_obj_
Definition: interface_provider.h:114
InterfaceProvider & operator=(const InterfaceProvider &)=delete
bool optional_
Definition: interface_provider.h:117
virtual bool optional() const
Definition: interface_provider.h:101
virtual void set_optional(bool optional)
Definition: interface_provider.h:98
std::set< TargetUpdateListener * > * target_update_listeners_
Definition: interface_provider.h:118
const char * interface_name_
Definition: interface_provider.h:116
virtual const char * get_interface_name() const
Definition: interface_provider.h:87
virtual ~InterfaceProvider()
Definition: interface_provider.h:46
InterfaceProvider(const InterfaceProvider &)=delete
virtual void set_target(const ConfObjectRef &obj)
Definition: interface_provider.h:56
virtual void add_target_update_listener(TargetUpdateListener *l)
Definition: interface_provider.h:66
virtual void remove_target_update_listener(TargetUpdateListener *l)
Definition: interface_provider.h:72
SimicsTargetLock< TInterface > get_interface()
Definition: interface_provider.h:92
InterfaceProvider(const char *interface_name)
Definition: interface_provider.h:40
virtual bool has_interface()
Definition: interface_provider.h:83
virtual const interface_t * get_interface()
Definition: interface_provider.h:106
virtual const simics::ConfObjectRef & target() const
Definition: interface_provider.h:79
const interface_t * interface_
Definition: interface_provider.h:115
Definition: simics_target_lock.h:25
Definition: adapter.h:79