1/*- 2 * Copyright (c) 2004 3 * Bill Paul <wpaul@windriver.com>. 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 --- 17 unchanged lines hidden (view full) --- 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 30 * THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33#include <sys/cdefs.h> |
34__FBSDID("$FreeBSD: head/sys/dev/mii/ciphy.c 215297 2010-11-14 13:26:10Z marius $"); |
35 36/* 37 * Driver for the Cicada/Vitesse CS/VSC8xxx 10/100/1000 copper PHY. 38 */ 39 40#include <sys/param.h> 41#include <sys/systm.h> 42#include <sys/kernel.h> --- 117 unchanged lines hidden (view full) --- 160 case IFM_AUTO: 161#ifdef foo 162 /* 163 * If we're already in auto mode, just return. 164 */ 165 if (PHY_READ(sc, CIPHY_MII_BMCR) & CIPHY_BMCR_AUTOEN) 166 return (0); 167#endif |
168 (void)mii_phy_auto(sc); |
169 break; 170 case IFM_1000_T: 171 speed = CIPHY_S1000; 172 goto setit; 173 case IFM_100_TX: 174 speed = CIPHY_S100; 175 goto setit; 176 case IFM_10_T: --- 8 unchanged lines hidden (view full) --- 185 186 PHY_WRITE(sc, CIPHY_MII_1000CTL, 0); 187 PHY_WRITE(sc, CIPHY_MII_BMCR, speed); 188 PHY_WRITE(sc, CIPHY_MII_ANAR, CIPHY_SEL_TYPE); 189 190 if (IFM_SUBTYPE(ife->ifm_media) != IFM_1000_T) 191 break; 192 |
193 gig |= CIPHY_1000CTL_MSE; 194 if ((ife->ifm_media & IFM_ETH_MASTER) != 0) 195 gig |= CIPHY_1000CTL_MSC; |
196 PHY_WRITE(sc, CIPHY_MII_1000CTL, gig); 197 PHY_WRITE(sc, CIPHY_MII_BMCR, |
198 speed | CIPHY_BMCR_AUTOEN | CIPHY_BMCR_STARTNEG); |
199 break; 200 case IFM_NONE: |
201 PHY_WRITE(sc, MII_BMCR, BMCR_ISO | BMCR_PDOWN); |
202 break; |
203 default: 204 return (EINVAL); 205 } 206 break; 207 208 case MII_TICK: 209 /* 210 * Is the interface even up? --- 89 unchanged lines hidden (view full) --- 300 bmsr & CIPHY_AUXCSR_SPEED); 301 break; 302 } 303 304 if (bmsr & CIPHY_AUXCSR_FDX) 305 mii->mii_media_active |= IFM_FDX; 306 else 307 mii->mii_media_active |= IFM_HDX; |
308 309 if ((IFM_SUBTYPE(mii->mii_media_active) == IFM_1000_T) && 310 (PHY_READ(sc, CIPHY_MII_1000STS) & CIPHY_1000STS_MSR) != 0) 311 mii->mii_media_active |= IFM_ETH_MASTER; |
312} 313 314static void 315ciphy_reset(struct mii_softc *sc) 316{ 317 318 mii_phy_reset(sc); 319 DELAY(1000); --- 82 unchanged lines hidden --- |