misc: Clean up and complete the gem5<->SystemC-TLM bridge [10/10]
authorChristian Menard <Christian.Menard@tu-dresden.de>
Fri, 10 Feb 2017 00:15:51 +0000 (19:15 -0500)
committerChristian Menard <Christian.Menard@tu-dresden.de>
Fri, 10 Feb 2017 00:15:51 +0000 (19:15 -0500)
The current TLM bridge only provides a Slave Port that allows the gem5
world to send request to the SystemC world. This patch series refractors
and cleans up the existing code, and adds a Master Port that allows the
SystemC world to send requests to the gem5 world.

This patch:
  * Add callbacks for the Gem5SimControl that are called at before and
  * after simulate()

Reviewed at http://reviews.gem5.org/r/3799/

Signed-off-by: Jason Lowe-Power <jason@lowepower.com>
util/tlm/sim_control.cc
util/tlm/sim_control.hh

index f6a3e4ffe9972c714dc4d7226a20fb5dd67215f5..a96daf2c808ce839613a0dcca4ac7dbde817780e 100644 (file)
@@ -152,6 +152,9 @@ Gem5SimControl::end_of_elaboration()
 void
 Gem5SimControl::run()
 {
+    // notify callback
+    beforeSimulate();
+
     GlobalSimLoopExitEvent *exit_event = NULL;
 
     if (simulationEnd == 0) {
@@ -165,6 +168,9 @@ Gem5SimControl::run()
 
     getEventQueue(0)->dump();
 
+    // notify callback
+    afterSimulate();
+
 #if TRY_CLEAN_DELETE
     config_manager->deleteObjects();
 #endif
index b411022de8425c66d780848d49083b54724a1873..399372c7f3d5a8734127def9095984ea3e5841e8 100644 (file)
@@ -77,6 +77,22 @@ class Gem5SimControl : public Module, public Gem5SimControlInterface
     /// Pointer to a previously created instance.
     static Gem5SimControl* instance;
 
+    /** A callback that is called from the run thread before gem5 simulation is
+     * started.
+     *
+     * A derived class may use this to perform any additional initializations
+     * prior simulation.
+     */
+    virtual void beforeSimulate() {}
+
+    /** A callback that is called from the run thread after gem5 simulation
+     * completed.
+     *
+     * A derived class may use this to perform any additional tasks after gem5
+     * exits. For instance, a derived class could use this to call sc_stop().
+     */
+    virtual void afterSimulate() {}
+
   public:
     SC_HAS_PROCESS(Gem5SimControl);