summaryrefslogtreecommitdiff
path: root/dev
diff options
context:
space:
mode:
authorRon Dreslinski <rdreslin@umich.edu>2004-01-23 13:01:32 -0500
committerRon Dreslinski <rdreslin@umich.edu>2004-01-23 13:01:32 -0500
commit9b397ce7f45fc275f9004d78520628e2e7c0dd16 (patch)
tree3d6a704a2eb3b859d2b6fa5fc89b9d3ebbb25955 /dev
parentf9f4a7498611082079ae4acd2d421a857cab30d8 (diff)
downloadgem5-9b397ce7f45fc275f9004d78520628e2e7c0dd16.tar.xz
Add RTC event for uip bit
dev/tsunami_io.cc: Add RTC event to change the state of a uip bit dev/tsunami_io.hh: Add RTC event to change state of an uip bit --HG-- extra : convert_revision : acde7bdfe152d3e08f7ed53b4c8e910378f6ae67
Diffstat (limited to 'dev')
-rw-r--r--dev/tsunami_io.cc32
-rw-r--r--dev/tsunami_io.hh13
2 files changed, 45 insertions, 0 deletions
diff --git a/dev/tsunami_io.cc b/dev/tsunami_io.cc
index eb0b9ae91..537e40a22 100644
--- a/dev/tsunami_io.cc
+++ b/dev/tsunami_io.cc
@@ -22,6 +22,38 @@
#include "sim/system.hh"
using namespace std;
+TsunamiIO::RTCEvent::RTCEvent()
+ : Event(&mainEventQueue)
+{
+ DPRINTF(Tsunami, "RTC Event Initilizing\n");
+ rtc_uip = 0;
+ schedule(curTick + (curTick % ticksPerSecond));
+}
+
+void
+TsunamiIO::RTCEvent::process()
+{
+ DPRINTF(Tsunami, "Timer Interrupt\n");
+ if (rtc_uip == 0) {
+ rtc_uip = 1; //Signal a second has occured
+ schedule(curTick + (curTick % ticksPerSecond) - 10);
+ }
+ else
+ rtc_uip = 0; //Done signaling second has occured
+ schedule(curTick + (curTick % ticksPerSecond));
+}
+
+const char *
+TsunamiIO::RTCEvent::description()
+{
+ return "tsunami RTC changte second";
+}
+
+uint8_t
+TsunamiIO::RTCEvent::rtc_uip_value()
+{
+ return rtc_uip;
+}
TsunamiIO::ClockEvent::ClockEvent()
: Event(&mainEventQueue)
diff --git a/dev/tsunami_io.hh b/dev/tsunami_io.hh
index 1336a703e..4e342523f 100644
--- a/dev/tsunami_io.hh
+++ b/dev/tsunami_io.hh
@@ -64,6 +64,19 @@ class TsunamiIO : public MmapDevice
};
+ class RTCEvent : public Event
+ {
+ protected:
+ Tick interval;
+ uint8_t rtc_uip;
+
+ public:
+ RTCEvent();
+
+ virtual void process();
+ virtual const char *description();
+ uint8_t rtc_uip_value();
+ };
uint8_t mask1;
uint8_t mask2;