Deleted Added
full compact
if_sis.c (193096) if_sis.c (195049)
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/dev/sis/if_sis.c 193096 2009-05-30 15:14:44Z attilio $");
35__FBSDID("$FreeBSD: head/sys/dev/sis/if_sis.c 195049 2009-06-26 11:45:06Z 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 *

--- 724 unchanged lines hidden (view full) ---

768 filtsave = CSR_READ_4(sc, SIS_RXFILT_CTL);
769
770 /* first, zot all the existing hash bits */
771 for (i = 0; i < 32; i++) {
772 CSR_WRITE_4(sc, SIS_RXFILT_CTL, NS_FILTADDR_FMEM_LO + (i*2));
773 CSR_WRITE_4(sc, SIS_RXFILT_DATA, 0);
774 }
775
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 *

--- 724 unchanged lines hidden (view full) ---

768 filtsave = CSR_READ_4(sc, SIS_RXFILT_CTL);
769
770 /* first, zot all the existing hash bits */
771 for (i = 0; i < 32; i++) {
772 CSR_WRITE_4(sc, SIS_RXFILT_CTL, NS_FILTADDR_FMEM_LO + (i*2));
773 CSR_WRITE_4(sc, SIS_RXFILT_DATA, 0);
774 }
775
776 IF_ADDR_LOCK(ifp);
776 if_maddr_rlock(ifp);
777 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
778 if (ifma->ifma_addr->sa_family != AF_LINK)
779 continue;
780 h = sis_mchash(sc,
781 LLADDR((struct sockaddr_dl *)ifma->ifma_addr));
782 index = h >> 3;
783 bit = h & 0x1F;
784 CSR_WRITE_4(sc, SIS_RXFILT_CTL, NS_FILTADDR_FMEM_LO + index);
785 if (bit > 0xF)
786 bit -= 0x10;
787 SIS_SETBIT(sc, SIS_RXFILT_DATA, (1 << bit));
788 }
777 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
778 if (ifma->ifma_addr->sa_family != AF_LINK)
779 continue;
780 h = sis_mchash(sc,
781 LLADDR((struct sockaddr_dl *)ifma->ifma_addr));
782 index = h >> 3;
783 bit = h & 0x1F;
784 CSR_WRITE_4(sc, SIS_RXFILT_CTL, NS_FILTADDR_FMEM_LO + index);
785 if (bit > 0xF)
786 bit -= 0x10;
787 SIS_SETBIT(sc, SIS_RXFILT_DATA, (1 << bit));
788 }
789 IF_ADDR_UNLOCK(ifp);
789 if_maddr_runlock(ifp);
790
791 CSR_WRITE_4(sc, SIS_RXFILT_CTL, filtsave);
792
793 return;
794}
795
796static void
797sis_setmulti_sis(struct sis_softc *sc)

--- 22 unchanged lines hidden (view full) ---

820 if (ifp->if_flags & IFF_PROMISC)
821 ctl |= SIS_RXFILTCTL_BROAD|SIS_RXFILTCTL_ALLPHYS;
822 for (i = 0; i < n; i++)
823 hashes[i] = ~0;
824 } else {
825 for (i = 0; i < n; i++)
826 hashes[i] = 0;
827 i = 0;
790
791 CSR_WRITE_4(sc, SIS_RXFILT_CTL, filtsave);
792
793 return;
794}
795
796static void
797sis_setmulti_sis(struct sis_softc *sc)

--- 22 unchanged lines hidden (view full) ---

820 if (ifp->if_flags & IFF_PROMISC)
821 ctl |= SIS_RXFILTCTL_BROAD|SIS_RXFILTCTL_ALLPHYS;
822 for (i = 0; i < n; i++)
823 hashes[i] = ~0;
824 } else {
825 for (i = 0; i < n; i++)
826 hashes[i] = 0;
827 i = 0;
828 IF_ADDR_LOCK(ifp);
828 if_maddr_rlock(ifp);
829 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
830 if (ifma->ifma_addr->sa_family != AF_LINK)
831 continue;
832 h = sis_mchash(sc,
833 LLADDR((struct sockaddr_dl *)ifma->ifma_addr));
834 hashes[h >> 4] |= 1 << (h & 0xf);
835 i++;
836 }
829 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
830 if (ifma->ifma_addr->sa_family != AF_LINK)
831 continue;
832 h = sis_mchash(sc,
833 LLADDR((struct sockaddr_dl *)ifma->ifma_addr));
834 hashes[h >> 4] |= 1 << (h & 0xf);
835 i++;
836 }
837 IF_ADDR_UNLOCK(ifp);
837 if_maddr_runlock(ifp);
838 if (i > n) {
839 ctl |= SIS_RXFILTCTL_ALLMULTI;
840 for (i = 0; i < n; i++)
841 hashes[i] = ~0;
842 }
843 }
844
845 for (i = 0; i < n; i++) {

--- 1461 unchanged lines hidden ---
838 if (i > n) {
839 ctl |= SIS_RXFILTCTL_ALLMULTI;
840 for (i = 0; i < n; i++)
841 hashes[i] = ~0;
842 }
843 }
844
845 for (i = 0; i < n; i++) {

--- 1461 unchanged lines hidden ---