summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorRyan Thomas McBride <mcbride@cvs.openbsd.org>2004-05-31 16:58:20 +0000
committerRyan Thomas McBride <mcbride@cvs.openbsd.org>2004-05-31 16:58:20 +0000
commit27f5080510b9611be6ac1e14636bad993e496323 (patch)
tree64d8e71eaf953b0516f25963153c1c8696140c12 /sys
parent8982b5e0858abbf4a787540503ab68b8b24aa3ef (diff)
Enable all multicast if we encounter a range.
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/pci/if_ti.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/dev/pci/if_ti.c b/sys/dev/pci/if_ti.c
index 6ca8c6ba5c4..d10435301a7 100644
--- a/sys/dev/pci/if_ti.c
+++ b/sys/dev/pci/if_ti.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_ti.c,v 1.49 2004/04/09 21:52:17 henning Exp $ */
+/* $OpenBSD: if_ti.c,v 1.50 2004/05/31 16:58:19 mcbride Exp $ */
/*
* Copyright (c) 1997, 1998, 1999
@@ -1166,6 +1166,7 @@ void ti_setmulti(sc)
ifp = &sc->arpcom.ac_if;
+allmulti:
if (ifp->if_flags & IFF_ALLMULTI) {
TI_DO_CMD(TI_CMD_SET_ALLMULTI, TI_CMD_CODE_ALLMULTI_ENB, 0);
return;
@@ -1188,6 +1189,13 @@ void ti_setmulti(sc)
/* Now program new ones. */
ETHER_FIRST_MULTI(step, ac, enm);
while (enm != NULL) {
+ if (bcmp(enm->enm_addrlo, enm->enm_addrhi, ETHER_ADDR_LEN)) {
+ /* Re-enable interrupts. */
+ CSR_WRITE_4(sc, TI_MB_HOSTINTR, intrs);
+
+ ifp->if_flags |= IFF_ALLMULTI;
+ goto allmulti;
+ }
mc = malloc(sizeof(struct ti_mc_entry), M_DEVBUF, M_NOWAIT);
if (mc == NULL)
panic("ti_setmulti");