summaryrefslogtreecommitdiff
path: root/dev
diff options
context:
space:
mode:
authorNathan Binkert <binkertn@umich.edu>2004-02-20 15:08:02 -0500
committerNathan Binkert <binkertn@umich.edu>2004-02-20 15:08:02 -0500
commit7ad5b6ee223ed5afbb8284da75be8f974331e0b5 (patch)
treee8b51079fa1088574e4cf7be098c77ff190dd8f7 /dev
parentcb928f03919608e583e78ca533125cb1ad51479f (diff)
parentee799f47d5ae2ce10bd8b307cfd74c483ec86a94 (diff)
downloadgem5-7ad5b6ee223ed5afbb8284da75be8f974331e0b5.tar.xz
Merge zizzer.eecs.umich.edu:/bk/m5
into ziff.eecs.umich.edu:/z/binkertn/research/m5/memory --HG-- extra : convert_revision : 691c89ebacb3c5a5eb67359ed102646b8547dd17
Diffstat (limited to 'dev')
-rw-r--r--dev/etherlink.cc51
-rw-r--r--dev/etherlink.hh7
2 files changed, 58 insertions, 0 deletions
diff --git a/dev/etherlink.cc b/dev/etherlink.cc
index 676b1da1c..7c70b82ce 100644
--- a/dev/etherlink.cc
+++ b/dev/etherlink.cc
@@ -42,6 +42,7 @@
#include "dev/etherpkt.hh"
#include "sim/builder.hh"
#include "sim/universe.hh"
+#include "sim/system.hh"
using namespace std;
@@ -85,6 +86,20 @@ EtherLink::Link::Link(const std::string &name, double rate, EtherDump *d)
{}
void
+EtherLink::serialize(ostream &os)
+{
+ link1->serialize(os);
+ link2->serialize(os);
+}
+
+void
+EtherLink::unserialize(Checkpoint *cp, const string &section)
+{
+ link1->unserialize(cp, section);
+ link2->unserialize(cp, section);
+}
+
+void
EtherLink::Link::txDone()
{
if (dump)
@@ -121,6 +136,42 @@ EtherLink::Link::transmit(PacketPtr &pkt)
return true;
}
+void
+EtherLink::Link::serialize(ostream &os)
+{
+ bool packetExists = false;
+ if (packet) packetExists = true;
+ SERIALIZE_SCALAR(packetExists);
+ if (packetExists) {
+ nameOut(os, csprintf("%s.linkPacket", name()));
+ packet->serialize(os);
+ }
+
+ bool event_scheduled = event.scheduled();
+ SERIALIZE_SCALAR(event_scheduled);
+ if (event_scheduled) {
+ SERIALIZE_SCALAR(event.when());
+ }
+}
+
+void
+EtherLink::Link::unserialize(Checkpoint *cp, const string &section)
+{
+ bool event_scheduled, packetExists;
+ Tick eventTime;
+ UNSERIALIZE_SCALAR(packetExists);
+ if (packetExists) {
+ packet = new EtherPacket;
+ packet->unserialize(cp, csprintf("%s.linkPacket", section));
+ }
+
+ UNSERIALIZE_SCALAR(event_scheduled);
+ if (event_scheduled) {
+ UNSERIALIZE_SCALAR(eventTime);
+ event.schedule(eventTime);
+ }
+}
+
BEGIN_DECLARE_SIM_OBJECT_PARAMS(EtherLink)
SimObjectParam<EtherInt *> interface1;
diff --git a/dev/etherlink.hh b/dev/etherlink.hh
index e1a7957ee..8505570a6 100644
--- a/dev/etherlink.hh
+++ b/dev/etherlink.hh
@@ -96,6 +96,9 @@ class EtherLink : public SimObject
void setTxInt(Interface *i) { assert(!txint); txint = i; }
void setRxInt(Interface *i) { assert(!rxint); rxint = i; }
+
+ virtual void serialize(std::ostream &os);
+ virtual void unserialize(Checkpoint *cp, const std::string &section);
};
/*
@@ -122,6 +125,10 @@ class EtherLink : public SimObject
EtherLink(const std::string &name, EtherInt *i1, EtherInt *i2,
Tick speed, EtherDump *dump);
virtual ~EtherLink();
+
+ virtual void serialize(std::ostream &os);
+ virtual void unserialize(Checkpoint *cp, const std::string &section);
+
};
#endif // __ETHERLINK_HH__