mem: Do not include snoop-filter latency in crossbar occupancy
[gem5.git] / src / mem / snoop_filter.hh
index c1bb65dfc9ec467c7a3d5860f3d18bdc433258f3..1e7add66061db355ab5a0d7fb261b13e174a9dc5 100755 (executable)
@@ -50,6 +50,7 @@
 #include "base/hashmap.hh"
 #include "mem/packet.hh"
 #include "mem/port.hh"
+#include "mem/qport.hh"
 #include "params/SnoopFilter.hh"
 #include "sim/sim_object.hh"
 #include "sim/system.hh"
@@ -85,7 +86,7 @@
  */
 class SnoopFilter : public SimObject {
   public:
-    typedef std::vector<SlavePort*> SnoopList;
+    typedef std::vector<QueuedSlavePort*> SnoopList;
 
     SnoopFilter (const SnoopFilterParams *p) : SimObject(p),
         linesize(p->system->cacheLineSize()), lookupLatency(p->lookup_latency)
@@ -98,7 +99,7 @@ class SnoopFilter : public SimObject {
      *
      * @param bus_slave_ports Vector of slave ports that the bus is attached to.
      */
-    void setSlavePorts(const std::vector<SlavePort*>& bus_slave_ports) {
+    void setSlavePorts(const SnoopList& bus_slave_ports) {
         slavePorts = bus_slave_ports;
     }
 
@@ -188,6 +189,8 @@ class SnoopFilter : public SimObject {
         return std::make_pair(empty , latency);
     }
 
+    virtual void regStats();
+
   protected:
     typedef uint64_t SnoopMask;
    /**
@@ -227,6 +230,15 @@ class SnoopFilter : public SimObject {
     const unsigned linesize;
     /** Latency for doing a lookup in the filter */
     const Cycles lookupLatency;
+
+    /** Statistics */
+    Stats::Scalar totRequests;
+    Stats::Scalar hitSingleRequests;
+    Stats::Scalar hitMultiRequests;
+
+    Stats::Scalar totSnoops;
+    Stats::Scalar hitSingleSnoops;
+    Stats::Scalar hitMultiSnoops;
 };
 
 inline SnoopFilter::SnoopMask