1/* 2 * Copyright (c) 2000 3 * Bill Paul <wpaul@ee.columbia.edu>. 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 --- 15 unchanged lines hidden (view full) --- 24 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 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 * $FreeBSD: head/sys/dev/mii/brgphy.c 83597 2001-09-18 00:31:19Z wpaul $ |
33 */ 34 35/* 36 * Driver for the Broadcom BCR5400 1000baseTX PHY. Speed is always 37 * 1000mbps; all we need to negotiate here is full or half duplex. 38 */ 39 40#include <sys/param.h> --- 13 unchanged lines hidden (view full) --- 54#include <dev/mii/miidevs.h> 55 56#include <dev/mii/brgphyreg.h> 57 58#include "miibus_if.h" 59 60#if !defined(lint) 61static const char rcsid[] = |
62 "$FreeBSD: head/sys/dev/mii/brgphy.c 83597 2001-09-18 00:31:19Z wpaul $"; |
63#endif 64 65static int brgphy_probe __P((device_t)); 66static int brgphy_attach __P((device_t)); 67static int brgphy_detach __P((device_t)); 68 69static device_method_t brgphy_methods[] = { 70 /* device interface */ --- 204 unchanged lines hidden (view full) --- 275 if ((mii->mii_ifp->if_flags & IFF_LINK0)) { 276 PHY_WRITE(sc, BRGPHY_MII_1000CTL, 277 BRGPHY_1000CTL_MSE|BRGPHY_1000CTL_MSC); 278 } else { 279 PHY_WRITE(sc, BRGPHY_MII_1000CTL, 280 BRGPHY_1000CTL_MSE); 281 } 282 break; |
283#ifdef foo 284 case IFM_NONE: 285 PHY_WRITE(sc, MII_BMCR, BMCR_ISO|BMCR_PDOWN); 286 break; 287#endif |
288 case IFM_100_T4: 289 default: 290 return (EINVAL); 291 } 292 break; 293 294 case MII_TICK: 295 /* --- 111 unchanged lines hidden (view full) --- 407} 408 409 410static int 411brgphy_mii_phy_auto(mii, waitfor) 412 struct mii_softc *mii; 413 int waitfor; 414{ |
415 int bmsr, ktcr = 0, i; |
416 417 if ((mii->mii_flags & MIIF_DOINGAUTO) == 0) { |
418 mii_phy_reset(mii); 419 PHY_WRITE(mii, BRGPHY_MII_BMCR, 0); 420 DELAY(1000); 421 ktcr = PHY_READ(mii, BRGPHY_MII_1000CTL); 422 PHY_WRITE(mii, BRGPHY_MII_1000CTL, ktcr | |
423 BRGPHY_1000CTL_AFD|BRGPHY_1000CTL_AHD); |
424 ktcr = PHY_READ(mii, BRGPHY_MII_1000CTL); 425 DELAY(1000); 426 PHY_WRITE(mii, BRGPHY_MII_ANAR, 427 BMSR_MEDIA_TO_ANAR(mii->mii_capabilities) | ANAR_CSMA); 428 DELAY(1000); |
429 PHY_WRITE(mii, BRGPHY_MII_BMCR, 430 BRGPHY_BMCR_AUTOEN | BRGPHY_BMCR_STARTNEG); 431 PHY_WRITE(mii, BRGPHY_MII_IMR, 0xFF00); 432 } 433 434 if (waitfor) { 435 /* Wait 500ms for it to complete. */ 436 for (i = 0; i < 500; i++) { --- 30 unchanged lines hidden --- |