aboutsummaryrefslogtreecommitdiffstats
path: root/extras
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-01-21 11:20:27 +0000
committerKeir Fraser <keir.fraser@citrix.com>2008-01-21 11:20:27 +0000
commitafb13d4890c7b505865b8264247c2049fd0c2227 (patch)
tree2417cb72f24229f2ee3279ca7546ec3beae2bce3 /extras
parent3e49205c7a0d947e5a9c37fabee4df1ae07d3135 (diff)
downloadxen-afb13d4890c7b505865b8264247c2049fd0c2227.tar.gz
xen-afb13d4890c7b505865b8264247c2049fd0c2227.tar.bz2
xen-afb13d4890c7b505865b8264247c2049fd0c2227.zip
minios: make time interface POSIX
timespec uses tv_sec and tv_nsec too. gettimeofday takes a tz argument. Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras')
-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;
}