BNX2X: disables TPA
[akaros.git] / kern / src / time.c
index cd886ef..f298ba7 100644 (file)
@@ -56,11 +56,7 @@ void udelay_sched(uint64_t usec)
  * you want something to happen in the future, set an alarm. */
 void timer_interrupt(struct hw_trapframe *hw_tf, void *data)
 {
-       int coreid = core_id();
-       /* run the alarms out of RKM context, so that event delivery works nicely
-        * (keeps the proc lock and ksched lock non-irqsave) */
-       send_kernel_message(coreid, __trigger_tchain,
-                           (long)&per_cpu_info[coreid].tchain, 0, 0, KMSG_ROUTINE);
+       __trigger_tchain(&per_cpu_info[core_id()].tchain, hw_tf);
 }
 
 /* We can overflow/wraparound when we multiply up, but we have to divide last,
@@ -131,3 +127,39 @@ uint64_t nsec2tsc(uint64_t nsec)
        else
                return (nsec * system_timing.tsc_freq) / 1000000000;
 }
+
+/* TODO: figure out what epoch time TSC == 0 is and store that as boot_tsc */
+static uint64_t boot_sec = 1242129600; /* nanwan's birthday */
+
+uint64_t epoch_tsc(void)
+{
+       return read_tsc() + sec2tsc(boot_sec);
+}
+
+uint64_t epoch_sec(void)
+{
+       return tsc2sec(epoch_tsc());
+}
+
+uint64_t epoch_msec(void)
+{
+       return tsc2msec(epoch_tsc());
+}
+
+uint64_t epoch_usec(void)
+{
+       return tsc2usec(epoch_tsc());
+}
+
+uint64_t epoch_nsec(void)
+{
+       return tsc2nsec(epoch_tsc());
+}
+
+void tsc2timespec(uint64_t tsc_time, struct timespec *ts)
+{
+       ts->tv_sec = tsc2sec(tsc_time);
+       /* subtract off everything but the remainder */
+       tsc_time -= sec2tsc(ts->tv_sec);
+       ts->tv_nsec = tsc2nsec(tsc_time);
+}