New callout mechanism with two major improvements over the old
timeout()/untimeout() API: - Clients supply callout handle storage, thus eliminating problems of resource allocation. - Insertion and removal of callouts is constant time, important as this facility is used quite a lot in the kernel. The old timeout()/untimeout() API has been removed from the kernel.
This commit is contained in:
parent
3ae525eaa3
commit
b667a5a357
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: promcons.c,v 1.13 1998/03/21 22:52:59 mycroft Exp $ */
|
||||
/* $NetBSD: promcons.c,v 1.14 2000/03/23 06:32:32 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
|
||||
@ -29,7 +29,7 @@
|
||||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
|
||||
__KERNEL_RCSID(0, "$NetBSD: promcons.c,v 1.13 1998/03/21 22:52:59 mycroft Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: promcons.c,v 1.14 2000/03/23 06:32:32 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
@ -60,6 +60,8 @@ void promstart __P((struct tty *));
|
||||
void promtimeout __P((void *));
|
||||
int promparam __P((struct tty *, struct termios *));
|
||||
|
||||
struct callout prom_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
int
|
||||
promopen(dev, flag, mode, p)
|
||||
dev_t dev;
|
||||
@ -108,7 +110,7 @@ promopen(dev, flag, mode, p)
|
||||
polltime = hz / PROM_POLL_HZ;
|
||||
if (polltime < 1)
|
||||
polltime = 1;
|
||||
timeout(promtimeout, tp, polltime);
|
||||
callout_reset(&prom_ch, polltime, promtimeout, tp);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
@ -122,7 +124,7 @@ promclose(dev, flag, mode, p)
|
||||
int unit = minor(dev);
|
||||
struct tty *tp = prom_tty[unit];
|
||||
|
||||
untimeout(promtimeout, tp);
|
||||
callout_stop(&prom_ch);
|
||||
(*linesw[tp->t_line].l_close)(tp, flag);
|
||||
ttyclose(tp);
|
||||
return 0;
|
||||
@ -232,7 +234,7 @@ promtimeout(v)
|
||||
if (tp->t_state & TS_ISOPEN)
|
||||
(*linesw[tp->t_line].l_rint)(c, tp);
|
||||
}
|
||||
timeout(promtimeout, tp, polltime);
|
||||
callout_reset(&prom_ch, polltime, promtimeout, tp);
|
||||
}
|
||||
|
||||
struct tty *
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: fd.c,v 1.8 2000/02/07 22:07:28 thorpej Exp $ */
|
||||
/* $NetBSD: fd.c,v 1.9 2000/03/23 06:32:33 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
||||
@ -96,6 +96,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/ioctl.h>
|
||||
@ -165,6 +166,9 @@ struct fdc_softc {
|
||||
bus_space_handle_t sc_ioh; /* ISA io handle */
|
||||
isa_chipset_tag_t sc_ic; /* ISA chipset info */
|
||||
|
||||
struct callout sc_timo_ch; /* timeout callout */
|
||||
struct callout sc_intr_ch; /* pseudo-intr callout */
|
||||
|
||||
/*
|
||||
* XXX We have port overlap with the first IDE controller.
|
||||
* Until we have a reasonable solution for handling overlap
|
||||
@ -238,6 +242,8 @@ struct fd_softc {
|
||||
struct fd_type *sc_type; /* current type descriptor */
|
||||
struct fd_type sc_type_copy; /* copy for fiddling when formatting */
|
||||
|
||||
struct callout sc_motor_ch;
|
||||
|
||||
daddr_t sc_blkno; /* starting block number */
|
||||
int sc_bcount; /* byte count left */
|
||||
int sc_opts; /* user-set options */
|
||||
@ -432,6 +438,9 @@ fdcattach(parent, self, aux)
|
||||
|
||||
printf("\n");
|
||||
|
||||
callout_init(&fdc->sc_timo_ch);
|
||||
callout_init(&fdc->sc_intr_ch);
|
||||
|
||||
/* Re-map the I/O space. */
|
||||
if (bus_space_map(iot, ia->ia_iobase, 6 /* XXX FDC_NPORT */, 0, &ioh)) {
|
||||
printf("%s: can't map i/o space\n", fdc->sc_dev.dv_xname);
|
||||
@ -545,6 +554,8 @@ fdattach(parent, self, aux)
|
||||
struct fd_type *type = fa->fa_deftype;
|
||||
int drive = fa->fa_drive;
|
||||
|
||||
callout_init(&fd->sc_motor_ch);
|
||||
|
||||
/* XXX Allow `flags' to override device type? */
|
||||
|
||||
if (type)
|
||||
@ -640,7 +651,7 @@ fdstrategy(bp)
|
||||
/* Queue transfer on drive, activate drive and controller if idle. */
|
||||
s = splbio();
|
||||
disksort_cylinder(&fd->sc_q, bp);
|
||||
untimeout(fd_motor_off, fd); /* a good idea */
|
||||
callout_stop(&fd->sc_motor_ch); /* a good idea */
|
||||
if (fd->sc_active == 0)
|
||||
fdstart(fd);
|
||||
#ifdef DIAGNOSTIC
|
||||
@ -710,7 +721,7 @@ fdfinish(fd, bp)
|
||||
|
||||
biodone(bp);
|
||||
/* turn off motor 5s from now */
|
||||
timeout(fd_motor_off, fd, 5 * hz);
|
||||
timeout(&fd->sc_motor_ch, 5 * hz, fd_motor_off, fd);
|
||||
fdc->sc_state = DEVIDLE;
|
||||
}
|
||||
|
||||
@ -1013,7 +1024,7 @@ loop:
|
||||
fd->sc_skip = 0;
|
||||
fd->sc_bcount = bp->b_bcount;
|
||||
fd->sc_blkno = bp->b_blkno / (FDC_BSIZE / DEV_BSIZE);
|
||||
untimeout(fd_motor_off, fd);
|
||||
callout_stop(&fd->sc_motor_ch);
|
||||
if ((fd->sc_flags & FD_MOTOR_WAIT) != 0) {
|
||||
fdc->sc_state = MOTORWAIT;
|
||||
return 1;
|
||||
@ -1022,14 +1033,15 @@ loop:
|
||||
/* Turn on the motor, being careful about pairing. */
|
||||
struct fd_softc *ofd = fdc->sc_fd[fd->sc_drive ^ 1];
|
||||
if (ofd && ofd->sc_flags & FD_MOTOR) {
|
||||
untimeout(fd_motor_off, ofd);
|
||||
callout_stop(&ofd->sc_motor_ch);
|
||||
ofd->sc_flags &= ~(FD_MOTOR | FD_MOTOR_WAIT);
|
||||
}
|
||||
fd->sc_flags |= FD_MOTOR | FD_MOTOR_WAIT;
|
||||
fd_set_motor(fdc, 0);
|
||||
fdc->sc_state = MOTORWAIT;
|
||||
/* Allow .25s for motor to stabilize. */
|
||||
timeout(fd_motor_on, fd, hz / 4);
|
||||
callout_reset(&fd->fd_motor_ch, hz / 4,
|
||||
fd_motor_on, fd);
|
||||
return 1;
|
||||
}
|
||||
/* Make sure the right drive is selected. */
|
||||
@ -1055,7 +1067,7 @@ loop:
|
||||
fd->sc_dk.dk_seek++;
|
||||
disk_busy(&fd->sc_dk);
|
||||
|
||||
timeout(fdctimeout, fdc, 4 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 4 * hz, fdctimeout, fdc);
|
||||
return 1;
|
||||
|
||||
case DOIO:
|
||||
@ -1128,14 +1140,14 @@ loop:
|
||||
disk_busy(&fd->sc_dk);
|
||||
|
||||
/* allow 2 seconds for operation */
|
||||
timeout(fdctimeout, fdc, 2 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 2 * hz, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case SEEKWAIT:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
fdc->sc_state = SEEKCOMPLETE;
|
||||
/* allow 1/50 second for heads to settle */
|
||||
timeout(fdcpseudointr, fdc, hz / 50);
|
||||
callout_reset(&fdc->sc_intr_ch, hz / 50, fdcpseudointr, fdc);
|
||||
return 1;
|
||||
|
||||
case SEEKCOMPLETE:
|
||||
@ -1163,7 +1175,7 @@ loop:
|
||||
goto loop;
|
||||
|
||||
case IOCOMPLETE: /* IO DONE, post-analyze */
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
|
||||
disk_unbusy(&fd->sc_dk, (bp->b_bcount - bp->b_resid));
|
||||
|
||||
@ -1201,11 +1213,11 @@ loop:
|
||||
delay(100);
|
||||
fd_set_motor(fdc, 0);
|
||||
fdc->sc_state = RESETCOMPLETE;
|
||||
timeout(fdctimeout, fdc, hz / 2);
|
||||
callout_reset(&fdc->sc_timo_ch, hz / 2, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RESETCOMPLETE:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
/* clear the controller output buffer */
|
||||
for (i = 0; i < 4; i++) {
|
||||
out_fdc(iot, ioh, NE7CMD_SENSEI);
|
||||
@ -1217,14 +1229,14 @@ loop:
|
||||
out_fdc(iot, ioh, NE7CMD_RECAL); /* recalibrate function */
|
||||
out_fdc(iot, ioh, fd->sc_drive);
|
||||
fdc->sc_state = RECALWAIT;
|
||||
timeout(fdctimeout, fdc, 5 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 5 * hz, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RECALWAIT:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
fdc->sc_state = RECALCOMPLETE;
|
||||
/* allow 1/30 second for heads to settle */
|
||||
timeout(fdcpseudointr, fdc, hz / 30);
|
||||
callout_reset(&fdc->sc_intr_ch, hz / 30, fdcpseudointr, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RECALCOMPLETE:
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: machdep.c,v 1.147 2000/02/21 20:38:46 erh Exp $ */
|
||||
/* $NetBSD: machdep.c,v 1.148 2000/03/23 06:33:08 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988 University of Utah.
|
||||
@ -51,6 +51,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/signalvar.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/map.h>
|
||||
@ -1559,6 +1560,7 @@ int panicbutton = 1; /* non-zero if panic buttons are enabled */
|
||||
int crashandburn = 0;
|
||||
int candbdelay = 50; /* give em half a second */
|
||||
void candbtimer __P((void));
|
||||
struct callout candbtimer_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
void
|
||||
candbtimer()
|
||||
@ -1594,7 +1596,8 @@ nmihand(frame)
|
||||
"forced crash, nosync" : "forced crash");
|
||||
}
|
||||
crashandburn++;
|
||||
timeout(candbtimer, (caddr_t)0, candbdelay);
|
||||
callout_reset(&candbtimer_ch, candbdelay,
|
||||
candbtimer, NULL);
|
||||
}
|
||||
#endif
|
||||
return;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: fd.c,v 1.44 2000/03/16 16:37:20 kleink Exp $ */
|
||||
/* $NetBSD: fd.c,v 1.45 2000/03/23 06:33:10 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Christian E. Hopps
|
||||
@ -33,6 +33,7 @@
|
||||
*/
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/buf.h>
|
||||
@ -143,6 +144,8 @@ struct fd_softc {
|
||||
struct disk dkdev; /* generic disk info */
|
||||
struct buf_queue bufq; /* queue pending I/O operations */
|
||||
struct buf curbuf; /* state of current I/O operation */
|
||||
struct callout calibrate_ch;
|
||||
struct callout motor_ch;
|
||||
struct fdtype *type;
|
||||
void *cachep; /* cached track data (write through) */
|
||||
int cachetrk; /* cahced track -1 for none */
|
||||
@ -389,6 +392,8 @@ fdattach(pdp, dp, auxp)
|
||||
sc = (struct fd_softc *)dp;
|
||||
|
||||
BUFQ_INIT(&sc->bufq);
|
||||
callout_init(&sc->calibrate_ch);
|
||||
callout_init(&sc->motor_ch);
|
||||
|
||||
sc->curcyl = sc->cachetrk = -1;
|
||||
sc->openpart = -1;
|
||||
@ -1468,11 +1473,11 @@ fdcalibrate(arg)
|
||||
* trk++, trk, trk++, trk, trk++, trk, trk++, trk and dma
|
||||
*/
|
||||
if (loopcnt < 8)
|
||||
timeout(fdcalibrate, sc, hz / 8);
|
||||
callout_reset(&sc->calibrate_ch, hz / 8, fdcalibrate, sc);
|
||||
else {
|
||||
loopcnt = 0;
|
||||
fdc_indma = NULL;
|
||||
timeout(fdmotoroff, sc, 3 * hz / 2);
|
||||
callout_reset(&sc->motor_ch, 3 * hz / 2, fdmotoroff, sc);
|
||||
fddmastart(sc, sc->cachetrk);
|
||||
}
|
||||
}
|
||||
@ -1486,7 +1491,7 @@ fddmadone(sc, timeo)
|
||||
printf("fddmadone: unit %d, timeo %d\n", sc->hwunit, timeo);
|
||||
#endif
|
||||
fdc_indma = NULL;
|
||||
untimeout(fdmotoroff, sc);
|
||||
callout_stop(&sc->motor_ch);
|
||||
FDDMASTOP;
|
||||
|
||||
/*
|
||||
@ -1502,7 +1507,7 @@ fddmadone(sc, timeo)
|
||||
/*
|
||||
* motor runs for 1.5 seconds after last dma
|
||||
*/
|
||||
timeout(fdmotoroff, sc, 3 * hz / 2);
|
||||
callout_reset(&sc->motor_ch, 3 * hz / 2, fdmotoroff, sc);
|
||||
}
|
||||
if (sc->flags & FDF_DIRTY) {
|
||||
/*
|
||||
@ -1550,7 +1555,7 @@ fddmadone(sc, timeo)
|
||||
/*
|
||||
* this will be restarted at end of calibrate loop.
|
||||
*/
|
||||
untimeout(fdmotoroff, sc);
|
||||
callout_stop(&sc->motor_ch);
|
||||
fdcalibrate(sc);
|
||||
return;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ite.c,v 1.51 1998/07/04 22:18:16 jonathan Exp $ */
|
||||
/* $NetBSD: ite.c,v 1.52 2000/03/23 06:33:11 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988 University of Utah.
|
||||
@ -58,6 +58,7 @@
|
||||
#include <sys/tty.h>
|
||||
#include <sys/termios.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/proc.h>
|
||||
#include <dev/cons.h>
|
||||
#include <amiga/amiga/cc.h>
|
||||
@ -652,7 +653,7 @@ itestart(tp)
|
||||
/* we have characters remaining. */
|
||||
if (rbp->c_cc) {
|
||||
tp->t_state |= TS_TIMEOUT;
|
||||
timeout(ttrstrt, tp, 1);
|
||||
callout_reset(&tp->t_rstrt_ch, 1, ttrstrt, tp);
|
||||
}
|
||||
/* wakeup we are below */
|
||||
if (rbp->c_cc <= tp->t_lowat) {
|
||||
@ -866,6 +867,8 @@ ite_cnfilter(c, caller)
|
||||
static u_char last_char;
|
||||
static u_char tout_pending;
|
||||
|
||||
static struct callout repeat_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
repeat_handler(arg)
|
||||
@ -919,7 +922,7 @@ ite_filter(c, caller)
|
||||
/* stop repeating on up event */
|
||||
if (up) {
|
||||
if (tout_pending) {
|
||||
untimeout(repeat_handler, 0);
|
||||
callout_stop(&repeat_ch);
|
||||
tout_pending = 0;
|
||||
last_char = 0;
|
||||
}
|
||||
@ -927,7 +930,7 @@ ite_filter(c, caller)
|
||||
return;
|
||||
} else if (tout_pending && last_char != c) {
|
||||
/* different character, stop also */
|
||||
untimeout(repeat_handler, 0);
|
||||
callout_stop(&repeat_ch);
|
||||
tout_pending = 0;
|
||||
last_char = 0;
|
||||
}
|
||||
@ -970,12 +973,14 @@ ite_filter(c, caller)
|
||||
if (!tout_pending && caller == ITEFILT_TTY && kbd_ite->key_repeat) {
|
||||
tout_pending = 1;
|
||||
last_char = c;
|
||||
timeout(repeat_handler, 0, start_repeat_timeo * hz / 100);
|
||||
callout_reset(&repeat_ch,
|
||||
start_repeat_timeo * hz / 100, repeat_handler, NULL);
|
||||
} else if (!tout_pending && caller == ITEFILT_REPEATER &&
|
||||
kbd_ite->key_repeat) {
|
||||
tout_pending = 1;
|
||||
last_char = c;
|
||||
timeout(repeat_handler, 0, next_repeat_timeo * hz / 100);
|
||||
callout_reset(&repeat_ch,
|
||||
next_repeat_timeo * hz / 100, repeat_handler, NULL);
|
||||
}
|
||||
/* handle dead keys */
|
||||
if (key.mode & KBD_MODE_DEAD) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ms.c,v 1.15 1998/01/12 10:40:04 thorpej Exp $ */
|
||||
/* $NetBSD: ms.c,v 1.16 2000/03/23 06:33:11 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* based on:
|
||||
@ -59,6 +59,7 @@
|
||||
#include <sys/proc.h>
|
||||
#include <sys/syslog.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/tty.h>
|
||||
#include <sys/signalvar.h>
|
||||
|
||||
@ -82,6 +83,8 @@ void ms_disable __P((dev_t));
|
||||
struct ms_softc {
|
||||
struct device sc_dev;
|
||||
|
||||
struct callout sc_intr_ch;
|
||||
|
||||
u_char ms_horc; /* horizontal counter on last scan */
|
||||
u_char ms_verc; /* vertical counter on last scan */
|
||||
char ms_mb; /* mouse button state */
|
||||
@ -117,7 +120,10 @@ msattach(pdp, dp, auxp)
|
||||
struct device *pdp, *dp;
|
||||
void *auxp;
|
||||
{
|
||||
struct ms_softc *sc = (void *) dp;
|
||||
|
||||
printf("\n");
|
||||
callout_init(&sc->sc_intr_ch);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -146,7 +152,7 @@ ms_enable(dev)
|
||||
*/
|
||||
ms->ms_ready = 1;
|
||||
|
||||
timeout(msintr, (void *)minor(dev), 2);
|
||||
callout_reset(&ms->sc_intr_ch, 2, msintr, ms);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -180,15 +186,14 @@ msintr(arg)
|
||||
{
|
||||
static const char to_one[] = { 1, 2, 2, 4, 4, 4, 4 };
|
||||
static const int to_id[] = { MS_RIGHT, MS_MIDDLE, 0, MS_LEFT };
|
||||
struct ms_softc *ms;
|
||||
struct ms_softc *ms = arg;
|
||||
struct firm_event *fe;
|
||||
int mb, ub, d, get, put, any, unit;
|
||||
u_char pra, *horc, *verc;
|
||||
u_short pot, count;
|
||||
short dx, dy;
|
||||
|
||||
unit = (int)arg;
|
||||
ms = (struct ms_softc *)getsoftc(ms_cd, unit);
|
||||
unit = ms->sc_dev.dv_unit;
|
||||
|
||||
horc = ((u_char *) &count) + 1;
|
||||
verc = (u_char *) &count;
|
||||
@ -326,7 +331,7 @@ out:
|
||||
* handshake with ms_disable
|
||||
*/
|
||||
if (ms->ms_ready)
|
||||
timeout(msintr, (void *)unit, 2);
|
||||
callout_reset(&ms->sc_intr_ch, 2, msintr, ms);
|
||||
else
|
||||
wakeup(ms);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: par.c,v 1.19 2000/03/16 16:37:20 kleink Exp $ */
|
||||
/* $NetBSD: par.c,v 1.20 2000/03/23 06:33:12 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1990 The Regents of the University of California.
|
||||
@ -49,6 +49,7 @@
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/proc.h>
|
||||
|
||||
#include <amiga/amiga/device.h>
|
||||
@ -64,10 +65,15 @@ struct par_softc {
|
||||
#define sc_burst sc_param.burst
|
||||
#define sc_timo sc_param.timo
|
||||
#define sc_delay sc_param.delay
|
||||
|
||||
struct callout sc_timo_ch;
|
||||
struct callout sc_start_ch;
|
||||
} *par_softcp;
|
||||
|
||||
#define getparsp(x) (x > 0 ? NULL : par_softcp)
|
||||
|
||||
struct callout parintr_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
/* sc_flags values */
|
||||
#define PARF_ALIVE 0x01
|
||||
#define PARF_OPEN 0x02
|
||||
@ -133,6 +139,9 @@ parattach(pdp, dp, auxp)
|
||||
#endif
|
||||
par_softcp->sc_flags = PARF_ALIVE;
|
||||
printf("\n");
|
||||
|
||||
callout_init(&par_softcp->sc_timo_ch);
|
||||
callout_init(&par_softcp->sc_start_ch);
|
||||
}
|
||||
|
||||
int
|
||||
@ -201,14 +210,11 @@ void
|
||||
parstart(arg)
|
||||
void *arg;
|
||||
{
|
||||
struct par_softc *sc;
|
||||
int unit;
|
||||
struct par_softc *sc = arg;
|
||||
|
||||
unit = (int)arg;
|
||||
sc = getparsp(unit);
|
||||
#ifdef DEBUG
|
||||
if (pardebug & PDB_FOLLOW)
|
||||
printf("parstart(%x)\n", unit);
|
||||
printf("parstart(%x)\n", sc->sc_dev.dv_unit);
|
||||
#endif
|
||||
sc->sc_flags &= ~PARF_DELAY;
|
||||
wakeup(sc);
|
||||
@ -218,14 +224,11 @@ void
|
||||
partimo(arg)
|
||||
void *arg;
|
||||
{
|
||||
struct par_softc *sc;
|
||||
int unit;
|
||||
struct par_softc *sc = arg;
|
||||
|
||||
unit = (int) arg;
|
||||
sc = getparsp(unit);
|
||||
#ifdef DEBUG
|
||||
if (pardebug & PDB_FOLLOW)
|
||||
printf("partimo(%x)\n", unit);
|
||||
printf("partimo(%x)\n", sc->sc_dev.dv_unit);
|
||||
#endif
|
||||
sc->sc_flags &= ~(PARF_UIO|PARF_TIMO);
|
||||
wakeup(sc);
|
||||
@ -294,7 +297,7 @@ parrw(dev, uio)
|
||||
if (sc->sc_timo > 0)
|
||||
{
|
||||
sc->sc_flags |= PARF_TIMO;
|
||||
timeout(partimo, (void *)unit, sc->sc_timo);
|
||||
callout_reset(&sc->sc_timo_ch, sc->sc_timo, partimo, sc);
|
||||
}
|
||||
while (uio->uio_resid > 0)
|
||||
{
|
||||
@ -325,7 +328,7 @@ again:
|
||||
#endif
|
||||
if (sc->sc_flags & PARF_TIMO)
|
||||
{
|
||||
untimeout(partimo, (void *)unit);
|
||||
callout_stop(&sc->sc_timo_ch);
|
||||
sc->sc_flags &= ~PARF_TIMO;
|
||||
}
|
||||
splx(s);
|
||||
@ -391,7 +394,7 @@ again:
|
||||
if (sc->sc_delay > 0)
|
||||
{
|
||||
sc->sc_flags |= PARF_DELAY;
|
||||
timeout(parstart, (void *)unit, sc->sc_delay);
|
||||
callout_reset(&sc->sc_start_ch, sc->sc_delay, parstart, sc);
|
||||
error = tsleep(sc, PCATCH | (PZERO - 1), "par-cdelay", 0);
|
||||
if (error)
|
||||
{
|
||||
@ -415,12 +418,12 @@ again:
|
||||
s = splsoftclock();
|
||||
if (sc->sc_flags & PARF_TIMO)
|
||||
{
|
||||
untimeout(partimo, (void *)unit);
|
||||
callout_stop(&sc->sc_timo_ch);
|
||||
sc->sc_flags &= ~PARF_TIMO;
|
||||
}
|
||||
if (sc->sc_flags & PARF_DELAY)
|
||||
{
|
||||
untimeout(parstart, (void *)unit);
|
||||
callout_stop(&sc->sc_start_ch);
|
||||
sc->sc_flags &= ~PARF_DELAY;
|
||||
}
|
||||
splx(s);
|
||||
@ -536,7 +539,7 @@ parintr(arg)
|
||||
*/
|
||||
if (mask) {
|
||||
if (partimeout_pending)
|
||||
untimeout(parintr, 0);
|
||||
callout_stop(&parintr_ch);
|
||||
if (parsend_pending)
|
||||
parsend_pending = 0;
|
||||
}
|
||||
@ -572,7 +575,7 @@ parsendch (ch)
|
||||
& (CIAB_PRA_SEL|CIAB_PRA_BUSY|CIAB_PRA_POUT)));
|
||||
#endif
|
||||
/* wait a second, and try again */
|
||||
timeout(parintr, 0, hz);
|
||||
callout_reset(&parintr_ch, hz, parintr, NULL);
|
||||
partimeout_pending = 1;
|
||||
/* this is essentially a flipflop to have us wait for the
|
||||
first character being transmitted when trying to transmit
|
||||
@ -588,7 +591,7 @@ parsendch (ch)
|
||||
printf ("parsendch interrupted, error = %d\n", error);
|
||||
#endif
|
||||
if (partimeout_pending)
|
||||
untimeout(parintr, 0);
|
||||
callout_stop(&parintr_ch);
|
||||
|
||||
partimeout_pending = 0;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: sbic.c,v 1.38 2000/01/18 19:33:32 thorpej Exp $ */
|
||||
/* $NetBSD: sbic.c,v 1.39 2000/03/23 06:33:12 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Christian E. Hopps
|
||||
@ -846,6 +846,7 @@ sbicinit(dev)
|
||||
TAILQ_INIT(&dev->ready_list);
|
||||
TAILQ_INIT(&dev->nexus_list);
|
||||
TAILQ_INIT(&dev->free_list);
|
||||
callout_init(&dev->sc_timo_ch);
|
||||
dev->sc_nexus = NULL;
|
||||
dev->sc_xs = NULL;
|
||||
acb = dev->sc_acb;
|
||||
@ -857,7 +858,8 @@ sbicinit(dev)
|
||||
bzero(dev->sc_tinfo, sizeof(dev->sc_tinfo));
|
||||
#ifdef DEBUG
|
||||
/* make sure timeout is really not needed */
|
||||
timeout((void *)sbictimeout, dev, 30 * hz);
|
||||
callout_reset(&dev->sc_timo_ch, 30 * hz,
|
||||
(void *)sbictimeout, dev);
|
||||
#endif
|
||||
|
||||
} else panic("sbic: reinitializing driver!");
|
||||
@ -2712,7 +2714,8 @@ sbictimeout(dev)
|
||||
dev->sc_dmatimo++;
|
||||
}
|
||||
splx(s);
|
||||
timeout((void *)sbictimeout, dev, 30 * hz);
|
||||
callout_reset(&dev->sc_timo_ch, 30 * hz,
|
||||
(void *)sbictimeout, dev);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: sbicvar.h,v 1.14 1998/11/19 21:44:37 thorpej Exp $ */
|
||||
/* $NetBSD: sbicvar.h,v 1.15 2000/03/23 06:33:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@ -40,6 +40,7 @@
|
||||
#ifndef _SBICVAR_H_
|
||||
#define _SBICVAR_H_
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/callout.h>
|
||||
|
||||
/*
|
||||
* The largest single request will be MAXPHYS bytes which will require
|
||||
@ -105,6 +106,7 @@ struct sbic_tinfo {
|
||||
struct sbic_softc {
|
||||
struct device sc_dev;
|
||||
struct isr sc_isr;
|
||||
struct callout sc_timo_ch;
|
||||
struct target_sync {
|
||||
u_char state;
|
||||
u_char period;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: fd.c,v 1.17 2000/02/22 11:26:00 soda Exp $ */
|
||||
/* $NetBSD: fd.c,v 1.18 2000/03/23 06:34:23 thorpej Exp $ */
|
||||
/* $OpenBSD: fd.c,v 1.6 1998/10/03 21:18:57 millert Exp $ */
|
||||
/* NetBSD: fd.c,v 1.78 1995/07/04 07:23:09 mycroft Exp */
|
||||
|
||||
@ -78,6 +78,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/conf.h>
|
||||
#include <sys/file.h>
|
||||
@ -131,6 +132,9 @@ enum fdc_state {
|
||||
struct fdc_softc {
|
||||
struct device sc_dev; /* boilerplate */
|
||||
|
||||
struct callout sc_timo_ch; /* timeout callout */
|
||||
struct callout sc_intr_ch; /* pseudo-intr callout */
|
||||
|
||||
struct dma_softc __dma;
|
||||
struct dma_softc *dma;
|
||||
|
||||
@ -190,6 +194,8 @@ struct fd_softc {
|
||||
struct fd_type *sc_deftype; /* default type descriptor */
|
||||
struct fd_type *sc_type; /* current type descriptor */
|
||||
|
||||
struct callout sc_motor_ch;
|
||||
|
||||
daddr_t sc_blkno; /* starting block number */
|
||||
int sc_bcount; /* byte count left */
|
||||
int sc_skip; /* bytes already transferred */
|
||||
@ -321,6 +327,9 @@ fdcattach(parent, self, aux)
|
||||
|
||||
printf("\n");
|
||||
|
||||
callout_init(&fdc->sc_timo_ch);
|
||||
callout_init(&fdc->sc_intr_ch);
|
||||
|
||||
BUS_INTR_ESTABLISH(ca, fdcintr, fdc);
|
||||
|
||||
/*
|
||||
@ -397,6 +406,8 @@ fdattach(parent, self, aux)
|
||||
struct fd_type *type = fa->fa_deftype;
|
||||
int drive = fa->fa_drive;
|
||||
|
||||
callout_init(&fd->sc_motor_ch);
|
||||
|
||||
/* XXX Allow `flags' to override device type? */
|
||||
|
||||
if (type)
|
||||
@ -507,7 +518,7 @@ fdstrategy(bp)
|
||||
/* Queue transfer on drive, activate drive and controller if idle. */
|
||||
s = splbio();
|
||||
disksort_cylinder(&fd->sc_q, bp);
|
||||
untimeout(fd_motor_off, fd); /* a good idea */
|
||||
callout_stop(&fd->sc_motor_ch); /* a good idea */
|
||||
if (fd->sc_active == 0)
|
||||
fdstart(fd);
|
||||
#ifdef DIAGNOSTIC
|
||||
@ -571,7 +582,7 @@ fdfinish(fd, bp)
|
||||
BUFQ_REMOVE(&fd->sc_q, bp);
|
||||
biodone(bp);
|
||||
/* turn off motor 5s from now */
|
||||
timeout(fd_motor_off, fd, 10 * hz);
|
||||
callout_reset(&fd->sc_motor_ch, 10 * hz, fd_motor_off, fd);
|
||||
fdc->sc_state = DEVIDLE;
|
||||
}
|
||||
|
||||
@ -861,7 +872,7 @@ loop:
|
||||
fd->sc_skip = 0;
|
||||
fd->sc_bcount = bp->b_bcount;
|
||||
fd->sc_blkno = bp->b_blkno / (FDC_BSIZE / DEV_BSIZE);
|
||||
untimeout(fd_motor_off, fd);
|
||||
callout_stop(&fd->fd_motor_ch);
|
||||
if ((fd->sc_flags & FD_MOTOR_WAIT) != 0) {
|
||||
fdc->sc_state = MOTORWAIT;
|
||||
return 1;
|
||||
@ -870,14 +881,15 @@ loop:
|
||||
/* Turn on the motor, being careful about pairing. */
|
||||
struct fd_softc *ofd = fdc->sc_fd[fd->sc_drive ^ 1];
|
||||
if (ofd && ofd->sc_flags & FD_MOTOR) {
|
||||
untimeout(fd_motor_off, ofd);
|
||||
callout_stop(&ofd->fd_motor_ch);
|
||||
ofd->sc_flags &= ~(FD_MOTOR | FD_MOTOR_WAIT);
|
||||
}
|
||||
fd->sc_flags |= FD_MOTOR | FD_MOTOR_WAIT;
|
||||
fd_set_motor(fdc, 0);
|
||||
fdc->sc_state = MOTORWAIT;
|
||||
/* Allow .5s for motor to stabilize. */
|
||||
timeout(fd_motor_on, fd, hz / 2);
|
||||
callout_reset(&fd->sc_motor_ch, hz / 2,
|
||||
fd_motor_on, fd);
|
||||
return 1;
|
||||
}
|
||||
/* Make sure the right drive is selected. */
|
||||
@ -899,7 +911,7 @@ loop:
|
||||
|
||||
fd->sc_cylin = -1;
|
||||
fdc->sc_state = SEEKWAIT;
|
||||
timeout(fdctimeout, fdc, 4 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 4 * hz, fdctimeout, fdc);
|
||||
return 1;
|
||||
|
||||
case DOIO:
|
||||
@ -947,14 +959,15 @@ loop:
|
||||
out_fdc(iobase, type->datalen); /* data length */
|
||||
fdc->sc_state = IOCOMPLETE;
|
||||
/* allow 2 seconds for operation */
|
||||
timeout(fdctimeout, fdc, 2 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 2 * hz, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case SEEKWAIT:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
fdc->sc_state = SEEKCOMPLETE;
|
||||
/* allow 1/50 second for heads to settle */
|
||||
timeout(fdcpseudointr, fdc, hz / 50);
|
||||
callout_reset(&fdc->sc_intr_ch, hz / 50,
|
||||
fdcpseudointr, fdc);
|
||||
return 1;
|
||||
|
||||
case SEEKCOMPLETE:
|
||||
@ -981,7 +994,7 @@ loop:
|
||||
goto loop;
|
||||
|
||||
case IOCOMPLETE: /* IO DONE, post-analyze */
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
if (fdcresult(fdc) != 7 || (st0 & 0xf8) != 0) {
|
||||
DMA_RESET(fdc->dma);
|
||||
#ifdef FD_DEBUG
|
||||
@ -1017,11 +1030,11 @@ loop:
|
||||
delay(100);
|
||||
fd_set_motor(fdc, 0);
|
||||
fdc->sc_state = RESETCOMPLETE;
|
||||
timeout(fdctimeout, fdc, hz / 2);
|
||||
callout_reset(&fdc->sc_timo_ch, hz / 2, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RESETCOMPLETE:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
/* clear the controller output buffer */
|
||||
for (i = 0; i < 4; i++) {
|
||||
out_fdc(iobase, NE7CMD_SENSEI);
|
||||
@ -1033,14 +1046,15 @@ loop:
|
||||
out_fdc(iobase, NE7CMD_RECAL); /* recalibrate function */
|
||||
out_fdc(iobase, fd->sc_drive);
|
||||
fdc->sc_state = RECALWAIT;
|
||||
timeout(fdctimeout, fdc, 5 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 5 * hz, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RECALWAIT:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
fdc->sc_state = RECALCOMPLETE;
|
||||
/* allow 1/30 second for heads to settle */
|
||||
timeout(fdcpseudointr, fdc, hz / 30);
|
||||
callout_reset(&fdc->sc_intr_ch, hz / 30,
|
||||
fdcpseudointr, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RECALCOMPLETE:
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pccons.c,v 1.16 2000/03/06 21:36:06 thorpej Exp $ */
|
||||
/* $NetBSD: pccons.c,v 1.17 2000/03/23 06:34:24 thorpej Exp $ */
|
||||
/* $OpenBSD: pccons.c,v 1.22 1999/01/30 22:39:37 imp Exp $ */
|
||||
/* NetBSD: pccons.c,v 1.89 1995/05/04 19:35:20 cgd Exp */
|
||||
/* NetBSD: pms.c,v 1.21 1995/04/18 02:25:18 mycroft Exp */
|
||||
@ -154,6 +154,8 @@ struct opms_softc { /* driver status information */
|
||||
int sc_x, sc_y; /* accumulated motion in the X,Y axis */
|
||||
};
|
||||
|
||||
static struct callout async_update_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
int pcprobe __P((struct device *, struct cfdata *, void *));
|
||||
void pcattach __P((struct device *, struct device *, void *));
|
||||
int pcintr __P((void *));
|
||||
@ -464,13 +466,14 @@ async_update()
|
||||
|
||||
if (kernel || polling) {
|
||||
if (async)
|
||||
untimeout((void(*)(void *))do_async_update, NULL);
|
||||
callout_stop(&async_update_ch);
|
||||
do_async_update(1);
|
||||
} else {
|
||||
if (async)
|
||||
return;
|
||||
async = 1;
|
||||
timeout((void(*)(void *))do_async_update, NULL, 1);
|
||||
callout_reset(&async_update_ch, 1,
|
||||
(void(*)(void *))do_async_update, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@ -820,7 +823,7 @@ pcstart(tp)
|
||||
tp->t_state &= ~TS_BUSY;
|
||||
if (cl->c_cc) {
|
||||
tp->t_state |= TS_TIMEOUT;
|
||||
timeout(ttrstrt, tp, 1);
|
||||
callout_reset(&tp->t_rstrt_ch, 1, ttrstrt, tp);
|
||||
}
|
||||
if (cl->c_cc <= tp->t_lowat) {
|
||||
if (tp->t_state & TS_ASLEEP) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: btl.c,v 1.3 2000/02/22 11:26:01 soda Exp $ */
|
||||
/* $NetBSD: btl.c,v 1.4 2000/03/23 06:34:25 thorpej Exp $ */
|
||||
|
||||
#undef BTDIAG
|
||||
#define integrate
|
||||
@ -503,7 +503,7 @@ AGAIN:
|
||||
goto next;
|
||||
}
|
||||
|
||||
untimeout(bt_timeout, ccb);
|
||||
callout_stop(&ccb->xs->xs_callout);
|
||||
bt_done(sc, ccb);
|
||||
|
||||
next:
|
||||
@ -812,7 +812,8 @@ bt_start_ccbs(sc)
|
||||
isa_outb(iobase + BT_CMD_PORT, BT_START_SCSI);
|
||||
|
||||
if ((ccb->xs->xs_control & XS_CTL_POLL) == 0)
|
||||
timeout(bt_timeout, ccb, (ccb->timeout * hz) / 1000);
|
||||
callout_reset(&ccb->xs->xs_callout,
|
||||
(ccb->timeout * hz) / 1000, bt_timeout, ccb);
|
||||
|
||||
++sc->sc_mbofull;
|
||||
bt_nextmbx(wmbo, wmbx, mbo);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: isabus.c,v 1.7 2000/03/03 12:50:21 soda Exp $ */
|
||||
/* $NetBSD: isabus.c,v 1.8 2000/03/23 06:34:25 thorpej Exp $ */
|
||||
/* $OpenBSD: isabus.c,v 1.15 1998/03/16 09:38:46 pefo Exp $ */
|
||||
/* NetBSD: isa.c,v 1.33 1995/06/28 04:30:51 cgd Exp */
|
||||
|
||||
@ -92,6 +92,7 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#include <sys/proc.h>
|
||||
#include <sys/user.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/device.h>
|
||||
@ -114,6 +115,7 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#include <machine/isa_machdep.h>
|
||||
|
||||
static int beeping;
|
||||
static struct callout sysbeep_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
#define IRQ_SLAVE 2
|
||||
#define ICU_LEN 16
|
||||
@ -523,7 +525,7 @@ sysbeep(pitch, period)
|
||||
return; /* Can't beep yet. */
|
||||
|
||||
if (beeping)
|
||||
untimeout(sysbeepstop, 0);
|
||||
callout_stop(&sysbeep_ch);
|
||||
if (!beeping || last_pitch != pitch) {
|
||||
s = splhigh();
|
||||
isa_outb(IO_TIMER1 + TIMER_MODE,
|
||||
@ -535,5 +537,5 @@ sysbeep(pitch, period)
|
||||
}
|
||||
last_pitch = pitch;
|
||||
beeping = last_period = period;
|
||||
timeout(sysbeepstop, 0, period);
|
||||
callout_reset(&sysbeep_ch, period, sysbeepstop, NULL);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: kbd.c,v 1.24 1999/02/02 04:02:26 mark Exp $ */
|
||||
/* $NetBSD: kbd.c,v 1.25 2000/03/23 06:35:14 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994-1997 Mark Brinicombe.
|
||||
@ -48,6 +48,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/conf.h>
|
||||
#include <sys/proc.h>
|
||||
@ -110,6 +111,8 @@ static int rawkbd_device = 0;
|
||||
int modifiers = 0;
|
||||
static int kbd_ack = 0;
|
||||
static int kbd_resend = 0;
|
||||
static struct callout autorepeat_ch = CALLOUT_INITIALIZER;
|
||||
static struct callout autorepeatstart_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
#ifdef PMAP_DEBUG
|
||||
extern int pmap_debug_level;
|
||||
@ -232,8 +235,8 @@ kbdopen(dev, flag, mode, p)
|
||||
|
||||
/* Kill any active autorepeat */
|
||||
|
||||
untimeout(autorepeatstart, &autorepeatkey);
|
||||
untimeout(autorepeat, &autorepeatkey);
|
||||
callout_stop(&autorepeatstart_ch);
|
||||
callout_stop(&autorepeat_ch);
|
||||
|
||||
return(0);
|
||||
}
|
||||
@ -921,8 +924,8 @@ kbddecodekey(sc, code)
|
||||
if (!up && key != 0) {
|
||||
if (key >= 0x200) {
|
||||
|
||||
untimeout(autorepeatstart, &autorepeatkey);
|
||||
untimeout(autorepeat, &autorepeatkey);
|
||||
callout_stop(&autorepeatstart_ch);
|
||||
callout_stop(&autorepeat_ch);
|
||||
autorepeatkey = -1;
|
||||
#if (NVT > 0)
|
||||
if ((key & ~0x0f) == 0x480)
|
||||
@ -999,18 +1002,20 @@ kbddecodekey(sc, code)
|
||||
*/
|
||||
if (rawkbd_device == 0 && physconkbd(key) == 0) {
|
||||
if (autorepeatkey != key) {
|
||||
untimeout(autorepeatstart, &autorepeatkey);
|
||||
untimeout(autorepeat, &autorepeatkey);
|
||||
callout_stop(&autorepeatstart_ch);
|
||||
callout_stop(&autorepeat_ch);
|
||||
autorepeatkey = key;
|
||||
timeout(autorepeatstart, &autorepeatkey, hz/kbdautorepeat.ka_delay);
|
||||
callout_reset(&autorepeatstart_ch,
|
||||
hz / kbdautorepeat.ka_delay,
|
||||
autorepeatstart, &autorepeatkey);
|
||||
}
|
||||
}
|
||||
|
||||
return(1);
|
||||
}
|
||||
} else {
|
||||
untimeout(autorepeatstart, &autorepeatkey);
|
||||
untimeout(autorepeat, &autorepeatkey);
|
||||
callout_stop(&autorepeatstart_ch);
|
||||
callout_stop(&autorepeat_ch);
|
||||
autorepeatkey = -1;
|
||||
}
|
||||
return(0);
|
||||
@ -1022,7 +1027,8 @@ autorepeatstart(key)
|
||||
void *key;
|
||||
{
|
||||
physconkbd(*((int *)key));
|
||||
timeout(autorepeat, key, hz/kbdautorepeat.ka_rate);
|
||||
callout_reset(&autorepeat_ch, hz / kbdautorepeat.ka_rate,
|
||||
autorepeat, key);
|
||||
}
|
||||
|
||||
|
||||
@ -1031,7 +1037,8 @@ autorepeat(key)
|
||||
void *key;
|
||||
{
|
||||
physconkbd(*((int *)key));
|
||||
timeout(autorepeat, key, hz/kbdautorepeat.ka_rate);
|
||||
callout_reset(&autorepeat_ch, hz / kbdautorepeat.ka_rate,
|
||||
autorepeat, key);
|
||||
}
|
||||
|
||||
/* End of kbd.c */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pms.c,v 1.20 1999/06/01 09:34:07 mark Exp $ */
|
||||
/* $NetBSD: pms.c,v 1.21 2000/03/23 06:35:14 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996 D.C. Tsen
|
||||
@ -190,6 +190,7 @@ pmsinit(sc)
|
||||
int mid;
|
||||
|
||||
/* Set up softc */
|
||||
callout_init(&sc->sc_watchdog_ch);
|
||||
sc->sc_state = 0;
|
||||
sc->origx = 0;
|
||||
sc->origy = 0;
|
||||
@ -295,7 +296,8 @@ pmsopen(dev, flag, mode, p)
|
||||
sc->sc_intenable(sc, 1);
|
||||
|
||||
/* install watchdog timeout */
|
||||
timeout(pmswatchdog, (void *) sc, 30 * hz);
|
||||
callout_reset(&sc->sc_watchdog_ch, 30 * hz,
|
||||
pmswatchdog, sc);
|
||||
|
||||
return(0);
|
||||
}
|
||||
@ -313,7 +315,7 @@ pmsclose(dev, flag, mode, p)
|
||||
struct pms_softc *sc = opms_cd.cd_devs[PMSUNIT(dev)];
|
||||
|
||||
/* remove the timeout */
|
||||
untimeout(pmswatchdog, (void *) sc);
|
||||
callout_stop(&sc->sc_watchdog_ch);
|
||||
|
||||
/* disable interrupts */
|
||||
sc->sc_intenable(sc, 0);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pmsvar.h,v 1.1 1997/10/14 19:35:35 mark Exp $ */
|
||||
/* $NetBSD: pmsvar.h,v 1.2 2000/03/23 06:35:14 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997 Mark Brinicombe.
|
||||
@ -43,6 +43,8 @@
|
||||
* softc structure for the pms device
|
||||
*/
|
||||
|
||||
#include <sys/callout.h>
|
||||
|
||||
struct pms_softc {
|
||||
struct device sc_dev; /* device node */
|
||||
void *sc_ih; /* interrupt pointer */
|
||||
@ -50,6 +52,8 @@ struct pms_softc {
|
||||
bus_space_handle_t sc_ioh; /* bus handle */
|
||||
int sc_irqnum; /* interrupt number */
|
||||
|
||||
struct callout sc_watchdog_ch;
|
||||
|
||||
void (*sc_intenable) __P((struct pms_softc *, int));
|
||||
|
||||
struct proc *sc_proc;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: footbridge_com.c,v 1.4 2000/03/06 21:36:06 thorpej Exp $ */
|
||||
/* $NetBSD: footbridge_com.c,v 1.5 2000/03/23 06:35:15 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1997 Mark Brinicombe
|
||||
@ -75,6 +75,7 @@ struct fcom_softc {
|
||||
bus_space_tag_t sc_iot;
|
||||
bus_space_handle_t sc_ioh;
|
||||
void *sc_ih;
|
||||
struct callout sc_softintr_ch;
|
||||
int sc_rx_irq;
|
||||
int sc_tx_irq;
|
||||
int sc_hwflags;
|
||||
@ -175,6 +176,7 @@ fcom_attach(parent, self, aux)
|
||||
/* Set up the softc */
|
||||
sc->sc_iot = fba->fba_fca.fca_iot;
|
||||
sc->sc_ioh = fba->fba_fca.fca_ioh;
|
||||
callout_init(&sc->sc_softintr_ch);
|
||||
sc->sc_rx_irq = fba->fba_fca.fca_rx_irq;
|
||||
sc->sc_tx_irq = fba->fba_fca.fca_tx_irq;
|
||||
sc->sc_hwflags = 0;
|
||||
@ -392,7 +394,7 @@ fcomstart(tp)
|
||||
s = splserial();
|
||||
if (bus_space_read_4(iot, ioh, UART_FLAGS) & UART_TX_BUSY) {
|
||||
tp->t_state |= TS_TIMEOUT;
|
||||
timeout(ttrstrt, (void *)tp, 1);
|
||||
callout_reset(&tp->t_rstrt_ch, 1, ttrstrt, tp);
|
||||
(void)splx(s);
|
||||
return;
|
||||
}
|
||||
@ -416,7 +418,7 @@ fcomstart(tp)
|
||||
tp->t_state &= ~TS_BUSY;
|
||||
if (cl->c_cc) {
|
||||
tp->t_state |= TS_TIMEOUT;
|
||||
timeout(ttrstrt, (void *)tp, 1);
|
||||
callout_reset(&tp->t_rstrt_ch, 1, ttrstrt, tp);
|
||||
}
|
||||
if (cl->c_cc <= tp->t_lowat) {
|
||||
if (tp->t_state & TS_ASLEEP) {
|
||||
@ -592,7 +594,8 @@ fcom_rxintr(arg)
|
||||
sc->sc_rxbuf[sc->sc_rxpos++] = byte;
|
||||
if (!softint_scheduled) {
|
||||
softint_scheduled = 1;
|
||||
timeout(fcom_softintr, sc, 1);
|
||||
callout_reset(&sc->sc_softintr_ch,
|
||||
1, fcom_softintr, sc);
|
||||
}
|
||||
}
|
||||
} while (1);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: fd.c,v 1.27 2000/02/07 20:16:49 thorpej Exp $ */
|
||||
/* $NetBSD: fd.c,v 1.28 2000/03/23 06:35:15 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
||||
@ -96,6 +96,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/ioctl.h>
|
||||
@ -161,6 +162,9 @@ struct fdc_softc {
|
||||
bus_space_tag_t sc_iot; /* ISA i/o space identifier */
|
||||
bus_space_handle_t sc_ioh; /* ISA io handle */
|
||||
|
||||
struct callout sc_timo_ch; /* timeout callout */
|
||||
struct callout sc_intr_ch; /* pseudo-intr callout */
|
||||
|
||||
int sc_drq;
|
||||
|
||||
struct fd_softc *sc_fd[4]; /* pointers to children */
|
||||
@ -224,6 +228,8 @@ struct fd_softc {
|
||||
struct fd_type *sc_type; /* current type descriptor */
|
||||
struct fd_type sc_type_copy; /* copy for fiddling when formatting */
|
||||
|
||||
struct callout sc_motor_ch;
|
||||
|
||||
daddr_t sc_blkno; /* starting block number */
|
||||
int sc_bcount; /* byte count left */
|
||||
int sc_opts; /* user-set options */
|
||||
@ -414,6 +420,9 @@ fdcattach(parent, self, aux)
|
||||
|
||||
printf("\n");
|
||||
|
||||
callout_init(&fdc->sc_timo_ch);
|
||||
callout_init(&fdc->sc_intr_ch);
|
||||
|
||||
#ifdef NEWCONFIG
|
||||
at_setup_dmachan(fdc->sc_drq, FDC_MAXIOSIZE);
|
||||
isa_establish(&fdc->sc_id, &fdc->sc_dev);
|
||||
@ -515,6 +524,8 @@ fdattach(parent, self, aux)
|
||||
struct fd_type *type = fa->fa_deftype;
|
||||
int drive = fa->fa_drive;
|
||||
|
||||
callout_init(&fd->sc_motor_ch);
|
||||
|
||||
/* XXX Allow `flags' to override device type? */
|
||||
|
||||
if (type)
|
||||
@ -632,7 +643,7 @@ fdstrategy(bp)
|
||||
/* Queue transfer on drive, activate drive and controller if idle. */
|
||||
s = splbio();
|
||||
disksort_cylinder(&fd->sc_q, bp);
|
||||
untimeout(fd_motor_off, fd); /* a good idea */
|
||||
callout_stop(&fd->sc_motor_ch); /* a good idea */
|
||||
if (fd->sc_active == 0)
|
||||
fdstart(fd);
|
||||
#ifdef DIAGNOSTIC
|
||||
@ -698,7 +709,7 @@ fdfinish(fd, bp)
|
||||
|
||||
biodone(bp);
|
||||
/* turn off motor 5s from now */
|
||||
timeout(fd_motor_off, fd, 5 * hz);
|
||||
callout_reset(&fd->sc_motor_ch, 5 * hz, fd_motor_off, fd);
|
||||
fdc->sc_state = DEVIDLE;
|
||||
}
|
||||
|
||||
@ -1001,7 +1012,7 @@ loop:
|
||||
fd->sc_skip = 0;
|
||||
fd->sc_bcount = bp->b_bcount;
|
||||
fd->sc_blkno = bp->b_blkno / (FDC_BSIZE / DEV_BSIZE);
|
||||
untimeout(fd_motor_off, fd);
|
||||
callout_stop(&fd->sc_motor_ch);
|
||||
if ((fd->sc_flags & FD_MOTOR_WAIT) != 0) {
|
||||
fdc->sc_state = MOTORWAIT;
|
||||
return 1;
|
||||
@ -1010,14 +1021,15 @@ loop:
|
||||
/* Turn on the motor, being careful about pairing. */
|
||||
struct fd_softc *ofd = fdc->sc_fd[fd->sc_drive ^ 1];
|
||||
if (ofd && ofd->sc_flags & FD_MOTOR) {
|
||||
untimeout(fd_motor_off, ofd);
|
||||
callout_stop(&ofd->sc_motor_ch);
|
||||
ofd->sc_flags &= ~(FD_MOTOR | FD_MOTOR_WAIT);
|
||||
}
|
||||
fd->sc_flags |= FD_MOTOR | FD_MOTOR_WAIT;
|
||||
fd_set_motor(fdc, 0);
|
||||
fdc->sc_state = MOTORWAIT;
|
||||
/* Allow .25s for motor to stabilize. */
|
||||
timeout(fd_motor_on, fd, hz / 4);
|
||||
callout_reset(&fd->sc_motor_ch, hz / 4,
|
||||
fd_motor_on, fd);
|
||||
return 1;
|
||||
}
|
||||
/* Make sure the right drive is selected. */
|
||||
@ -1049,7 +1061,7 @@ loop:
|
||||
fd->sc_dk.dk_seek++;
|
||||
disk_busy(&fd->sc_dk);
|
||||
|
||||
timeout(fdctimeout, fdc, 4 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 4 * hz, fdctimeout, fdc);
|
||||
return 1;
|
||||
|
||||
case DOIO:
|
||||
@ -1139,14 +1151,16 @@ loop:
|
||||
disk_busy(&fd->sc_dk);
|
||||
|
||||
/* allow 2 seconds for operation */
|
||||
timeout(fdctimeout, fdc, 2 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 2 * hz, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case SEEKWAIT:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
fdc->sc_state = SEEKCOMPLETE;
|
||||
/* allow 1/50 second for heads to settle */
|
||||
/* timeout(fdcpseudointr, fdc, hz / 50);*/
|
||||
#if 0
|
||||
callout_reset(&fdc->sc_intr_ch, hz / 50, fdcpseudointr, fdc);
|
||||
#endif
|
||||
return 1;
|
||||
|
||||
case SEEKCOMPLETE:
|
||||
@ -1180,7 +1194,7 @@ loop:
|
||||
goto loop;
|
||||
|
||||
case IOCOMPLETE: /* IO DONE, post-analyze */
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
|
||||
disk_unbusy(&fd->sc_dk, (bp->b_bcount - bp->b_resid));
|
||||
|
||||
@ -1234,11 +1248,11 @@ loop:
|
||||
delay(100);
|
||||
fd_set_motor(fdc, 0);
|
||||
fdc->sc_state = RESETCOMPLETE;
|
||||
timeout(fdctimeout, fdc, hz / 2);
|
||||
callout_reset(&fdc->sc_timo_ch, hz / 2, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RESETCOMPLETE:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
/* clear the controller output buffer */
|
||||
for (i = 0; i < 4; i++) {
|
||||
out_fdc(iot, ioh, NE7CMD_SENSEI);
|
||||
@ -1250,14 +1264,16 @@ loop:
|
||||
out_fdc(iot, ioh, NE7CMD_RECAL); /* recalibrate function */
|
||||
out_fdc(iot, ioh, fd->sc_drive);
|
||||
fdc->sc_state = RECALWAIT;
|
||||
timeout(fdctimeout, fdc, 5 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 5 * hz, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RECALWAIT:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
fdc->sc_state = RECALCOMPLETE;
|
||||
/* allow 1/30 second for heads to settle */
|
||||
/* timeout(fdcpseudointr, fdc, hz / 30);*/
|
||||
#if 0
|
||||
callout_reset(&fdc->sc_intr_ch, hz / 30, fdcpseudointr, fdc);
|
||||
#endif
|
||||
return 1; /* will return later */
|
||||
|
||||
case RECALCOMPLETE:
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: wdc_pioc.c,v 1.11 1998/12/31 09:37:12 mark Exp $ */
|
||||
/* $NetBSD: wdc_pioc.c,v 1.12 2000/03/23 06:35:15 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997-1998 Mark Brinicombe.
|
||||
@ -82,7 +82,7 @@ wdc_pioc_probe(parent, cf, aux)
|
||||
void *aux;
|
||||
{
|
||||
struct pioc_attach_args *pa = aux;
|
||||
struct channel_softc ch = { 0 };
|
||||
struct channel_softc ch;
|
||||
int res;
|
||||
u_int iobase;
|
||||
|
||||
@ -93,6 +93,8 @@ wdc_pioc_probe(parent, cf, aux)
|
||||
if (pa->pa_offset == PIOCCF_OFFSET_DEFAULT)
|
||||
return(0);
|
||||
|
||||
memset(&ch, 0, sizeof(ch));
|
||||
|
||||
iobase = pa->pa_iobase + pa->pa_offset;
|
||||
ch.cmd_iot = pa->pa_iot;
|
||||
ch.ctl_iot = pa->pa_iot;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: sbic.c,v 1.14 2000/01/18 19:36:58 thorpej Exp $ */
|
||||
/* $NetBSD: sbic.c,v 1.15 2000/03/23 06:35:15 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Christian E. Hopps
|
||||
@ -894,6 +894,7 @@ sbicinit(dev)
|
||||
TAILQ_INIT(&dev->ready_list);
|
||||
TAILQ_INIT(&dev->nexus_list);
|
||||
TAILQ_INIT(&dev->free_list);
|
||||
callout_init(&dev->sc_timo_ch);
|
||||
dev->sc_nexus = NULL;
|
||||
dev->sc_xs = NULL;
|
||||
acb = dev->sc_acb;
|
||||
@ -909,7 +910,8 @@ sbicinit(dev)
|
||||
bzero(dev->sc_tinfo, sizeof(dev->sc_tinfo));
|
||||
#ifdef DEBUG
|
||||
/* make sure timeout is really not needed */
|
||||
timeout((void *)sbictimeout, dev, 30 * hz);
|
||||
callout_reset(&dev->sc_timo_ch, 30 * hz,
|
||||
(void *)sbictimeout, dev);
|
||||
#endif
|
||||
|
||||
} else panic("sbic: reinitializing driver!");
|
||||
@ -2817,7 +2819,8 @@ void sbictimeout(dev)
|
||||
dev->sc_dmatimo++;
|
||||
}
|
||||
splx(s);
|
||||
timeout((void *)sbictimeout, dev, 30 * hz);
|
||||
callout_reset(&dev->sc_timo_ch, 30 * hz,
|
||||
(void *)sbictimeout, dev);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: sbicvar.h,v 1.4 1998/11/19 21:45:00 thorpej Exp $ */
|
||||
/* $NetBSD: sbicvar.h,v 1.5 2000/03/23 06:35:16 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@ -41,6 +41,7 @@
|
||||
#ifndef _SBICVAR_H_
|
||||
#define _SBICVAR_H_
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/callout.h>
|
||||
|
||||
/*
|
||||
* The largest single request will be MAXPHYS bytes which will require
|
||||
@ -106,6 +107,7 @@ struct sbic_tinfo {
|
||||
struct sbic_softc {
|
||||
struct device sc_dev;
|
||||
/* struct isr sc_isr;*/
|
||||
struct callout sc_timo_ch;
|
||||
struct target_sync {
|
||||
u_char state;
|
||||
u_char period;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pccons.c,v 1.8 1999/03/19 04:58:45 cgd Exp $ */
|
||||
/* $NetBSD: pccons.c,v 1.9 2000/03/23 06:35:16 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997
|
||||
@ -255,6 +255,7 @@ struct pc_softc
|
||||
} vs;
|
||||
};
|
||||
|
||||
static struct callout async_update_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
/*
|
||||
** Forward routine declarations
|
||||
@ -782,7 +783,7 @@ async_update(struct pc_softc *sc,
|
||||
*/
|
||||
if (sc->sc_flags & SC_ASYNC_SCHEDULED)
|
||||
{
|
||||
untimeout(do_async_update, NULL);
|
||||
callout_stop(&async_update_ch);
|
||||
}
|
||||
do_async_update(sc);
|
||||
}
|
||||
@ -791,7 +792,7 @@ async_update(struct pc_softc *sc,
|
||||
/* Schedule an update
|
||||
*/
|
||||
sc->sc_flags |= SC_ASYNC_SCHEDULED;
|
||||
timeout(do_async_update, sc, 1);
|
||||
callout_reset(&async_update_ch, 1, do_async_update, sc);
|
||||
}
|
||||
|
||||
return;
|
||||
@ -1780,7 +1781,7 @@ pcstart(struct tty *tp)
|
||||
if (cl->c_cc)
|
||||
{
|
||||
tp->t_state |= TS_TIMEOUT;
|
||||
timeout(ttrstrt, tp, 1);
|
||||
callout_reset(&tp->t_rstrt_ch, 1, ttrstrt, tp);
|
||||
}
|
||||
/*
|
||||
** Check if we are under the low water mark and
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: sequoia.c,v 1.4 1999/03/19 05:13:17 cgd Exp $ */
|
||||
/* $NetBSD: sequoia.c,v 1.5 2000/03/23 06:35:16 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997
|
||||
@ -41,6 +41,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/syslog.h>
|
||||
#include <sys/types.h>
|
||||
#include <machine/bus.h>
|
||||
@ -133,6 +134,7 @@ static int ledColor; /* present color of led */
|
||||
static int ledBlockCount;; /* reference count of block calles */
|
||||
int sequoia_index_cache = -1; /* set to silly value so that we dont cache on init */
|
||||
|
||||
static struct callout led_timo_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
/*
|
||||
**
|
||||
@ -194,7 +196,7 @@ void sequoiaInit(void)
|
||||
ledLastActive.tv_usec = 0;
|
||||
ledLastActive.tv_sec = 0;
|
||||
ledBlockCount = 0;
|
||||
timeout(ledTimeout,NULL,LED_TIMEOUT);
|
||||
callout_reset(&led_timo_ch, LED_TIMEOUT, ledTimeout, NULL);
|
||||
/*
|
||||
**
|
||||
** setup the pins associated with the smart card reader *
|
||||
@ -545,7 +547,7 @@ static void ledTimeout(void * arg)
|
||||
}
|
||||
|
||||
/* resubmint the timeout */
|
||||
timeout(ledTimeout,NULL,LED_TIMEOUT);
|
||||
callout_reset(&led_timo_ch, LED_TIMEOUT, ledTimeout, NULL);
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: console.c,v 1.17 2000/03/16 23:21:10 darrenr Exp $ */
|
||||
/* $NetBSD: console.c,v 1.18 2000/03/23 06:35:17 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994-1995 Melvyn Tang-Richardson
|
||||
@ -737,7 +737,7 @@ physconstart(tp)
|
||||
|
||||
if (cl->c_cc) {
|
||||
tp->t_state |= TS_TIMEOUT;
|
||||
timeout(ttrstrt, tp, 1);
|
||||
callout_reset(&tp->t_rstrt_ch, 1, ttrstrt, tp);
|
||||
}
|
||||
|
||||
if (cl->c_cc <= tp->t_lowat) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: lmcaudio.c,v 1.24 1999/07/08 18:05:26 thorpej Exp $ */
|
||||
/* $NetBSD: lmcaudio.c,v 1.25 2000/03/23 06:35:17 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996, Danny C Tsen.
|
||||
@ -47,6 +47,7 @@
|
||||
#include <sys/audioio.h>
|
||||
#include <sys/errno.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
|
||||
#include <vm/vm.h>
|
||||
@ -87,6 +88,8 @@ struct audio_general {
|
||||
int drain;
|
||||
} ag;
|
||||
|
||||
static struct callout ag_drain_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
struct lmcaudio_softc {
|
||||
struct device device;
|
||||
int iobase;
|
||||
@ -338,7 +341,7 @@ lmcaudio_drain(addr)
|
||||
void *addr;
|
||||
{
|
||||
ag.drain = 1;
|
||||
timeout(lmcaudio_timeout, &ag.drain, 30 * hz);
|
||||
callout_reset(&ag_drain_ch, 30 * hz, lmcaudio_timeout, &ag.drain);
|
||||
(void) tsleep(lmcaudio_timeout, PWAIT | PCATCH, "lmcdrain", 0);
|
||||
ag.drain = 0;
|
||||
return(0);
|
||||
@ -664,7 +667,7 @@ lmcaudio_intr(arg)
|
||||
}
|
||||
|
||||
if (xcur == 0) {
|
||||
untimeout(lmcaudio_timeout, &ag.drain);
|
||||
callout_stop(&ag_drain_ch);
|
||||
wakeup(lmcaudio_timeout);
|
||||
return(0);
|
||||
#if 0
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: fd.c,v 1.34 2000/03/13 23:52:28 soren Exp $ */
|
||||
/* $NetBSD: fd.c,v 1.35 2000/03/23 06:36:03 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Leo Weppelman.
|
||||
@ -50,6 +50,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/buf.h>
|
||||
@ -132,6 +133,7 @@ struct fd_softc {
|
||||
struct device sc_dv; /* generic device info */
|
||||
struct disk dkdev; /* generic disk info */
|
||||
struct buf_queue bufq; /* queue of buf's */
|
||||
struct callout sc_motor_ch;
|
||||
int unit; /* unit for atari controlling hw*/
|
||||
int nheads; /* number of heads in use */
|
||||
int nsectors; /* number of sectors/track */
|
||||
@ -315,6 +317,7 @@ void *auxp;
|
||||
}
|
||||
|
||||
if(nfound) {
|
||||
struct fd_softc *fdsc = getsoftc(fd_cd, first_found);
|
||||
|
||||
/*
|
||||
* Make sure motor will be turned of when a floppy is
|
||||
@ -322,7 +325,7 @@ void *auxp;
|
||||
*/
|
||||
fdselect(first_found, 0, FLP_DD);
|
||||
fd_state = FLP_MON;
|
||||
timeout((FPV)fdmotoroff, (void*)getsoftc(fd_cd,first_found), 0);
|
||||
callout_reset(&fdsc->sc_motor_ch, 0, (FPV)fdmotoroff, fdsc);
|
||||
|
||||
/*
|
||||
* enable disk related interrupts
|
||||
@ -376,6 +379,8 @@ void *auxp;
|
||||
|
||||
sc = (struct fd_softc *)dp;
|
||||
|
||||
callout_init(&sc->sc_motor_ch);
|
||||
|
||||
/*
|
||||
* Find out if an Ajax chip might be installed. Set the default
|
||||
* floppy type accordingly.
|
||||
@ -623,7 +628,7 @@ struct buf *bp;
|
||||
disksort_blkno(&sc->bufq, bp); /* XXX disksort_cylinder */
|
||||
if (!lock_stat) {
|
||||
if (fd_state & FLP_MON)
|
||||
untimeout((FPV)fdmotoroff, (void*)sc);
|
||||
callout_stop(&sc->sc_motor_ch);
|
||||
fd_state = FLP_IDLE;
|
||||
st_dmagrab((dma_farg)fdcint, (dma_farg)fdstart, sc,
|
||||
&lock_stat, 0);
|
||||
@ -776,7 +781,8 @@ register struct fd_softc *sc;
|
||||
if (BUFQ_FIRST(&sc1->bufq) != NULL)
|
||||
break;
|
||||
if(i == sc->unit) {
|
||||
timeout((FPV)fdmotoroff, (void*)sc, FLP_MONDELAY);
|
||||
callout_reset(&sc->sc_motor_ch, FLP_MONDELAY,
|
||||
(FPV)fdmotoroff, sc);
|
||||
#ifdef FLP_DEBUG
|
||||
printf("fddone: Nothing to do\n");
|
||||
#endif
|
||||
@ -895,7 +901,8 @@ struct fd_softc *sc;
|
||||
*/
|
||||
fd_cmd = RESTORE;
|
||||
write_fdreg(FDC_CS, RESTORE|VBIT|hbit);
|
||||
timeout((FPV)fdmotoroff, (void*)sc, FLP_XFERDELAY);
|
||||
callout_reset(&sc->sc_motor_ch, FLP_XFERDELAY,
|
||||
(FPV)fdmotoroff, sc);
|
||||
|
||||
#ifdef FLP_DEBUG
|
||||
printf("fd_xfer:Recalibrating drive %d\n", sc->unit);
|
||||
@ -913,7 +920,8 @@ struct fd_softc *sc;
|
||||
sc->curtrk = track; /* be optimistic */
|
||||
write_fdreg(FDC_DR, track);
|
||||
write_fdreg(FDC_CS, SEEK|RATE6|VBIT|hbit);
|
||||
timeout((FPV)fdmotoroff, (void*)sc, FLP_XFERDELAY);
|
||||
callout_reset(&sc->sc_motor_ch, FLP_XFERDELAY,
|
||||
(FPV)fdmotoroff, sc);
|
||||
fd_cmd = SEEK;
|
||||
#ifdef FLP_DEBUG
|
||||
printf("fd_xfer:Seek to track %d on drive %d\n",track,sc->unit);
|
||||
@ -957,7 +965,7 @@ struct fd_softc *sc;
|
||||
write_fdreg(DMA_WRBIT | FDC_CS, F_WRITE|hbit|EBIT|PBIT);
|
||||
fd_cmd = F_WRITE;
|
||||
}
|
||||
timeout((FPV)fdmotoroff, (void*)sc, FLP_XFERDELAY);
|
||||
callout_reset(&sc->sc_motor_ch, FLP_XFERDELAY, (FPV)fdmotoroff, sc);
|
||||
}
|
||||
|
||||
/* return values of fd_xfer_ok(): */
|
||||
@ -982,7 +990,7 @@ struct fd_softc *sc;
|
||||
/*
|
||||
* Cancel timeout (we made it, didn't we)
|
||||
*/
|
||||
untimeout((FPV)fdmotoroff, (void*)sc);
|
||||
callout_stop(&sc->sc_motor_ch);
|
||||
|
||||
switch(fd_xfer_ok(sc)) {
|
||||
case X_ERROR :
|
||||
@ -1267,7 +1275,9 @@ struct fd_softc *fdsoftc;
|
||||
fddeselect();
|
||||
fd_state = FLP_IDLE;
|
||||
}
|
||||
else timeout((FPV)fdmotoroff, (void*)fdsoftc, 10*FLP_MONDELAY);
|
||||
else
|
||||
callout_reset(&fdsoftc->sc_motor_ch, 10*FLP_MONDELAY,
|
||||
(FPV)fdmotoroff, fdsoftc);
|
||||
}
|
||||
st_dmafree(fdsoftc, &tmp);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: hdfd.c,v 1.19 2000/02/07 20:16:50 thorpej Exp $ */
|
||||
/* $NetBSD: hdfd.c,v 1.20 2000/03/23 06:36:04 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996 Leo Weppelman
|
||||
@ -62,6 +62,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/ioctl.h>
|
||||
@ -152,6 +153,10 @@ enum fdc_state {
|
||||
/* software state, per controller */
|
||||
struct fdc_softc {
|
||||
struct device sc_dev; /* boilerplate */
|
||||
|
||||
struct callout sc_timo_ch; /* timeout callout */
|
||||
struct callout sc_intr_ch; /* pseudo-intr callout */
|
||||
|
||||
struct fd_softc *sc_fd[4]; /* pointers to children */
|
||||
TAILQ_HEAD(drivehead, fd_softc) sc_drives;
|
||||
enum fdc_state sc_state;
|
||||
@ -212,6 +217,8 @@ struct fd_softc {
|
||||
struct fd_type *sc_deftype; /* default type descriptor */
|
||||
struct fd_type *sc_type; /* current type descriptor */
|
||||
|
||||
struct callout sc_motor_ch;
|
||||
|
||||
daddr_t sc_blkno; /* starting block number */
|
||||
int sc_bcount; /* byte count left */
|
||||
int sc_opts; /* user-set options */
|
||||
@ -379,6 +386,9 @@ fdcattach(parent, self, aux)
|
||||
|
||||
printf("\n");
|
||||
|
||||
callout_init(&fdc->sc_timo_ch);
|
||||
callout_init(&fdc->sc_intr_ch);
|
||||
|
||||
if (intr_establish(22, USER_VEC|FAST_VEC, 0,
|
||||
(hw_ifun_t)(has_fifo ? mfp_hdfd_fifo : mfp_hdfd_nf),
|
||||
NULL) == NULL) {
|
||||
@ -470,6 +480,8 @@ fdattach(parent, self, aux)
|
||||
struct fd_type *type = fa->fa_deftype;
|
||||
int drive = fa->fa_drive;
|
||||
|
||||
callout_init(&fd->sc_motor_ch);
|
||||
|
||||
/* XXX Allow `flags' to override device type? */
|
||||
|
||||
if (type)
|
||||
@ -595,7 +607,7 @@ fdstrategy(bp)
|
||||
/* Queue transfer on drive, activate drive and controller if idle. */
|
||||
s = splbio();
|
||||
disksort_cylinder(&fd->sc_q, bp);
|
||||
untimeout(fd_motor_off, fd); /* a good idea */
|
||||
callout_stop(&fd->sc_motor_ch); /* a good idea */
|
||||
if (fd->sc_active == 0)
|
||||
fdstart(fd);
|
||||
#ifdef DIAGNOSTIC
|
||||
@ -661,7 +673,7 @@ fdfinish(fd, bp)
|
||||
|
||||
biodone(bp);
|
||||
/* turn off motor 5s from now */
|
||||
timeout(fd_motor_off, fd, 5 * hz);
|
||||
callout_reset(&fd->sc_motor_ch, 5 * hz, fd_motor_off, fd);
|
||||
fdc->sc_state = DEVIDLE;
|
||||
}
|
||||
|
||||
@ -951,7 +963,7 @@ loop:
|
||||
fd->sc_skip = 0;
|
||||
fd->sc_bcount = bp->b_bcount;
|
||||
fd->sc_blkno = bp->b_blkno / (FDC_BSIZE / DEV_BSIZE);
|
||||
untimeout(fd_motor_off, fd);
|
||||
callout_stop(&fd->sc_motor_ch);
|
||||
if ((fd->sc_flags & FD_MOTOR_WAIT) != 0) {
|
||||
fdc->sc_state = MOTORWAIT;
|
||||
return 1;
|
||||
@ -960,14 +972,15 @@ loop:
|
||||
/* Turn on the motor, being careful about pairing. */
|
||||
struct fd_softc *ofd = fdc->sc_fd[fd->sc_drive ^ 1];
|
||||
if (ofd && ofd->sc_flags & FD_MOTOR) {
|
||||
untimeout(fd_motor_off, ofd);
|
||||
callout_stop(&ofd->sc_motor_ch);
|
||||
ofd->sc_flags &= ~(FD_MOTOR | FD_MOTOR_WAIT);
|
||||
}
|
||||
fd->sc_flags |= FD_MOTOR | FD_MOTOR_WAIT;
|
||||
fd_set_motor(fdc, 0);
|
||||
fdc->sc_state = MOTORWAIT;
|
||||
/* Allow .25s for motor to stabilize. */
|
||||
timeout(fd_motor_on, fd, hz / 4);
|
||||
callout_reset(&fd->sc_motor_ch, hz / 4,
|
||||
fd_motor_on, fd);
|
||||
return 1;
|
||||
}
|
||||
/* Make sure the right drive is selected. */
|
||||
@ -995,7 +1008,7 @@ loop:
|
||||
fd->sc_dk.dk_seek++;
|
||||
disk_busy(&fd->sc_dk);
|
||||
|
||||
timeout(fdctimeout, fdc, 4 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 4 * hz, fdctimeout, fdc);
|
||||
return 1;
|
||||
|
||||
case DOIO:
|
||||
@ -1075,14 +1088,14 @@ loop:
|
||||
disk_busy(&fd->sc_dk);
|
||||
|
||||
/* allow 2 seconds for operation */
|
||||
timeout(fdctimeout, fdc, 2 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 2 * hz, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case SEEKWAIT:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
fdc->sc_state = SEEKCOMPLETE;
|
||||
/* allow 1/50 second for heads to settle */
|
||||
timeout(fdcpseudointr, fdc, hz / 50);
|
||||
callout_reset(&fdc->sc_intr_ch, hz / 50, fdcpseudointr, fdc);
|
||||
return 1;
|
||||
|
||||
case SEEKCOMPLETE:
|
||||
@ -1109,7 +1122,7 @@ loop:
|
||||
goto loop;
|
||||
|
||||
case IOCOMPLETE: /* IO DONE, post-analyze */
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
|
||||
disk_unbusy(&fd->sc_dk, (bp->b_bcount - bp->b_resid));
|
||||
|
||||
@ -1154,11 +1167,11 @@ loop:
|
||||
delay(100);
|
||||
fd_set_motor(fdc, 0);
|
||||
fdc->sc_state = RESETCOMPLETE;
|
||||
timeout(fdctimeout, fdc, hz / 2);
|
||||
callout_reset(&fdc->sc_timo_ch, hz / 2, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RESETCOMPLETE:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
/* clear the controller output buffer */
|
||||
for (i = 0; i < 4; i++) {
|
||||
out_fdc(NE7CMD_SENSEI);
|
||||
@ -1172,14 +1185,14 @@ loop:
|
||||
out_fdc(NE7CMD_RECAL); /* recalibrate function */
|
||||
out_fdc(fd->sc_drive);
|
||||
fdc->sc_state = RECALWAIT;
|
||||
timeout(fdctimeout, fdc, 5 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 5 * hz, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RECALWAIT:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
fdc->sc_state = RECALCOMPLETE;
|
||||
/* allow 1/30 second for heads to settle */
|
||||
timeout(fdcpseudointr, fdc, hz / 30);
|
||||
callout_reset(&fdc->sc_intr_ch, hz / 30, fdcpseudointr, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RECALCOMPLETE:
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ite.c,v 1.28 2000/02/11 21:42:52 leo Exp $ */
|
||||
/* $NetBSD: ite.c,v 1.29 2000/03/23 06:36:04 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988 University of Utah.
|
||||
@ -59,6 +59,7 @@
|
||||
#include <sys/tty.h>
|
||||
#include <sys/termios.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/proc.h>
|
||||
#include <dev/cons.h>
|
||||
|
||||
@ -634,7 +635,7 @@ itestart(tp)
|
||||
/* we have characters remaining. */
|
||||
if (rbp->c_cc) {
|
||||
tp->t_state |= TS_TIMEOUT;
|
||||
timeout(ttrstrt, tp, 1);
|
||||
callout_reset(&tp->t_rstrt_ch, 1, ttrstrt, tp);
|
||||
}
|
||||
/* wakeup we are below */
|
||||
if (rbp->c_cc <= tp->t_lowat) {
|
||||
@ -878,6 +879,8 @@ enum caller caller;
|
||||
static u_int last_char;
|
||||
static u_char tout_pending;
|
||||
|
||||
static struct callout repeat_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
repeat_handler(arg)
|
||||
@ -927,7 +930,7 @@ enum caller caller;
|
||||
*/
|
||||
if (up) {
|
||||
if(tout_pending) {
|
||||
untimeout(repeat_handler, 0);
|
||||
callout_stop(&repeat_ch);
|
||||
tout_pending = 0;
|
||||
last_char = 0;
|
||||
}
|
||||
@ -938,7 +941,7 @@ enum caller caller;
|
||||
/*
|
||||
* Different character, stop also
|
||||
*/
|
||||
untimeout(repeat_handler, 0);
|
||||
callout_stop(&repeat_ch);
|
||||
tout_pending = 0;
|
||||
last_char = 0;
|
||||
}
|
||||
@ -1009,13 +1012,15 @@ enum caller caller;
|
||||
if(!tout_pending && caller == ITEFILT_TTY && kbd_ite->key_repeat) {
|
||||
tout_pending = 1;
|
||||
last_char = c;
|
||||
timeout(repeat_handler, 0, start_repeat_timeo * hz / 100);
|
||||
callout_reset(&repeat_ch, start_repeat_timeo * hz / 100,
|
||||
repeat_handler, NULL);
|
||||
}
|
||||
else if(!tout_pending && caller==ITEFILT_REPEATER
|
||||
&& kbd_ite->key_repeat) {
|
||||
tout_pending = 1;
|
||||
last_char = c;
|
||||
timeout(repeat_handler, 0, next_repeat_timeo * hz / 100);
|
||||
callout_reset(&repeat_ch, next_repeat_timeo * hz / 100,
|
||||
repeat_handler, NULL);
|
||||
}
|
||||
/* handle dead keys */
|
||||
if (key.mode & KBD_MODE_DEAD) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: lpt.c,v 1.15 1999/04/06 19:31:37 pk Exp $ */
|
||||
/* $NetBSD: lpt.c,v 1.16 2000/03/23 06:36:04 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996 Leo Weppelman
|
||||
@ -57,6 +57,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/user.h>
|
||||
#include <sys/buf.h>
|
||||
@ -89,6 +90,7 @@ int lptdebug = 1;
|
||||
|
||||
struct lpt_softc {
|
||||
struct device sc_dev;
|
||||
struct callout sc_wakeup_ch;
|
||||
size_t sc_count;
|
||||
struct buf *sc_inbuf;
|
||||
u_char *sc_cp;
|
||||
@ -158,6 +160,8 @@ void *auxp;
|
||||
ym2149_strobe(1);
|
||||
|
||||
printf("\n");
|
||||
|
||||
callout_init(&sc->sc_wakeup_ch);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -235,7 +239,7 @@ lptwakeup(arg)
|
||||
|
||||
lptpseudointr(sc);
|
||||
|
||||
timeout(lptwakeup, sc, STEP);
|
||||
callout_reset(&sc->sc_wakeup_ch, STEP, lptwakeup, sc);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -256,7 +260,7 @@ lpclose(dev, flag, mode, p)
|
||||
(void) pushbytes(sc);
|
||||
|
||||
if ((sc->sc_flags & LPT_NOINTR) == 0) {
|
||||
untimeout(lptwakeup, sc);
|
||||
callout_stop(&sc->sc_wakeup_ch);
|
||||
|
||||
sps = splhigh();
|
||||
MFP->mf_ierb &= ~IB_PBSY;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ms.c,v 1.9 1996/10/13 04:11:06 christos Exp $ */
|
||||
/* $NetBSD: ms.c,v 1.10 2000/03/23 06:36:04 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Leo Weppelman.
|
||||
@ -61,6 +61,7 @@
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/tty.h>
|
||||
#include <sys/signalvar.h>
|
||||
|
||||
@ -97,6 +98,7 @@ mouseattach(cnt)
|
||||
{
|
||||
printf("1 mouse configured\n");
|
||||
ms_softc[0].ms_emul3b = 1;
|
||||
callout_init(&ms_softc[0].ms_delay_ch);
|
||||
return(NMOUSE);
|
||||
}
|
||||
|
||||
@ -178,7 +180,7 @@ int size, type;
|
||||
fe = &ms->ms_events.ev_q[put];
|
||||
|
||||
if ((type != KBD_TIMEO_PKG) && ms->ms_emul3b && ms->ms_bq_idx)
|
||||
untimeout((FPV)ms_3b_delay, (void *)ms);
|
||||
callout_stop(&ms->ms_delay_ch);
|
||||
|
||||
/*
|
||||
* Button states are encoded in the lower 3 bits of 'id'
|
||||
@ -267,7 +269,8 @@ int size, type;
|
||||
}
|
||||
}
|
||||
else if (ms->ms_bq[0].value == VKEY_DOWN) {
|
||||
timeout((FPV)ms_3b_delay, (void *)ms, 10);
|
||||
callout_reset(&ms->ms_delay_ch, 10,
|
||||
(FPV)ms_3b_delay, (void *)ms);
|
||||
goto out;
|
||||
}
|
||||
flush_buttons = 1;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: msvar.h,v 1.1 1996/04/12 08:37:06 leo Exp $ */
|
||||
/* $NetBSD: msvar.h,v 1.2 2000/03/23 06:36:04 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996 Leo Weppelman
|
||||
@ -54,6 +54,7 @@ struct ms_softc {
|
||||
int ms_dy; /* accumulated dy */
|
||||
struct firm_event ms_bq[2]; /* Button queue */
|
||||
int ms_bq_idx; /* Button queue index */
|
||||
struct callout ms_delay_ch;
|
||||
};
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ser.c,v 1.9 1999/08/06 08:27:31 leo Exp $ */
|
||||
/* $NetBSD: ser.c,v 1.10 2000/03/23 06:36:04 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1997 The NetBSD Foundation, Inc.
|
||||
@ -154,6 +154,8 @@ struct ser_softc {
|
||||
struct device sc_dev;
|
||||
struct tty *sc_tty;
|
||||
|
||||
struct callout sc_diag_ch;
|
||||
|
||||
int sc_overflows;
|
||||
int sc_floods;
|
||||
int sc_errors;
|
||||
@ -294,6 +296,8 @@ void *auxp;
|
||||
MFP->mf_imrb &= ~(IB_SCTS|IB_SDCD);
|
||||
MFP->mf_imra &= ~(IA_RRDY|IA_RERR|IA_TRDY|IA_TERR);
|
||||
|
||||
callout_init(&sc->sc_diag_ch);
|
||||
|
||||
#ifdef SERCONSOLE
|
||||
/*
|
||||
* Activate serial console when DCD present...
|
||||
@ -1080,7 +1084,7 @@ serrxint(sc, tp)
|
||||
if (cc == RXBUFSIZE) {
|
||||
sc->sc_floods++;
|
||||
if (sc->sc_errors++ == 0)
|
||||
timeout(serdiag, sc, 60 * hz);
|
||||
callout_reset(&sc->sc_diag_ch, 60 * hz, serdiag, sc);
|
||||
}
|
||||
|
||||
while (cc--) {
|
||||
@ -1094,7 +1098,8 @@ serrxint(sc, tp)
|
||||
else if (ISSET(rsr, RSR_OERR)) {
|
||||
sc->sc_overflows++;
|
||||
if (sc->sc_errors++ == 0)
|
||||
timeout(serdiag, sc, 60 * hz);
|
||||
callout_reset(&sc->sc_diag_ch, 60 * hz,
|
||||
serdiag, sc);
|
||||
}
|
||||
code = sc->sc_rbuf[get] |
|
||||
lsrmap[(rsr & (RSR_BREAK|RSR_FERR|RSR_PERR)) >> 3];
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: wdc_mb.c,v 1.7 1999/08/06 08:27:31 leo Exp $ */
|
||||
/* $NetBSD: wdc_mb.c,v 1.8 2000/03/23 06:36:04 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
||||
@ -87,7 +87,7 @@ wdc_mb_probe(parent, cfp, aux)
|
||||
struct cfdata *cfp;
|
||||
void *aux;
|
||||
{
|
||||
struct channel_softc ch = { 0 };
|
||||
struct channel_softc ch;
|
||||
int result = 0;
|
||||
u_char sv_ierb;
|
||||
|
||||
@ -96,6 +96,8 @@ wdc_mb_probe(parent, cfp, aux)
|
||||
if (!atari_realconfig)
|
||||
return 0;
|
||||
|
||||
memset(&ch, 0, sizeof(ch));
|
||||
|
||||
ch.cmd_iot = ch.ctl_iot = mb_alloc_bus_space_tag();
|
||||
if (ch.cmd_iot == NULL)
|
||||
return 0;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: fd.c,v 1.11 2000/02/07 22:07:29 thorpej Exp $ */
|
||||
/* $NetBSD: fd.c,v 1.12 2000/03/23 06:36:44 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
||||
@ -96,6 +96,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/ioctl.h>
|
||||
@ -166,6 +167,9 @@ struct fdc_softc {
|
||||
bus_space_handle_t sc_ioh; /* ISA io handle */
|
||||
isa_chipset_tag_t sc_ic; /* ISA chipset info */
|
||||
|
||||
struct callout sc_timo_ch; /* timeout callout */
|
||||
struct callout sc_intr_ch; /* pseudo-intr callout */
|
||||
|
||||
/*
|
||||
* XXX We have port overlap with the first IDE controller.
|
||||
* Until we have a reasonable solution for handling overlap
|
||||
@ -239,6 +243,8 @@ struct fd_softc {
|
||||
struct fd_type *sc_type; /* current type descriptor */
|
||||
struct fd_type sc_type_copy; /* copy for fiddling when formatting */
|
||||
|
||||
struct callout sc_motor_ch;
|
||||
|
||||
daddr_t sc_blkno; /* starting block number */
|
||||
int sc_bcount; /* byte count left */
|
||||
int sc_opts; /* user-set options */
|
||||
@ -434,6 +440,9 @@ fdcattach(parent, self, aux)
|
||||
|
||||
printf("\n");
|
||||
|
||||
callout_init(&fdc->sc_timo_ch);
|
||||
callout_init(&fdc->sc_intr_ch);
|
||||
|
||||
/* Re-map the I/O space. */
|
||||
if (bus_space_map(iot, ia->ia_iobase, 6 /* XXX FDC_NPORT */, 0, &ioh)) {
|
||||
printf("%s: can't map i/o space\n", fdc->sc_dev.dv_xname);
|
||||
@ -567,6 +576,8 @@ fdattach(parent, self, aux)
|
||||
struct fd_type *type = fa->fa_deftype;
|
||||
int drive = fa->fa_drive;
|
||||
|
||||
callout_init(&fd->sc_motor_ch);
|
||||
|
||||
/* XXX Allow `flags' to override device type? */
|
||||
|
||||
if (type)
|
||||
@ -695,7 +706,7 @@ fdstrategy(bp)
|
||||
/* Queue transfer on drive, activate drive and controller if idle. */
|
||||
s = splbio();
|
||||
disksort_cylinder(&fd->sc_q, bp);
|
||||
untimeout(fd_motor_off, fd); /* a good idea */
|
||||
callout_stop(&fd->sc_motor_ch); /* a good idea */
|
||||
if (fd->sc_active == 0)
|
||||
fdstart(fd);
|
||||
#ifdef DIAGNOSTIC
|
||||
@ -765,7 +776,7 @@ fdfinish(fd, bp)
|
||||
|
||||
biodone(bp);
|
||||
/* turn off motor 5s from now */
|
||||
timeout(fd_motor_off, fd, 5 * hz);
|
||||
callout_reset(&fd->sc_motor_ch, 5 * hz, fd_motor_off, fd);
|
||||
fdc->sc_state = DEVIDLE;
|
||||
}
|
||||
|
||||
@ -1068,7 +1079,7 @@ loop:
|
||||
fd->sc_skip = 0;
|
||||
fd->sc_bcount = bp->b_bcount;
|
||||
fd->sc_blkno = bp->b_blkno / (FDC_BSIZE / DEV_BSIZE);
|
||||
untimeout(fd_motor_off, fd);
|
||||
callout_stop(&fd->sc_motor_ch);
|
||||
if ((fd->sc_flags & FD_MOTOR_WAIT) != 0) {
|
||||
fdc->sc_state = MOTORWAIT;
|
||||
return 1;
|
||||
@ -1077,14 +1088,15 @@ loop:
|
||||
/* Turn on the motor, being careful about pairing. */
|
||||
struct fd_softc *ofd = fdc->sc_fd[fd->sc_drive ^ 1];
|
||||
if (ofd && ofd->sc_flags & FD_MOTOR) {
|
||||
untimeout(fd_motor_off, ofd);
|
||||
callout_stop(&ofd->sc_motor_ch);
|
||||
ofd->sc_flags &= ~(FD_MOTOR | FD_MOTOR_WAIT);
|
||||
}
|
||||
fd->sc_flags |= FD_MOTOR | FD_MOTOR_WAIT;
|
||||
fd_set_motor(fdc, 0);
|
||||
fdc->sc_state = MOTORWAIT;
|
||||
/* Allow .25s for motor to stabilize. */
|
||||
timeout(fd_motor_on, fd, hz / 4);
|
||||
callout_reset(&fd->sc_motor_ch, hz / 4,
|
||||
fd_motor_on, fd);
|
||||
return 1;
|
||||
}
|
||||
/* Make sure the right drive is selected. */
|
||||
@ -1110,7 +1122,7 @@ loop:
|
||||
fd->sc_dk.dk_seek++;
|
||||
disk_busy(&fd->sc_dk);
|
||||
|
||||
timeout(fdctimeout, fdc, 4 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 4 * hz, fdctimeout, fdc);
|
||||
return 1;
|
||||
|
||||
case DOIO:
|
||||
@ -1183,14 +1195,14 @@ loop:
|
||||
disk_busy(&fd->sc_dk);
|
||||
|
||||
/* allow 2 seconds for operation */
|
||||
timeout(fdctimeout, fdc, 2 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 2 * hz, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case SEEKWAIT:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
fdc->sc_state = SEEKCOMPLETE;
|
||||
/* allow 1/50 second for heads to settle */
|
||||
timeout(fdcpseudointr, fdc, hz / 50);
|
||||
callout_reset(&fdc->sc_intr_ch, hz / 50, fdcpseudointr, fdc);
|
||||
return 1;
|
||||
|
||||
case SEEKCOMPLETE:
|
||||
@ -1218,7 +1230,7 @@ loop:
|
||||
goto loop;
|
||||
|
||||
case IOCOMPLETE: /* IO DONE, post-analyze */
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
|
||||
disk_unbusy(&fd->sc_dk, (bp->b_bcount - bp->b_resid));
|
||||
|
||||
@ -1256,11 +1268,11 @@ loop:
|
||||
delay(100);
|
||||
fd_set_motor(fdc, 0);
|
||||
fdc->sc_state = RESETCOMPLETE;
|
||||
timeout(fdctimeout, fdc, hz / 2);
|
||||
callout_reset(&fdc->sc_timo_ch, hz / 2, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RESETCOMPLETE:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
/* clear the controller output buffer */
|
||||
for (i = 0; i < 4; i++) {
|
||||
out_fdc(iot, ioh, NE7CMD_SENSEI);
|
||||
@ -1272,14 +1284,14 @@ loop:
|
||||
out_fdc(iot, ioh, NE7CMD_RECAL); /* recalibrate function */
|
||||
out_fdc(iot, ioh, fd->sc_drive);
|
||||
fdc->sc_state = RECALWAIT;
|
||||
timeout(fdctimeout, fdc, 5 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 5 * hz, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RECALWAIT:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
fdc->sc_state = RECALCOMPLETE;
|
||||
/* allow 1/30 second for heads to settle */
|
||||
timeout(fdcpseudointr, fdc, hz / 30);
|
||||
callout_reset(&fdc->sc_intr_ch, hz / 30, fdcpseudointr, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RECALCOMPLETE:
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: isaclock.c,v 1.6 1998/08/15 03:02:35 mycroft Exp $ */
|
||||
/* $NetBSD: isaclock.c,v 1.7 2000/03/23 06:36:44 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1993, 1994 Charles M. Hannum.
|
||||
@ -90,6 +90,7 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/device.h>
|
||||
@ -160,10 +161,11 @@ void
|
||||
sysbeep(pitch, period)
|
||||
int pitch, period;
|
||||
{
|
||||
static struct callout sysbeep_ch = CALLOUT_INITIALIZER;
|
||||
static int last_pitch;
|
||||
|
||||
if (beeping)
|
||||
untimeout(sysbeepstop, 0);
|
||||
callout_stop(&sysbeep_ch);
|
||||
if (pitch == 0 || period == 0) {
|
||||
sysbeepstop(0);
|
||||
last_pitch = 0;
|
||||
@ -180,7 +182,7 @@ sysbeep(pitch, period)
|
||||
}
|
||||
last_pitch = pitch;
|
||||
beeping = 1;
|
||||
timeout(sysbeepstop, 0, period);
|
||||
callout_reset(&sysbeep_ch, period, sysbeepstop, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pccons.c,v 1.16 2000/03/06 21:36:07 thorpej Exp $ */
|
||||
/* $NetBSD: pccons.c,v 1.17 2000/03/23 06:36:44 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
||||
@ -168,6 +168,8 @@ struct pc_softc {
|
||||
struct tty *sc_tty;
|
||||
};
|
||||
|
||||
static struct callout async_update_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
void fillw __P((short, void *, size_t));
|
||||
int pcprobe __P((struct device *, struct cfdata *, void *));
|
||||
void pcattach __P((struct device *, struct device *, void *));
|
||||
@ -459,13 +461,13 @@ async_update()
|
||||
|
||||
if (kernel || polling) {
|
||||
if (async)
|
||||
untimeout(do_async_update, NULL);
|
||||
callout_stop(&async_update_ch);
|
||||
do_async_update((void *)1);
|
||||
} else {
|
||||
if (async)
|
||||
return;
|
||||
async = 1;
|
||||
timeout(do_async_update, NULL, 1);
|
||||
callout_reset(&async_update_ch, 1, do_async_update, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@ -813,7 +815,7 @@ pcstart(tp)
|
||||
tp->t_state &= ~TS_BUSY;
|
||||
if (cl->c_cc) {
|
||||
tp->t_state |= TS_TIMEOUT;
|
||||
timeout(ttrstrt, tp, 1);
|
||||
callout_reset(&tp->t_rstrt_ch, 1, ttrstrt, tp);
|
||||
}
|
||||
if (cl->c_cc <= tp->t_lowat) {
|
||||
if (tp->t_state & TS_ASLEEP) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: spkr.c,v 1.5 1998/09/28 09:33:14 sakamoto Exp $ */
|
||||
/* $NetBSD: spkr.c,v 1.6 2000/03/23 06:36:44 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* spkr.c -- device driver for console speaker on 80386
|
||||
@ -17,6 +17,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/errno.h>
|
||||
#include <sys/device.h>
|
||||
@ -71,6 +72,9 @@ static void playinit __P((void));
|
||||
static void playtone __P((int, int, int));
|
||||
static void playstring __P((char *, int));
|
||||
|
||||
static struct callout endtone_ch = CALLOUT_INITIALIZER;
|
||||
static struct callout endreset_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
static void
|
||||
endtone(v)
|
||||
void *v;
|
||||
@ -107,7 +111,7 @@ void tone(hz, ticks)
|
||||
* This is so other processes can execute while the tone is being
|
||||
* emitted.
|
||||
*/
|
||||
timeout(endtone, NULL, ticks);
|
||||
callout_reset(&endtone_ch, ticks, endtone, NULL);
|
||||
sleep(endtone, PZERO - 1);
|
||||
}
|
||||
|
||||
@ -132,7 +136,7 @@ rest(ticks)
|
||||
#ifdef DEBUG
|
||||
printf("rest: %d\n", ticks);
|
||||
#endif /* DEBUG */
|
||||
timeout(endrest, NULL, ticks);
|
||||
callout_reset(&endrest_ch, ticks, endrest, NULL);
|
||||
sleep(endrest, PZERO - 1);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: apci.c,v 1.7 1999/09/10 22:49:33 bad Exp $ */
|
||||
/* $NetBSD: apci.c,v 1.8 2000/03/23 06:37:23 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997, 1999 The NetBSD Foundation, Inc.
|
||||
@ -123,6 +123,7 @@ struct apci_softc {
|
||||
struct device sc_dev; /* generic device glue */
|
||||
struct apciregs *sc_apci; /* device registers */
|
||||
struct tty *sc_tty; /* tty glue */
|
||||
struct callout sc_diag_ch;
|
||||
int sc_ferr,
|
||||
sc_perr,
|
||||
sc_oflow,
|
||||
@ -230,6 +231,8 @@ apciattach(parent, self, aux)
|
||||
(struct apciregs *)IIOV(FRODO_BASE + fa->fa_offset);
|
||||
sc->sc_flags = 0;
|
||||
|
||||
callout_init(&sc->sc_diag_ch);
|
||||
|
||||
/* Are we the console? */
|
||||
if (apci == apci_cn) {
|
||||
sc->sc_flags |= APCI_ISCONSOLE;
|
||||
@ -359,7 +362,7 @@ apciopen(dev, flag, mode, p)
|
||||
|
||||
/* clear errors, start timeout */
|
||||
sc->sc_ferr = sc->sc_perr = sc->sc_oflow = sc->sc_toterr = 0;
|
||||
timeout(apcitimeout, sc, hz);
|
||||
callout_reset(&sc->sc_diag_ch, hz, apcitimeout, sc);
|
||||
|
||||
bad:
|
||||
return (error);
|
||||
@ -865,7 +868,7 @@ apcitimeout(arg)
|
||||
sc->sc_dev.dv_xname, ferr, perr, oflow, sc->sc_toterr);
|
||||
}
|
||||
|
||||
timeout(apcitimeout, sc, hz);
|
||||
callout_reset(&sc->sc_diag_ch, hz, apcitimeout, sc);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: dma.c,v 1.24 1999/08/01 21:50:17 thorpej Exp $ */
|
||||
/* $NetBSD: dma.c,v 1.25 2000/03/23 06:37:23 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
|
||||
@ -79,6 +79,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/proc.h>
|
||||
@ -119,6 +120,7 @@ struct dma_softc {
|
||||
struct dmareg *sc_dmareg; /* pointer to our hardware */
|
||||
struct dma_channel sc_chan[NDMACHAN]; /* 2 channels */
|
||||
TAILQ_HEAD(, dmaqueue) sc_queue; /* job queue */
|
||||
struct callout sc_debug_ch;
|
||||
char sc_type; /* A, B, or C */
|
||||
int sc_ipl; /* our interrupt level */
|
||||
void *sc_ih; /* interrupt cookie */
|
||||
@ -187,6 +189,7 @@ dmainit()
|
||||
sc->sc_type = (rev == 'B') ? DMA_B : DMA_C;
|
||||
|
||||
TAILQ_INIT(&sc->sc_queue);
|
||||
callout_init(&sc->sc_debug_ch);
|
||||
|
||||
for (i = 0; i < NDMACHAN; i++) {
|
||||
dc = &sc->sc_chan[i];
|
||||
@ -210,7 +213,7 @@ dmainit()
|
||||
|
||||
#ifdef DEBUG
|
||||
/* make sure timeout is really not needed */
|
||||
timeout(dmatimeout, sc, 30 * hz);
|
||||
callout_reset(&sc->sc_debug_ch, 30 * hz, dmatimeout, sc);
|
||||
#endif
|
||||
|
||||
printf("98620%c, 2 channels, %d bit DMA\n",
|
||||
@ -621,6 +624,6 @@ dmatimeout(arg)
|
||||
}
|
||||
splx(s);
|
||||
}
|
||||
timeout(dmatimeout, sc, 30 * hz);
|
||||
callout_reset(&sc->sc_debug_ch, 30 * hz, dmatimeout, sc);
|
||||
}
|
||||
#endif
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: fhpib.c,v 1.20 1998/01/12 18:30:50 thorpej Exp $ */
|
||||
/* $NetBSD: fhpib.c,v 1.21 2000/03/23 06:37:23 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
|
||||
@ -77,6 +77,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/buf.h>
|
||||
#include <sys/device.h>
|
||||
@ -145,6 +146,8 @@ struct fhpib_softc {
|
||||
struct fhpibdevice *sc_regs; /* device registers */
|
||||
int sc_cmd;
|
||||
struct hpibbus_softc *sc_hpibbus; /* XXX */
|
||||
struct callout sc_dmadone_ch;
|
||||
struct callout sc_ppwatch_ch;
|
||||
};
|
||||
|
||||
int fhpibmatch __P((struct device *, struct cfdata *, void *));
|
||||
@ -191,6 +194,9 @@ fhpibattach(parent, self, aux)
|
||||
/* Establish the interrupt handler. */
|
||||
(void) dio_intr_establish(fhpibintr, sc, ipl, IPL_BIO);
|
||||
|
||||
callout_init(&sc->sc_dmadone_ch);
|
||||
callout_init(&sc->sc_ppwatch_ch);
|
||||
|
||||
ha.ha_ops = &fhpib_controller;
|
||||
ha.ha_type = HPIBC; /* XXX */
|
||||
ha.ha_ba = HPIBC_BA;
|
||||
@ -511,7 +517,8 @@ fhpibdone(hs)
|
||||
if (hs->sc_flags & HPIBF_READ) {
|
||||
hd->hpib_imask = IM_IDLE | IM_BYTE;
|
||||
if (hs->sc_flags & HPIBF_TIMO)
|
||||
timeout(fhpibdmadone, hs, hz >> 2);
|
||||
callout_reset(&sc->sc_dmadone_ch, hz >> 2,
|
||||
fhpibdmadone, hs);
|
||||
} else {
|
||||
cnt = hs->sc_count;
|
||||
if (cnt) {
|
||||
@ -567,7 +574,7 @@ fhpibintr(arg)
|
||||
hq = hs->sc_queue.tqh_first;
|
||||
if (hs->sc_flags & HPIBF_IO) {
|
||||
if (hs->sc_flags & HPIBF_TIMO)
|
||||
untimeout(fhpibdmadone, hs);
|
||||
callout_stop(&sc->sc_dmadone_ch);
|
||||
stat0 = hd->hpib_cmd;
|
||||
hd->hpib_cmd = sc->sc_cmd & ~CT_8BIT;
|
||||
hd->hpib_stat = 0;
|
||||
@ -676,7 +683,7 @@ fhpibppwatch(arg)
|
||||
hd->hpib_stat = ST_IENAB;
|
||||
hd->hpib_imask = IM_IDLE | IM_ROOM;
|
||||
} else
|
||||
timeout(fhpibppwatch, sc, 1);
|
||||
callout_reset(&sc->sc_ppwatch_ch, 1, fhpibppwatch, sc);
|
||||
return;
|
||||
}
|
||||
if ((fhpibdebug & FDB_PPOLL) && sc->sc_dev.dv_unit == fhpibdebugunit)
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ite.c,v 1.42 2000/03/13 23:52:28 soren Exp $ */
|
||||
/* $NetBSD: ite.c,v 1.43 2000/03/23 06:37:23 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
|
||||
@ -504,7 +504,7 @@ itestart(tp)
|
||||
}
|
||||
if (hiwat) {
|
||||
tp->t_state |= TS_TIMEOUT;
|
||||
timeout(ttrstrt, tp, 1);
|
||||
callout_reset(&tp->t_rstrt_ch, 1, ttrstrt, tp);
|
||||
}
|
||||
}
|
||||
tp->t_state &= ~TS_BUSY;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: mt.c,v 1.12 2000/02/06 11:14:56 frueauf Exp $ */
|
||||
/* $NetBSD: mt.c,v 1.13 2000/03/23 06:37:24 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
|
||||
@ -68,6 +68,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/buf.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/mtio.h>
|
||||
@ -98,6 +99,8 @@ int nmtinfo = sizeof(mtinfo) / sizeof(mtinfo[0]);
|
||||
|
||||
struct mt_softc {
|
||||
struct device sc_dev;
|
||||
struct callout sc_start_ch;
|
||||
struct callout sc_intr_ch;
|
||||
int sc_hpibno; /* logical HPIB this slave it attached to */
|
||||
int sc_slave; /* HPIB slave address (0-6) */
|
||||
short sc_flags; /* see below */
|
||||
@ -180,6 +183,8 @@ mtattach(parent, self, aux)
|
||||
slave = ha->ha_slave;
|
||||
|
||||
BUFQ_INIT(&sc->sc_tab);
|
||||
callout_init(&sc->sc_start_ch);
|
||||
callout_init(&sc->sc_intr_ch);
|
||||
|
||||
sc->sc_hpibno = hpibno;
|
||||
sc->sc_slave = slave;
|
||||
@ -580,7 +585,8 @@ mtstart(arg)
|
||||
* but not otherwise.
|
||||
*/
|
||||
if (sc->sc_flags & (MTF_DSJTIMEO | MTF_STATTIMEO)) {
|
||||
timeout(spl_mtstart, sc, hz >> 5);
|
||||
callout_reset(&sc->sc_start_ch, hz >> 5,
|
||||
spl_mtstart, sc);
|
||||
return;
|
||||
}
|
||||
case 2:
|
||||
@ -666,7 +672,8 @@ mtstart(arg)
|
||||
break;
|
||||
|
||||
case -2:
|
||||
timeout(spl_mtstart, sc, hz >> 5);
|
||||
callout_reset(&sc->sc_start_ch, hz >> 5,
|
||||
spl_mtstart, sc);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -681,7 +688,7 @@ mtstart(arg)
|
||||
sc->sc_dev.dv_xname);
|
||||
goto fatalerror;
|
||||
}
|
||||
timeout(spl_mtintr, sc, 4 * hz);
|
||||
callout_reset(&sc->sc_intr_ch, 4 * hz, spl_mtintr, sc);
|
||||
hpibawait(sc->sc_hpibno);
|
||||
return;
|
||||
|
||||
@ -816,7 +823,7 @@ mtintr(arg)
|
||||
* to the request for DSJ. It's probably just "busy" figuring
|
||||
* it out and will know in a little bit...
|
||||
*/
|
||||
timeout(spl_mtintr, sc, hz >> 5);
|
||||
callout_reset(&sc->sc_intr_ch, hz >> 5, spl_mtintr, sc);
|
||||
return;
|
||||
|
||||
default:
|
||||
@ -834,7 +841,7 @@ mtintr(arg)
|
||||
sc->sc_stat3, sc->sc_stat5);
|
||||
|
||||
if ((bp->b_flags & B_CMD) && bp->b_cmd == MTRESET)
|
||||
untimeout(spl_mtintr, sc);
|
||||
callout_stop(&sc->sc_intr_ch);
|
||||
if (sc->sc_stat3 & SR3_POWERUP)
|
||||
sc->sc_flags &= MTF_OPEN | MTF_EXISTS;
|
||||
goto error;
|
||||
@ -886,7 +893,7 @@ mtintr(arg)
|
||||
sc->sc_flags |= MTF_HITBOF;
|
||||
}
|
||||
if (bp->b_cmd == MTRESET) {
|
||||
untimeout(spl_mtintr, sc);
|
||||
callout_stop(&sc->sc_intr_ch);
|
||||
sc->sc_flags |= MTF_ALIVE;
|
||||
}
|
||||
} else {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: nhpib.c,v 1.21 1999/09/17 19:59:41 thorpej Exp $ */
|
||||
/* $NetBSD: nhpib.c,v 1.22 2000/03/23 06:37:24 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
|
||||
@ -77,6 +77,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/buf.h>
|
||||
#include <sys/device.h>
|
||||
@ -147,6 +148,8 @@ struct nhpib_softc {
|
||||
struct device sc_dev; /* generic device glue */
|
||||
struct nhpibdevice *sc_regs; /* device registers */
|
||||
struct hpibbus_softc *sc_hpibbus; /* XXX */
|
||||
struct callout sc_read_ch;
|
||||
struct callout sc_ppwatch_ch;
|
||||
};
|
||||
|
||||
int nhpibmatch __P((struct device *, struct cfdata *, void *));
|
||||
@ -204,6 +207,9 @@ nhpibattach(parent, self, aux)
|
||||
/* Establish the interrupt handler. */
|
||||
(void) dio_intr_establish(nhpibintr, sc, ipl, IPL_BIO);
|
||||
|
||||
callout_init(&sc->sc_read_ch);
|
||||
callout_init(&sc->sc_ppwatch_ch);
|
||||
|
||||
ha.ha_ops = &nhpib_controller;
|
||||
ha.ha_type = type; /* XXX */
|
||||
ha.ha_ba = (type == HPIBA) ? HPIBA_BA :
|
||||
@ -450,7 +456,8 @@ nhpibdone(hs)
|
||||
if (hs->sc_flags & HPIBF_READ) {
|
||||
if ((hs->sc_flags & HPIBF_TIMO) &&
|
||||
(hd->hpib_ids & IDS_IR) == 0)
|
||||
timeout(nhpibreadtimo, hs, hz >> 2);
|
||||
calllout_reset(&sc->sc_read_ch, hz >> 2,
|
||||
nhpibreadtimo, hs);
|
||||
} else {
|
||||
if (hs->sc_count == 1) {
|
||||
(void) nhpibwait(hd, MIS_BO);
|
||||
@ -492,7 +499,7 @@ nhpibintr(arg)
|
||||
hs->sc_flags &= ~HPIBF_TIMO;
|
||||
dmastop(hs->sc_dq->dq_chan);
|
||||
} else if (hs->sc_flags & HPIBF_TIMO)
|
||||
untimeout(nhpibreadtimo, hs);
|
||||
callout_stop(&sc->sc_read_ch);
|
||||
hd->hpib_acr = AUX_TCA;
|
||||
hs->sc_flags &= ~(HPIBF_DONE|HPIBF_IO|HPIBF_READ|HPIBF_TIMO);
|
||||
|
||||
@ -568,5 +575,5 @@ again:
|
||||
/* timeouts not working yet */
|
||||
goto again;
|
||||
else
|
||||
timeout(nhpibppwatch, hs, 1);
|
||||
callout_reset(&sc->sc_ppwatch_ch, 1, nhpibppwatch, hs);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ppi.c,v 1.17 1999/08/05 18:08:10 thorpej Exp $ */
|
||||
/* $NetBSD: ppi.c,v 1.18 2000/03/23 06:37:24 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
|
||||
@ -77,6 +77,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/conf.h>
|
||||
#include <sys/device.h>
|
||||
#include <sys/errno.h>
|
||||
@ -98,6 +99,8 @@ struct ppi_softc {
|
||||
#define sc_delay sc_param.delay
|
||||
int sc_sec;
|
||||
int sc_slave; /* HP-IB slave address */
|
||||
struct callout sc_timo_ch;
|
||||
struct callout sc_start_ch;
|
||||
};
|
||||
|
||||
/* sc_flags values */
|
||||
@ -175,6 +178,9 @@ ppiattach(parent, self, aux)
|
||||
|
||||
sc->sc_slave = ha->ha_slave;
|
||||
|
||||
callout_init(&sc->sc_timo_ch);
|
||||
callout_init(&sc->sc_start_ch);
|
||||
|
||||
/* Initialize the hpib queue entry. */
|
||||
sc->sc_hq.hq_softc = sc;
|
||||
sc->sc_hq.hq_slave = sc->sc_slave;
|
||||
@ -325,7 +331,7 @@ ppirw(dev, uio)
|
||||
sc->sc_flags |= PPIF_UIO;
|
||||
if (sc->sc_timo > 0) {
|
||||
sc->sc_flags |= PPIF_TIMO;
|
||||
timeout(ppitimo, sc, sc->sc_timo);
|
||||
callout_reset(&sc->sc_timo_ch, sc->sc_timo, ppitimo, sc);
|
||||
}
|
||||
len = cnt = 0;
|
||||
while (uio->uio_resid > 0) {
|
||||
@ -352,7 +358,7 @@ again:
|
||||
sc->sc_flags);
|
||||
#endif
|
||||
if (sc->sc_flags & PPIF_TIMO) {
|
||||
untimeout(ppitimo, sc);
|
||||
callout_stop(&sc->sc_timo_ch);
|
||||
sc->sc_flags &= ~PPIF_TIMO;
|
||||
}
|
||||
splx(s);
|
||||
@ -406,7 +412,8 @@ again:
|
||||
*/
|
||||
if (sc->sc_delay > 0) {
|
||||
sc->sc_flags |= PPIF_DELAY;
|
||||
timeout(ppistart, sc, sc->sc_delay);
|
||||
callout_reset(&sc->sc_start_ch, sc->sc_delay,
|
||||
ppistart, sc);
|
||||
error = tsleep(sc, (PCATCH|PZERO) + 1, "hpib", 0);
|
||||
if (error) {
|
||||
splx(s);
|
||||
@ -427,11 +434,11 @@ again:
|
||||
}
|
||||
s = splsoftclock();
|
||||
if (sc->sc_flags & PPIF_TIMO) {
|
||||
untimeout(ppitimo, sc);
|
||||
callout_stop(&sc->sc_timo_ch);
|
||||
sc->sc_flags &= ~PPIF_TIMO;
|
||||
}
|
||||
if (sc->sc_flags & PPIF_DELAY) {
|
||||
untimeout(ppistart, sc);
|
||||
callout_stop(&sc->sc_start_ch);
|
||||
sc->sc_flags &= ~PPIF_DELAY;
|
||||
}
|
||||
splx(s);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: rd.c,v 1.40 2000/02/11 23:00:47 kleink Exp $ */
|
||||
/* $NetBSD: rd.c,v 1.41 2000/03/23 06:37:24 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
|
||||
@ -335,6 +335,8 @@ rdattach(parent, self, aux)
|
||||
sc->sc_slave = ha->ha_slave;
|
||||
sc->sc_punit = ha->ha_punit;
|
||||
|
||||
callout_init(&sc->sc_restart_ch);
|
||||
|
||||
/* Initialize the hpib job queue entry */
|
||||
sc->sc_hq.hq_softc = sc;
|
||||
sc->sc_hq.hq_slave = sc->sc_slave;
|
||||
@ -1024,7 +1026,7 @@ rderror(unit)
|
||||
rs->sc_stats.rdtimeouts++;
|
||||
#endif
|
||||
hpibfree(rs->sc_dev.dv_parent, &rs->sc_hq);
|
||||
timeout(rdrestart, rs, rdtimo * hz);
|
||||
callout_reset(&rs->sc_restart_ch, rdtimo * hz, rdrestart, rs);
|
||||
return(0);
|
||||
}
|
||||
/*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: rdvar.h,v 1.8 2000/01/21 23:29:03 thorpej Exp $ */
|
||||
/* $NetBSD: rdvar.h,v 1.9 2000/03/23 06:37:24 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988 University of Utah.
|
||||
@ -42,6 +42,8 @@
|
||||
* @(#)rdvar.h 8.1 (Berkeley) 6/10/93
|
||||
*/
|
||||
|
||||
#include <sys/callout.h>
|
||||
|
||||
struct rdidentinfo {
|
||||
short ri_hwid; /* 2 byte HW id */
|
||||
short ri_maxunum; /* maximum allowed unit number */
|
||||
@ -63,6 +65,7 @@ struct rdstats {
|
||||
struct rd_softc {
|
||||
struct device sc_dev;
|
||||
struct disk sc_dkdev;
|
||||
struct callout sc_restart_ch;
|
||||
int sc_slave; /* HP-IB slave */
|
||||
int sc_punit; /* physical unit on slave */
|
||||
int sc_flags;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: machdep.c,v 1.136 2000/01/19 20:05:34 thorpej Exp $ */
|
||||
/* $NetBSD: machdep.c,v 1.137 2000/03/23 06:37:24 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988 University of Utah.
|
||||
@ -48,6 +48,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/buf.h>
|
||||
#include <sys/clist.h>
|
||||
#include <sys/conf.h>
|
||||
@ -1101,6 +1102,8 @@ void candbtimer __P((void *));
|
||||
|
||||
int crashandburn;
|
||||
|
||||
struct callout candbtimer_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
void
|
||||
candbtimer(arg)
|
||||
void *arg;
|
||||
@ -1152,7 +1155,8 @@ nmihand(frame)
|
||||
/* Start the crashandburn sequence */
|
||||
printf("\n");
|
||||
crashandburn = 1;
|
||||
timeout(candbtimer, NULL, hz / candbdiv);
|
||||
callout_reset(&candbtimer_ch, hz / candbdiv,
|
||||
candbtiner, NULL);
|
||||
}
|
||||
} else
|
||||
#endif /* PANICBUTTON */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: biconsdev.c,v 1.1.1.1 1999/09/16 12:23:19 takemura Exp $ */
|
||||
/* $NetBSD: biconsdev.c,v 1.2 2000/03/23 06:38:02 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1999
|
||||
@ -148,7 +148,7 @@ biconsdev_output(tp)
|
||||
/* Come back if there's more to do */
|
||||
if (tp->t_outq.c_cc) {
|
||||
tp->t_state |= TS_TIMEOUT;
|
||||
timeout(ttrstrt, tp, 1);
|
||||
callout_reset(&tp->t_rstrt_ch, 1, ttrstrt, tp);
|
||||
}
|
||||
if (tp->t_outq.c_cc <= tp->t_lowat) {
|
||||
if (tp->t_state&TS_ASLEEP) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: tc5165buf.c,v 1.4 2000/01/16 21:47:01 uch Exp $ */
|
||||
/* $NetBSD: tc5165buf.c,v 1.5 2000/03/23 06:38:02 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999, 2000, by UCHIYAMA Yasushi
|
||||
@ -36,6 +36,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/device.h>
|
||||
|
||||
#include <machine/bus.h>
|
||||
@ -62,7 +63,8 @@ struct tc5165buf_chip {
|
||||
u_int16_t scc_buf[TC5165_COLUMN_MAX];
|
||||
int scc_enabled;
|
||||
int scc_queued;
|
||||
|
||||
struct callout scc_soft_ch;
|
||||
|
||||
struct skbd_controller scc_controller;
|
||||
};
|
||||
|
||||
@ -111,7 +113,9 @@ tc5165buf_attach(parent, self, aux)
|
||||
printf(": ");
|
||||
sc->sc_tc = ca->ca_tc;
|
||||
sc->sc_chip = &tc5165buf_chip;
|
||||
|
||||
|
||||
callout_init(&sc->sc_chip->scc_soft_ch);
|
||||
|
||||
sc->sc_chip->scc_cst = ca->ca_csio.cstag;
|
||||
|
||||
if (bus_space_map(sc->sc_chip->scc_cst, ca->ca_csio.csbase,
|
||||
@ -205,8 +209,8 @@ tc5165buf_intr(arg)
|
||||
return 0;
|
||||
|
||||
scc->scc_queued = 1;
|
||||
timeout(tc5165buf_soft, scc, 1);
|
||||
|
||||
callout_reset(&scc->scc_soft_ch, 1, tc5165buf_soft, scc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: txcom.c,v 1.7 2000/03/06 21:36:07 thorpej Exp $ */
|
||||
/* $NetBSD: txcom.c,v 1.8 2000/03/23 06:38:03 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999, 2000, by UCHIYAMA Yasushi
|
||||
@ -87,6 +87,9 @@ struct txcom_softc {
|
||||
struct tty *sc_tty;
|
||||
struct txcom_chip *sc_chip;
|
||||
|
||||
struct callout sc_txsoft_ch;
|
||||
struct callout sc_rxsoft_ch;
|
||||
|
||||
u_int8_t *sc_tba; /* transmit buffer address */
|
||||
int sc_tbc; /* transmit byte count */
|
||||
int sc_heldtbc;
|
||||
@ -673,7 +676,7 @@ txcom_rxintr(arg)
|
||||
sc->sc_rbuf[sc->sc_rbput] = c;
|
||||
sc->sc_rbput = (sc->sc_rbput + 1) % TXCOM_RING_MASK;
|
||||
|
||||
timeout(txcom_rxsoft, arg, 1);
|
||||
callout_reset(&sc->sc_rxsoft_ch, 1, txcom_rxsoft, sc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -724,7 +727,7 @@ txcom_txintr(arg)
|
||||
sc->sc_tbc--;
|
||||
sc->sc_tba++;
|
||||
} else {
|
||||
timeout(txcom_txsoft, arg, 1);
|
||||
callout_reset(&sc->sc_rxsoft_ch, 1, txcom_txsoft, sc);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: fd.c,v 1.131 2000/02/07 22:07:30 thorpej Exp $ */
|
||||
/* $NetBSD: fd.c,v 1.132 2000/03/23 06:39:15 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
||||
@ -96,6 +96,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/ioctl.h>
|
||||
@ -166,6 +167,9 @@ struct fdc_softc {
|
||||
bus_space_handle_t sc_ioh; /* ISA io handle */
|
||||
isa_chipset_tag_t sc_ic; /* ISA chipset info */
|
||||
|
||||
struct callout sc_timo_ch; /* timeout callout */
|
||||
struct callout sc_intr_ch; /* pseudo-intr callout */
|
||||
|
||||
/*
|
||||
* XXX We have port overlap with the first IDE controller.
|
||||
* Until we have a reasonable solution for handling overlap
|
||||
@ -239,6 +243,8 @@ struct fd_softc {
|
||||
struct fd_type *sc_type; /* current type descriptor */
|
||||
struct fd_type sc_type_copy; /* copy for fiddling when formatting */
|
||||
|
||||
struct callout sc_motor_ch;
|
||||
|
||||
daddr_t sc_blkno; /* starting block number */
|
||||
int sc_bcount; /* byte count left */
|
||||
int sc_opts; /* user-set options */
|
||||
@ -434,6 +440,9 @@ fdcattach(parent, self, aux)
|
||||
|
||||
printf("\n");
|
||||
|
||||
callout_init(&fdc->sc_timo_ch);
|
||||
callout_init(&fdc->sc_intr_ch);
|
||||
|
||||
/* Re-map the I/O space. */
|
||||
if (bus_space_map(iot, ia->ia_iobase, 6 /* XXX FDC_NPORT */, 0, &ioh)) {
|
||||
printf("%s: can't map i/o space\n", fdc->sc_dev.dv_xname);
|
||||
@ -555,6 +564,8 @@ fdattach(parent, self, aux)
|
||||
struct fd_type *type = fa->fa_deftype;
|
||||
int drive = fa->fa_drive;
|
||||
|
||||
callout_init(&fd->sc_motor_ch);
|
||||
|
||||
/* XXX Allow `flags' to override device type? */
|
||||
|
||||
if (type)
|
||||
@ -683,7 +694,7 @@ fdstrategy(bp)
|
||||
/* Queue transfer on drive, activate drive and controller if idle. */
|
||||
s = splbio();
|
||||
disksort_cylinder(&fd->sc_q, bp);
|
||||
untimeout(fd_motor_off, fd); /* a good idea */
|
||||
callout_stop(&fd->sc_motor_ch); /* a good idea */
|
||||
if (fd->sc_active == 0)
|
||||
fdstart(fd);
|
||||
#ifdef DIAGNOSTIC
|
||||
@ -753,7 +764,7 @@ fdfinish(fd, bp)
|
||||
|
||||
biodone(bp);
|
||||
/* turn off motor 5s from now */
|
||||
timeout(fd_motor_off, fd, 5 * hz);
|
||||
callout_reset(&fd->sc_motor_ch, 5 * hz, fd_motor_off, fd);
|
||||
fdc->sc_state = DEVIDLE;
|
||||
}
|
||||
|
||||
@ -1056,7 +1067,7 @@ loop:
|
||||
fd->sc_skip = 0;
|
||||
fd->sc_bcount = bp->b_bcount;
|
||||
fd->sc_blkno = bp->b_blkno / (FDC_BSIZE / DEV_BSIZE);
|
||||
untimeout(fd_motor_off, fd);
|
||||
callout_stop(&fd->sc_motor_ch);
|
||||
if ((fd->sc_flags & FD_MOTOR_WAIT) != 0) {
|
||||
fdc->sc_state = MOTORWAIT;
|
||||
return 1;
|
||||
@ -1065,14 +1076,15 @@ loop:
|
||||
/* Turn on the motor, being careful about pairing. */
|
||||
struct fd_softc *ofd = fdc->sc_fd[fd->sc_drive ^ 1];
|
||||
if (ofd && ofd->sc_flags & FD_MOTOR) {
|
||||
untimeout(fd_motor_off, ofd);
|
||||
callout_stop(&ofd->sc_motor_ch);
|
||||
ofd->sc_flags &= ~(FD_MOTOR | FD_MOTOR_WAIT);
|
||||
}
|
||||
fd->sc_flags |= FD_MOTOR | FD_MOTOR_WAIT;
|
||||
fd_set_motor(fdc, 0);
|
||||
fdc->sc_state = MOTORWAIT;
|
||||
/* Allow .25s for motor to stabilize. */
|
||||
timeout(fd_motor_on, fd, hz / 4);
|
||||
callout_reset(&fd->sc_motor_ch, hz / 4,
|
||||
fd_motor_on, fd);
|
||||
return 1;
|
||||
}
|
||||
/* Make sure the right drive is selected. */
|
||||
@ -1098,7 +1110,7 @@ loop:
|
||||
fd->sc_dk.dk_seek++;
|
||||
disk_busy(&fd->sc_dk);
|
||||
|
||||
timeout(fdctimeout, fdc, 4 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 4 * hz, fdctimeout, fdc);
|
||||
return 1;
|
||||
|
||||
case DOIO:
|
||||
@ -1171,14 +1183,14 @@ loop:
|
||||
disk_busy(&fd->sc_dk);
|
||||
|
||||
/* allow 2 seconds for operation */
|
||||
timeout(fdctimeout, fdc, 2 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 2 * hz, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case SEEKWAIT:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
fdc->sc_state = SEEKCOMPLETE;
|
||||
/* allow 1/50 second for heads to settle */
|
||||
timeout(fdcpseudointr, fdc, hz / 50);
|
||||
callout_reset(&fdc->sc_intr_ch, hz / 50, fdcpseudointr, fdc);
|
||||
return 1;
|
||||
|
||||
case SEEKCOMPLETE:
|
||||
@ -1206,7 +1218,7 @@ loop:
|
||||
goto loop;
|
||||
|
||||
case IOCOMPLETE: /* IO DONE, post-analyze */
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
|
||||
disk_unbusy(&fd->sc_dk, (bp->b_bcount - bp->b_resid));
|
||||
|
||||
@ -1244,11 +1256,11 @@ loop:
|
||||
delay(100);
|
||||
fd_set_motor(fdc, 0);
|
||||
fdc->sc_state = RESETCOMPLETE;
|
||||
timeout(fdctimeout, fdc, hz / 2);
|
||||
callout_reset(&fdc->sc_timo_ch, hz / 2, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RESETCOMPLETE:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
/* clear the controller output buffer */
|
||||
for (i = 0; i < 4; i++) {
|
||||
out_fdc(iot, ioh, NE7CMD_SENSEI);
|
||||
@ -1260,14 +1272,14 @@ loop:
|
||||
out_fdc(iot, ioh, NE7CMD_RECAL); /* recalibrate function */
|
||||
out_fdc(iot, ioh, fd->sc_drive);
|
||||
fdc->sc_state = RECALWAIT;
|
||||
timeout(fdctimeout, fdc, 5 * hz);
|
||||
callout_reset(&fdc->sc_timo_ch, 5 * hz, fdctimeout, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RECALWAIT:
|
||||
untimeout(fdctimeout, fdc);
|
||||
callout_stop(&fdc->sc_timo_ch);
|
||||
fdc->sc_state = RECALCOMPLETE;
|
||||
/* allow 1/30 second for heads to settle */
|
||||
timeout(fdcpseudointr, fdc, hz / 30);
|
||||
callout_reset(&fdc->sc_intr_ch, hz / 30, fdcpseudointr, fdc);
|
||||
return 1; /* will return later */
|
||||
|
||||
case RECALCOMPLETE:
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pccons.c,v 1.138 2000/03/06 21:36:07 thorpej Exp $ */
|
||||
/* $NetBSD: pccons.c,v 1.139 2000/03/23 06:39:15 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
||||
@ -199,6 +199,8 @@ struct pc_softc {
|
||||
struct tty *sc_tty;
|
||||
};
|
||||
|
||||
static struct callout async_update_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
int pcprobe __P((struct device *, struct cfdata *, void *));
|
||||
void pcattach __P((struct device *, struct device *, void *));
|
||||
int pcintr __P((void *));
|
||||
@ -529,13 +531,13 @@ async_update()
|
||||
|
||||
if (kernel || polling) {
|
||||
if (async)
|
||||
untimeout(do_async_update, NULL);
|
||||
callout_stop(&async_update_ch);
|
||||
do_async_update((void *)1);
|
||||
} else {
|
||||
if (async)
|
||||
return;
|
||||
async = 1;
|
||||
timeout(do_async_update, NULL, 1);
|
||||
callout_reset(&async_update_ch, 1, do_async_update, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1050,7 +1052,7 @@ pcstart(tp)
|
||||
tp->t_state &= ~TS_BUSY;
|
||||
if (cl->c_cc) {
|
||||
tp->t_state |= TS_TIMEOUT;
|
||||
timeout(ttrstrt, tp, 1);
|
||||
callout_reset(&tp->t_rstrt_ch, 1, ttrstrt, tp);
|
||||
}
|
||||
if (cl->c_cc <= tp->t_lowat) {
|
||||
if (tp->t_state & TS_ASLEEP) {
|
||||
|
@ -197,6 +197,7 @@ do_vgapage(int page)
|
||||
*/
|
||||
|
||||
static int lost_intr_timeout_queued = 0;
|
||||
static struct callout check_for_lost_intr_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
static void
|
||||
check_for_lost_intr (void *arg)
|
||||
@ -244,9 +245,10 @@ update_led(void)
|
||||
|
||||
#if PCVT_UPDLED_LOSES_INTR
|
||||
if (lost_intr_timeout_queued)
|
||||
untimeout (check_for_lost_intr, (void *)NULL);
|
||||
callout_stop(&check_for_lost_intr_ch);
|
||||
|
||||
timeout (check_for_lost_intr, (void *)NULL, hz);
|
||||
callout_reset(&check_for_lost_intr_ch, hz,
|
||||
check_for_lost_intr, NULL);
|
||||
lost_intr_timeout_queued = 1;
|
||||
#endif /* PCVT_UPDLED_LOSES_INTR */
|
||||
|
||||
|
@ -90,6 +90,7 @@ static unsigned char * compute_charset_base ( unsigned fontset );
|
||||
static void scrnsv_timedout ( void *arg );
|
||||
static u_short *savedscreen = (u_short *)0; /* ptr to screen contents */
|
||||
static size_t scrnsv_size = (size_t)-1; /* size of saved image */
|
||||
static struct callout scrnsv_timedout_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
#if PCVT_PRETTYSCRNS
|
||||
static u_short *scrnsv_current = (u_short *)0; /* attention char ptr */
|
||||
@ -1748,6 +1749,8 @@ set_2ndcharset(void)
|
||||
#if PCVT_SCREENSAVER
|
||||
#if PCVT_PRETTYSCRNS
|
||||
|
||||
static struct callout scrnsv_blink_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* produce some kinda random number, had a look into the system library...
|
||||
*---------------------------------------------------------------------------*/
|
||||
@ -1787,7 +1790,7 @@ scrnsv_blink(void)
|
||||
*scrnsv_current = (7 /* LIGHTGRAY */ << 8) + '*';
|
||||
if(adaptor_type == VGA_ADAPTOR)
|
||||
vgapaletteio(7 /* LIGHTGRAY */, &blink_rgb[(r >> 4) & 7], 1);
|
||||
timeout((TIMEOUT_FUNC_T)scrnsv_blink, NULL, hz);
|
||||
callout_reset(&scrnsv_blink_ch, hz, (TIMEOUT_FUNC_T)scrnsv_blink, NULL);
|
||||
}
|
||||
|
||||
#endif /* PCVT_PRETTYSCRNS */
|
||||
@ -1801,7 +1804,7 @@ pcvt_set_scrnsv_tmo(int timeout)
|
||||
int x = splhigh();
|
||||
|
||||
if(scrnsv_timeout)
|
||||
untimeout((TIMEOUT_FUNC_T)scrnsv_timedout, NULL);
|
||||
callout_stop(&scrnsv_timedout_ch);
|
||||
|
||||
scrnsv_timeout = timeout;
|
||||
pcvt_scrnsv_reset(); /* sanity */
|
||||
@ -1878,8 +1881,8 @@ scrnsv_timedout(void *arg)
|
||||
vgapaletteio(0 /* BLACK */, &black, 1);
|
||||
}
|
||||
/* prepare for next time... */
|
||||
timeout((TIMEOUT_FUNC_T)scrnsv_timedout /* me! */,
|
||||
NULL, hz / 10);
|
||||
callout_reset(&scrnsv_timedout_ch, hz / 10,
|
||||
(TIMEOUT_FUNC_T)scrnsv_timedout, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1889,7 +1892,8 @@ scrnsv_timedout(void *arg)
|
||||
|
||||
#if PCVT_PRETTYSCRNS
|
||||
scrnsv_current = vsp->Crtat;
|
||||
timeout((TIMEOUT_FUNC_T)scrnsv_blink, NULL, hz);
|
||||
callout_reset(scrnsv_blink_ch, hz,
|
||||
(TIMEOUT_FUNC_T)scrnsv_blink, NULL);
|
||||
#endif /* PCVT_PRETTYSCRNS */
|
||||
|
||||
sw_cursor(0); /* cursor off on mda/cga */
|
||||
@ -1917,14 +1921,14 @@ pcvt_scrnsv_reset(void)
|
||||
{
|
||||
last_schedule = time.tv_sec;
|
||||
reschedule = 1;
|
||||
untimeout((TIMEOUT_FUNC_T)scrnsv_timedout, NULL);
|
||||
callout_stop(&scrnsv_timedout_ch);
|
||||
}
|
||||
if(scrnsv_active)
|
||||
{
|
||||
|
||||
#if PCVT_PRETTYSCRNS
|
||||
if(scrnsv_active > 1)
|
||||
untimeout((TIMEOUT_FUNC_T)scrnsv_blink, NULL);
|
||||
callout_stop(&scrnsv_blink_ch);
|
||||
#endif /* PCVT_PRETTYSCRNS */
|
||||
|
||||
bcopy(savedscreen, vsp->Crtat, scrnsv_size);
|
||||
@ -1947,8 +1951,8 @@ pcvt_scrnsv_reset(void)
|
||||
if(reschedule)
|
||||
{
|
||||
/* mark next timeout */
|
||||
timeout((TIMEOUT_FUNC_T)scrnsv_timedout, NULL,
|
||||
scrnsv_timeout * hz);
|
||||
callout_reset(&scrnsv_timedout_ch, scrnsv_timeout * hz,
|
||||
(TIMEOUT_FUNC_T)scrnsv_timedout, NULL);
|
||||
}
|
||||
splx(x);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: adb_direct.c,v 1.41 2000/03/19 07:37:58 scottr Exp $ */
|
||||
/* $NetBSD: adb_direct.c,v 1.42 2000/03/23 06:39:55 thorpej Exp $ */
|
||||
|
||||
/* From: adb_direct.c 2.02 4/18/97 jpw */
|
||||
|
||||
@ -67,6 +67,7 @@
|
||||
#include <sys/pool.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
|
||||
#include <machine/viareg.h>
|
||||
#include <machine/param.h>
|
||||
@ -266,6 +267,8 @@ int tickle_count = 0; /* how many tickles seen for this packet? */
|
||||
int tickle_serial = 0; /* the last packet tickled */
|
||||
int adb_cuda_serial = 0; /* the current packet */
|
||||
|
||||
struct callout adb_cuda_tickle_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
extern struct mac68k_machine_S mac68k_machine;
|
||||
|
||||
void pm_setup_adb __P((void));
|
||||
@ -370,7 +373,8 @@ adb_cuda_tickle(void)
|
||||
tickle_count = 0;
|
||||
}
|
||||
|
||||
timeout((void *)adb_cuda_tickle, 0, ADB_TICKLE_TICKS);
|
||||
callout_reset(&adb_cuda_tickle_ch, ADB_TICKLE_TICKS,
|
||||
(void *)adb_cuda_tickle, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2331,7 +2335,8 @@ adb_reinit(void)
|
||||
#endif
|
||||
|
||||
if (adbHardware == ADB_HW_CUDA)
|
||||
timeout((void *)adb_cuda_tickle, 0, ADB_TICKLE_TICKS);
|
||||
callout_reset(&adb_cuda_tickle_ch, ADB_TICKLE_TICKS,
|
||||
(void *)adb_cuda_tickle, NULL);
|
||||
|
||||
/* ints must be on for PB & IOP (at least, for now) */
|
||||
if (adbHardware != ADB_HW_PB && adbHardware != ADB_HW_IOP)
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: aed.c,v 1.9 2000/02/14 07:01:45 scottr Exp $ */
|
||||
/* $NetBSD: aed.c,v 1.10 2000/03/23 06:39:56 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1994 Bradley A. Grantham
|
||||
@ -99,6 +99,8 @@ aedattach(parent, self, aux)
|
||||
struct adb_attach_args *aa_args = (struct adb_attach_args *)aux;
|
||||
struct aed_softc *sc = (struct aed_softc *)self;
|
||||
|
||||
callout_init(&sc->sc_repeat_ch);
|
||||
|
||||
sc->origaddr = aa_args->origaddr;
|
||||
sc->adbaddr = aa_args->adbaddr;
|
||||
sc->handler_id = aa_args->handler_id;
|
||||
@ -319,7 +321,8 @@ aed_kbdrpt(kstate)
|
||||
aed_handoff(&aed_sc->sc_rptevent); /* do key down */
|
||||
|
||||
if (aed_sc->sc_repeating == aed_sc->sc_rptevent.u.k.key) {
|
||||
timeout(aed_kbdrpt, kstate, aed_sc->sc_rptinterval);
|
||||
callout_reset(&aed_sc->sc_repeat_ch, aed_sc->sc_rptinterval,
|
||||
aed_kbdrpt, kstate);
|
||||
}
|
||||
}
|
||||
|
||||
@ -339,15 +342,16 @@ aed_dokeyupdown(event)
|
||||
if (ADBK_PRESS(event->u.k.key) && keyboard[kbd_key][0] != 0) {
|
||||
/* ignore shift & control */
|
||||
if (aed_sc->sc_repeating != -1) {
|
||||
untimeout(aed_kbdrpt, (void *)aed_sc);
|
||||
callout_stop(&aed_sc->sc_repeat_ch);
|
||||
}
|
||||
aed_sc->sc_rptevent = *event;
|
||||
aed_sc->sc_repeating = kbd_key;
|
||||
timeout(aed_kbdrpt, (void *)aed_sc, aed_sc->sc_rptdelay);
|
||||
callout_reset(&aed_sc->sc_repeat_ch, aed_sc->sc_rptdelay,
|
||||
aed_kbdrpt, (void *)aed_sc);
|
||||
} else {
|
||||
if (aed_sc->sc_repeating != -1) {
|
||||
aed_sc->sc_repeating = -1;
|
||||
untimeout(aed_kbdrpt, (void *)aed_sc);
|
||||
callout_stop(&aed_sc->sc_repeat_ch);
|
||||
}
|
||||
aed_sc->sc_rptevent = *event;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: aedvar.h,v 1.3 2000/02/14 07:01:45 scottr Exp $ */
|
||||
/* $NetBSD: aedvar.h,v 1.4 2000/03/23 06:39:56 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1994 Bradley A. Grantham
|
||||
@ -30,6 +30,7 @@
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/callout.h>
|
||||
#include <machine/adbsys.h>
|
||||
|
||||
/* Event queue definitions */
|
||||
@ -41,6 +42,8 @@
|
||||
struct aed_softc {
|
||||
struct device sc_dev;
|
||||
|
||||
struct callout sc_repeat_ch;
|
||||
|
||||
/* ADB info */
|
||||
int origaddr; /* ADB device type (ADBADDR_AED) */
|
||||
int adbaddr; /* current ADB address */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: asc.c,v 1.33 1999/07/08 18:08:54 thorpej Exp $ */
|
||||
/* $NetBSD: asc.c,v 1.34 2000/03/23 06:39:56 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1997 Scott Reynolds
|
||||
@ -168,6 +168,7 @@ ascattach(parent, self, aux)
|
||||
}
|
||||
sc->sc_open = 0;
|
||||
sc->sc_ringing = 0;
|
||||
callout_init(&sc->sc_bell_ch);
|
||||
|
||||
for (i = 0; i < 256; i++) { /* up part of wave, four voices? */
|
||||
asc_wave_tab[i] = i / 4;
|
||||
@ -347,9 +348,9 @@ asc_ring_bell(arg, freq, length, volume)
|
||||
bus_space_write_1(sc->sc_tag, sc->sc_handle, 0x80f, 0);
|
||||
bus_space_write_1(sc->sc_tag, sc->sc_handle, 0x802, 2); /* sampled */
|
||||
bus_space_write_1(sc->sc_tag, sc->sc_handle, 0x801, 2); /* enable sampled */
|
||||
sc->sc_ringing = 1;
|
||||
callout_reset(&sc->sc_bell_ch, length, asc_stop_bell, sc);
|
||||
}
|
||||
sc->sc_ringing++;
|
||||
timeout(asc_stop_bell, sc, length);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ascvar.h,v 1.4 1997/10/10 05:54:57 scottr Exp $ */
|
||||
/* $NetBSD: ascvar.h,v 1.5 2000/03/23 06:39:56 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1997 Scott Reynolds. All rights reserved.
|
||||
@ -26,6 +26,8 @@
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/callout.h>
|
||||
|
||||
#define ASCUNIT(d) ((d) & 0x7)
|
||||
|
||||
struct asc_softc {
|
||||
@ -34,6 +36,7 @@ struct asc_softc {
|
||||
bus_space_handle_t sc_handle;
|
||||
int sc_open;
|
||||
int sc_ringing;
|
||||
struct callout sc_bell_ch;
|
||||
};
|
||||
|
||||
int ascopen __P((dev_t dev, int flag, int mode, struct proc *p));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: iwm_fd.c,v 1.7 2000/02/24 05:02:33 scottr Exp $ */
|
||||
/* $NetBSD: iwm_fd.c,v 1.8 2000/03/23 06:39:56 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997, 1998 Hauke Fath. All rights reserved.
|
||||
@ -34,6 +34,7 @@
|
||||
*/
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/ioctl.h>
|
||||
@ -469,6 +470,7 @@ fd_attach(parent, self, auxp)
|
||||
iwm->drives++;
|
||||
|
||||
BUFQ_INIT(&fd->bufQueue);
|
||||
callout_init(&fd->motor_ch);
|
||||
|
||||
printf(" drive %d: ", fd->unit);
|
||||
|
||||
@ -567,7 +569,7 @@ fd_mod_free(void)
|
||||
* Let's hope there is only one task per drive,
|
||||
* see timeout(9).
|
||||
*/
|
||||
untimeout(motor_off, iwm->fd[unit]);
|
||||
callout_stop(&iwm->fd[unit].motor_ch);
|
||||
disk_detach(&iwm->fd[unit]->diskInfo);
|
||||
free(iwm->fd[unit], M_DEVBUF);
|
||||
iwm->fd[unit] = NULL;
|
||||
@ -1130,7 +1132,7 @@ fdstrategy(bp)
|
||||
bp->b_cylinder);
|
||||
}
|
||||
spl = splbio();
|
||||
untimeout(motor_off, fd);
|
||||
callout_stop(&fd->motor_ch);
|
||||
disksort_cylinder(&fd->bufQueue, bp);
|
||||
if (fd->sc_active == 0)
|
||||
fdstart(fd);
|
||||
@ -1678,7 +1680,7 @@ fdstart_Exit(fd)
|
||||
* XXX Unloading the module while the timeout is still
|
||||
* running WILL crash the machine.
|
||||
*/
|
||||
timeout(motor_off, fd, 10 * hz);
|
||||
callout_reset(&fd->motor_ch, 10 * hz, motor_off, fd);
|
||||
|
||||
return state_Done;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: iwm_fdvar.h,v 1.4 2000/01/21 23:29:06 thorpej Exp $ */
|
||||
/* $NetBSD: iwm_fdvar.h,v 1.5 2000/03/23 06:39:56 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997, 1998 Hauke Fath. All rights reserved.
|
||||
@ -134,6 +134,7 @@ struct fd_softc {
|
||||
struct disk diskInfo; /* generic disk info */
|
||||
struct buf_queue bufQueue; /* queue of buf's */
|
||||
int sc_active; /* number of active requests */
|
||||
struct callout motor_ch; /* motor callout */
|
||||
|
||||
/* private stuff here */
|
||||
/* errors & retries in current I/O job */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: init_main.c,v 1.164 2000/03/10 01:13:18 enami Exp $ */
|
||||
/* $NetBSD: init_main.c,v 1.165 2000/03/23 06:30:07 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995 Christopher G. Demetriou. All rights reserved.
|
||||
@ -207,11 +207,14 @@ main()
|
||||
|
||||
uvm_init();
|
||||
|
||||
/* Initialize callouts. */
|
||||
callout_startup();
|
||||
|
||||
/* Do machine-dependent initialization. */
|
||||
cpu_startup();
|
||||
|
||||
/* Initialize callouts. */
|
||||
callout_startup();
|
||||
/* Finish initializing callouts. */
|
||||
callout_startup1();
|
||||
|
||||
/*
|
||||
* Initialize mbuf's. Do this now because we might attempt to
|
||||
@ -264,6 +267,9 @@ main()
|
||||
p->p_emul = &emul_netbsd;
|
||||
strncpy(p->p_comm, "swapper", MAXCOMLEN);
|
||||
|
||||
callout_init(&p->p_realit_ch);
|
||||
callout_init(&p->p_tsleep_ch);
|
||||
|
||||
/* Create credentials. */
|
||||
cred0.p_refcnt = 1;
|
||||
p->p_cred = &cred0;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: kern_allocsys.c,v 1.8 1999/12/05 17:12:43 tron Exp $ */
|
||||
/* $NetBSD: kern_allocsys.c,v 1.9 2000/03/23 06:30:10 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1999 The NetBSD Foundation, Inc.
|
||||
@ -133,7 +133,10 @@ allocsys(v, mdcallback)
|
||||
caddr_t (*mdcallback) __P((caddr_t));
|
||||
{
|
||||
|
||||
ALLOCSYS(v, callout, struct callout, ncallout);
|
||||
ALLOCSYS(v, callwheel, struct callout_queue, callwheelsize);
|
||||
#ifdef CALLWHEEL_STATS
|
||||
ALLOCSYS(v, callwheel_sizes, int, callwheelsize);
|
||||
#endif
|
||||
#ifdef SYSVSHM
|
||||
ALLOCSYS(v, shmsegs, struct shmid_ds, shminfo.shmmni);
|
||||
#endif
|
||||
|
@ -1,4 +1,41 @@
|
||||
/* $NetBSD: kern_clock.c,v 1.51 2000/01/19 20:05:51 thorpej Exp $ */
|
||||
/* $NetBSD: kern_clock.c,v 1.52 2000/03/23 06:30:10 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2000 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
|
||||
* NASA Ames Research Center.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the NetBSD
|
||||
* Foundation, Inc. and its contributors.
|
||||
* 4. Neither the name of The NetBSD Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1991, 1993
|
||||
@ -85,12 +122,6 @@
|
||||
* profhz/stathz for statistics. (For profiling, every tick counts.)
|
||||
*/
|
||||
|
||||
/*
|
||||
* TODO:
|
||||
* allocate more timeout table slots when table overflows.
|
||||
*/
|
||||
|
||||
|
||||
#ifdef NTP /* NTP phase-locked loop in kernel */
|
||||
/*
|
||||
* Phase/frequency-lock loop (PLL/FLL) definitions
|
||||
@ -281,7 +312,8 @@ long clock_cpu = 0; /* CPU clock adjust */
|
||||
int stathz;
|
||||
int profhz;
|
||||
int profprocs;
|
||||
int ticks;
|
||||
u_int64_t hardclock_ticks, softclock_ticks;
|
||||
int softclock_running; /* 1 => softclock() is running */
|
||||
static int psdiv, pscnt; /* prof => stat divider */
|
||||
int psratio; /* ratio: prof / stat */
|
||||
int tickfix, tickfixinterval; /* used if tick not really integral */
|
||||
@ -300,6 +332,55 @@ int shifthz;
|
||||
volatile struct timeval time __attribute__((__aligned__(__alignof__(quad_t))));
|
||||
volatile struct timeval mono_time;
|
||||
|
||||
/*
|
||||
* The callout mechanism is based on the work of Adam M. Costello and
|
||||
* George Varghese, published in a technical report entitled "Redesigning
|
||||
* the BSD Callout and Timer Facilities", and Justin Gibbs's subsequent
|
||||
* integration into FreeBSD, modified for NetBSD by Jason R. Thorpe.
|
||||
*
|
||||
* This version has been modified to keep the hash chains sorted. Since
|
||||
* the hash chains are typically short, the overhead of this is minimal.
|
||||
* Sorted hash chains reduce the number of comparisons in softclock().
|
||||
* This feature is enabled by defining CALLWHEEL_SORT.
|
||||
*
|
||||
* The original work on the data structures used in this implementation
|
||||
* was published by G. Varghese and A. Lauck in the paper "Hashed and
|
||||
* Hierarchical Timing Wheels: Data Structures for the Efficient
|
||||
* Implementation of a Timer Facility" in the Proceedings of the 11th
|
||||
* ACM Annual Symposium on Operating System Principles, Austin, Texas,
|
||||
* November 1987.
|
||||
*/
|
||||
struct callout_queue *callwheel;
|
||||
int callwheelsize, callwheelbits, callwheelmask;
|
||||
|
||||
static struct callout *nextsoftcheck; /* next callout to be checked */
|
||||
|
||||
#ifdef CALLWHEEL_STATS
|
||||
int callwheel_collisions; /* number of hash collisions */
|
||||
int callwheel_maxlength; /* length of the longest hash chain */
|
||||
int *callwheel_sizes; /* per-bucket length count */
|
||||
u_int64_t callwheel_count; /* # callouts currently */
|
||||
u_int64_t callwheel_established; /* # callouts established */
|
||||
u_int64_t callwheel_fired; /* # callouts that fired */
|
||||
u_int64_t callwheel_disestablished; /* # callouts disestablished */
|
||||
u_int64_t callwheel_changed; /* # callouts changed */
|
||||
u_int64_t callwheel_softclocks; /* # times softclock() called */
|
||||
u_int64_t callwheel_softchecks; /* # checks per softclock() */
|
||||
u_int64_t callwheel_softempty; /* # empty buckets seen */
|
||||
#ifdef CALLWHEEL_SORT
|
||||
u_int64_t callwheel_comparisons; /* # of comparisons on insert */
|
||||
#endif
|
||||
#endif /* CALLWHEEL_STATS */
|
||||
|
||||
/*
|
||||
* This value indicates the number of consecutive callouts that
|
||||
* will be checked before we allow interrupts to have a chance
|
||||
* again.
|
||||
*/
|
||||
#ifndef MAX_SOFTCLOCK_STEPS
|
||||
#define MAX_SOFTCLOCK_STEPS 100
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Initialize clock frequencies and start both clocks running.
|
||||
*/
|
||||
@ -348,7 +429,10 @@ initclocks()
|
||||
panic("weird hz");
|
||||
}
|
||||
if (fixtick == 0) {
|
||||
/* give MD code a chance to set this to a better value; but, if it doesn't, we should.. */
|
||||
/*
|
||||
* Give MD code a chance to set this to a better
|
||||
* value; but, if it doesn't, we should.
|
||||
*/
|
||||
fixtick = (1000000 - (hz*tick));
|
||||
}
|
||||
#endif
|
||||
@ -361,9 +445,8 @@ void
|
||||
hardclock(frame)
|
||||
register struct clockframe *frame;
|
||||
{
|
||||
register struct callout *p1;
|
||||
register struct proc *p;
|
||||
register int delta, needsoft;
|
||||
register int delta;
|
||||
extern int tickdelta;
|
||||
extern long timedelta;
|
||||
#ifdef NTP
|
||||
@ -371,25 +454,6 @@ hardclock(frame)
|
||||
register int ltemp;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Update real-time timeout queue.
|
||||
* At front of queue are some number of events which are ``due''.
|
||||
* The time to these is <= 0 and if negative represents the
|
||||
* number of ticks which have passed since it was supposed to happen.
|
||||
* The rest of the q elements (times > 0) are events yet to happen,
|
||||
* where the time for each is given as a delta from the previous.
|
||||
* Decrementing just the first of these serves to decrement the time
|
||||
* to all events.
|
||||
*/
|
||||
needsoft = 0;
|
||||
for (p1 = calltodo.c_next; p1 != NULL; p1 = p1->c_next) {
|
||||
if (--p1->c_time > 0)
|
||||
break;
|
||||
needsoft = 1;
|
||||
if (p1->c_time == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
p = curproc;
|
||||
if (p) {
|
||||
register struct pstats *pstats;
|
||||
@ -421,7 +485,7 @@ hardclock(frame)
|
||||
* if we are still adjusting the time (see adjtime()),
|
||||
* ``tickdelta'' may also be added in.
|
||||
*/
|
||||
ticks++;
|
||||
hardclock_ticks++;
|
||||
delta = tick;
|
||||
|
||||
#ifndef NTP
|
||||
@ -714,17 +778,23 @@ hardclock(frame)
|
||||
* Process callouts at a very low cpu priority, so we don't keep the
|
||||
* relatively high clock interrupt priority any longer than necessary.
|
||||
*/
|
||||
if (needsoft) {
|
||||
if (TAILQ_FIRST(&callwheel[hardclock_ticks & callwheelmask]) != NULL) {
|
||||
if (CLKF_BASEPRI(frame)) {
|
||||
/*
|
||||
* Save the overhead of a software interrupt;
|
||||
* it will happen as soon as we return, so do it now.
|
||||
* it will happen as soon as we return, so do
|
||||
* it now.
|
||||
*
|
||||
* NOTE: If we're at ``base priority'', softclock()
|
||||
* was not already running.
|
||||
*/
|
||||
(void)spllowersoftclock();
|
||||
softclock();
|
||||
} else
|
||||
setsoftclock();
|
||||
}
|
||||
} else if (softclock_running == 0 &&
|
||||
(softclock_ticks + 1) == hardclock_ticks)
|
||||
softclock_ticks++;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -735,61 +805,152 @@ hardclock(frame)
|
||||
void
|
||||
softclock()
|
||||
{
|
||||
register struct callout *c;
|
||||
register void *arg;
|
||||
register void (*func) __P((void *));
|
||||
register int s;
|
||||
struct callout_queue *bucket;
|
||||
struct callout *c;
|
||||
void (*func) __P((void *));
|
||||
void *arg;
|
||||
int s, idx;
|
||||
#ifndef CALLWHEEL_SORT
|
||||
int steps = 0;
|
||||
#endif
|
||||
|
||||
s = splhigh();
|
||||
while ((c = calltodo.c_next) != NULL && c->c_time <= 0) {
|
||||
func = c->c_func;
|
||||
arg = c->c_arg;
|
||||
calltodo.c_next = c->c_next;
|
||||
c->c_next = callfree;
|
||||
callfree = c;
|
||||
splx(s);
|
||||
(*func)(arg);
|
||||
(void) splhigh();
|
||||
softclock_running = 1;
|
||||
|
||||
#ifdef CALLWHEEL_STATS
|
||||
callwheel_softclocks++;
|
||||
#endif
|
||||
|
||||
while (softclock_ticks != hardclock_ticks) {
|
||||
softclock_ticks++;
|
||||
idx = (int)(softclock_ticks & callwheelmask);
|
||||
bucket = &callwheel[idx];
|
||||
c = TAILQ_FIRST(bucket);
|
||||
#ifdef CALLWHEEL_STATS
|
||||
if (c == NULL)
|
||||
callwheel_softempty++;
|
||||
#endif
|
||||
while (c != NULL) {
|
||||
#ifdef CALLWHEEL_STATS
|
||||
callwheel_softchecks++;
|
||||
#endif
|
||||
#ifdef CALLWHEEL_SORT
|
||||
if (c->c_time > hardclock_ticks)
|
||||
break;
|
||||
nextsoftcheck = TAILQ_NEXT(c, c_link);
|
||||
TAILQ_REMOVE(bucket, c, c_link);
|
||||
#ifdef CALLWHEEL_STATS
|
||||
callwheel_sizes[idx]--;
|
||||
callwheel_fired++;
|
||||
callwheel_count--;
|
||||
#endif
|
||||
func = c->c_func;
|
||||
arg = c->c_arg;
|
||||
c->c_func = NULL;
|
||||
c->c_flags &= ~CALLOUT_PENDING;
|
||||
splx(s);
|
||||
(*func)(arg);
|
||||
(void) splhigh();
|
||||
c = nextsoftcheck;
|
||||
#else /* CALLWHEEL_SORT */
|
||||
if (c->c_time != softclock_ticks) {
|
||||
c = TAILQ_NEXT(c, c_link);
|
||||
if (++steps >= MAX_SOFTCLOCK_STEPS) {
|
||||
nextsoftcheck = c;
|
||||
/* Give interrupts a chance. */
|
||||
splx(s);
|
||||
(void) splhigh();
|
||||
c = nextsoftcheck;
|
||||
steps = 0;
|
||||
}
|
||||
} else {
|
||||
nextsoftcheck = TAILQ_NEXT(c, c_link);
|
||||
TAILQ_REMOVE(bucket, c, c_link);
|
||||
#ifdef CALLWHEEL_STATS
|
||||
callwheel_sizes[idx]--;
|
||||
callwheel_fired++;
|
||||
callwheel_count--;
|
||||
#endif
|
||||
func = c->c_func;
|
||||
arg = c->c_arg;
|
||||
c->c_func = NULL;
|
||||
c->c_flags &= ~CALLOUT_PENDING;
|
||||
splx(s);
|
||||
(*func)(arg);
|
||||
(void) splhigh();
|
||||
steps = 0;
|
||||
c = nextsoftcheck;
|
||||
}
|
||||
#endif /* CALLWHEEL_SORT */
|
||||
}
|
||||
}
|
||||
nextsoftcheck = NULL;
|
||||
softclock_running = 0;
|
||||
splx(s);
|
||||
}
|
||||
|
||||
/*
|
||||
* callout_startup:
|
||||
*
|
||||
* Initialize the callout freelist.
|
||||
* Initialize the callout subsystem. Called from main().
|
||||
*
|
||||
* This must be called before cpu_startup(), which calls
|
||||
* allocsys(), which is what actually allocates the callwheel.
|
||||
*/
|
||||
void
|
||||
callout_startup()
|
||||
{
|
||||
int i;
|
||||
|
||||
callfree = callout;
|
||||
for (i = 1; i < ncallout; i++)
|
||||
callout[i-1].c_next = &callout[i];
|
||||
callout[i-1].c_next = NULL;
|
||||
for (callwheelsize = 1; callwheelsize < ncallout; callwheelsize <<= 1)
|
||||
/* loop */ ;
|
||||
callwheelmask = callwheelsize - 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* timeout --
|
||||
* Execute a function after a specified length of time.
|
||||
* callout_startup1:
|
||||
*
|
||||
* untimeout --
|
||||
* Cancel previous timeout function call.
|
||||
*
|
||||
* See AT&T BCI Driver Reference Manual for specification. This
|
||||
* implementation differs from that one in that no identification
|
||||
* value is returned from timeout, rather, the original arguments
|
||||
* to timeout are used to identify entries for untimeout.
|
||||
* Initialize the callwheel buckets.
|
||||
*/
|
||||
void
|
||||
timeout(ftn, arg, ticks)
|
||||
void (*ftn) __P((void *));
|
||||
void *arg;
|
||||
register int ticks;
|
||||
callout_startup1()
|
||||
{
|
||||
register struct callout *new, *p, *t;
|
||||
register int s;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < callwheelsize; i++)
|
||||
TAILQ_INIT(&callwheel[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
* callout_init:
|
||||
*
|
||||
* Initialize a callout structure so that it can be used
|
||||
* by callout_reset() and callout_stop().
|
||||
*/
|
||||
void
|
||||
callout_init(c)
|
||||
struct callout *c;
|
||||
{
|
||||
|
||||
memset(c, 0, sizeof(*c));
|
||||
}
|
||||
|
||||
/*
|
||||
* callout_reset:
|
||||
*
|
||||
* Establish or change a timeout.
|
||||
*/
|
||||
void
|
||||
callout_reset(c, ticks, func, arg)
|
||||
struct callout *c;
|
||||
int ticks;
|
||||
void (*func) __P((void *));
|
||||
void *arg;
|
||||
{
|
||||
struct callout_queue *bucket;
|
||||
#ifdef CALLWHEEL_SORT
|
||||
struct callout *c0;
|
||||
#endif
|
||||
int s;
|
||||
|
||||
if (ticks <= 0)
|
||||
ticks = 1;
|
||||
@ -797,63 +958,137 @@ timeout(ftn, arg, ticks)
|
||||
/* Lock out the clock. */
|
||||
s = splhigh();
|
||||
|
||||
/* Fill in the next free callout structure. */
|
||||
if (callfree == NULL)
|
||||
panic("timeout table full");
|
||||
new = callfree;
|
||||
callfree = new->c_next;
|
||||
new->c_arg = arg;
|
||||
new->c_func = ftn;
|
||||
|
||||
/*
|
||||
* The time for each event is stored as a difference from the time
|
||||
* of the previous event on the queue. Walk the queue, correcting
|
||||
* the ticks argument for queue entries passed. Correct the ticks
|
||||
* value for the queue entry immediately after the insertion point
|
||||
* as well. Watch out for negative c_time values; these represent
|
||||
* overdue events.
|
||||
* If this callout's timer is already running, cancel it
|
||||
* before we modify it.
|
||||
*/
|
||||
for (p = &calltodo;
|
||||
(t = p->c_next) != NULL && ticks > t->c_time; p = t)
|
||||
if (t->c_time > 0)
|
||||
ticks -= t->c_time;
|
||||
new->c_time = ticks;
|
||||
if (t != NULL)
|
||||
t->c_time -= ticks;
|
||||
if (c->c_flags & CALLOUT_PENDING) {
|
||||
callout_stop(c);
|
||||
#ifdef CALLWHEEL_STATS
|
||||
callwheel_changed++;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Insert the new entry into the queue. */
|
||||
p->c_next = new;
|
||||
new->c_next = t;
|
||||
splx(s);
|
||||
}
|
||||
c->c_arg = arg;
|
||||
c->c_func = func;
|
||||
c->c_flags = CALLOUT_ACTIVE | CALLOUT_PENDING;
|
||||
c->c_time = hardclock_ticks + ticks;
|
||||
|
||||
void
|
||||
untimeout(ftn, arg)
|
||||
void (*ftn) __P((void *));
|
||||
void *arg;
|
||||
{
|
||||
register struct callout *p, *t;
|
||||
register int s;
|
||||
bucket = &callwheel[c->c_time & callwheelmask];
|
||||
|
||||
s = splhigh();
|
||||
for (p = &calltodo; (t = p->c_next) != NULL; p = t)
|
||||
if (t->c_func == ftn && t->c_arg == arg) {
|
||||
/* Increment next entry's tick count. */
|
||||
if (t->c_next && t->c_time > 0)
|
||||
t->c_next->c_time += t->c_time;
|
||||
#ifdef CALLWHEEL_STATS
|
||||
if (TAILQ_FIRST(bucket) != NULL)
|
||||
callwheel_collisions++;
|
||||
#endif
|
||||
|
||||
#ifdef CALLWHEEL_SORT
|
||||
for (c0 = TAILQ_FIRST(bucket); c0 != NULL;
|
||||
c0 = TAILQ_NEXT(c0, c_link)) {
|
||||
#ifdef CALLWHEEL_STATS
|
||||
callwheel_comparisons++;
|
||||
#endif
|
||||
if (c0->c_time < c->c_time)
|
||||
continue;
|
||||
TAILQ_INSERT_BEFORE(c0, c, c_link);
|
||||
goto out;
|
||||
}
|
||||
TAILQ_INSERT_TAIL(bucket, c, c_link);
|
||||
out:
|
||||
#else /* CALLWHEEL_SORT */
|
||||
TAILQ_INSERT_TAIL(bucket, c, c_link);
|
||||
#endif /* CALLWHEEL_SORT */
|
||||
|
||||
#ifdef CALLWHEEL_STATS
|
||||
callwheel_count++;
|
||||
callwheel_established++;
|
||||
if (++callwheel_sizes[c->c_time & callwheelmask] > callwheel_maxlength)
|
||||
callwheel_maxlength =
|
||||
callwheel_sizes[c->c_time & callwheelmask];
|
||||
#endif
|
||||
|
||||
/* Move entry from callout queue to callfree queue. */
|
||||
p->c_next = t->c_next;
|
||||
t->c_next = callfree;
|
||||
callfree = t;
|
||||
break;
|
||||
}
|
||||
splx(s);
|
||||
}
|
||||
|
||||
/*
|
||||
* Compute number of hz until specified time. Used to
|
||||
* compute third argument to timeout() from an absolute time.
|
||||
* callout_stop:
|
||||
*
|
||||
* Disestablish a timeout.
|
||||
*/
|
||||
void
|
||||
callout_stop(c)
|
||||
struct callout *c;
|
||||
{
|
||||
int s;
|
||||
|
||||
/* Lock out the clock. */
|
||||
s = splhigh();
|
||||
|
||||
/*
|
||||
* Don't attempt to delete a callout that's not on the queue.
|
||||
*/
|
||||
if ((c->c_flags & CALLOUT_PENDING) == 0) {
|
||||
c->c_flags &= ~CALLOUT_ACTIVE;
|
||||
splx(s);
|
||||
return;
|
||||
}
|
||||
|
||||
c->c_flags &= ~(CALLOUT_ACTIVE | CALLOUT_PENDING);
|
||||
|
||||
if (nextsoftcheck == c)
|
||||
nextsoftcheck = TAILQ_NEXT(c, c_link);
|
||||
|
||||
TAILQ_REMOVE(&callwheel[c->c_time & callwheelmask], c, c_link);
|
||||
#ifdef CALLWHEEL_STATS
|
||||
callwheel_count--;
|
||||
callwheel_disestablished++;
|
||||
callwheel_sizes[c->c_time & callwheelmask]--;
|
||||
#endif
|
||||
|
||||
c->c_func = NULL;
|
||||
|
||||
splx(s);
|
||||
}
|
||||
|
||||
#ifdef CALLWHEEL_STATS
|
||||
/*
|
||||
* callout_showstats:
|
||||
*
|
||||
* Display callout statistics. Call it from DDB.
|
||||
*/
|
||||
void
|
||||
callout_showstats()
|
||||
{
|
||||
u_int64_t curticks;
|
||||
int s;
|
||||
|
||||
s = splclock();
|
||||
curticks = softclock_ticks;
|
||||
splx(s);
|
||||
|
||||
printf("Callwheel statistics:\n");
|
||||
printf("\tCallouts currently queued: %llu\n", callwheel_count);
|
||||
#ifdef CALLWHEEL_SORT
|
||||
printf("\tCallouts established: %llu, Comparisons: %llu\n",
|
||||
callwheel_established, callwheel_comparisons);
|
||||
#else
|
||||
printf("\tCallouts established: %llu\n", callwheel_established);
|
||||
#endif
|
||||
printf("\tCallouts disestablished: %llu\n", callwheel_disestablished);
|
||||
if (callwheel_changed != 0)
|
||||
printf("\t\tOf those, %llu were changes\n", callwheel_changed);
|
||||
printf("\tCallouts that fired: %llu\n", callwheel_fired);
|
||||
printf("\tNumber of buckets: %d\n", callwheelsize);
|
||||
printf("\tNumber of hash collisions: %d\n", callwheel_collisions);
|
||||
printf("\tMaximum hash chain length: %d\n", callwheel_maxlength);
|
||||
printf("\tSoftclocks: %llu, Softchecks: %llu\n",
|
||||
callwheel_softclocks, callwheel_softchecks);
|
||||
printf("\t\tEmpty buckets seen: %llu\n", callwheel_softempty);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Compute number of hz until specified time. Used to compute second
|
||||
* argument to callout_reset() from an absolute time.
|
||||
*/
|
||||
int
|
||||
hzto(tv)
|
||||
@ -1369,4 +1604,3 @@ sysctl_clockrate(where, sizep)
|
||||
clkinfo.stathz = stathz ? stathz : hz;
|
||||
return (sysctl_rdstruct(where, sizep, NULL, &clkinfo, sizeof(clkinfo)));
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: kern_exit.c,v 1.74 1999/09/28 14:47:03 bouyer Exp $ */
|
||||
/* $NetBSD: kern_exit.c,v 1.75 2000/03/23 06:30:11 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 1999 The NetBSD Foundation, Inc.
|
||||
@ -176,7 +176,7 @@ exit1(p, rv)
|
||||
sigfillset(&p->p_sigignore);
|
||||
sigemptyset(&p->p_siglist);
|
||||
p->p_sigcheck = 0;
|
||||
untimeout(realitexpire, (caddr_t)p);
|
||||
callout_stop(&p->p_realit_ch);
|
||||
|
||||
/*
|
||||
* Close open files and release open-file table.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: kern_fork.c,v 1.61 1999/07/22 21:08:31 thorpej Exp $ */
|
||||
/* $NetBSD: kern_fork.c,v 1.62 2000/03/23 06:30:11 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1989, 1991, 1993
|
||||
@ -319,6 +319,9 @@ again:
|
||||
LIST_INSERT_HEAD(&p1->p_children, p2, p_sibling);
|
||||
LIST_INIT(&p2->p_children);
|
||||
|
||||
callout_init(&p2->p_realit_ch);
|
||||
callout_init(&p2->p_tsleep_ch);
|
||||
|
||||
#ifdef KTRACE
|
||||
/*
|
||||
* Copy traceflag and tracefile if enabled.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: kern_synch.c,v 1.67 1999/11/15 18:49:09 fvdl Exp $ */
|
||||
/* $NetBSD: kern_synch.c,v 1.68 2000/03/23 06:30:12 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1999 The NetBSD Foundation, Inc.
|
||||
@ -82,6 +82,7 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/buf.h>
|
||||
@ -113,6 +114,9 @@ void endtsleep __P((void *));
|
||||
|
||||
__inline void awaken __P((struct proc *));
|
||||
|
||||
struct callout roundrobin_ch = CALLOUT_INITIALIZER;
|
||||
struct callout schedcpu_ch = CALLOUT_INITIALIZER;
|
||||
|
||||
/*
|
||||
* Force switch among equal priority processes every 100ms.
|
||||
*/
|
||||
@ -123,7 +127,7 @@ roundrobin(arg)
|
||||
{
|
||||
|
||||
need_resched();
|
||||
timeout(roundrobin, NULL, hz / 10);
|
||||
callout_reset(&roundrobin_ch, hz / 10, roundrobin, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -276,7 +280,7 @@ schedcpu(arg)
|
||||
proclist_unlock_read();
|
||||
uvm_meter();
|
||||
wakeup((caddr_t)&lbolt);
|
||||
timeout(schedcpu, (void *)0, hz);
|
||||
callout_reset(&schedcpu_ch, hz, schedcpu, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -386,7 +390,7 @@ tsleep(ident, priority, wmesg, timo)
|
||||
*qp->sq_tailp = p;
|
||||
*(qp->sq_tailp = &p->p_forw) = 0;
|
||||
if (timo)
|
||||
timeout(endtsleep, (void *)p, timo);
|
||||
callout_reset(&p->p_tsleep_ch, timo, endtsleep, p);
|
||||
/*
|
||||
* We put ourselves on the sleep queue and start our timeout
|
||||
* before calling CURSIG, as we could stop there, and a wakeup
|
||||
@ -431,7 +435,7 @@ resume:
|
||||
return (EWOULDBLOCK);
|
||||
}
|
||||
} else if (timo)
|
||||
untimeout(endtsleep, (void *)p);
|
||||
callout_stop(&p->p_tsleep_ch);
|
||||
if (catch && (sig != 0 || (sig = CURSIG(p)) != 0)) {
|
||||
#ifdef KTRACE
|
||||
if (KTRPOINT(p, KTR_CSW))
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: kern_time.c,v 1.43 2000/02/16 12:36:19 itojun Exp $ */
|
||||
/* $NetBSD: kern_time.c,v 1.44 2000/03/23 06:30:12 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2000 The NetBSD Foundation, Inc.
|
||||
@ -517,10 +517,11 @@ sys_setitimer(p, v, retval)
|
||||
return (EINVAL);
|
||||
s = splclock();
|
||||
if (which == ITIMER_REAL) {
|
||||
untimeout(realitexpire, p);
|
||||
callout_stop(&p->p_realit_ch);
|
||||
if (timerisset(&aitv.it_value)) {
|
||||
timeradd(&aitv.it_value, &time, &aitv.it_value);
|
||||
timeout(realitexpire, p, hzto(&aitv.it_value));
|
||||
callout_reset(&p->p_realit_ch, hzto(&aitv.it_value),
|
||||
realitexpire, p);
|
||||
}
|
||||
p->p_realtimer = aitv;
|
||||
} else
|
||||
@ -555,8 +556,8 @@ realitexpire(arg)
|
||||
timeradd(&p->p_realtimer.it_value,
|
||||
&p->p_realtimer.it_interval, &p->p_realtimer.it_value);
|
||||
if (timercmp(&p->p_realtimer.it_value, &time, >)) {
|
||||
timeout(realitexpire, p,
|
||||
hzto(&p->p_realtimer.it_value));
|
||||
callout_reset(&p->p_realit_ch,
|
||||
hzto(&p->p_realtimer.it_value), realitexpire, p);
|
||||
splx(s);
|
||||
return;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: tty.c,v 1.115 1999/07/24 15:10:02 tron Exp $ */
|
||||
/* $NetBSD: tty.c,v 1.116 2000/03/23 06:30:12 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1990, 1991, 1993
|
||||
@ -1528,8 +1528,8 @@ ttycheckoutq(tp, wait)
|
||||
splx(s);
|
||||
return (0);
|
||||
}
|
||||
timeout((void (*)__P((void *)))wakeup,
|
||||
(void *)&tp->t_outq, hz);
|
||||
callout_reset(&tp->t_outq_ch, hz,
|
||||
(void (*)__P((void *)))wakeup, &tp->t_outq);
|
||||
SET(tp->t_state, TS_ASLEEP);
|
||||
error = tsleep(&tp->t_outq, (PZERO - 1) | PCATCH,
|
||||
"ttckoutq", 0);
|
||||
@ -2182,6 +2182,8 @@ ttymalloc()
|
||||
|
||||
tp = pool_get(&tty_pool, PR_WAITOK);
|
||||
memset(tp, 0, sizeof(*tp));
|
||||
callout_init(&tp->t_outq_ch);
|
||||
callout_init(&tp->t_rstrt_ch);
|
||||
/* XXX: default to 1024 chars for now */
|
||||
clalloc(&tp->t_rawq, 1024, 1);
|
||||
clalloc(&tp->t_canq, 1024, 1);
|
||||
@ -2201,6 +2203,8 @@ ttyfree(tp)
|
||||
struct tty *tp;
|
||||
{
|
||||
|
||||
callout_stop(&tp->t_outq_ch);
|
||||
callout_stop(&tp->t_rstrt_ch);
|
||||
clfree(&tp->t_rawq);
|
||||
clfree(&tp->t_canq);
|
||||
clfree(&tp->t_outq);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: uipc_domain.c,v 1.29 2000/02/06 02:54:16 thorpej Exp $ */
|
||||
/* $NetBSD: uipc_domain.c,v 1.30 2000/03/23 06:30:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1993
|
||||
@ -52,6 +52,7 @@
|
||||
#include <sys/time.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/proc.h>
|
||||
#include <vm/vm.h>
|
||||
#include <sys/sysctl.h>
|
||||
@ -59,6 +60,8 @@
|
||||
void pffasttimo __P((void *));
|
||||
void pfslowtimo __P((void *));
|
||||
|
||||
struct callout pffasttimo_ch, pfslowtimo_ch;
|
||||
|
||||
/*
|
||||
* Current time values for fast and slow timeouts. We can use u_int
|
||||
* relatively safely. The fast timer will roll over in 27 years and
|
||||
@ -128,8 +131,12 @@ domaininit()
|
||||
max_linkhdr = 16;
|
||||
max_hdr = max_linkhdr + max_protohdr;
|
||||
max_datalen = MHLEN - max_hdr;
|
||||
timeout(pffasttimo, NULL, 1);
|
||||
timeout(pfslowtimo, NULL, 1);
|
||||
|
||||
callout_init(&pffasttimo_ch);
|
||||
callout_init(&pfslowtimo_ch);
|
||||
|
||||
callout_reset(&pffasttimo_ch, 1, pffasttimo, NULL);
|
||||
callout_reset(&pfslowtimo_ch, 1, pfslowtimo, NULL);
|
||||
}
|
||||
|
||||
struct domain *
|
||||
@ -269,7 +276,7 @@ pfslowtimo(arg)
|
||||
for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
|
||||
if (pr->pr_slowtimo)
|
||||
(*pr->pr_slowtimo)();
|
||||
timeout(pfslowtimo, NULL, hz/2);
|
||||
callout_reset(&pfslowtimo_ch, hz / 2, pfslowtimo, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
@ -285,5 +292,5 @@ pffasttimo(arg)
|
||||
for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
|
||||
if (pr->pr_fasttimo)
|
||||
(*pr->pr_fasttimo)();
|
||||
timeout(pffasttimo, NULL, hz/5);
|
||||
callout_reset(&pffasttimo_ch, hz / 5, pffasttimo, NULL);
|
||||
}
|
||||
|
@ -1,4 +1,41 @@
|
||||
/* $NetBSD: callout.h,v 1.12 2000/01/19 20:05:51 thorpej Exp $ */
|
||||
/* $NetBSD: callout.h,v 1.13 2000/03/23 06:31:51 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2000 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
|
||||
* NASA Ames Research Center.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the NetBSD
|
||||
* Foundation, Inc. and its contributors.
|
||||
* 4. Neither the name of The NetBSD Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
@ -42,18 +79,46 @@
|
||||
#ifndef _SYS_CALLOUT_H_
|
||||
#define _SYS_CALLOUT_H_
|
||||
|
||||
#include <sys/queue.h>
|
||||
|
||||
TAILQ_HEAD(callout_queue, callout);
|
||||
|
||||
struct callout {
|
||||
struct callout *c_next; /* next callout in queue */
|
||||
void *c_arg; /* function argument */
|
||||
void (*c_func) __P((void *)); /* function to call */
|
||||
int c_time; /* ticks to the event */
|
||||
TAILQ_ENTRY(callout) c_link;
|
||||
u_int64_t c_time; /* when callout fires */
|
||||
void *c_arg; /* function argument */
|
||||
void (*c_func) __P((void *));/* functiuon to call */
|
||||
int c_flags; /* state of this entry */
|
||||
};
|
||||
|
||||
#ifdef _KERNEL
|
||||
struct callout *callfree, *callout, calltodo;
|
||||
int ncallout;
|
||||
#define CALLOUT_ACTIVE 0x0001 /* callout is active */
|
||||
#define CALLOUT_PENDING 0x0002 /* callout time has not yet arrived */
|
||||
|
||||
void callout_startup __P((void));
|
||||
#define CALLOUT_INITIALIZER { { NULL, NULL }, 0, NULL, NULL, 0 }
|
||||
|
||||
#ifdef _KERNEL
|
||||
extern struct callout_queue *callwheel;
|
||||
extern int callwheelsize, callwheelbits, callwheelmask;
|
||||
extern int ncallout;
|
||||
|
||||
#ifdef CALLWHEEL_STATS
|
||||
extern int *callwheel_sizes; /* for allocsys() */
|
||||
#endif
|
||||
|
||||
void callout_startup __P((void));
|
||||
void callout_startup1 __P((void));
|
||||
void callout_init __P((struct callout *));
|
||||
void callout_reset __P((struct callout *, int, void (*)(void *), void *));
|
||||
void callout_stop __P((struct callout *));
|
||||
#ifdef CALLWHEEL_STATS
|
||||
void callout_showstats __P((void));
|
||||
#endif
|
||||
|
||||
#define callout_active(c) ((c)->c_flags & CALLOUT_ACTIVE)
|
||||
#define callout_pending(c) ((c)->c_flags & CALLOUT_PENDING)
|
||||
#define callout_expired(c) (callout_pending((c)) == 0)
|
||||
|
||||
#define callout_deactivate(c) ((c)->c_flags &= ~CALLOUT_ACTIVE)
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !_SYS_CALLOUT_H_ */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: kernel.h,v 1.15 1999/09/17 20:09:07 thorpej Exp $ */
|
||||
/* $NetBSD: kernel.h,v 1.16 2000/03/23 06:31:51 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
@ -68,4 +68,17 @@ extern int stathz; /* statistics clock's frequency */
|
||||
extern int profhz; /* profiling clock's frequency */
|
||||
extern int lbolt; /* once a second sleep address */
|
||||
|
||||
/*
|
||||
* These globals indicate the number of times hardlock() has ticked,
|
||||
* and the successive attempt of softclock() to catch up with it. These
|
||||
* are large unsigned numbers so that arithmetic can be performed on them
|
||||
* with no reasonable worry about an overflow occurring (we get over 500
|
||||
* million years with this).
|
||||
*
|
||||
* IMPORTANT NOTE: you *must* be at splclock() in order to read both
|
||||
* hardclock_ticks and softclock_ticks. This is because the 64-bit
|
||||
* quantities may not be readable in an atomic fashion on all CPU types.
|
||||
*/
|
||||
extern u_int64_t hardclock_ticks, softclock_ticks;
|
||||
|
||||
#endif /* _SYS_KERNEL_H_ */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: proc.h,v 1.86 2000/02/11 19:22:54 thorpej Exp $ */
|
||||
/* $NetBSD: proc.h,v 1.87 2000/03/23 06:31:51 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1986, 1989, 1991, 1993
|
||||
@ -53,6 +53,7 @@
|
||||
#include <machine/proc.h> /* Machine-dependent proc substruct. */
|
||||
#include <sys/lock.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/callout.h>
|
||||
|
||||
/*
|
||||
* One structure allocated per session.
|
||||
@ -156,10 +157,12 @@ struct proc {
|
||||
int p_cpticks; /* Ticks of cpu time. */
|
||||
fixpt_t p_pctcpu; /* %cpu for this process during p_swtime */
|
||||
void *p_wchan; /* Sleep address. */
|
||||
struct callout p_tsleep_ch;/* callout for tsleep */
|
||||
const char *p_wmesg; /* Reason for sleep. */
|
||||
u_int p_swtime; /* Time swapped in or out. */
|
||||
u_int p_slptime; /* Time since last blocked. */
|
||||
|
||||
struct callout p_realit_ch; /* real time callout */
|
||||
struct itimerval p_realtimer; /* Alarm timer. */
|
||||
struct timeval p_rtime; /* Real time. */
|
||||
u_quad_t p_uticks; /* Statclock hits in user mode. */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: systm.h,v 1.104 2000/03/16 17:19:54 jdolecek Exp $ */
|
||||
/* $NetBSD: systm.h,v 1.105 2000/03/23 06:31:52 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1982, 1988, 1991, 1993
|
||||
@ -221,8 +221,6 @@ long fuword __P((const void *));
|
||||
long fuiword __P((const void *));
|
||||
|
||||
int hzto __P((struct timeval *tv));
|
||||
void timeout __P((void (*func)(void *), void *arg, int ticks));
|
||||
void untimeout __P((void (*func)(void *), void *arg));
|
||||
void realitexpire __P((void *));
|
||||
|
||||
void hardclock __P((struct clockframe *frame));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: tty.h,v 1.47 1999/04/30 05:29:20 cgd Exp $ */
|
||||
/* $NetBSD: tty.h,v 1.48 2000/03/23 06:31:52 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1993
|
||||
@ -46,6 +46,7 @@
|
||||
#include <sys/termios.h>
|
||||
#include <sys/select.h> /* For struct selinfo. */
|
||||
#include <sys/queue.h>
|
||||
#include <sys/callout.h>
|
||||
|
||||
/*
|
||||
* Clists are actually ring buffers. The c_cc, c_cf, c_cl fields have
|
||||
@ -79,6 +80,8 @@ struct tty {
|
||||
struct clist t_canq; /* Device canonical queue. */
|
||||
long t_cancc; /* Canonical queue statistics. */
|
||||
struct clist t_outq; /* Device output queue. */
|
||||
struct callout t_outq_ch; /* for ttycheckoutq() */
|
||||
struct callout t_rstrt_ch; /* for delayed output start */
|
||||
long t_outcc; /* Output queue statistics. */
|
||||
u_char t_line; /* Interface to device drivers. */
|
||||
dev_t t_dev; /* Device. */
|
||||
|
Loading…
Reference in New Issue
Block a user