Module Name: src
Committed By: nisimura
Date: Mon Mar 2 19:16:02 UTC 2020
Modified Files:
src/sys/dev/pci: if_kse.c
Log Message:
minor knits in mcast handling.
To generate a diff of this commit:
cvs rdiff -u -r1.49 -r1.50 src/sys/dev/pci/if_kse.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/if_kse.c
diff -u src/sys/dev/pci/if_kse.c:1.49 src/sys/dev/pci/if_kse.c:1.50
--- src/sys/dev/pci/if_kse.c:1.49 Mon Feb 17 06:05:31 2020
+++ src/sys/dev/pci/if_kse.c Mon Mar 2 19:16:02 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: if_kse.c,v 1.49 2020/02/17 06:05:31 nisimura Exp $ */
+/* $NetBSD: if_kse.c,v 1.50 2020/03/02 19:16:02 nisimura Exp $ */
/*-
* Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_kse.c,v 1.49 2020/02/17 06:05:31 nisimura Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_kse.c,v 1.50 2020/03/02 19:16:02 nisimura Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1114,11 +1114,6 @@ kse_set_filter(struct kse_softc *sc)
ETHER_FIRST_MULTI(step, ec, enm);
i = 0;
while (enm != NULL) {
-#if KSE_MCASTDEBUG == 1
- printf("%s: addrs %s %s\n", __func__,
- ether_sprintf(enm->enm_addrlo),
- ether_sprintf(enm->enm_addrhi));
-#endif
if (memcmp(enm->enm_addrlo, enm->enm_addrhi, ETHER_ADDR_LEN)) {
/*
* We must listen to a range of multicast addresses.
@@ -1132,6 +1127,9 @@ kse_set_filter(struct kse_softc *sc)
ifp->if_flags |= IFF_ALLMULTI;
goto update;
}
+#if KSE_MCASTDEBUG == 1
+ printf("[%d] %s\n", i, ether_sprintf(enm->enm_addrlo));
+#endif
if (i < 16) {
/* use 16 additional MAC addr to accept mcast */
uint32_t addr;
@@ -1139,8 +1137,8 @@ kse_set_filter(struct kse_softc *sc)
addr = (ep[3] << 24) | (ep[2] << 16)
| (ep[1] << 8) | ep[0];
CSR_WRITE_4(sc, MAAL0 + i*8, addr);
- addr = (ep[5] << 8) | ep[4] | (1U<<31);
- CSR_WRITE_4(sc, MAAH0 + i*8, addr);
+ addr = (ep[5] << 8) | ep[4];
+ CSR_WRITE_4(sc, MAAH0 + i*8, addr | (1U << 31));
} else {
/* use hash table when too many */
crc = ether_crc32_le(enm->enm_addrlo, ETHER_ADDR_LEN);
@@ -1151,11 +1149,10 @@ kse_set_filter(struct kse_softc *sc)
}
ETHER_UNLOCK(ec);
- if (crc) {
- CSR_WRITE_4(sc, MTR0, mchash[0]);
- CSR_WRITE_4(sc, MTR1, mchash[1]);
+ if (crc)
sc->sc_rxc |= RXC_MHTE;
- }
+ CSR_WRITE_4(sc, MTR0, mchash[0]);
+ CSR_WRITE_4(sc, MTR1, mchash[1]);
return;
update: