16#ifndef SIMICS_SYSTEMC_TLM2SIMICS_GASKET_FACTORY_H
17#define SIMICS_SYSTEMC_TLM2SIMICS_GASKET_FACTORY_H
20#include <tlm_utils/multi_passthrough_initiator_socket.h>
35template<
unsigned int BUSWIDTH,
typename TYPES>
37 const std::string& socket_name,
38 const simics::ConfObjectRef &simics_obj) {
39 std::string name =
"gasket_" + socket_name;
40 std::replace(name.begin(), name.end(),
'.',
'_');
42 const char* char_name = name.c_str();
43 if (sc_core::sc_find_object(char_name))
44 char_name = sc_core::sc_gen_unique_name(char_name);
55template<
unsigned int BUSWIDTH,
typename TYPES,
56 int N, sc_core::sc_port_policy POL>
58 tlm::tlm_target_socket<BUSWIDTH, TYPES, N, POL> *target_socket,
59 const simics::ConfObjectRef &simics_obj) {
60 FATAL_ERROR_IF(target_socket->name() == NULL,
61 "target socket not fully initialized, name missing");
62 auto gasket = internal::createGasket<BUSWIDTH, TYPES>(
63 target_socket->name(), simics_obj);
64 gasket->bind(*target_socket);
69template<
unsigned int BUSWIDTH,
typename TYPES,
70 int N, sc_core::sc_port_policy POL>
72 tlm::tlm_initiator_socket<BUSWIDTH, TYPES, N, POL> *initiator_socket,
73 const simics::ConfObjectRef &simics_obj) {
74 FATAL_ERROR_IF(initiator_socket->name() == NULL,
75 "initiator socket not fully initialized, name missing");
76 auto gasket = internal::createGasket<BUSWIDTH, TYPES>(
77 initiator_socket->name(), simics_obj);
78 gasket->bind(*initiator_socket);
84template<
unsigned int BUSWIDTH,
typename TYPES,
85 int N, sc_core::sc_port_policy POL>
87 tlm::tlm_initiator_socket<BUSWIDTH, TYPES, N, POL> *initiator_socket,
88 const simics::ConfObjectRef &simics_obj) {
89 FATAL_ERROR_IF(initiator_socket->name() == NULL,
90 "initiator socket not fully initialized, name missing");
91 std::string name =
"gasket_";
92 name += initiator_socket->name();
93 std::replace(name.begin(), name.end(),
'.',
'_');
95 const char* char_name = name.c_str();
96 if (sc_core::sc_find_object(char_name))
97 char_name = sc_core::sc_gen_unique_name(char_name);
100 initiator_socket, char_name, simics_obj);
105template<
typename MODULE,
unsigned int BUSWIDTH,
typename TYPES,
106 unsigned int N, sc_core::sc_port_policy POL>
108 tlm_utils::multi_passthrough_initiator_socket<
109 MODULE, BUSWIDTH, TYPES, N, POL> *initiator_socket,
110 const simics::ConfObjectRef &simics_obj) {
111 FATAL_ERROR_IF(initiator_socket->name() == NULL,
112 "initiator socket not fully initialized, name missing");
113 auto gasket = internal::createGasket<BUSWIDTH, TYPES>(
114 initiator_socket->name(), simics_obj);
115 gasket->bind(*initiator_socket);
120 const simics::ConfObjectRef &simics_obj);
126 const ConfObjectRef &simics_obj) = 0;
129template <
unsigned int BUSWIDTH,
typename TYPES,
int N = 1,
130 sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND>
133 typedef tlm::tlm_base_initiator_socket<BUSWIDTH,
134 tlm::tlm_fw_transport_if<TYPES>,
135 tlm::tlm_bw_transport_if<TYPES>,
139 const ConfObjectRef &simics_obj) {
144 auto gasket = internal::createGasket<BUSWIDTH, TYPES>(
145 socket->name(), simics_obj);
146 gasket->bind(*socket);
Definition: registry.h:88
static GasketInterface::Ptr bind(tlm::tlm_initiator_socket< BUSWIDTH, TYPES, N, POL > *socket, const char *name, const simics::ConfObjectRef &simics_obj)
Definition: gasket_dispatcher.h:75
Definition: gasket_factory.h:122
virtual ~GasketFactoryInterface()
Definition: gasket_factory.h:124
virtual GasketInterface::Ptr create(sc_core::sc_object *object, const ConfObjectRef &simics_obj)=0
Definition: gasket_factory.h:131
virtual GasketInterface::Ptr create(sc_core::sc_object *object, const ConfObjectRef &simics_obj)
Definition: gasket_factory.h:138
tlm::tlm_base_initiator_socket< BUSWIDTH, tlm::tlm_fw_transport_if< TYPES >, tlm::tlm_bw_transport_if< TYPES >, N, POL > Socket
Definition: gasket_factory.h:136
std::shared_ptr< GasketInterface > Ptr
Definition: gasket_interface.h:32
Implements core functionality for receiving a TLM2 transaction over a socket.
Definition: gasket.h:63
GasketInterface::Ptr createGasketByName(std::string socket_name, const simics::ConfObjectRef &simics_obj)
Definition: pci_bus_interface.h:24