#include <geekos/io_defs.h>
/* PAD this currently is in nvram.c */
+/* JRL: This is completely broken
extern void deliver_timer_interrupt_to_vmm(uint_t period_us);
+*/
/* JRL Add a cpu frequency measurement */
uint_t cpu_khz_freq;
if (pendingTimerEvents[i].ticks == 0) {
if (timerDebug) Print("timer: event %d expired (%d ticks)\n",
pendingTimerEvents[i].id, pendingTimerEvents[i].origTicks);
- (pendingTimerEvents[i].callBack)(pendingTimerEvents[i].id);
+ (pendingTimerEvents[i].callBack)(pendingTimerEvents[i].id, pendingTimerEvents[i].cb_arg);
pendingTimerEvents[i].ticks = pendingTimerEvents[i].origTicks;
} else {
pendingTimerEvents[i].ticks--;
}
-
+ /* JRL: Broken,
deliver_timer_interrupt_to_vmm(1000000/HZ);
-
+ */
End_IRQ(state);
}
}
-int Start_Timer_Secs(int seconds, timerCallback cb) {
- return Start_Timer(seconds * HZ, cb);
+int Start_Timer_Secs(int seconds, timerCallback cb, void * arg) {
+ return Start_Timer(seconds * HZ, cb, arg);
}
-int Start_Timer_MSecs(int msecs, timerCallback cb) {
+int Start_Timer_MSecs(int msecs, timerCallback cb, void * arg) {
msecs += 10 - (msecs % 10);
- return Start_Timer(msecs * (HZ / 1000), cb);
+ return Start_Timer(msecs * (HZ / 1000), cb, arg);
}
-int Start_Timer(int ticks, timerCallback cb)
+int Start_Timer(int ticks, timerCallback cb, void * arg)
{
int ret;
ret = nextEventID++;
pendingTimerEvents[timeEventCount].id = ret;
pendingTimerEvents[timeEventCount].callBack = cb;
+ pendingTimerEvents[timeEventCount].cb_arg = arg;
pendingTimerEvents[timeEventCount].ticks = ticks;
pendingTimerEvents[timeEventCount].origTicks = ticks;
timeEventCount++;