diff options
author | phk <phk@FreeBSD.org> | 1999-07-03 08:23:00 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1999-07-03 08:23:00 +0000 |
commit | 1d20b72ec57ab7ec22422ba41719b0b503c35ea3 (patch) | |
tree | b878ac7e9c7f416cf9a4e4deff9483889985babc /sys/pci | |
parent | 88fd41ff5bd8091a59d252185bcce69695963c65 (diff) | |
download | FreeBSD-src-1d20b72ec57ab7ec22422ba41719b0b503c35ea3.zip FreeBSD-src-1d20b72ec57ab7ec22422ba41719b0b503c35ea3.tar.gz |
Bail after 5 attempts to read very noisy signals.
Diffstat (limited to 'sys/pci')
-rw-r--r-- | sys/pci/xrpu.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/pci/xrpu.c b/sys/pci/xrpu.c index 08b8d3d..8bc3bca 100644 --- a/sys/pci/xrpu.c +++ b/sys/pci/xrpu.c @@ -6,7 +6,7 @@ * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp * ---------------------------------------------------------------------------- * - * $Id: xrpu.c,v 1.12 1999/05/31 11:29:04 phk Exp $ + * $Id: xrpu.c,v 1.13 1999/06/22 10:31:30 phk Exp $ * * A very simple device driver for PCI cards based on Xilinx 6200 series * FPGA/RPU devices. Current Functionality is to allow you to open and @@ -100,24 +100,26 @@ void xrpu_poll_pps(struct timecounter *tc) { struct softc *sc = tc->tc_priv; - int i; + int i, j; unsigned count1, ppscount; for (i = 0; i < XRPU_MAX_PPS; i++) { if (sc->assert[i]) { ppscount = *(sc->assert[i]) & tc->tc_counter_mask; + j = 0; do { count1 = ppscount; ppscount = *(sc->assert[i]) & tc->tc_counter_mask; - } while (ppscount != count1); + } while (ppscount != count1 && ++j < 5); pps_event(&sc->pps[i], tc, ppscount, PPS_CAPTUREASSERT); } if (sc->clear[i]) { + j = 0; ppscount = *(sc->clear[i]) & tc->tc_counter_mask; do { count1 = ppscount; ppscount = *(sc->clear[i]) & tc->tc_counter_mask; - } while (ppscount != count1); + } while (ppscount != count1 && ++j < 5); pps_event(&sc->pps[i], tc, ppscount, PPS_CAPTURECLEAR); } } |