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/sim | |
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/sim')
-rw-r--r-- | src/sim/sim_object.cc | 6 | ||||
-rw-r--r-- | src/sim/sim_object.hh | 13 |
2 files changed, 19 insertions, 0 deletions
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 |