summaryrefslogtreecommitdiff
path: root/src/dev/mc146818.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/dev/mc146818.cc')
-rw-r--r--src/dev/mc146818.cc25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/dev/mc146818.cc b/src/dev/mc146818.cc
index 16ed58e46..fd70b503b 100644
--- a/src/dev/mc146818.cc
+++ b/src/dev/mc146818.cc
@@ -40,6 +40,7 @@
#include "base/trace.hh"
#include "dev/mc146818.hh"
#include "dev/rtcreg.h"
+#include "sim/sim_object.hh"
using namespace std;
@@ -105,8 +106,12 @@ MC146818::MC146818(EventManager *em, const string &n, const struct tm time,
MC146818::~MC146818()
{
- deschedule(tickEvent);
- deschedule(event);
+ if (tickEvent.scheduled()) {
+ deschedule(tickEvent);
+ }
+ if (event.scheduled()) {
+ deschedule(event);
+ }
}
void
@@ -203,6 +208,20 @@ 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)
{
@@ -214,9 +233,7 @@ 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);
}