misc: Clean up and complete the gem5<->SystemC-TLM bridge [3/10]
The current TLM bridge only provides a Slave Port that allows the gem5 world to send request to the SystemC world. This patch series refractors and cleans up the existing code, and adds a Master Port that allows the SystemC world to send requests to the gem5 world. This patch: * Simplify the Slave Port by using a simple_initiator_socket. Testing Done: Example applications are still running. Reviewed at http://reviews.gem5.org/r/3686/ Signed-off-by: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
parent
55f5c4dd8a
commit
d2b19d2732
2 changed files with 7 additions and 20 deletions
|
@ -262,7 +262,7 @@ SCSlavePort::pec(
|
|||
/* Did another request arrive while blocked, schedule a retry */
|
||||
if (needToSendRequestRetry) {
|
||||
needToSendRequestRetry = false;
|
||||
iSocket.sendRetryReq();
|
||||
sendRetryReq();
|
||||
}
|
||||
}
|
||||
else if (phase == tlm::BEGIN_RESP)
|
||||
|
@ -276,7 +276,7 @@ SCSlavePort::pec(
|
|||
bool need_retry;
|
||||
if (packet->needsResponse()) {
|
||||
packet->makeResponse();
|
||||
need_retry = !iSocket.sendTimingResp(packet);
|
||||
need_retry = !sendTimingResp(packet);
|
||||
} else {
|
||||
need_retry = false;
|
||||
}
|
||||
|
@ -311,7 +311,7 @@ SCSlavePort::recvRespRetry()
|
|||
blockingResponse = NULL;
|
||||
PacketPtr packet = Gem5Extension::getExtension(trans).getPacket();
|
||||
|
||||
bool need_retry = !iSocket.sendTimingResp(packet);
|
||||
bool need_retry = !sendTimingResp(packet);
|
||||
|
||||
sc_assert(!need_retry);
|
||||
|
||||
|
@ -333,24 +333,16 @@ SCSlavePort::nb_transport_bw(tlm::tlm_generic_payload& trans,
|
|||
return tlm::TLM_ACCEPTED;
|
||||
}
|
||||
|
||||
void
|
||||
SCSlavePort::invalidate_direct_mem_ptr(sc_dt::uint64 start_range,
|
||||
sc_dt::uint64 end_range)
|
||||
{
|
||||
SC_REPORT_FATAL("SCSlavePort", "unimpl. func: invalidate_direct_mem_ptr");
|
||||
}
|
||||
|
||||
SCSlavePort::SCSlavePort(const std::string &name_,
|
||||
const std::string &systemc_name,
|
||||
ExternalSlave &owner_) :
|
||||
tlm::tlm_initiator_socket<>(systemc_name.c_str()),
|
||||
ExternalSlave::Port(name_, owner_),
|
||||
iSocket(*this),
|
||||
iSocket(systemc_name.c_str()),
|
||||
blockingRequest(NULL),
|
||||
needToSendRequestRetry(false),
|
||||
blockingResponse(NULL)
|
||||
{
|
||||
m_export.bind(*this);
|
||||
iSocket.register_nb_transport_bw(this, &SCSlavePort::nb_transport_bw);
|
||||
}
|
||||
|
||||
class SlavePortHandler : public ExternalSlave::Handler
|
||||
|
|
|
@ -67,12 +67,10 @@ namespace Gem5SystemC
|
|||
* original packet as a payload extension, the packet can be restored and send
|
||||
* back to the gem5 world upon receiving a response from the SystemC world.
|
||||
*/
|
||||
class SCSlavePort : public tlm::tlm_initiator_socket<>,
|
||||
public tlm::tlm_bw_transport_if<>,
|
||||
public ExternalSlave::Port
|
||||
class SCSlavePort : public ExternalSlave::Port
|
||||
{
|
||||
public:
|
||||
SCSlavePort &iSocket;
|
||||
tlm_utils::simple_initiator_socket<SCSlavePort> iSocket;
|
||||
|
||||
/** One instance of pe and the related callback needed */
|
||||
//payloadEvent<SCSlavePort> pe;
|
||||
|
@ -111,9 +109,6 @@ class SCSlavePort : public tlm::tlm_initiator_socket<>,
|
|||
tlm::tlm_phase& phase,
|
||||
sc_core::sc_time& t);
|
||||
|
||||
void invalidate_direct_mem_ptr(sc_dt::uint64 start_range,
|
||||
sc_dt::uint64 end_range);
|
||||
|
||||
public:
|
||||
SCSlavePort(const std::string &name_,
|
||||
const std::string &systemc_name,
|
||||
|
|
Loading…
Reference in a new issue