Merge zizzer.eecs.umich.edu:/m5/Bitkeeper/m5

into zizzer.eecs.umich.edu:/y/sraasch/serialize

--HG--
extra : convert_revision : ebb65c27685394826efc265bcc674577395e0963
This commit is contained in:
Steve Raasch 2003-10-30 15:16:05 -05:00
commit fd232ecb6a
4 changed files with 76 additions and 0 deletions

View file

@ -38,6 +38,9 @@
#include "base/misc.hh"
#include "base/pollevent.hh"
#include "sim/universe.hh"
#include "sim/serialize.hh"
using namespace std;
PollQueue pollQueue;
@ -76,6 +79,22 @@ PollEvent::enable()
queue->copy();
}
void
PollEvent::serialize(ostream &os)
{
SERIALIZE_SCALAR(pfd.fd);
SERIALIZE_SCALAR(pfd.events);
SERIALIZE_SCALAR(enabled);
}
void
PollEvent::unserialize(Checkpoint *cp, const std::string &section)
{
UNSERIALIZE_SCALAR(pfd.fd);
UNSERIALIZE_SCALAR(pfd.events);
UNSERIALIZE_SCALAR(enabled);
}
/////////////////////////////////////////////////////
//
PollQueue::PollQueue()

View file

@ -33,6 +33,8 @@
#include <poll.h>
#include "sim/universe.hh"
class Checkpoint;
class PollEvent
{
private:
@ -50,6 +52,11 @@ class PollEvent
void disable();
void enable();
virtual void process(int revent) = 0;
bool queued() { return queue != 0; }
virtual void serialize(std::ostream &os);
virtual void unserialize(Checkpoint *cp, const std::string &section);
};
class PollQueue

View file

@ -163,6 +163,7 @@ EtherTap::detach()
{
DPRINTF(Ethernet, "EtherTap detached\n");
delete event;
event = 0;
close(socket);
socket = -1;
}
@ -262,6 +263,52 @@ EtherTap::retransmit()
txEvent.schedule(curTick + 1000);
}
//=====================================================================
void
EtherTap::serialize(ostream &os)
{
SERIALIZE_SCALAR(socket);
SERIALIZE_SCALAR(buflen);
SERIALIZE_ARRAY((uint8_t *)buffer,buflen);
SERIALIZE_SCALAR(buffer_offset);
SERIALIZE_SCALAR(data_len);
bool tapevent_present = false;
if (event) {
tapevent_present = true;
SERIALIZE_SCALAR(tapevent_present);
event->serialize(os);
}
else {
SERIALIZE_SCALAR(tapevent_present);
}
}
void
EtherTap::unserialize(Checkpoint *cp, const std::string &section)
{
UNSERIALIZE_SCALAR(socket);
UNSERIALIZE_SCALAR(buflen);
UNSERIALIZE_ARRAY((uint8_t *)buffer,buflen);
UNSERIALIZE_SCALAR(buffer_offset);
UNSERIALIZE_SCALAR(data_len);
bool tapevent_present;
UNSERIALIZE_SCALAR(tapevent_present);
if (tapevent_present) {
event = new TapEvent(this, socket, POLLIN|POLLERR);
event->unserialize(cp,section);
if (event->queued()) {
pollQueue.schedule(event);
}
}
}
//=====================================================================
BEGIN_DECLARE_SIM_OBJECT_PARAMS(EtherTap)
SimObjectParam<EtherInt *> peer;

View file

@ -96,6 +96,9 @@ class EtherTap : public EtherInt
virtual bool recvPacket(PacketPtr packet);
virtual void sendDone();
virtual void serialize(std::ostream &os);
virtual void unserialize(Checkpoint *cp, const std::string &section);
};
#endif // __ETHERTAP_HH__