summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dev/alpha/tsunami_io.cc11
-rw-r--r--src/dev/alpha/tsunami_io.hh6
-rw-r--r--src/dev/intel_8254_timer.cc29
-rw-r--r--src/dev/intel_8254_timer.hh12
-rw-r--r--src/dev/mc146818.cc25
-rw-r--r--src/dev/mc146818.hh6
6 files changed, 9 insertions, 80 deletions
diff --git a/src/dev/alpha/tsunami_io.cc b/src/dev/alpha/tsunami_io.cc
index 1a76c2c32..c90f06b5a 100644
--- a/src/dev/alpha/tsunami_io.cc
+++ b/src/dev/alpha/tsunami_io.cc
@@ -249,17 +249,6 @@ TsunamiIO::clearPIC(uint8_t bitvector)
}
}
-unsigned int
-TsunamiIO::drain(Event *de)
-{
- unsigned int count = 0;
- count += pitimer.drain(de);
- count += rtc.drain(de);
- assert(count == 0);
- changeState(SimObject::Drained);
- return count;
-}
-
void
TsunamiIO::serialize(ostream &os)
{
diff --git a/src/dev/alpha/tsunami_io.hh b/src/dev/alpha/tsunami_io.hh
index f649247e2..b6d63322b 100644
--- a/src/dev/alpha/tsunami_io.hh
+++ b/src/dev/alpha/tsunami_io.hh
@@ -141,12 +141,6 @@ class TsunamiIO : public BasicPioDevice
void clearPIC(uint8_t bitvector);
/**
- * Drain the io state including all associated events.
- * @param drainEvent
- */
- unsigned int drain(Event *de);
-
- /**
* Serialize this object to the given output stream.
* @param os The stream to serialize to.
*/
diff --git a/src/dev/intel_8254_timer.cc b/src/dev/intel_8254_timer.cc
index b61aa7c56..9e507b968 100644
--- a/src/dev/intel_8254_timer.cc
+++ b/src/dev/intel_8254_timer.cc
@@ -32,7 +32,6 @@
#include "base/misc.hh"
#include "dev/intel_8254_timer.hh"
-#include "sim/sim_object.hh"
using namespace std;
@@ -70,17 +69,6 @@ Intel8254Timer::writeControl(const CtrlReg data)
}
}
-unsigned int
-Intel8254Timer::drain(Event *de)
-{
- unsigned int count = 0;
- count += counter[0]->drain(de);
- count += counter[1]->drain(de);
- count += counter[2]->drain(de);
- assert(count == 0);
- return count;
-}
-
void
Intel8254Timer::serialize(const string &base, ostream &os)
{
@@ -228,18 +216,6 @@ Intel8254Timer::Counter::outputHigh()
return output_high;
}
-unsigned int
-Intel8254Timer::Counter::drain(Event *de)
-{
- if (event.scheduled()) {
- event_tick = event.when();
- parent->deschedule(event);
- } else {
- event_tick = 0;
- }
- return 0;
-}
-
void
Intel8254Timer::Counter::serialize(const string &base, ostream &os)
{
@@ -251,6 +227,10 @@ Intel8254Timer::Counter::serialize(const string &base, ostream &os)
paramOut(os, base + ".latch_on", latch_on);
paramOut(os, base + ".read_byte", read_byte);
paramOut(os, base + ".write_byte", write_byte);
+
+ Tick event_tick = 0;
+ if (event.scheduled())
+ event_tick = event.when();
paramOut(os, base + ".event_tick", event_tick);
}
@@ -267,6 +247,7 @@ Intel8254Timer::Counter::unserialize(const string &base, Checkpoint *cp,
paramIn(cp, section, base + ".read_byte", read_byte);
paramIn(cp, section, base + ".write_byte", write_byte);
+ Tick event_tick;
paramIn(cp, section, base + ".event_tick", event_tick);
if (event_tick)
parent->schedule(event, event_tick);
diff --git a/src/dev/intel_8254_timer.hh b/src/dev/intel_8254_timer.hh
index 26ea0687e..30ddc7bca 100644
--- a/src/dev/intel_8254_timer.hh
+++ b/src/dev/intel_8254_timer.hh
@@ -137,10 +137,6 @@ class Intel8254Timer : public EventManager
/** Pointer to container */
Intel8254Timer *parent;
- /** if non-zero, the scheduled tick of an event used for drain
- serialization coordination */
- Tick event_tick;
-
public:
Counter(Intel8254Timer *p, const std::string &name, unsigned int num);
@@ -169,12 +165,6 @@ class Intel8254Timer : public EventManager
bool outputHigh();
/**
- * Drain all associated events.
- * @param drainEvent
- */
- unsigned int drain(Event *de);
-
- /**
* Serialize this object to the given output stream.
* @param base The base name of the counter object.
* @param os The stream to serialize to.
@@ -239,8 +229,6 @@ class Intel8254Timer : public EventManager
return counter[num]->outputHigh();
}
- unsigned int drain(Event *de);
-
/**
* Serialize this object to the given output stream.
* @param base The base name of the counter object.
diff --git a/src/dev/mc146818.cc b/src/dev/mc146818.cc
index fd70b503b..16ed58e46 100644
--- a/src/dev/mc146818.cc
+++ b/src/dev/mc146818.cc
@@ -40,7 +40,6 @@
#include "base/trace.hh"
#include "dev/mc146818.hh"
#include "dev/rtcreg.h"
-#include "sim/sim_object.hh"
using namespace std;
@@ -106,12 +105,8 @@ MC146818::MC146818(EventManager *em, const string &n, const struct tm time,
MC146818::~MC146818()
{
- if (tickEvent.scheduled()) {
- deschedule(tickEvent);
- }
- if (event.scheduled()) {
- deschedule(event);
- }
+ deschedule(tickEvent);
+ deschedule(event);
}
void
@@ -208,20 +203,6 @@ MC146818::tickClock()
setTime(*gmtime(&calTime));
}
-unsigned int
-MC146818::drain(Event *de)
-{
- if (event.scheduled()) {
- rtcTimerInterruptTickOffset = event.when() - curTick;
- rtcClockTickOffset = event.when() - curTick;
- deschedule(event);
- }
- if (tickEvent.scheduled()) {
- deschedule(tickEvent);
- }
- return 0;
-}
-
void
MC146818::serialize(const string &base, ostream &os)
{
@@ -233,7 +214,9 @@ MC146818::serialize(const string &base, ostream &os)
// save the timer tick and rtc clock tick values to correctly reschedule
// them during unserialize
//
+ Tick rtcTimerInterruptTickOffset = event.when() - curTick;
SERIALIZE_SCALAR(rtcTimerInterruptTickOffset);
+ Tick rtcClockTickOffset = event.when() - curTick;
SERIALIZE_SCALAR(rtcClockTickOffset);
}
diff --git a/src/dev/mc146818.hh b/src/dev/mc146818.hh
index 507abab5a..699785199 100644
--- a/src/dev/mc146818.hh
+++ b/src/dev/mc146818.hh
@@ -119,10 +119,6 @@ class MC146818 : public EventManager
/** RTC status register B */
uint8_t stat_regB;
- /** RTC event times for drain and serialization coordination */
- Tick rtcTimerInterruptTickOffset;
- Tick rtcClockTickOffset;
-
public:
MC146818(EventManager *em, const std::string &name, const struct tm time,
bool bcd, Tick frequency);
@@ -136,8 +132,6 @@ class MC146818 : public EventManager
void tickClock();
- unsigned int drain(Event *de);
-
/**
* Serialize this object to the given output stream.
* @param base The base name of the counter object.