summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2019-03-07 00:46:29 -0800
committerGabe Black <gabeblack@google.com>2019-03-19 10:21:14 +0000
commit8e89366ada0213d45af088945406c82187b5014a (patch)
treed29d7ad18e311c3e9dca5296ed1c7cf2e53ee6fd /src
parentf870912a00dfa6b1ef8139ed35f65ef886b198c6 (diff)
downloadgem5-8e89366ada0213d45af088945406c82187b5014a.tar.xz
sim: Add a getPort function to SimObject.
This will retrieve a Port object from a given SimObject (which might not be a MemObject) no matter what flavor of Port it is. Change-Id: I636b85e9d4929a05a769e165849106bcb5f3e9c1 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17037 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src')
-rw-r--r--src/python/m5/SimObject.py4
-rw-r--r--src/sim/sim_object.cc6
-rw-r--r--src/sim/sim_object.hh13
3 files changed, 23 insertions, 0 deletions
diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py
index b74e93a87..0e29980c6 100644
--- a/src/python/m5/SimObject.py
+++ b/src/python/m5/SimObject.py
@@ -1642,6 +1642,10 @@ class SimObject(object):
def getValue(self):
return self.getCCObject()
+ @cxxMethod(return_value_policy="reference")
+ def getPort(self, if_name, idx):
+ pass
+
# Create C++ port connections corresponding to the connections in
# _port_refs
def connectPorts(self):
diff --git a/src/sim/sim_object.cc b/src/sim/sim_object.cc
index ab92ae55a..7b794a0b7 100644
--- a/src/sim/sim_object.cc
+++ b/src/sim/sim_object.cc
@@ -133,6 +133,12 @@ SimObject::getProbeManager()
return probeManager;
}
+Port &
+SimObject::getPort(const std::string &if_name, PortID idx)
+{
+ fatal("%s does not have any port named %s\n", name(), if_name);
+}
+
//
// static function: serialize all SimObjects.
//
diff --git a/src/sim/sim_object.hh b/src/sim/sim_object.hh
index 42a19bbe7..5c9bf0019 100644
--- a/src/sim/sim_object.hh
+++ b/src/sim/sim_object.hh
@@ -56,6 +56,7 @@
#include "sim/drain.hh"
#include "sim/eventq.hh"
#include "sim/eventq_impl.hh"
+#include "sim/port.hh"
#include "sim/serialize.hh"
class EventManager;
@@ -170,6 +171,18 @@ class SimObject : public EventManager, public Serializable, public Drainable
ProbeManager *getProbeManager();
/**
+ * Get a port with a given name and index. This is used at binding time
+ * and returns a reference to a protocol-agnostic port.
+ *
+ * @param if_name Port name
+ * @param idx Index in the case of a VectorPort
+ *
+ * @return A reference to the given port
+ */
+ virtual Port &getPort(const std::string &if_name,
+ PortID idx=InvalidPortID);
+
+ /**
* startup() is the final initialization call before simulation.
* All state is initialized (including unserialized state, if any,
* such as the curTick() value), so this is the appropriate place to