summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Binkert <binkertn@umich.edu>2007-01-28 10:26:59 -0800
committerNathan Binkert <binkertn@umich.edu>2007-01-28 10:26:59 -0800
commit37795b104d93a48b319074fbef770d88820d554a (patch)
treeadb7bdddc656a667ecb84609caebd2a86defb2ee
parentf9a341f8e7871135e52d208c65185c96c1e51de5 (diff)
downloadgem5-37795b104d93a48b319074fbef770d88820d554a.tar.xz
Stick the conversion of python to unix time with all of
the other param code so that other functions can use it as well. --HG-- extra : convert_revision : a8becdeadc70af0b64bff5b0770788dfba6e1857
-rw-r--r--src/dev/alpha/tsunami_io.cc73
-rw-r--r--src/dev/alpha/tsunami_io.hh3
-rw-r--r--src/dev/sparc/dtod.cc10
-rw-r--r--src/dev/sparc/dtod.hh4
-rw-r--r--src/sim/param.cc24
-rw-r--r--src/sim/param.hh1
6 files changed, 52 insertions, 63 deletions
diff --git a/src/dev/alpha/tsunami_io.cc b/src/dev/alpha/tsunami_io.cc
index d701dc98f..58933428c 100644
--- a/src/dev/alpha/tsunami_io.cc
+++ b/src/dev/alpha/tsunami_io.cc
@@ -65,69 +65,32 @@ TsunamiIO::RTC::RTC(const string &n, Tsunami* tsunami, const vector<int> &t,
stat_regA = RTCA_32768HZ | RTCA_1024HZ;
stat_regB = RTCB_PRDC_IE |RTCB_BIN | RTCB_24HR;
- if (year_is_bcd) {
- // The RTC uses BCD for the last two digits in the year.
- // They python year is a full year.
- int _year = t[0] % 100;
- int tens = _year / 10;
- int ones = _year % 10;
-
- year = (tens << 4) + ones;
- } else {
- // Even though the datasheet says that the year field should be
- // interpreted as BCD, we just enter the number of years since
- // 1900 since linux seems to be happy with that (and I believe
- // that Tru64 was as well)
- year = t[0] - 1900;
- }
-
- mon = t[1];
- mday = t[2];
- hour = t[3];
- min = t[4];
- sec = t[5];
-
- // wday is defined to be in the range from 1 - 7 with 1 being Sunday.
- // the value coming from python is in the range from 0 - 6 with 0 being
- // Monday. Fix that here.
- wday = t[6] + 2;
- if (wday > 7)
- wday -= 7;
-
- DPRINTFN("Real-time clock set to %s", getDateString());
-}
-
-std::string
-TsunamiIO::RTC::getDateString()
-{
struct tm tm;
+ parseTime(t, &tm);
- memset(&tm, 0, sizeof(tm));
+ year = tm.tm_year;
if (year_is_bcd) {
- // undo the BCD and conver to years since 1900 guessing that
- // anything before 1970 is actually after 2000
- int _year = (year >> 4) * 10 + (year & 0xf);
- if (_year < 70)
- _year += 100;
-
- tm.tm_year = _year;
- } else {
- // number of years since 1900
- tm.tm_year = year;
+ // The datasheet says that the year field can be either BCD or
+ // years since 1900. Linux seems to be happy with years since
+ // 1900.
+ year = year % 100;
+ int tens = year / 10;
+ int ones = year % 10;
+ year = (tens << 4) + ones;
}
- // unix is 0-11 for month
- tm.tm_mon = mon - 1;
- tm.tm_mday = mday;
- tm.tm_hour = hour;
- tm.tm_min = min;
- tm.tm_sec = sec;
+ // Unix is 0-11 for month, data seet says start at 1
+ mon = tm.tm_mon + 1;
+ mday = tm.tm_mday;
+ hour = tm.tm_hour;
+ min = tm.tm_min;
+ sec = tm.tm_sec;
- // to add more annoyance unix is 0 - 6 with 0 as sunday
- tm.tm_wday = wday - 1;
+ // Datasheet says 1 is sunday
+ wday = tm.tm_wday + 1;
- return asctime(&tm);
+ DPRINTFN("Real-time clock set to %s", asctime(&tm));
}
void
diff --git a/src/dev/alpha/tsunami_io.hh b/src/dev/alpha/tsunami_io.hh
index f42af4197..f4fa62a68 100644
--- a/src/dev/alpha/tsunami_io.hh
+++ b/src/dev/alpha/tsunami_io.hh
@@ -125,9 +125,6 @@ class TsunamiIO : public BasicPioDevice
/** RTC read data */
uint8_t readData();
- /** RTC get the date */
- std::string getDateString();
-
/**
* Serialize this object to the given output stream.
* @param base The base name of the counter object.
diff --git a/src/dev/sparc/dtod.cc b/src/dev/sparc/dtod.cc
index 30c7baaf5..50e158c12 100644
--- a/src/dev/sparc/dtod.cc
+++ b/src/dev/sparc/dtod.cc
@@ -49,12 +49,14 @@ using namespace std;
using namespace TheISA;
DumbTOD::DumbTOD(Params *p)
- : BasicPioDevice(p), todTime(p->init_time)
+ : BasicPioDevice(p)
{
pioSize = 0x08;
struct tm tm;
- gmtime_r((time_t*)&todTime, &tm);
+ parseTime(p->init_time, &tm);
+ todTime = timegm(&tm);
+
DPRINTFN("Real-time clock set to %s\n", asctime(&tm));
DPRINTFN("Real-time clock set to %d\n", todTime);
}
@@ -86,7 +88,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(DumbTOD)
Param<Tick> pio_latency;
SimObjectParam<Platform *> platform;
SimObjectParam<System *> system;
- Param<time_t> time;
+ VectorParam<int> time;
END_DECLARE_SIM_OBJECT_PARAMS(DumbTOD)
@@ -96,7 +98,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(DumbTOD)
INIT_PARAM(pio_latency, "Programmed IO latency"),
INIT_PARAM(platform, "platform"),
INIT_PARAM(system, "system object"),
- INIT_PARAM(time, "System time to use (0 for actual time")
+ INIT_PARAM(time, "")
END_INIT_SIM_OBJECT_PARAMS(DumbTOD)
diff --git a/src/dev/sparc/dtod.hh b/src/dev/sparc/dtod.hh
index 7d3a9f628..26d4ecc08 100644
--- a/src/dev/sparc/dtod.hh
+++ b/src/dev/sparc/dtod.hh
@@ -36,6 +36,8 @@
#ifndef __DEV_SPARC_DTOD_HH__
#define __DEV_SPARC_DTOD_HH__
+#include <vector>
+
#include "base/range.hh"
#include "dev/io_device.hh"
@@ -52,7 +54,7 @@ class DumbTOD : public BasicPioDevice
public:
struct Params : public BasicPioDevice::Params
{
- time_t init_time;
+ std::vector<int> init_time;
};
protected:
const Params *params() const { return (const Params *)_params; }
diff --git a/src/sim/param.cc b/src/sim/param.cc
index b1c50946b..5cc69b161 100644
--- a/src/sim/param.cc
+++ b/src/sim/param.cc
@@ -777,3 +777,27 @@ ParamContext::describeAllContexts(ostream &os)
os << endl;
}
}
+
+void
+parseTime(const std::vector<int> &time, struct tm *tm)
+{
+ memset(tm, 0, sizeof(struct tm));
+
+ // UNIX is years since 1900
+ tm->tm_year = time[0] - 1900;
+
+ // Python starts at 1, UNIX starts at 0
+ tm->tm_mon = time[1] - 1;
+ tm->tm_mday = time[2];
+ tm->tm_hour = time[3];
+ tm->tm_min = time[4];
+ tm->tm_sec = time[5];
+
+ // Python has 0 as Monday, UNIX is 0 as sunday
+ tm->tm_wday = time[6] + 1;
+ if (tm->tm_wday > 6)
+ tm->tm_wday -= 7;
+
+ // Python starts at 1, Unix starts at 0
+ tm->tm_yday = time[7] - 1;
+}
diff --git a/src/sim/param.hh b/src/sim/param.hh
index 2aa0456da..8a4670e27 100644
--- a/src/sim/param.hh
+++ b/src/sim/param.hh
@@ -781,4 +781,5 @@ SimObjectVectorParam<OBJ_CLASS *>::showType(std::ostream &os) const \
template <class T> bool parseParam(const std::string &str, T &data);
template <class T> void showParam(std::ostream &os, const T &data);
+void parseTime(const std::vector<int> &time, struct tm *tm);
#endif // _SIM_PARAM_HH_