Merge with head, hopefully the last time for this batch.
[gem5.git] / src / mem / port.cc
index da719bbd9a620c749400034c6c5f23a3da24ce49..fb1715db699dc9a282256908b6389bc6a7954333 100644 (file)
 
 #include "base/chunk_generator.hh"
 #include "base/trace.hh"
+#include "debug/Config.hh"
+#include "mem/mem_object.hh"
 #include "mem/port.hh"
 
+Port::Port(const std::string &_name, MemObject *_owner)
+    : portName(_name), peer(NULL), owner(_owner)
+{
+}
+
+Port::~Port()
+{
+}
+
 void
 Port::setPeer(Port *port)
 {
     DPRINTF(Config, "setting peer to %s\n", port->name());
+
     peer = port;
 }
 
 void
-Port::blobHelper(Addr addr, uint8_t *p, int size, Packet::Command cmd)
+Port::setOwner(MemObject *_owner)
+{
+    owner = _owner;
+}
+
+void
+Port::blobHelper(Addr addr, uint8_t *p, int size, MemCmd cmd)
 {
     Request req;
-    Packet pkt(&req, cmd, Packet::Broadcast);
 
     for (ChunkGenerator gen(addr, size, peerBlockSize());
          !gen.done(); gen.next()) {
         req.setPhys(gen.addr(), gen.size(), 0);
-        pkt.reinitFromRequest();
+        Packet pkt(&req, cmd, Packet::Broadcast);
         pkt.dataStatic(p);
         sendFunctional(&pkt);
         p += gen.size();
@@ -64,13 +81,13 @@ Port::blobHelper(Addr addr, uint8_t *p, int size, Packet::Command cmd)
 void
 Port::writeBlob(Addr addr, uint8_t *p, int size)
 {
-    blobHelper(addr, p, size, Packet::WriteReq);
+    blobHelper(addr, p, size, MemCmd::WriteReq);
 }
 
 void
 Port::readBlob(Addr addr, uint8_t *p, int size)
 {
-    blobHelper(addr, p, size, Packet::ReadReq);
+    blobHelper(addr, p, size, MemCmd::ReadReq);
 }
 
 void
@@ -80,7 +97,19 @@ Port::memsetBlob(Addr addr, uint8_t val, int size)
     uint8_t *buf = new uint8_t[size];
 
     std::memset(buf, val, size);
-    blobHelper(addr, buf, size, Packet::WriteReq);
+    blobHelper(addr, buf, size, MemCmd::WriteReq);
 
     delete [] buf;
 }
+
+
+void
+Port::printAddr(Addr a)
+{
+    Request req(a, 1, 0);
+    Packet pkt(&req, MemCmd::PrintReq, Packet::Broadcast);
+    Packet::PrintReqState prs(std::cerr);
+    pkt.senderState = &prs;
+
+    sendFunctional(&pkt);
+}