diff options
author | phk <phk@FreeBSD.org> | 1999-04-25 08:58:10 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1999-04-25 08:58:10 +0000 |
commit | a7774b22060f578874d895e8b12d204255614f55 (patch) | |
tree | b053664319fa459510e26949b664c39c9c0d5958 /sys/dev | |
parent | 8d7f7356e850ff10eeb08935ea2fde486054250f (diff) | |
download | FreeBSD-src-a7774b22060f578874d895e8b12d204255614f55.zip FreeBSD-src-a7774b22060f578874d895e8b12d204255614f55.tar.gz |
Allow multiple opens.
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/ppbus/pps.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/sys/dev/ppbus/pps.c b/sys/dev/ppbus/pps.c index fb08062..a80dfbb 100644 --- a/sys/dev/ppbus/pps.c +++ b/sys/dev/ppbus/pps.c @@ -6,7 +6,7 @@ * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp * ---------------------------------------------------------------------------- * - * $Id: pps.c,v 1.14 1999/03/11 15:09:51 phk Exp $ + * $Id: pps.c,v 1.15 1999/03/13 16:22:18 phk Exp $ * * This driver implements a draft-mogul-pps-api-02.txt PPS source. * @@ -34,6 +34,7 @@ static struct pps_data { int pps_unit; + int pps_open; struct ppb_device pps_dev; struct pps_state pps; } *softc[NPPS]; @@ -126,11 +127,14 @@ ppsopen(dev_t dev, int flags, int fmt, struct proc *p) sc = softc[unit]; - if (ppb_request_bus(&sc->pps_dev, PPB_WAIT|PPB_INTR)) - return (EINTR); + if (!sc->pps_open) { + if (ppb_request_bus(&sc->pps_dev, PPB_WAIT|PPB_INTR)) + return (EINTR); - ppb_wctr(&sc->pps_dev, 0); - ppb_wctr(&sc->pps_dev, IRQENABLE); + ppb_wctr(&sc->pps_dev, 0); + ppb_wctr(&sc->pps_dev, IRQENABLE); + sc->pps_open = 1; + } return(0); } @@ -146,6 +150,7 @@ ppsclose(dev_t dev, int flags, int fmt, struct proc *p) ppb_wctr(&sc->pps_dev, 0); ppb_release_bus(&sc->pps_dev); + sc->pps_open = 0; return(0); } |