Fixed a bug where a packet was attempted to be sent even though another packet was...
[gem5.git] / src / mem / port.cc
index fb3103ed158ced5f02f25463b4edcce6d7a842ff..17924b7597a8c4ef0f3dfca7d3cac8fef15b4c56 100644 (file)
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Steve Reinhardt
  */
 
 /**
- * @file Port object definitions.
+ * @file
+ * Port object definitions.
  */
 
 #include "base/chunk_generator.hh"
+#include "base/trace.hh"
 #include "mem/packet_impl.hh"
 #include "mem/port.hh"
 
 void
-Port::blobHelper(Addr addr, uint8_t *p, int size, Command cmd)
+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)
 {
-    Request req(false);
-    Packet pkt;
-    pkt.req = &req;
-    pkt.cmd = cmd;
-    pkt.dest = Packet::Broadcast;
+    Request req;
+    Packet pkt(&req, cmd, Packet::Broadcast);
 
     for (ChunkGenerator gen(addr, size, peerBlockSize());
          !gen.done(); gen.next()) {
-        req.setPaddr(pkt.addr = gen.addr());
-        req.setSize(pkt.size = gen.size());
+        req.setPhys(gen.addr(), gen.size(), 0);
+        pkt.reinitFromRequest();
         pkt.dataStatic(p);
         sendFunctional(&pkt);
         p += gen.size();
@@ -56,13 +64,13 @@ Port::blobHelper(Addr addr, uint8_t *p, int size, Command cmd)
 void
 Port::writeBlob(Addr addr, uint8_t *p, int size)
 {
-    blobHelper(addr, p, size, Write);
+    blobHelper(addr, p, size, Packet::WriteReq);
 }
 
 void
 Port::readBlob(Addr addr, uint8_t *p, int size)
 {
-    blobHelper(addr, p, size, Read);
+    blobHelper(addr, p, size, Packet::ReadReq);
 }
 
 void
@@ -72,7 +80,7 @@ Port::memsetBlob(Addr addr, uint8_t val, int size)
     uint8_t *buf = new uint8_t[size];
 
     memset(buf, val, size);
-    blobHelper(addr, buf, size, Write);
+    blobHelper(addr, buf, size, Packet::WriteReq);
 
     delete [] buf;
 }