Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/ic On ADMtek chips, don't just idle the chip when pr...



details:   https://anonhg.NetBSD.org/src/rev/08510dcfe18e
branches:  trunk
changeset: 501893:08510dcfe18e
user:      thorpej <thorpej%NetBSD.org@localhost>
date:      Mon Jan 08 22:12:57 2001 +0000

description:
On ADMtek chips, don't just idle the chip when programming the
multicast filter.  These chips don't like to go into "idle" state
very much, so we have to use the big hammer and reset the chip,
instead.

diffstat:

 sys/dev/ic/tulip.c |  15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

diffs (32 lines):

diff -r 44e3bf8f2871 -r 08510dcfe18e sys/dev/ic/tulip.c
--- a/sys/dev/ic/tulip.c        Mon Jan 08 22:08:22 2001 +0000
+++ b/sys/dev/ic/tulip.c        Mon Jan 08 22:12:57 2001 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: tulip.c,v 1.86 2001/01/08 21:40:29 thorpej Exp $       */
+/*     $NetBSD: tulip.c,v 1.87 2001/01/08 22:12:57 thorpej Exp $       */
 
 /*-
  * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
@@ -2832,11 +2832,20 @@
        struct ether_multistep step;
        u_int32_t hash, mchash[2];
 
+       /*
+        * If the chip is running, we need to reset the interface,
+        * and will revisit here (with IFF_RUNNING) clear.  The
+        * chip seems to really not like to have its multicast
+        * filter programmed without a reset.
+        */
+       if (ifp->if_flags & IFF_RUNNING) {
+               (void) tlp_init(ifp);
+               return;
+       }
+
        DPRINTF(sc, ("%s: tlp_al981_filter_setup: sc_flags 0x%08x\n",
            sc->sc_dev.dv_xname, sc->sc_flags));
 
-       tlp_idle(sc, OPMODE_ST|OPMODE_SR);
-
        sc->sc_opmode &= ~(OPMODE_PR|OPMODE_PM);
 
        if (ifp->if_flags & IFF_PROMISC) {



Home | Main Index | Thread Index | Old Index