mem-cache: Create an address aware TempCacheBlk
[gem5.git] / src / mem / fs_translating_port_proxy.cc
index cbf85d1e43d2a51403079fac5b0c0d37ce2f40b2..15ad8238c11bc5931db0cc1726165ae7e750af99 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011 ARM Limited
+ * Copyright (c) 2011,2013 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
  * Port object definitions.
  */
 
+#include "mem/fs_translating_port_proxy.hh"
+
+#include "arch/vtophys.hh"
 #include "base/chunk_generator.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
-#include "mem/fs_translating_port_proxy.hh"
-
-using namespace TheISA;
+#include "sim/system.hh"
 
 FSTranslatingPortProxy::FSTranslatingPortProxy(ThreadContext *tc)
-    : PortProxy(tc->getCpuPtr()->getDataPort()), _tc(tc)
+    : PortProxy(tc->getCpuPtr()->getDataPort(),
+                tc->getSystemPtr()->cacheLineSize()), _tc(tc)
 {
 }
 
-FSTranslatingPortProxy::FSTranslatingPortProxy(Port &port)
-    : PortProxy(port), _tc(NULL)
+FSTranslatingPortProxy::FSTranslatingPortProxy(MasterPort &port,
+                                               unsigned int cacheLineSize)
+    : PortProxy(port, cacheLineSize), _tc(NULL)
 {
 }
 
@@ -68,7 +71,7 @@ FSTranslatingPortProxy::~FSTranslatingPortProxy()
 }
 
 void
-FSTranslatingPortProxy::readBlob(Addr addr, uint8_t *p, int size)
+FSTranslatingPortProxy::readBlob(Addr addr, uint8_t *p, int size) const
 {
     Addr paddr;
     for (ChunkGenerator gen(addr, size, TheISA::PageBytes); !gen.done();
@@ -79,13 +82,13 @@ FSTranslatingPortProxy::readBlob(Addr addr, uint8_t *p, int size)
         else
             paddr = TheISA::vtophys(gen.addr());
 
-        PortProxy::readBlob(paddr, p, gen.size());
+        PortProxy::readBlobPhys(paddr, 0, p, gen.size());
         p += gen.size();
     }
 }
 
 void
-FSTranslatingPortProxy::writeBlob(Addr addr, uint8_t *p, int size)
+FSTranslatingPortProxy::writeBlob(Addr addr, const uint8_t *p, int size) const
 {
     Addr paddr;
     for (ChunkGenerator gen(addr, size, TheISA::PageBytes); !gen.done();
@@ -96,13 +99,13 @@ FSTranslatingPortProxy::writeBlob(Addr addr, uint8_t *p, int size)
         else
             paddr = TheISA::vtophys(gen.addr());
 
-        PortProxy::writeBlob(paddr, p, gen.size());
+        PortProxy::writeBlobPhys(paddr, 0, p, gen.size());
         p += gen.size();
     }
 }
 
 void
-FSTranslatingPortProxy::memsetBlob(Addr address, uint8_t v, int size)
+FSTranslatingPortProxy::memsetBlob(Addr address, uint8_t v, int size) const
 {
     Addr paddr;
     for (ChunkGenerator gen(address, size, TheISA::PageBytes); !gen.done();
@@ -113,7 +116,7 @@ FSTranslatingPortProxy::memsetBlob(Addr address, uint8_t v, int size)
         else
             paddr = TheISA::vtophys(gen.addr());
 
-        PortProxy::memsetBlob(paddr, v, gen.size());
+        PortProxy::memsetBlobPhys(paddr, 0, v, gen.size());
     }
 }
 
@@ -121,30 +124,26 @@ void
 CopyOut(ThreadContext *tc, void *dest, Addr src, size_t cplen)
 {
     uint8_t *dst = (uint8_t *)dest;
-    FSTranslatingPortProxy* vp = tc->getVirtProxy();
-
-    vp->readBlob(src, dst, cplen);
+    tc->getVirtProxy().readBlob(src, dst, cplen);
 }
 
 void
-CopyIn(ThreadContext *tc, Addr dest, void *source, size_t cplen)
+CopyIn(ThreadContext *tc, Addr dest, const void *source, size_t cplen)
 {
     uint8_t *src = (uint8_t *)source;
-    FSTranslatingPortProxy* vp = tc->getVirtProxy();
-
-    vp->writeBlob(dest, src, cplen);
+    tc->getVirtProxy().writeBlob(dest, src, cplen);
 }
 
 void
 CopyStringOut(ThreadContext *tc, char *dst, Addr vaddr, size_t maxlen)
 {
     char *start = dst;
-    FSTranslatingPortProxyvp = tc->getVirtProxy();
+    FSTranslatingPortProxy &vp = tc->getVirtProxy();
 
     bool foundNull = false;
     while ((dst - start + 1) < maxlen && !foundNull) {
-        vp->readBlob(vaddr++, (uint8_t*)dst, 1);
-        if (dst == '\0')
+        vp.readBlob(vaddr++, (uint8_t*)dst, 1);
+        if (*dst == '\0')
             foundNull = true;
         dst++;
     }
@@ -154,13 +153,13 @@ CopyStringOut(ThreadContext *tc, char *dst, Addr vaddr, size_t maxlen)
 }
 
 void
-CopyStringIn(ThreadContext *tc, char *src, Addr vaddr)
+CopyStringIn(ThreadContext *tc, const char *src, Addr vaddr)
 {
-    FSTranslatingPortProxyvp = tc->getVirtProxy();
+    FSTranslatingPortProxy &vp = tc->getVirtProxy();
     for (ChunkGenerator gen(vaddr, strlen(src), TheISA::PageBytes); !gen.done();
-            gen.next())
+         gen.next())
     {
-        vp->writeBlob(gen.addr(), (uint8_t*)src, gen.size());
+        vp.writeBlob(gen.addr(), (uint8_t*)src, gen.size());
         src += gen.size();
     }
 }