static unsigned long _curtmr()
{
- return inl(_get_PMBASE + ICH2_PMBASE_PM1_TMR) & 0xFFFFFF;
+ return inl(_get_PMBASE() + ICH2_PMBASE_PM1_TMR) & 0xFFFFFF;
}
/* This is kind of a heuristic, since we can't get interrupts. */
void oneshot_start_ms(unsigned long milliseconds)
{
starttmr = _curtmr();
- endtmr = (starttmr + milliseconds*(ICH2_PM1_TMR_FREQ/1000)) % 0xFFFFFF;
+ endtmr = (starttmr + milliseconds*(ICH2_PM1_TMR_FREQ/1000)) & 0xFFFFFF;
}
int oneshot_running(void)
{
+ unsigned long time = _curtmr();
+
if (endtmr == 0 && starttmr == 0)
return 0;
- if ((endtmr < starttmr) && ((_curtmr() > starttmr) || (_curtmr() < endtmr)))
+ if ((endtmr < starttmr) && ((time > starttmr) || (time < endtmr)))
return 1;
- else if ((_curtmr() < endtmr) && (_curtmr() > starttmr))
+ else if ((time < endtmr) && (time > starttmr))
return 1;
endtmr = starttmr = 0;
return 0;