summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pfinet/timer-emul.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/pfinet/timer-emul.c b/pfinet/timer-emul.c
index aa23c82a..721631af 100644
--- a/pfinet/timer-emul.c
+++ b/pfinet/timer-emul.c
@@ -20,7 +20,11 @@
#include <linux/timer.h>
#include <asm/system.h>
+#include <linux/sched.h>
+#include "pfinet.h"
+long long root_jiffies;
+volatile struct mapped_time_value *mapped_time;
static void
timer_function (any_t timerp)
@@ -34,7 +38,7 @@ timer_function (any_t timerp)
timer->thread = mach_thread_self ();
err = mach_msg (NULL, MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT,
- 0, 0, recv, timer->expires, MACH_PORT_NULL);
+ 0, 0, recv, timer->expires * (1000 / HZ), MACH_PORT_NULL);
timer->thread = MACH_PORT_NULL;
@@ -96,4 +100,29 @@ init_timer (struct timer_list *timer)
timer->thread = MACH_PORT_NULL;
}
+void
+init_root_jiffies ()
+{
+ struct timeval tp;
+
+ fill_timeval (&tp);
+ root_jiffies = (long long) tp.tv_sec * HZ
+ + (long long) tp.tv_usec * HZ / 1000.0;
+}
+
+void
+init_mapped_time ()
+{
+ device_t timedev;
+ memory_object_t timeobj;
+
+ device_open (master_device, 0, "time", &timedev);
+ device_map (timedev, VM_PROT_READ, 0, sizeof (mapped_time_value_t),
+ &timeobj, 0);
+ vm_map (mach_task_self (), (vm_address_t *)&mapped_time,
+ sizeof (mapped_time_value_t), 0, 1, timeobj, 0, 0,
+ VM_PROT_READ, VM_PROT_READ, VM_INHERIT_NONE);
+ mach_port_deallocate (mach_task_self (), timedev);
+ mach_port_deallocate (mach_task_self (), timeobj);
+}