From 8e89366ada0213d45af088945406c82187b5014a Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 7 Mar 2019 00:46:29 -0800 Subject: [PATCH] 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 Maintainer: Andreas Sandberg --- src/python/m5/SimObject.py | 4 ++++ src/sim/sim_object.cc | 6 ++++++ src/sim/sim_object.hh | 13 +++++++++++++ 3 files changed, 23 insertions(+) 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; @@ -169,6 +170,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, -- 2.30.2