if_bce.c (194781) | if_bce.c (195049) |
---|---|
1/*- 2 * Copyright (c) 2006-2009 Broadcom Corporation 3 * David Christensen <davidch@broadcom.com>. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * --- 15 unchanged lines hidden (view full) --- 24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 28 * THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2006-2009 Broadcom Corporation 3 * David Christensen <davidch@broadcom.com>. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * --- 15 unchanged lines hidden (view full) --- 24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 28 * THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31#include <sys/cdefs.h> |
32__FBSDID("$FreeBSD: head/sys/dev/bce/if_bce.c 194781 2009-06-23 22:19:27Z davidch $"); | 32__FBSDID("$FreeBSD: head/sys/dev/bce/if_bce.c 195049 2009-06-26 11:45:06Z rwatson $"); |
33 34/* 35 * The following controllers are supported by this driver: 36 * BCM5706C A2, A3 37 * BCM5706S A2, A3 38 * BCM5708C B1, B2 39 * BCM5708S B1, B2 40 * BCM5709C A1, C0 --- 7214 unchanged lines hidden (view full) --- 7255 for (i = 0; i < NUM_MC_HASH_REGISTERS; i++) { 7256 REG_WR(sc, BCE_EMAC_MULTICAST_HASH0 + (i * 4), 0xffffffff); 7257 } 7258 sort_mode |= BCE_RPM_SORT_USER0_MC_EN; 7259 } else { 7260 /* Accept one or more multicast(s). */ 7261 DBPRINT(sc, BCE_INFO_MISC, "Enabling selective multicast mode.\n"); 7262 | 33 34/* 35 * The following controllers are supported by this driver: 36 * BCM5706C A2, A3 37 * BCM5706S A2, A3 38 * BCM5708C B1, B2 39 * BCM5708S B1, B2 40 * BCM5709C A1, C0 --- 7214 unchanged lines hidden (view full) --- 7255 for (i = 0; i < NUM_MC_HASH_REGISTERS; i++) { 7256 REG_WR(sc, BCE_EMAC_MULTICAST_HASH0 + (i * 4), 0xffffffff); 7257 } 7258 sort_mode |= BCE_RPM_SORT_USER0_MC_EN; 7259 } else { 7260 /* Accept one or more multicast(s). */ 7261 DBPRINT(sc, BCE_INFO_MISC, "Enabling selective multicast mode.\n"); 7262 |
7263 IF_ADDR_LOCK(ifp); | 7263 if_maddr_rlock(ifp); |
7264 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { 7265 if (ifma->ifma_addr->sa_family != AF_LINK) 7266 continue; 7267 h = ether_crc32_le(LLADDR((struct sockaddr_dl *) 7268 ifma->ifma_addr), ETHER_ADDR_LEN) & 0xFF; 7269 hashes[(h & 0xE0) >> 5] |= 1 << (h & 0x1F); 7270 } | 7264 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { 7265 if (ifma->ifma_addr->sa_family != AF_LINK) 7266 continue; 7267 h = ether_crc32_le(LLADDR((struct sockaddr_dl *) 7268 ifma->ifma_addr), ETHER_ADDR_LEN) & 0xFF; 7269 hashes[(h & 0xE0) >> 5] |= 1 << (h & 0x1F); 7270 } |
7271 IF_ADDR_UNLOCK(ifp); | 7271 if_maddr_runlock(ifp); |
7272 7273 for (i = 0; i < NUM_MC_HASH_REGISTERS; i++) 7274 REG_WR(sc, BCE_EMAC_MULTICAST_HASH0 + (i * 4), hashes[i]); 7275 7276 sort_mode |= BCE_RPM_SORT_USER0_MC_HSH_EN; 7277 } 7278 7279 /* Only make changes if the recive mode has actually changed. */ --- 3098 unchanged lines hidden --- | 7272 7273 for (i = 0; i < NUM_MC_HASH_REGISTERS; i++) 7274 REG_WR(sc, BCE_EMAC_MULTICAST_HASH0 + (i * 4), hashes[i]); 7275 7276 sort_mode |= BCE_RPM_SORT_USER0_MC_HSH_EN; 7277 } 7278 7279 /* Only make changes if the recive mode has actually changed. */ --- 3098 unchanged lines hidden --- |