diff options
author | Gabe Black <gabeblack@google.com> | 2019-03-07 00:46:29 -0800 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2019-03-19 10:21:14 +0000 |
commit | 8e89366ada0213d45af088945406c82187b5014a (patch) | |
tree | d29d7ad18e311c3e9dca5296ed1c7cf2e53ee6fd /src | |
parent | f870912a00dfa6b1ef8139ed35f65ef886b198c6 (diff) | |
download | gem5-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.py | 4 | ||||
-rw-r--r-- | src/sim/sim_object.cc | 6 | ||||
-rw-r--r-- | src/sim/sim_object.hh | 13 |
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 |