mirror of
https://github.com/reactos/reactos.git
synced 2025-04-27 17:10:22 +00:00
Fixed timer constants and repitition code
svn path=/trunk/; revision=78
This commit is contained in:
parent
09215f3126
commit
e3a11b68b8
1 changed files with 30 additions and 11 deletions
|
@ -43,8 +43,9 @@ static volatile unsigned long long ticks=0;
|
||||||
*
|
*
|
||||||
* = (1/18.2)*10^9
|
* = (1/18.2)*10^9
|
||||||
*
|
*
|
||||||
|
* RJJ was 54945055
|
||||||
*/
|
*/
|
||||||
#define CLOCK_INCREMENT (54945055)
|
#define CLOCK_INCREMENT (549450)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PURPOSE: List of timers
|
* PURPOSE: List of timers
|
||||||
|
@ -57,6 +58,7 @@ static KSPIN_LOCK timer_list_lock = {0,};
|
||||||
#define MICROSECONDS_PER_TICK (54945)
|
#define MICROSECONDS_PER_TICK (54945)
|
||||||
#define TICKS_TO_CALIBRATE (1)
|
#define TICKS_TO_CALIBRATE (1)
|
||||||
#define CALIBRATE_PERIOD (MICROSECONDS_PER_TICK * TICKS_TO_CALIBRATE)
|
#define CALIBRATE_PERIOD (MICROSECONDS_PER_TICK * TICKS_TO_CALIBRATE)
|
||||||
|
#define SYSTEM_TIME_UNITS_PER_MSEC (10000)
|
||||||
|
|
||||||
static unsigned int loops_per_microsecond = 100;
|
static unsigned int loops_per_microsecond = 100;
|
||||||
|
|
||||||
|
@ -243,6 +245,8 @@ LARGE_INTEGER KeQueryPerformanceCounter(PLARGE_INTEGER PerformanceFreq)
|
||||||
{
|
{
|
||||||
PerformanceFreq->HighPart=0;
|
PerformanceFreq->HighPart=0;
|
||||||
PerformanceFreq->LowPart=0;
|
PerformanceFreq->LowPart=0;
|
||||||
|
|
||||||
|
return *PerformanceFreq;
|
||||||
}
|
}
|
||||||
|
|
||||||
ULONG KeQueryTimeIncrement(VOID)
|
ULONG KeQueryTimeIncrement(VOID)
|
||||||
|
@ -315,20 +319,28 @@ BOOLEAN KeSetTimerEx(PKTIMER Timer, LARGE_INTEGER DueTime, LONG Period,
|
||||||
|
|
||||||
Timer->dpc=Dpc;
|
Timer->dpc=Dpc;
|
||||||
Timer->period=Period;
|
Timer->period=Period;
|
||||||
Timer->expire_time = LargeIntegerToSLL(&DueTime);
|
Timer->expire_time = (*(long long int *)&DueTime);
|
||||||
if (Timer->expire_time < 0)
|
if (Timer->expire_time < 0)
|
||||||
{
|
{
|
||||||
Timer->expire_time = system_time - Timer->expire_time;
|
Timer->expire_time = system_time + (-Timer->expire_time);
|
||||||
}
|
}
|
||||||
|
DPRINT("System:%ld:%ld Expire:%d:%d Period:%d\n",
|
||||||
|
(unsigned long) (system_time & 0xffffffff),
|
||||||
|
(unsigned long) ((system_time >> 32) & 0xffffffff),
|
||||||
|
(unsigned long) (Timer->expire_time & 0xffffffff),
|
||||||
|
(unsigned long) ((Timer->expire_time >> 32) & 0xffffffff),
|
||||||
|
Timer->period);
|
||||||
Timer->signaled = FALSE;
|
Timer->signaled = FALSE;
|
||||||
if (Timer->running)
|
if (Timer->running)
|
||||||
{
|
{
|
||||||
KeReleaseSpinLock(&timer_list_lock,oldlvl);
|
KeReleaseSpinLock(&timer_list_lock,oldlvl);
|
||||||
return(TRUE);
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
InsertTailList(&timer_list_head,&Timer->entry);
|
InsertTailList(&timer_list_head,&Timer->entry);
|
||||||
KeReleaseSpinLock(&timer_list_lock,oldlvl);
|
KeReleaseSpinLock(&timer_list_lock,oldlvl);
|
||||||
return(FALSE);
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN KeCancelTimer(PKTIMER Timer)
|
BOOLEAN KeCancelTimer(PKTIMER Timer)
|
||||||
|
@ -346,16 +358,17 @@ BOOLEAN KeCancelTimer(PKTIMER Timer)
|
||||||
|
|
||||||
if (!Timer->running)
|
if (!Timer->running)
|
||||||
{
|
{
|
||||||
return(FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
RemoveEntryList(&Timer->entry);
|
RemoveEntryList(&Timer->entry);
|
||||||
KeReleaseSpinLock(&timer_list_lock,oldlvl);
|
KeReleaseSpinLock(&timer_list_lock,oldlvl);
|
||||||
return(TRUE);
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN KeReadStateTimer(PKTIMER Timer)
|
BOOLEAN KeReadStateTimer(PKTIMER Timer)
|
||||||
{
|
{
|
||||||
return(Timer->signaled);
|
return Timer->signaled;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID KeInitializeTimer(PKTIMER Timer)
|
VOID KeInitializeTimer(PKTIMER Timer)
|
||||||
|
@ -406,9 +419,15 @@ static void HandleExpiredTimer(PKTIMER current)
|
||||||
current->dpc->SystemArgument2);
|
current->dpc->SystemArgument2);
|
||||||
}
|
}
|
||||||
current->signaled=TRUE;
|
current->signaled=TRUE;
|
||||||
if (current->period !=0)
|
if (current->period != 0)
|
||||||
{
|
{
|
||||||
current->expire_time = current->expire_time + current->period;
|
DPRINT("System:%ld:%ld Expire:%d:%d Period:%d\n",
|
||||||
|
(unsigned long) (system_time & 0xffffffff),
|
||||||
|
(unsigned long) ((system_time >> 32) & 0xffffffff),
|
||||||
|
(unsigned long) (current->expire_time & 0xffffffff),
|
||||||
|
(unsigned long) ((current->expire_time >> 32) & 0xffffffff),
|
||||||
|
current->period);
|
||||||
|
current->expire_time += current->period * SYSTEM_TIME_UNITS_PER_MSEC;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -427,7 +446,7 @@ void KeExpireTimers(void)
|
||||||
|
|
||||||
while (current_entry!=(&timer_list_head))
|
while (current_entry!=(&timer_list_head))
|
||||||
{
|
{
|
||||||
if (system_time == current->expire_time)
|
if (system_time >= current->expire_time)
|
||||||
{
|
{
|
||||||
HandleExpiredTimer(current);
|
HandleExpiredTimer(current);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue