diff options
author | Ryan Thomas McBride <mcbride@cvs.openbsd.org> | 2004-05-31 16:58:20 +0000 |
---|---|---|
committer | Ryan Thomas McBride <mcbride@cvs.openbsd.org> | 2004-05-31 16:58:20 +0000 |
commit | 27f5080510b9611be6ac1e14636bad993e496323 (patch) | |
tree | 64d8e71eaf953b0516f25963153c1c8696140c12 /sys | |
parent | 8982b5e0858abbf4a787540503ab68b8b24aa3ef (diff) |
Enable all multicast if we encounter a range.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/pci/if_ti.c | 10 |
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"); |