23 using MemTxResult = qemu::MemoryRegion::MemTxResult;
24 using TlmPayload = tlm::tlm_generic_payload;
28 std::shared_ptr<qemu::AddressSpace> m_as;
32 m_as = m_mr.get_inst().address_space_new();
33 m_as->init(m_mr,
"qemu-target-socket");
50 if (
initiator.get_inst_id() != m_mr.get_inst_id()) {
82 virtual void b_transport(TlmPayload&
trans, sc_core::sc_time&
t)
86 unsigned int size =
trans.get_data_length();
91 if (
trans.get_command() == tlm::TLM_IGNORE_COMMAND) {
92 trans.set_response_status(tlm::TLM_OK_RESPONSE);
98 switch (
trans.get_command()) {
99 case tlm::TLM_READ_COMMAND:
100 res = m_as->read(
addr, data, size,
attrs);
103 case tlm::TLM_WRITE_COMMAND:
104 res = m_as->write(
addr, data, size,
attrs);
116 case qemu::MemoryRegionOps::MemTxOK:
117 trans.set_response_status(tlm::TLM_OK_RESPONSE);
120 case qemu::MemoryRegionOps::MemTxDecodeError:
121 trans.set_response_status(tlm::TLM_ADDRESS_ERROR_RESPONSE);
124 case qemu::MemoryRegionOps::MemTxError:
125 trans.set_response_status(tlm::TLM_GENERIC_ERROR_RESPONSE);
129 trans.set_response_status(tlm::TLM_COMMAND_ERROR_RESPONSE);
136 virtual tlm::tlm_sync_enum nb_transport_fw(TlmPayload&
trans, tlm::tlm_phase&
phase, sc_core::sc_time&
t)
140 return tlm::TLM_ACCEPTED;
143 virtual bool get_direct_mem_ptr(TlmPayload&
trans, tlm::tlm_dmi& dmi_data) {
return false; }
145 virtual unsigned int transport_dbg(TlmPayload&
trans)
147 unsigned int size =
trans.get_data_length();
148 sc_core::sc_time delay = sc_core::SC_ZERO_TIME;
149 b_transport(
trans, delay);
150 if (
trans.get_response_status() == tlm::TLM_OK_RESPONSE)
159 :
public tlm::tlm_target_socket<BUSWIDTH, tlm::tlm_base_protocol_types, 1, sc_core::SC_ZERO_OR_MORE_BOUND>
162 using TlmTargetSocket = tlm::tlm_target_socket<
BUSWIDTH, tlm::tlm_base_protocol_types, 1,
163 sc_core::SC_ZERO_OR_MORE_BOUND>;
164 using TlmPayload = tlm::tlm_generic_payload;
174 TlmTargetSocket::bind(m_bridge);