if_sis.c (155671) | if_sis.c (162315) |
---|---|
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 155671 2006-02-14 12:44:56Z glebius $"); | 35__FBSDID("$FreeBSD: head/sys/pci/if_sis.c 162315 2006-09-15 10:40:54Z glebius $"); |
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 * --- 590 unchanged lines hidden (view full) --- 634 SIS_SETBIT(sc, SIS_PHYCTL, SIS_PHYCTL_ACCESS); 635 636 for (i = 0; i < SIS_TIMEOUT; i++) { 637 if (!(CSR_READ_4(sc, SIS_PHYCTL) & SIS_PHYCTL_ACCESS)) 638 break; 639 } 640 641 if (i == SIS_TIMEOUT) { | 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 * --- 590 unchanged lines hidden (view full) --- 634 SIS_SETBIT(sc, SIS_PHYCTL, SIS_PHYCTL_ACCESS); 635 636 for (i = 0; i < SIS_TIMEOUT; i++) { 637 if (!(CSR_READ_4(sc, SIS_PHYCTL) & SIS_PHYCTL_ACCESS)) 638 break; 639 } 640 641 if (i == SIS_TIMEOUT) { |
642 if_printf(sc->sis_ifp, "PHY failed to come ready\n"); | 642 device_printf(sc->sis_dev, "PHY failed to come ready\n"); |
643 return(0); 644 } 645 646 val = (CSR_READ_4(sc, SIS_PHYCTL) >> 16) & 0xFFFF; 647 648 if (val == 0xFFFF) 649 return(0); 650 --- 41 unchanged lines hidden (view full) --- 692 SIS_SETBIT(sc, SIS_PHYCTL, SIS_PHYCTL_ACCESS); 693 694 for (i = 0; i < SIS_TIMEOUT; i++) { 695 if (!(CSR_READ_4(sc, SIS_PHYCTL) & SIS_PHYCTL_ACCESS)) 696 break; 697 } 698 699 if (i == SIS_TIMEOUT) | 643 return(0); 644 } 645 646 val = (CSR_READ_4(sc, SIS_PHYCTL) >> 16) & 0xFFFF; 647 648 if (val == 0xFFFF) 649 return(0); 650 --- 41 unchanged lines hidden (view full) --- 692 SIS_SETBIT(sc, SIS_PHYCTL, SIS_PHYCTL_ACCESS); 693 694 for (i = 0; i < SIS_TIMEOUT; i++) { 695 if (!(CSR_READ_4(sc, SIS_PHYCTL) & SIS_PHYCTL_ACCESS)) 696 break; 697 } 698 699 if (i == SIS_TIMEOUT) |
700 if_printf(sc->sis_ifp, "PHY failed to come ready\n"); | 700 device_printf(sc->sis_dev, "PHY failed to come ready\n"); |
701 } else { 702 bzero((char *)&frame, sizeof(frame)); 703 704 frame.mii_phyaddr = phy; 705 frame.mii_regaddr = reg; 706 frame.mii_data = data; 707 sis_mii_writereg(sc, &frame); 708 } --- 149 unchanged lines hidden (view full) --- 858 SIS_SETBIT(sc, SIS_CSR, SIS_CSR_RESET); 859 860 for (i = 0; i < SIS_TIMEOUT; i++) { 861 if (!(CSR_READ_4(sc, SIS_CSR) & SIS_CSR_RESET)) 862 break; 863 } 864 865 if (i == SIS_TIMEOUT) | 701 } else { 702 bzero((char *)&frame, sizeof(frame)); 703 704 frame.mii_phyaddr = phy; 705 frame.mii_regaddr = reg; 706 frame.mii_data = data; 707 sis_mii_writereg(sc, &frame); 708 } --- 149 unchanged lines hidden (view full) --- 858 SIS_SETBIT(sc, SIS_CSR, SIS_CSR_RESET); 859 860 for (i = 0; i < SIS_TIMEOUT; i++) { 861 if (!(CSR_READ_4(sc, SIS_CSR) & SIS_CSR_RESET)) 862 break; 863 } 864 865 if (i == SIS_TIMEOUT) |
866 if_printf(sc->sis_ifp, "reset never completed\n"); | 866 device_printf(sc->sis_dev, "reset never completed\n"); |
867 868 /* Wait a little while for the chip to get its brains in order. */ 869 DELAY(1000); 870 871 /* 872 * If this is a NetSemi chip, make sure to clear 873 * PME mode. 874 */ --- 38 unchanged lines hidden (view full) --- 913 u_char eaddr[ETHER_ADDR_LEN]; 914 struct sis_softc *sc; 915 struct ifnet *ifp; 916 int error = 0, waittime = 0; 917 918 waittime = 0; 919 sc = device_get_softc(dev); 920 | 867 868 /* Wait a little while for the chip to get its brains in order. */ 869 DELAY(1000); 870 871 /* 872 * If this is a NetSemi chip, make sure to clear 873 * PME mode. 874 */ --- 38 unchanged lines hidden (view full) --- 913 u_char eaddr[ETHER_ADDR_LEN]; 914 struct sis_softc *sc; 915 struct ifnet *ifp; 916 int error = 0, waittime = 0; 917 918 waittime = 0; 919 sc = device_get_softc(dev); 920 |
921 sc->sis_self = dev; | 921 sc->sis_dev = dev; |
922 923 mtx_init(&sc->sis_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, 924 MTX_DEF); 925 callout_init_mtx(&sc->sis_stat_ch, &sc->sis_mtx, 0); 926 927 if (pci_get_device(dev) == SIS_DEVICEID_900) 928 sc->sis_type = SIS_TYPE_900; 929 if (pci_get_device(dev) == SIS_DEVICEID_7016) --- 954 unchanged lines hidden (view full) --- 1884 ((u_int16_t *)IF_LLADDR(sc->sis_ifp))[1]); 1885 CSR_WRITE_4(sc, SIS_RXFILT_CTL, SIS_FILTADDR_PAR2); 1886 CSR_WRITE_4(sc, SIS_RXFILT_DATA, 1887 ((u_int16_t *)IF_LLADDR(sc->sis_ifp))[2]); 1888 } 1889 1890 /* Init circular TX/RX lists. */ 1891 if (sis_ring_init(sc) != 0) { | 922 923 mtx_init(&sc->sis_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, 924 MTX_DEF); 925 callout_init_mtx(&sc->sis_stat_ch, &sc->sis_mtx, 0); 926 927 if (pci_get_device(dev) == SIS_DEVICEID_900) 928 sc->sis_type = SIS_TYPE_900; 929 if (pci_get_device(dev) == SIS_DEVICEID_7016) --- 954 unchanged lines hidden (view full) --- 1884 ((u_int16_t *)IF_LLADDR(sc->sis_ifp))[1]); 1885 CSR_WRITE_4(sc, SIS_RXFILT_CTL, SIS_FILTADDR_PAR2); 1886 CSR_WRITE_4(sc, SIS_RXFILT_DATA, 1887 ((u_int16_t *)IF_LLADDR(sc->sis_ifp))[2]); 1888 } 1889 1890 /* Init circular TX/RX lists. */ 1891 if (sis_ring_init(sc) != 0) { |
1892 if_printf(ifp, | 1892 device_printf(sc->sis_dev, |
1893 "initialization failed: no memory for rx buffers\n"); 1894 sis_stop(sc); 1895 return; 1896 } 1897 1898 /* 1899 * Short Cable Receive Errors (MP21.E) 1900 * also: Page 78 of the DP83815 data sheet (september 2002 version) --- 107 unchanged lines hidden (view full) --- 2008 * Short Cable Receive Errors (MP21.E) 2009 */ 2010 CSR_WRITE_4(sc, NS_PHY_PAGE, 0x0001); 2011 reg = CSR_READ_4(sc, NS_PHY_DSPCFG) & 0xfff; 2012 CSR_WRITE_4(sc, NS_PHY_DSPCFG, reg | 0x1000); 2013 DELAY(100000); 2014 reg = CSR_READ_4(sc, NS_PHY_TDATA) & 0xff; 2015 if ((reg & 0x0080) == 0 || (reg > 0xd8 && reg <= 0xff)) { | 1893 "initialization failed: no memory for rx buffers\n"); 1894 sis_stop(sc); 1895 return; 1896 } 1897 1898 /* 1899 * Short Cable Receive Errors (MP21.E) 1900 * also: Page 78 of the DP83815 data sheet (september 2002 version) --- 107 unchanged lines hidden (view full) --- 2008 * Short Cable Receive Errors (MP21.E) 2009 */ 2010 CSR_WRITE_4(sc, NS_PHY_PAGE, 0x0001); 2011 reg = CSR_READ_4(sc, NS_PHY_DSPCFG) & 0xfff; 2012 CSR_WRITE_4(sc, NS_PHY_DSPCFG, reg | 0x1000); 2013 DELAY(100000); 2014 reg = CSR_READ_4(sc, NS_PHY_TDATA) & 0xff; 2015 if ((reg & 0x0080) == 0 || (reg > 0xd8 && reg <= 0xff)) { |
2016 device_printf(sc->sis_self, | 2016 device_printf(sc->sis_dev, |
2017 "Applying short cable fix (reg=%x)\n", reg); 2018 CSR_WRITE_4(sc, NS_PHY_TDATA, 0x00e8); 2019 reg = CSR_READ_4(sc, NS_PHY_DSPCFG); 2020 SIS_SETBIT(sc, NS_PHY_DSPCFG, reg | 0x20); 2021 } 2022 CSR_WRITE_4(sc, NS_PHY_PAGE, 0); 2023 } 2024 --- 277 unchanged lines hidden --- | 2017 "Applying short cable fix (reg=%x)\n", reg); 2018 CSR_WRITE_4(sc, NS_PHY_TDATA, 0x00e8); 2019 reg = CSR_READ_4(sc, NS_PHY_DSPCFG); 2020 SIS_SETBIT(sc, NS_PHY_DSPCFG, reg | 0x20); 2021 } 2022 CSR_WRITE_4(sc, NS_PHY_PAGE, 0); 2023 } 2024 --- 277 unchanged lines hidden --- |