summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1995-05-11 07:44:40 +0000
committerbde <bde@FreeBSD.org>1995-05-11 07:44:40 +0000
commitef98a885661c3d2f2fe8570c56dba5723d570c13 (patch)
tree0d5164dc358e5c6acd11b945b1b53af7244beb76 /sys/i386/isa
parent561eb80e564511caf11e035642fba1a429106466 (diff)
downloadFreeBSD-src-ef98a885661c3d2f2fe8570c56dba5723d570c13.zip
FreeBSD-src-ef98a885661c3d2f2fe8570c56dba5723d570c13.tar.gz
Add variable `idelayed' and macros setdelayed() and schedsofttty()
to access it. setdelayed() actually ORs the bits in `idelayed' into `ipending' and clears `idelayed'. Call setdelayed() every (normal) clock tick to convert delayed interrupts into pending ones. Drivers can set bits in `idelayed' at any time to schedule an interrupt at the next clock tick. This is more efficient than calling timeout(). Currently only software interrupts can be scheduled.
Diffstat (limited to 'sys/i386/isa')
-rw-r--r--sys/i386/isa/clock.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/i386/isa/clock.c b/sys/i386/isa/clock.c
index 2676332..196d34c 100644
--- a/sys/i386/isa/clock.c
+++ b/sys/i386/isa/clock.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)clock.c 7.2 (Berkeley) 5/12/91
- * $Id: clock.c,v 1.31 1995/01/19 22:05:27 ats Exp $
+ * $Id: clock.c,v 1.32 1995/03/16 18:11:58 bde Exp $
*/
/*
@@ -92,6 +92,7 @@
int adjkerntz = 0; /* offset from CMOS clock */
int disable_rtc_set = 0; /* disable resettodr() if != 0 */
+u_int idelayed;
#ifdef I586_CPU
int pentium_mhz;
#endif
@@ -124,6 +125,7 @@ void
clkintr(struct clockframe frame)
{
hardclock(&frame);
+ setdelayed();
}
#else
void
@@ -132,15 +134,18 @@ clkintr(struct clockframe frame)
timer_func(&frame);
switch (timer0_state) {
case 0:
+ setdelayed();
break;
case 1:
if ((timer0_prescaler_count += timer0_max_count)
>= hardclock_max_count) {
hardclock(&frame);
+ setdelayed();
timer0_prescaler_count -= hardclock_max_count;
}
break;
case 2:
+ setdelayed();
timer0_max_count = TIMER_DIV(new_rate);
timer0_overflow_threshold =
timer0_max_count - TIMER0_LATCH_COUNT;
@@ -157,6 +162,7 @@ clkintr(struct clockframe frame)
if ((timer0_prescaler_count += timer0_max_count)
>= hardclock_max_count) {
hardclock(&frame);
+ setdelayed();
timer0_max_count = hardclock_max_count;
timer0_overflow_threshold =
timer0_max_count - TIMER0_LATCH_COUNT;
OpenPOWER on IntegriCloud