if_sis.c (148444) | if_sis.c (148654) |
---|---|
1/*- 2 * Copyright (c) 2005 Poul-Henning Kamp <phk@FreeBSD.org> 3 * Copyright (c) 1997, 1998, 1999 4 * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 18 unchanged lines hidden (view full) --- 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2005 Poul-Henning Kamp <phk@FreeBSD.org> 3 * Copyright (c) 1997, 1998, 1999 4 * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 18 unchanged lines hidden (view full) --- 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34#include <sys/cdefs.h> |
35__FBSDID("$FreeBSD: head/sys/pci/if_sis.c 148444 2005-07-27 13:48:45Z jhb $"); | 35__FBSDID("$FreeBSD: head/sys/pci/if_sis.c 148654 2005-08-03 00:18:35Z rwatson $"); |
36 37/* 38 * SiS 900/SiS 7016 fast ethernet PCI NIC driver. Datasheets are 39 * available from http://www.sis.com.tw. 40 * 41 * This driver also supports the NatSemi DP83815. Datasheets are 42 * available from http://www.national.com. 43 * --- 714 unchanged lines hidden (view full) --- 758 filtsave = CSR_READ_4(sc, SIS_RXFILT_CTL); 759 760 /* first, zot all the existing hash bits */ 761 for (i = 0; i < 32; i++) { 762 CSR_WRITE_4(sc, SIS_RXFILT_CTL, NS_FILTADDR_FMEM_LO + (i*2)); 763 CSR_WRITE_4(sc, SIS_RXFILT_DATA, 0); 764 } 765 | 36 37/* 38 * SiS 900/SiS 7016 fast ethernet PCI NIC driver. Datasheets are 39 * available from http://www.sis.com.tw. 40 * 41 * This driver also supports the NatSemi DP83815. Datasheets are 42 * available from http://www.national.com. 43 * --- 714 unchanged lines hidden (view full) --- 758 filtsave = CSR_READ_4(sc, SIS_RXFILT_CTL); 759 760 /* first, zot all the existing hash bits */ 761 for (i = 0; i < 32; i++) { 762 CSR_WRITE_4(sc, SIS_RXFILT_CTL, NS_FILTADDR_FMEM_LO + (i*2)); 763 CSR_WRITE_4(sc, SIS_RXFILT_DATA, 0); 764 } 765 |
766 IF_ADDR_LOCK(ifp); |
|
766 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { 767 if (ifma->ifma_addr->sa_family != AF_LINK) 768 continue; 769 h = sis_mchash(sc, 770 LLADDR((struct sockaddr_dl *)ifma->ifma_addr)); 771 index = h >> 3; 772 bit = h & 0x1F; 773 CSR_WRITE_4(sc, SIS_RXFILT_CTL, NS_FILTADDR_FMEM_LO + index); 774 if (bit > 0xF) 775 bit -= 0x10; 776 SIS_SETBIT(sc, SIS_RXFILT_DATA, (1 << bit)); 777 } | 767 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { 768 if (ifma->ifma_addr->sa_family != AF_LINK) 769 continue; 770 h = sis_mchash(sc, 771 LLADDR((struct sockaddr_dl *)ifma->ifma_addr)); 772 index = h >> 3; 773 bit = h & 0x1F; 774 CSR_WRITE_4(sc, SIS_RXFILT_CTL, NS_FILTADDR_FMEM_LO + index); 775 if (bit > 0xF) 776 bit -= 0x10; 777 SIS_SETBIT(sc, SIS_RXFILT_DATA, (1 << bit)); 778 } |
779 IF_ADDR_UNLOCK(ifp); |
|
778 779 CSR_WRITE_4(sc, SIS_RXFILT_CTL, filtsave); 780 781 return; 782} 783 784static void 785sis_setmulti_sis(struct sis_softc *sc) --- 22 unchanged lines hidden (view full) --- 808 if (ifp->if_flags & IFF_PROMISC) 809 ctl |= SIS_RXFILTCTL_BROAD|SIS_RXFILTCTL_ALLPHYS; 810 for (i = 0; i < n; i++) 811 hashes[i] = ~0; 812 } else { 813 for (i = 0; i < n; i++) 814 hashes[i] = 0; 815 i = 0; | 780 781 CSR_WRITE_4(sc, SIS_RXFILT_CTL, filtsave); 782 783 return; 784} 785 786static void 787sis_setmulti_sis(struct sis_softc *sc) --- 22 unchanged lines hidden (view full) --- 810 if (ifp->if_flags & IFF_PROMISC) 811 ctl |= SIS_RXFILTCTL_BROAD|SIS_RXFILTCTL_ALLPHYS; 812 for (i = 0; i < n; i++) 813 hashes[i] = ~0; 814 } else { 815 for (i = 0; i < n; i++) 816 hashes[i] = 0; 817 i = 0; |
818 IF_ADDR_LOCK(ifp); |
|
816 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { 817 if (ifma->ifma_addr->sa_family != AF_LINK) 818 continue; 819 h = sis_mchash(sc, 820 LLADDR((struct sockaddr_dl *)ifma->ifma_addr)); 821 hashes[h >> 4] |= 1 << (h & 0xf); 822 i++; 823 } | 819 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { 820 if (ifma->ifma_addr->sa_family != AF_LINK) 821 continue; 822 h = sis_mchash(sc, 823 LLADDR((struct sockaddr_dl *)ifma->ifma_addr)); 824 hashes[h >> 4] |= 1 << (h & 0xf); 825 i++; 826 } |
827 IF_ADDR_UNLOCK(ifp); |
|
824 if (i > n) { 825 ctl |= SIS_RXFILTCTL_ALLMULTI; 826 for (i = 0; i < n; i++) 827 hashes[i] = ~0; 828 } 829 } 830 831 for (i = 0; i < n; i++) { --- 1466 unchanged lines hidden --- | 828 if (i > n) { 829 ctl |= SIS_RXFILTCTL_ALLMULTI; 830 for (i = 0; i < n; i++) 831 hashes[i] = ~0; 832 } 833 } 834 835 for (i = 0; i < n; i++) { --- 1466 unchanged lines hidden --- |