Christian Menard has uploaded this change for review. ( https://gem5-review.googlesource.com/5441

Change subject: misc: Add function to check if a TLM target can receive a timing req.
......................................................................

misc: Add function to check if a TLM target can receive a timing req.

This implements the new tryTiming interface of the base slave port.
This implementation allows a gem5 master to check if a TLM target module
is busy or if it can accept a timingReq.

Change-Id: I1265d2d41ed7f0878084d7be405f3f85e85cbb8f
---
M util/tlm/src/sc_slave_port.cc
M util/tlm/src/sc_slave_port.hh
2 files changed, 16 insertions(+), 5 deletions(-)



diff --git a/util/tlm/src/sc_slave_port.cc b/util/tlm/src/sc_slave_port.cc
index dcf7c5d..4dfe47f 100644
--- a/util/tlm/src/sc_slave_port.cc
+++ b/util/tlm/src/sc_slave_port.cc
@@ -170,10 +170,10 @@
 }

 /**
- *  Similar to TLM's non-blocking transport (AT)
+ * Check if a packet can be accepted in the current state.
  */
 bool
-SCSlavePort::recvTimingReq(PacketPtr packet)
+SCSlavePort::tryTiming(PacketPtr packet)
 {
     CAUGHT_UP;

@@ -188,9 +188,19 @@
      * required */
     sc_assert(!needToSendRequestRetry);

-    /* Remember if a request comes in while we're blocked so that a retry
-     * can be sent to gem5 */
-    if (blockingRequest) {
+    // we can only accept the packet if we are not blocked
+    return blockingRequest == nullptr;
+}
+
+/**
+ *  Similar to TLM's non-blocking transport (AT)
+ */
+bool
+SCSlavePort::recvTimingReq(PacketPtr packet)
+{
+    if (!tryTiming(packet)) {
+ /* Remember if a request comes in while we're blocked so that a retry
+         * can be sent to gem5 */
         needToSendRequestRetry = true;
         return false;
     }
diff --git a/util/tlm/src/sc_slave_port.hh b/util/tlm/src/sc_slave_port.hh
index 6f8f6a6..ccd264c 100644
--- a/util/tlm/src/sc_slave_port.hh
+++ b/util/tlm/src/sc_slave_port.hh
@@ -98,6 +98,7 @@
     /** The gem5 Port slave interface */
     Tick recvAtomic(PacketPtr packet);
     void recvFunctional(PacketPtr packet);
+    bool tryTiming(PacketPtr packet);
     bool recvTimingReq(PacketPtr packet);
     bool recvTimingSnoopResp(PacketPtr packet);
     void recvRespRetry();

--
To view, visit https://gem5-review.googlesource.com/5441
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1265d2d41ed7f0878084d7be405f3f85e85cbb8f
Gerrit-Change-Number: 5441
Gerrit-PatchSet: 1
Gerrit-Owner: Christian Menard <christian.men...@tu-dresden.de>
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to