35,6 → 35,7 |
#include <ll/i386/advtimer.h> |
#include <ll/i386/error.h> |
#include <ll/i386/64bit.h> |
#include <ll/i386/limits.h> |
|
#include <ll/sys/ll/ll-data.h> |
#include <ll/sys/ll/ll-func.h> |
139,7 → 140,11 |
struct timespec now, ttmp; |
WORD tmp; |
DWORD tnext; |
DWORD max_tnext; |
|
|
|
|
TRACER_LOGEVENT(FTrace_EVT_timer_wakeup_start, 0, 0); |
|
if (!use_tsc) { |
189,21 → 194,38 |
ll_read_timespec(&now); |
} |
|
if (TIMESPEC_A_GT_B(&now, &(firstevent->time))) { |
NULL_TIMESPEC(&ttmp); |
} else { |
SUBTIMESPEC(&(firstevent->time), &now, &ttmp); |
} |
/* SUBTIMESPEC(&(firstevent->time), &now, &ttmp); */ |
tnext = TIMESPEC2USEC(&ttmp); |
if (!use_apic) { |
mul32div32to32(tnext,1193182,1000000,tnext); |
pit_setconstant(0, tnext); |
} else { |
if (firstevent) { |
if (TIMESPEC_A_GT_B(&now, &(firstevent->time))) { |
NULL_TIMESPEC(&ttmp); |
} else { |
SUBTIMESPEC(&(firstevent->time), &now, &ttmp); |
} |
/* SUBTIMESPEC(&(firstevent->time), &now, &ttmp); */ |
tnext = TIMESPEC2USEC(&ttmp); |
|
if (!use_apic) { |
mul32div32to32(INT_MAX,1000000,1193182,max_tnext); |
} else { |
mul32div32to32(INT_MAX,1000,apic_clk_per_msec,max_tnext); |
} |
if (tnext>max_tnext) { |
message("(************TIME IN THE FUTURE************)"); |
} |
|
if (!use_apic) { |
mul32div32to32(tnext,1193182,1000000,tnext); |
pit_setconstant(0, tnext); |
} else { |
mul32div32to32(tnext,apic_clk_per_msec,1000,tnext); |
set_APIC_timer(tnext); |
} |
} else { |
if (!use_apic) |
pit_setconstant(0, 0xFFFF); |
else |
set_APIC_timer(0xFFFFFFFF); |
} |
activeEvent = 0; |
activeEvent = 0; |
} else { |
if (!use_apic) |
pit_setconstant(0, 0xFFFF); |