ukphy.c (213229) | ukphy.c (213364) |
---|---|
1/* $NetBSD: ukphy.c,v 1.2 1999/04/23 04:24:32 thorpej Exp $ */ 2 3/*- 4 * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, --- 41 unchanged lines hidden (view full) --- 50 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 51 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 52 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 53 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 54 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 55 */ 56 57#include <sys/cdefs.h> | 1/* $NetBSD: ukphy.c,v 1.2 1999/04/23 04:24:32 thorpej Exp $ */ 2 3/*- 4 * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, --- 41 unchanged lines hidden (view full) --- 50 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 51 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 52 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 53 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 54 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 55 */ 56 57#include <sys/cdefs.h> |
58__FBSDID("$FreeBSD: head/sys/dev/mii/ukphy.c 213229 2010-09-27 20:31:03Z marius $"); | 58__FBSDID("$FreeBSD: head/sys/dev/mii/ukphy.c 213364 2010-10-02 18:53:12Z marius $"); |
59 60/* 61 * driver for generic unknown PHYs 62 */ 63 64#include <sys/param.h> 65#include <sys/systm.h> 66#include <sys/kernel.h> --- 58 unchanged lines hidden (view full) --- 125 mii = ma->mii_data; 126 LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list); 127 128 if (bootverbose) 129 device_printf(dev, "OUI 0x%06x, model 0x%04x, rev. %d\n", 130 MII_OUI(ma->mii_id1, ma->mii_id2), 131 MII_MODEL(ma->mii_id2), MII_REV(ma->mii_id2)); 132 | 59 60/* 61 * driver for generic unknown PHYs 62 */ 63 64#include <sys/param.h> 65#include <sys/systm.h> 66#include <sys/kernel.h> --- 58 unchanged lines hidden (view full) --- 125 mii = ma->mii_data; 126 LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list); 127 128 if (bootverbose) 129 device_printf(dev, "OUI 0x%06x, model 0x%04x, rev. %d\n", 130 MII_OUI(ma->mii_id1, ma->mii_id2), 131 MII_MODEL(ma->mii_id2), MII_REV(ma->mii_id2)); 132 |
133 sc->mii_inst = mii->mii_instance; | 133 sc->mii_inst = mii->mii_instance++; |
134 sc->mii_phy = ma->mii_phyno; 135 sc->mii_service = ukphy_service; 136 sc->mii_pdata = mii; 137 | 134 sc->mii_phy = ma->mii_phyno; 135 sc->mii_service = ukphy_service; 136 sc->mii_pdata = mii; 137 |
138 mii->mii_instance++; 139 | |
140 mii_phy_reset(sc); 141 | 138 mii_phy_reset(sc); 139 |
142 sc->mii_capabilities = 143 PHY_READ(sc, MII_BMSR) & ma->mii_capmask; | 140 sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask; |
144 if (sc->mii_capabilities & BMSR_EXTSTAT) 145 sc->mii_extcapabilities = PHY_READ(sc, MII_EXTSR); 146 device_printf(dev, " "); 147 mii_phy_add_media(sc); 148 printf("\n"); 149 150 MIIBUS_MEDIAINIT(sc->mii_dev); 151 mii_phy_setmedia(sc); 152 153 return (0); 154} 155 156static int 157ukphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd) 158{ | 141 if (sc->mii_capabilities & BMSR_EXTSTAT) 142 sc->mii_extcapabilities = PHY_READ(sc, MII_EXTSR); 143 device_printf(dev, " "); 144 mii_phy_add_media(sc); 145 printf("\n"); 146 147 MIIBUS_MEDIAINIT(sc->mii_dev); 148 mii_phy_setmedia(sc); 149 150 return (0); 151} 152 153static int 154ukphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd) 155{ |
159 struct ifmedia_entry *ife = mii->mii_media.ifm_cur; 160 int reg; | |
161 162 switch (cmd) { 163 case MII_POLLSTAT: | 156 157 switch (cmd) { 158 case MII_POLLSTAT: |
164 /* 165 * If we're not polling our PHY instance, just return. 166 */ 167 if (IFM_INST(ife->ifm_media) != sc->mii_inst) 168 return (0); | |
169 break; 170 171 case MII_MEDIACHG: 172 /* | 159 break; 160 161 case MII_MEDIACHG: 162 /* |
173 * If the media indicates a different PHY instance, 174 * isolate ourselves. 175 */ 176 if (IFM_INST(ife->ifm_media) != sc->mii_inst) { 177 reg = PHY_READ(sc, MII_BMCR); 178 PHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); 179 return (0); 180 } 181 182 /* | |
183 * If the interface is not up, don't do anything. 184 */ 185 if ((mii->mii_ifp->if_flags & IFF_UP) == 0) 186 break; 187 188 mii_phy_setmedia(sc); 189 break; 190 191 case MII_TICK: | 163 * If the interface is not up, don't do anything. 164 */ 165 if ((mii->mii_ifp->if_flags & IFF_UP) == 0) 166 break; 167 168 mii_phy_setmedia(sc); 169 break; 170 171 case MII_TICK: |
192 /* 193 * If we're not currently selected, just return. 194 */ 195 if (IFM_INST(ife->ifm_media) != sc->mii_inst) 196 return (0); | |
197 if (mii_phy_tick(sc) == EJUSTRETURN) 198 return (0); 199 break; 200 } 201 202 /* Update the media status. */ 203 ukphy_status(sc); 204 205 /* Callback if something changed. */ 206 mii_phy_update(sc, cmd); 207 return (0); 208} | 172 if (mii_phy_tick(sc) == EJUSTRETURN) 173 return (0); 174 break; 175 } 176 177 /* Update the media status. */ 178 ukphy_status(sc); 179 180 /* Callback if something changed. */ 181 mii_phy_update(sc, cmd); 182 return (0); 183} |