aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extras/mini-os/arch/ia64/time.c25
-rw-r--r--extras/mini-os/arch/x86/time.c14
-rw-r--r--extras/mini-os/include/sys/time.h38
-rw-r--r--extras/mini-os/include/time.h12
-rw-r--r--extras/mini-os/kernel.c2
-rw-r--r--extras/mini-os/sched.c4
6 files changed, 64 insertions, 31 deletions
diff --git a/extras/mini-os/arch/ia64/time.c b/extras/mini-os/arch/ia64/time.c
index e000ced098..cda36e69d4 100644
--- a/extras/mini-os/arch/ia64/time.c
+++ b/extras/mini-os/arch/ia64/time.c
@@ -147,10 +147,10 @@ calculate_time(void)
new = itc_new - itc_alt;
itc_alt = itc_new;
new = ns_from_cycles(new);
- os_time.ts_nsec += new;
- if (os_time.ts_nsec > 1000000000) { /* On overflow. */
- os_time.ts_sec++;
- os_time.ts_nsec -= 1000000000;
+ os_time.tv_nsec += new;
+ if (os_time.tv_nsec > 1000000000) { /* On overflow. */
+ os_time.tv_sec++;
+ os_time.tv_nsec -= 1000000000;
}
}
@@ -177,12 +177,13 @@ monotonic_clock(void)
return delta;
}
-void
-gettimeofday(struct timeval *tv)
+int
+gettimeofday(struct timeval *tv, void *tz)
{
calculate_time();
- tv->tv_sec = os_time.ts_sec; /* seconds */
- tv->tv_usec = NSEC_TO_USEC(os_time.ts_nsec); /* microseconds */
+ tv->tv_sec = os_time.tv_sec; /* seconds */
+ tv->tv_usec = NSEC_TO_USEC(os_time.tv_nsec); /* microseconds */
+ return 0;
};
/*
@@ -253,16 +254,16 @@ init_time(void)
itm_val = (itc_frequency + HZ/2) / HZ;
printk(" itm_val: %ld\n", itm_val);
- os_time.ts_sec = 0;
- os_time.ts_nsec = 0;
+ os_time.tv_sec = 0;
+ os_time.tv_nsec = 0;
if (efi_get_time(&tm)) {
printk(" EFI-Time: %d.%d.%d %d:%d:%d\n", tm.Day,
tm.Month, tm.Year, tm.Hour, tm.Minute, tm.Second);
- os_time.ts_sec = mktime(SWAP(tm.Year), SWAP(tm.Month),
+ os_time.tv_sec = mktime(SWAP(tm.Year), SWAP(tm.Month),
SWAP(tm.Day), SWAP(tm.Hour),
SWAP(tm.Minute), SWAP(tm.Second));
- os_time.ts_nsec = tm.Nanosecond;
+ os_time.tv_nsec = tm.Nanosecond;
} else
printk("efi_get_time() failed\n");
diff --git a/extras/mini-os/arch/x86/time.c b/extras/mini-os/arch/x86/time.c
index 0fad40f6de..c8313705ae 100644
--- a/extras/mini-os/arch/x86/time.c
+++ b/extras/mini-os/arch/x86/time.c
@@ -175,30 +175,32 @@ static void update_wallclock(void)
do {
shadow_ts_version = s->wc_version;
rmb();
- shadow_ts.ts_sec = s->wc_sec;
- shadow_ts.ts_nsec = s->wc_nsec;
+ shadow_ts.tv_sec = s->wc_sec;
+ shadow_ts.tv_nsec = s->wc_nsec;
rmb();
}
while ((s->wc_version & 1) | (shadow_ts_version ^ s->wc_version));
}
-void gettimeofday(struct timeval *tv)
+int gettimeofday(struct timeval *tv, void *tz)
{
u64 nsec = monotonic_clock();
- nsec += shadow_ts.ts_nsec;
+ nsec += shadow_ts.tv_nsec;
- tv->tv_sec = shadow_ts.ts_sec;
+ tv->tv_sec = shadow_ts.tv_sec;
tv->tv_sec += NSEC_TO_SEC(nsec);
tv->tv_usec = NSEC_TO_USEC(nsec % 1000000000UL);
+
+ return 0;
}
void block_domain(s_time_t until)
{
struct timeval tv;
- gettimeofday(&tv);
+ gettimeofday(&tv, NULL);
if(monotonic_clock() < until)
{
HYPERVISOR_set_timer_op(until);
diff --git a/extras/mini-os/include/sys/time.h b/extras/mini-os/include/sys/time.h
new file mode 100644
index 0000000000..87887c27d1
--- /dev/null
+++ b/extras/mini-os/include/sys/time.h
@@ -0,0 +1,38 @@
+/* -*- Mode:C; c-basic-offset:4; tab-width:4 -*-
+ ****************************************************************************
+ * (C) 2003 - Rolf Neugebauer - Intel Research Cambridge
+ * (C) 2005 - Grzegorz Milos - Intel Research Cambridge
+ ****************************************************************************
+ *
+ * File: time.h
+ * Author: Rolf Neugebauer (neugebar@dcs.gla.ac.uk)
+ * Changes: Grzegorz Milos (gm281@cam.ac.uk)
+ * Robert Kaiser (kaiser@informatik.fh-wiesbaden.de)
+ *
+ * Date: Jul 2003, changes: Jun 2005, Sep 2006
+ *
+ * Environment: Xen Minimal OS
+ * Description: Time and timer functions
+ *
+ ****************************************************************************
+ */
+
+#ifndef _MINIOS_SYS_TIME_H_
+#define _MINIOS_SYS_TIME_H_
+
+struct timespec {
+ time_t tv_sec;
+ long tv_nsec;
+};
+
+struct timezone {
+};
+
+struct timeval {
+ time_t tv_sec; /* seconds */
+ suseconds_t tv_usec; /* microseconds */
+};
+
+int gettimeofday(struct timeval *tv, void *tz);
+
+#endif /* _MINIOS_SYS_TIME_H_ */
diff --git a/extras/mini-os/include/time.h b/extras/mini-os/include/time.h
index ab844e8ede..914f2fcff2 100644
--- a/extras/mini-os/include/time.h
+++ b/extras/mini-os/include/time.h
@@ -38,20 +38,13 @@ typedef s64 s_time_t;
#define Time_Max ((s_time_t) 0x7fffffffffffffffLL)
#define FOREVER Time_Max
#define NSEC_TO_USEC(_nsec) ((_nsec) / 1000UL)
+#define NSEC_TO_MSEC(_nsec) ((_nsec) / 1000000ULL)
#define NSEC_TO_SEC(_nsec) ((_nsec) / 1000000000ULL)
/* wall clock time */
typedef long time_t;
typedef long suseconds_t;
-struct timeval {
- time_t tv_sec; /* seconds */
- suseconds_t tv_usec; /* microseconds */
-};
-
-struct timespec {
- time_t ts_sec;
- long ts_nsec;
-};
+#include <sys/time.h>
/* prototypes */
@@ -59,7 +52,6 @@ void init_time(void);
s_time_t get_s_time(void);
s_time_t get_v_time(void);
u64 monotonic_clock(void);
-void gettimeofday(struct timeval *tv);
void block_domain(s_time_t until);
#endif /* _TIME_H_ */
diff --git a/extras/mini-os/kernel.c b/extras/mini-os/kernel.c
index 9d18b22e1b..65c4467571 100644
--- a/extras/mini-os/kernel.c
+++ b/extras/mini-os/kernel.c
@@ -75,7 +75,7 @@ static void periodic_thread(void *p)
printk("Periodic thread started.\n");
for(;;)
{
- gettimeofday(&tv);
+ gettimeofday(&tv, NULL);
printk("T(s=%ld us=%ld)\n", tv.tv_sec, tv.tv_usec);
sleep(1000);
}
diff --git a/extras/mini-os/sched.c b/extras/mini-os/sched.c
index f5f47783c7..5820d64689 100644
--- a/extras/mini-os/sched.c
+++ b/extras/mini-os/sched.c
@@ -270,10 +270,10 @@ void th_f1(void *data)
up(&mutex);
- gettimeofday(&tv1);
+ gettimeofday(&tv1, NULL);
for(;;)
{
- gettimeofday(&tv2);
+ gettimeofday(&tv2, NULL);
if(tv2.tv_sec - tv1.tv_sec > 2) break;
}