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