Deleted Added
full compact
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 ---