Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-1-6]: src/sys/dev/pci Pull up revision 1.62 (requested by tls in ...
details: https://anonhg.NetBSD.org/src/rev/2d76e7db4200
branches: netbsd-1-6
changeset: 529423:2d76e7db4200
user: he <he%NetBSD.org@localhost>
date: Thu Nov 21 18:28:15 2002 +0000
description:
Pull up revision 1.62 (requested by tls in ticket #1007):
Do not treat the ``reset complete'' interrupts as errors.
Doing so causes us to go into a reset/interrupt/reset loop.
diffstat:
sys/dev/pci/if_sip.c | 29 ++++++++++++++++++++++++-----
1 files changed, 24 insertions(+), 5 deletions(-)
diffs (70 lines):
diff -r d766f06b8c22 -r 2d76e7db4200 sys/dev/pci/if_sip.c
--- a/sys/dev/pci/if_sip.c Thu Nov 21 18:05:15 2002 +0000
+++ b/sys/dev/pci/if_sip.c Thu Nov 21 18:28:15 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_sip.c,v 1.52.4.6 2002/11/01 18:33:45 tron Exp $ */
+/* $NetBSD: if_sip.c,v 1.52.4.7 2002/11/21 18:28:15 he Exp $ */
/*-
* Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -82,7 +82,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.52.4.6 2002/11/01 18:33:45 tron Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.52.4.7 2002/11/21 18:28:15 he Exp $");
#include "bpfilter.h"
@@ -258,6 +258,7 @@
struct evcnt sc_ev_txdintr; /* Tx descriptor interrupts */
struct evcnt sc_ev_txiintr; /* Tx idle interrupts */
struct evcnt sc_ev_rxintr; /* Rx interrupts */
+ struct evcnt sc_ev_hiberr; /* HIBERR interrupts */
#ifdef DP83820
struct evcnt sc_ev_rxipsum; /* IP checksums checked in-bound */
struct evcnt sc_ev_rxtcpsum; /* TCP checksums checked in-bound */
@@ -1026,6 +1027,8 @@
NULL, sc->sc_dev.dv_xname, "txiintr");
evcnt_attach_dynamic(&sc->sc_ev_rxintr, EVCNT_TYPE_INTR,
NULL, sc->sc_dev.dv_xname, "rxintr");
+ evcnt_attach_dynamic(&sc->sc_ev_hiberr, EVCNT_TYPE_INTR,
+ NULL, sc->sc_dev.dv_xname, "hiberr");
#ifdef DP83820
evcnt_attach_dynamic(&sc->sc_ev_rxipsum, EVCNT_TYPE_MISC,
NULL, sc->sc_dev.dv_xname, "rxipsum");
@@ -1572,15 +1575,31 @@
#endif /* ! DP83820 */
if (isr & ISR_HIBERR) {
+ int want_init = 0;
+
+ SIP_EVCNT_INCR(&sc->sc_ev_hiberr);
+
#define PRINTERR(bit, str) \
- if (isr & (bit)) \
- printf("%s: %s\n", sc->sc_dev.dv_xname, str)
+ do { \
+ if (isr & (bit)) { \
+ printf("%s: %s\n", \
+ sc->sc_dev.dv_xname, str); \
+ want_init = 1; \
+ } \
+ } while (/*CONSTCOND*/0)
+
PRINTERR(ISR_DPERR, "parity error");
PRINTERR(ISR_SSERR, "system error");
PRINTERR(ISR_RMABT, "master abort");
PRINTERR(ISR_RTABT, "target abort");
PRINTERR(ISR_RXSOVR, "receive status FIFO overrun");
- (void) SIP_DECL(init)(ifp);
+ /*
+ * Ignore:
+ * Tx reset complete
+ * Rx reset complete
+ */
+ if (want_init)
+ (void) SIP_DECL(init)(ifp);
#undef PRINTERR
}
}
Home |
Main Index |
Thread Index |
Old Index