Fix address range calculation. Still need bus to handle snoop ranges.
authorRon Dreslinski <rdreslin@umich.edu>
Fri, 7 Jul 2006 20:02:22 +0000 (16:02 -0400)
committerRon Dreslinski <rdreslin@umich.edu>
Fri, 7 Jul 2006 20:02:22 +0000 (16:02 -0400)
On the way towards multi-level caches (L2)

src/mem/cache/base_cache.cc:
src/mem/cache/base_cache.hh:
    Fix address range calculation.  Still need bus to handle snoop ranges.

--HG--
extra : convert_revision : 800078d88aab5e563f4a9bb599f91cd44f36e625

src/mem/cache/base_cache.cc
src/mem/cache/base_cache.hh

index b2caca765ce2f37fb0998ff87d027fbad263af2c..be9769fdc19bb0384afc878d059fa1a2904300c7 100644 (file)
@@ -59,7 +59,7 @@ void
 BaseCache::CachePort::getDeviceAddressRanges(AddrRangeList &resp,
                                        AddrRangeList &snoop)
 {
-    cache->getAddressRanges(resp, snoop);
+    cache->getAddressRanges(resp, snoop, isCpuSide);
 }
 
 int
@@ -166,6 +166,14 @@ BaseCache::getPort(const std::string &if_name, int idx)
     else panic("Port name %s unrecognized\n", if_name);
 }
 
+void
+BaseCache::init()
+{
+    if (!cpuSidePort || !memSidePort)
+        panic("Cache not hooked up on both sides\n");
+    cpuSidePort->sendStatusChange(Port::RangeChange);
+}
+
 void
 BaseCache::regStats()
 {
index f832735dbe75b9b29d06ede7145cbb6d7cb18e71..0d1bfdfdbd5a8a1061525a4fe066cf5c69479d97 100644 (file)
@@ -143,9 +143,19 @@ class BaseCache : public MemObject
         fatal("No implementation");
     }
 
-    virtual void recvStatusChange(Port::Status status, bool isCpuSide)
+    void recvStatusChange(Port::Status status, bool isCpuSide)
     {
-        fatal("No implementation");
+        if (status == Port::RangeChange)
+        {
+            if (!isCpuSide)
+            {
+                cpuSidePort->sendStatusChange(Port::RangeChange);
+            }
+            else
+            {
+                memSidePort->sendStatusChange(Port::RangeChange);
+            }
+        }
     }
 
     virtual Packet *getPacket()
@@ -320,6 +330,8 @@ class BaseCache : public MemObject
         memSidePort = NULL;
     }
 
+    virtual void init();
+
     /**
      * Query block size of a cache.
      * @return  The block size
@@ -519,9 +531,18 @@ class BaseCache : public MemObject
      */
     void rangeChange() {}
 
-    void getAddressRanges(AddrRangeList &resp, AddrRangeList &snoop)
+    void getAddressRanges(AddrRangeList &resp, AddrRangeList &snoop, bool isCpuSide)
     {
-        panic("Unimplimented\n");
+        if (isCpuSide)
+        {
+            AddrRangeList dummy;
+            memSidePort->getPeerAddressRanges(resp, dummy);
+        }
+        else
+        {
+            //This is where snoops get updated
+            return;
+        }
     }
 };