ip1000phy.c (213364) | ip1000phy.c (213893) |
---|---|
1/*- 2 * Copyright (c) 2006, Pyun YongHyeon <yongari@FreeBSD.org> 3 * 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 * 1. Redistributions of source code must retain the above copyright --- 13 unchanged lines hidden (view full) --- 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * 27 */ 28 29#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2006, Pyun YongHyeon <yongari@FreeBSD.org> 3 * 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 * 1. Redistributions of source code must retain the above copyright --- 13 unchanged lines hidden (view full) --- 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * 27 */ 28 29#include <sys/cdefs.h> |
30__FBSDID("$FreeBSD: head/sys/dev/mii/ip1000phy.c 213364 2010-10-02 18:53:12Z marius $"); | 30__FBSDID("$FreeBSD: head/sys/dev/mii/ip1000phy.c 213893 2010-10-15 14:52:11Z marius $"); |
31 32/* 33 * Driver for the IC Plus IP1000A/IP1001 10/100/1000 PHY. 34 */ 35 36#include <sys/param.h> 37#include <sys/systm.h> 38#include <sys/kernel.h> --- 70 unchanged lines hidden (view full) --- 109 110 isc = device_get_softc(dev); 111 sc = &isc->mii_sc; 112 ma = device_get_ivars(dev); 113 sc->mii_dev = device_get_parent(dev); 114 mii = ma->mii_data; 115 LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list); 116 | 31 32/* 33 * Driver for the IC Plus IP1000A/IP1001 10/100/1000 PHY. 34 */ 35 36#include <sys/param.h> 37#include <sys/systm.h> 38#include <sys/kernel.h> --- 70 unchanged lines hidden (view full) --- 109 110 isc = device_get_softc(dev); 111 sc = &isc->mii_sc; 112 ma = device_get_ivars(dev); 113 sc->mii_dev = device_get_parent(dev); 114 mii = ma->mii_data; 115 LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list); 116 |
117 sc->mii_flags = miibus_get_flags(dev); |
|
117 sc->mii_inst = mii->mii_instance++; 118 sc->mii_phy = ma->mii_phyno; 119 sc->mii_service = ip1000phy_service; 120 sc->mii_pdata = mii; 121 122 sc->mii_flags |= MIIF_NOISOLATE; 123 124 isc->model = MII_MODEL(ma->mii_id2); 125 isc->revision = MII_REV(ma->mii_id2); | 118 sc->mii_inst = mii->mii_instance++; 119 sc->mii_phy = ma->mii_phyno; 120 sc->mii_service = ip1000phy_service; 121 sc->mii_pdata = mii; 122 123 sc->mii_flags |= MIIF_NOISOLATE; 124 125 isc->model = MII_MODEL(ma->mii_id2); 126 isc->revision = MII_REV(ma->mii_id2); |
127 if (isc->model == MII_MODEL_ICPLUS_IP1000A && 128 strcmp(mii->mii_ifp->if_dname, "stge") == 0 && 129 (sc->mii_flags & MIIF_MACPRIV0) != 0) 130 sc->mii_flags |= MIIF_PHYPRIV0; |
|
126 127 sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask; 128 if (sc->mii_capabilities & BMSR_EXTSTAT) 129 sc->mii_extcapabilities = PHY_READ(sc, MII_EXTSR); 130 device_printf(dev, " "); 131 132 ip1000phy_reset(sc); 133 mii_phy_add_media(sc); --- 273 unchanged lines hidden (view full) --- 407 PHY_WRITE(sc, 9, 0x0700); 408 409 DELAY(50); 410} 411 412static void 413ip1000phy_reset(struct mii_softc *sc) 414{ | 131 132 sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask; 133 if (sc->mii_capabilities & BMSR_EXTSTAT) 134 sc->mii_extcapabilities = PHY_READ(sc, MII_EXTSR); 135 device_printf(dev, " "); 136 137 ip1000phy_reset(sc); 138 mii_phy_add_media(sc); --- 273 unchanged lines hidden (view full) --- 412 PHY_WRITE(sc, 9, 0x0700); 413 414 DELAY(50); 415} 416 417static void 418ip1000phy_reset(struct mii_softc *sc) 419{ |
415 struct ip1000phy_softc *isc; 416 struct stge_softc *stge_sc; 417 struct mii_data *mii; | |
418 uint32_t reg; 419 | 420 uint32_t reg; 421 |
420 isc = (struct ip1000phy_softc *)sc; | |
421 mii_phy_reset(sc); 422 423 /* clear autoneg/full-duplex as we don't want it after reset */ 424 reg = PHY_READ(sc, IP1000PHY_MII_BMCR); 425 reg &= ~(IP1000PHY_BMCR_AUTOEN | IP1000PHY_BMCR_FDX); 426 PHY_WRITE(sc, MII_BMCR, reg); 427 | 422 mii_phy_reset(sc); 423 424 /* clear autoneg/full-duplex as we don't want it after reset */ 425 reg = PHY_READ(sc, IP1000PHY_MII_BMCR); 426 reg &= ~(IP1000PHY_BMCR_AUTOEN | IP1000PHY_BMCR_FDX); 427 PHY_WRITE(sc, MII_BMCR, reg); 428 |
428 mii = sc->mii_pdata; 429 /* 430 * XXX There should be more general way to pass PHY specific 431 * data via mii interface. 432 */ 433 if (isc->model == MII_MODEL_ICPLUS_IP1000A && 434 strcmp(mii->mii_ifp->if_dname, "stge") == 0) { 435 stge_sc = mii->mii_ifp->if_softc; 436 if (stge_sc->sc_rev >= 0x40 && stge_sc->sc_rev <= 0x4e) 437 ip1000phy_load_dspcode(sc); 438 } | 429 if ((sc->mii_flags & MIIF_PHYPRIV0) != 0) 430 ip1000phy_load_dspcode(sc); |
439} | 431} |