mem-cache: Create an address aware TempCacheBlk
[gem5.git] / src / mem / comm_monitor.hh
index 941de23ab42a8e52976c7f848c422e1b09103c95..d27594d232f0f158dde263c0b2a0566892ebbf1d 100644 (file)
@@ -1,6 +1,8 @@
 /*
  * Copyright (c) 2012-2013, 2015 ARM Limited
- * All rights reserved
+ * Copyright (c) 2016 Google Inc.
+ * Copyright (c) 2017, Centre National de la Recherche Scientifique
+ * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
  * not be construed as granting a license to any other intellectual
@@ -36,6 +38,8 @@
  *
  * Authors: Thomas Grass
  *          Andreas Hansson
+ *          Rahul Thakur
+ *          Pierre-Yves Peneau
  */
 
 #ifndef __MEM_COMM_MONITOR_HH__
 
 #include "base/statistics.hh"
 #include "mem/mem_object.hh"
-#include "mem/stack_dist_calc.hh"
 #include "params/CommMonitor.hh"
-#include "proto/protoio.hh"
 #include "sim/probe/mem.hh"
-#include "sim/system.hh"
 
 /**
  * The communication monitor is a MemObject which can monitor statistics of
@@ -77,20 +78,17 @@ class CommMonitor : public MemObject
      */
     CommMonitor(Params* params);
 
-    /** Destructor */
-    ~CommMonitor();
-
-    void init() M5_ATTR_OVERRIDE;
-    void regStats() M5_ATTR_OVERRIDE;
-    void startup() M5_ATTR_OVERRIDE;
-    void regProbePoints() M5_ATTR_OVERRIDE;
+    void init() override;
+    void regStats() override;
+    void startup() override;
+    void regProbePoints() override;
 
   public: // MemObject interfaces
     BaseMasterPort& getMasterPort(const std::string& if_name,
-                                  PortID idx = InvalidPortID) M5_ATTR_OVERRIDE;
+                                  PortID idx = InvalidPortID) override;
 
     BaseSlavePort& getSlavePort(const std::string& if_name,
-                                PortID idx = InvalidPortID) M5_ATTR_OVERRIDE;
+                                PortID idx = InvalidPortID) override;
 
   private:
 
@@ -173,6 +171,11 @@ class CommMonitor : public MemObject
             mon.recvReqRetry();
         }
 
+        void recvRetrySnoopResp()
+        {
+            mon.recvRetrySnoopResp();
+        }
+
       private:
 
         CommMonitor& mon;
@@ -254,6 +257,8 @@ class CommMonitor : public MemObject
 
     bool recvTimingSnoopResp(PacketPtr pkt);
 
+    void recvRetrySnoopResp();
+
     AddrRangeList getAddrRanges() const;
 
     bool isSnooping() const;
@@ -268,7 +273,7 @@ class CommMonitor : public MemObject
     struct MonitorStats
     {
 
-        /** Disable flag for burst length historgrams **/
+        /** Disable flag for burst length histograms **/
         bool disableBurstLengthHists;
 
         /** Histogram of read burst lengths */
@@ -356,6 +361,12 @@ class CommMonitor : public MemObject
         /** Disable flag for address distributions. */
         bool disableAddrDists;
 
+        /** Address mask for sources of read accesses to be captured */
+        const Addr readAddrMask;
+
+        /** Address mask for sources of write accesses to be captured */
+        const Addr writeAddrMask;
+
         /**
          * Histogram of number of read accesses to addresses over
          * time.
@@ -384,22 +395,22 @@ class CommMonitor : public MemObject
             outstandingReadReqs(0), outstandingWriteReqs(0),
             disableTransactionHists(params->disable_transaction_hists),
             readTrans(0), writeTrans(0),
-            disableAddrDists(params->disable_addr_dists)
+            disableAddrDists(params->disable_addr_dists),
+            readAddrMask(params->read_addr_mask),
+            writeAddrMask(params->write_addr_mask)
         { }
 
+        void updateReqStats(const ProbePoints::PacketInfo& pkt, bool is_atomic,
+                            bool expects_response);
+        void updateRespStats(const ProbePoints::PacketInfo& pkt, Tick latency,
+                             bool is_atomic);
     };
 
     /** This function is called periodically at the end of each time bin */
     void samplePeriodic();
 
-    /**
-     * Callback to flush and close all open output streams on exit. If
-     * we were calling the destructor it could be done there.
-     */
-    void closeStreams();
-
     /** Periodic event called at the end of each simulation time bin */
-    EventWrapper<CommMonitor, &CommMonitor::samplePeriodic> samplePeriodicEvent;
+    EventFunctionWrapper samplePeriodicEvent;
 
     /**
      *@{
@@ -411,23 +422,8 @@ class CommMonitor : public MemObject
     /** Sample period in seconds */
     const double samplePeriod;
 
-    /** Address mask for sources of read accesses to be captured */
-    const Addr readAddrMask;
-
-    /** Address mask for sources of write accesses to be captured */
-    const Addr writeAddrMask;
-
-    /** Optional stack distance calculator */
-    StackDistCalc *const stackDistCalc;
-
-    /** The system in which the monitor lives */
-    System *const system;
-
     /** @} */
 
-    /** Output stream for a potential trace. */
-    ProtoOutputStream *traceStream;
-
     /** Instantiate stats */
     MonitorStats stats;