From 844622de9cc8c0987fc992f77573ae4573e149b9 Mon Sep 17 00:00:00 2001 From: thorpej Date: Wed, 4 Nov 1998 22:15:40 +0000 Subject: [PATCH] Define and use generic PHY read/write reg macros. --- sys/dev/mii/exphy.c | 39 +++++++++++++---------------- sys/dev/mii/icsphy.c | 43 ++++++++++++++------------------ sys/dev/mii/inphy.c | 47 ++++++++++++++++------------------- sys/dev/mii/lxtphy.c | 41 +++++++++++++----------------- sys/dev/mii/miivar.h | 10 +++++++- sys/dev/mii/nsphy.c | 57 +++++++++++++++++++----------------------- sys/dev/mii/qsphy.c | 45 +++++++++++++++------------------ sys/dev/mii/sqphy.c | 45 +++++++++++++++------------------ sys/dev/mii/tlphy.c | 59 ++++++++++++++++++++------------------------ 9 files changed, 175 insertions(+), 211 deletions(-) diff --git a/sys/dev/mii/exphy.c b/sys/dev/mii/exphy.c index 6ccd934b0c43..e630d783470d 100644 --- a/sys/dev/mii/exphy.c +++ b/sys/dev/mii/exphy.c @@ -1,4 +1,4 @@ -/* $NetBSD: exphy.c,v 1.9 1998/11/03 00:18:18 thorpej Exp $ */ +/* $NetBSD: exphy.c,v 1.10 1998/11/04 22:15:40 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -97,14 +97,6 @@ struct cfattach exphy_ca = { sizeof(struct exphy_softc), exphymatch, exphyattach }; -#define EXPHY_READ(sc, reg) \ - (*(sc)->sc_mii.mii_pdata->mii_readreg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg)) - -#define EXPHY_WRITE(sc, reg, val) \ - (*(sc)->sc_mii.mii_pdata->mii_writereg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg), (val)) - int exphy_service __P((struct mii_softc *, struct mii_data *, int)); void exphy_reset __P((struct exphy_softc *)); void exphy_auto __P((struct exphy_softc *)); @@ -172,7 +164,7 @@ exphyattach(parent, self, aux) exphy_reset(sc); - sc->sc_capabilities = EXPHY_READ(sc, MII_BMSR) & ma->mii_capmask; + sc->sc_capabilities = PHY_READ(&sc->sc_mii, MII_BMSR) & ma->mii_capmask; printf("%s: ", sc->sc_mii.mii_dev.dv_xname); if ((sc->sc_capabilities & BMSR_MEDIAMASK) == 0) printf("no media present"); @@ -213,7 +205,7 @@ exphy_service(self, mii, cmd) /* * If we're already in auto mode, just return. */ - if (EXPHY_READ(sc, MII_BMCR) & BMCR_AUTOEN) + if (PHY_READ(&sc->sc_mii, MII_BMCR) & BMCR_AUTOEN) return (0); exphy_auto(sc); break; @@ -226,8 +218,9 @@ exphy_service(self, mii, cmd) /* * BMCR data is stored in the ifmedia entry. */ - EXPHY_WRITE(sc, MII_ANAR, mii_anar(ife->ifm_media)); - EXPHY_WRITE(sc, MII_BMCR, ife->ifm_data); + PHY_WRITE(&sc->sc_mii, MII_ANAR, + mii_anar(ife->ifm_media)); + PHY_WRITE(&sc->sc_mii, MII_BMCR, ife->ifm_data); } break; @@ -272,11 +265,12 @@ exphy_status(sc) mii->mii_media_status = IFM_AVALID; mii->mii_media_active = IFM_ETHER; - bmsr = EXPHY_READ(sc, MII_BMSR) | EXPHY_READ(sc, MII_BMSR); + bmsr = PHY_READ(&sc->sc_mii, MII_BMSR) | + PHY_READ(&sc->sc_mii, MII_BMSR); if (bmsr & BMSR_LINK) mii->mii_media_status |= IFM_ACTIVE; - bmcr = EXPHY_READ(sc, MII_BMCR); + bmcr = PHY_READ(&sc->sc_mii, MII_BMCR); if (bmcr & BMCR_ISO) { mii->mii_media_active |= IFM_NONE; mii->mii_media_status = 0; @@ -298,7 +292,8 @@ exphy_status(sc) return; } - anlpar = EXPHY_READ(sc, MII_ANAR) & EXPHY_READ(sc, MII_ANLPAR); + anlpar = PHY_READ(&sc->sc_mii, MII_ANAR) & + PHY_READ(&sc->sc_mii, MII_ANLPAR); if (anlpar & ANLPAR_T4) mii->mii_media_active |= IFM_100_T4; else if (anlpar & ANLPAR_TX_FD) @@ -327,13 +322,13 @@ exphy_auto(sc) { int bmsr, i; - EXPHY_WRITE(sc, MII_ANAR, + PHY_WRITE(&sc->sc_mii, MII_ANAR, BMSR_MEDIA_TO_ANAR(sc->sc_capabilities) | ANAR_CSMA); - EXPHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); /* Wait 500ms for it to complete. */ for (i = 0; i < 500; i++) { - if ((bmsr = EXPHY_READ(sc, MII_BMSR)) & BMSR_ACOMP) + if ((bmsr = PHY_READ(&sc->sc_mii, MII_BMSR)) & BMSR_ACOMP) return; delay(1000); } @@ -350,11 +345,11 @@ exphy_reset(sc) { int reg, i; - EXPHY_WRITE(sc, MII_BMCR, BMCR_RESET); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_RESET); /* Wait 100ms for it to complete. */ for (i = 0; i < 100; i++) { - reg = EXPHY_READ(sc, MII_BMCR); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); if ((reg & BMCR_RESET) == 0) break; delay(1000); @@ -364,5 +359,5 @@ exphy_reset(sc) * XXX 3Com PHY doesn't set the BMCR properly after * XXX reset, which breaks autonegotiation. */ - EXPHY_WRITE(sc, MII_BMCR, BMCR_S100|BMCR_AUTOEN|BMCR_FDX); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_S100|BMCR_AUTOEN|BMCR_FDX); } diff --git a/sys/dev/mii/icsphy.c b/sys/dev/mii/icsphy.c index 085094f73ebb..8471bb7ccc99 100644 --- a/sys/dev/mii/icsphy.c +++ b/sys/dev/mii/icsphy.c @@ -1,4 +1,4 @@ -/* $NetBSD: icsphy.c,v 1.1 1998/11/02 23:46:20 thorpej Exp $ */ +/* $NetBSD: icsphy.c,v 1.2 1998/11/04 22:15:40 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -100,14 +100,6 @@ struct cfattach icsphy_ca = { sizeof(struct icsphy_softc), icsphymatch, icsphyattach }; -#define ICSPHY_READ(sc, reg) \ - (*(sc)->sc_mii.mii_pdata->mii_readreg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg)) - -#define ICSPHY_WRITE(sc, reg, val) \ - (*(sc)->sc_mii.mii_pdata->mii_writereg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg), (val)) - int icsphy_service __P((struct mii_softc *, struct mii_data *, int)); void icsphy_reset __P((struct icsphy_softc *)); void icsphy_auto __P((struct icsphy_softc *)); @@ -154,7 +146,7 @@ icsphyattach(parent, self, aux) icsphy_reset(sc); - sc->sc_capabilities = ICSPHY_READ(sc, MII_BMSR) & ma->mii_capmask; + sc->sc_capabilities = PHY_READ(&sc->sc_mii, MII_BMSR) & ma->mii_capmask; printf("%s: ", sc->sc_mii.mii_dev.dv_xname); if ((sc->sc_capabilities & BMSR_MEDIAMASK) == 0) printf("no media present"); @@ -189,8 +181,8 @@ icsphy_service(self, mii, cmd) * isolate ourselves. */ if (IFM_INST(ife->ifm_media) != sc->sc_mii.mii_inst) { - reg = ICSPHY_READ(sc, MII_BMCR); - ICSPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); return (0); } @@ -205,7 +197,7 @@ icsphy_service(self, mii, cmd) /* * If we're already in auto mode, just return. */ - if (ICSPHY_READ(sc, MII_BMCR) & BMCR_AUTOEN) + if (PHY_READ(&sc->sc_mii, MII_BMCR) & BMCR_AUTOEN) return (0); icsphy_auto(sc); break; @@ -218,8 +210,9 @@ icsphy_service(self, mii, cmd) /* * BMCR data is stored in the ifmedia entry. */ - ICSPHY_WRITE(sc, MII_ANAR, mii_anar(ife->ifm_media)); - ICSPHY_WRITE(sc, MII_BMCR, ife->ifm_data); + PHY_WRITE(&sc->sc_mii, MII_ANAR, + mii_anar(ife->ifm_media)); + PHY_WRITE(&sc->sc_mii, MII_BMCR, ife->ifm_data); } break; @@ -275,13 +268,13 @@ icsphy_status(sc) * and we have to read it twice to unlatch it anyhow. This * gives us fewer register reads. */ - qpr = ICSPHY_READ(sc, MII_ICSPHY_QPR); /* unlatch */ - qpr = ICSPHY_READ(sc, MII_ICSPHY_QPR); /* real value */ + qpr = PHY_READ(&sc->sc_mii, MII_ICSPHY_QPR); /* unlatch */ + qpr = PHY_READ(&sc->sc_mii, MII_ICSPHY_QPR); /* real value */ if (qpr & QPR_LINK) mii->mii_media_status |= IFM_ACTIVE; - bmcr = ICSPHY_READ(sc, MII_BMCR); + bmcr = PHY_READ(&sc->sc_mii, MII_BMCR); if (bmcr & BMCR_ISO) { mii->mii_media_active |= IFM_NONE; mii->mii_media_status = 0; @@ -311,13 +304,13 @@ icsphy_auto(sc) { int bmsr, i; - ICSPHY_WRITE(sc, MII_ANAR, + PHY_WRITE(&sc->sc_mii, MII_ANAR, BMSR_MEDIA_TO_ANAR(sc->sc_capabilities) | ANAR_CSMA); - ICSPHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); /* Wait 500ms for it to complete. */ for (i = 0; i < 500; i++) { - if ((bmsr = ICSPHY_READ(sc, MII_BMSR)) & BMSR_ACOMP) + if ((bmsr = PHY_READ(&sc->sc_mii, MII_BMSR)) & BMSR_ACOMP) return; delay(1000); } @@ -334,11 +327,11 @@ icsphy_reset(sc) { int reg, i; - ICSPHY_WRITE(sc, MII_BMCR, BMCR_RESET|BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_RESET|BMCR_ISO); /* Wait 100ms for it to complete. */ for (i = 0; i < 100; i++) { - reg = ICSPHY_READ(sc, MII_BMCR); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); if ((reg & BMCR_RESET) == 0) break; delay(1000); @@ -346,7 +339,7 @@ icsphy_reset(sc) /* Make sure the PHY is isolated. */ if (sc->sc_mii.mii_inst != 0) - ICSPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); - ICSPHY_WRITE(sc, MII_ICSPHY_ECR2, ECR2_10TPROT|ECR2_Q10T); + PHY_WRITE(&sc->sc_mii, MII_ICSPHY_ECR2, ECR2_10TPROT|ECR2_Q10T); } diff --git a/sys/dev/mii/inphy.c b/sys/dev/mii/inphy.c index 59642266bdf8..6ceb8e4facf8 100644 --- a/sys/dev/mii/inphy.c +++ b/sys/dev/mii/inphy.c @@ -1,4 +1,4 @@ -/* $NetBSD: inphy.c,v 1.4 1998/11/02 22:31:36 thorpej Exp $ */ +/* $NetBSD: inphy.c,v 1.5 1998/11/04 22:15:40 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -101,14 +101,6 @@ struct cfattach inphy_ca = { sizeof(struct inphy_softc), inphymatch, inphyattach }; -#define INPHY_READ(sc, reg) \ - (*(sc)->sc_mii.mii_pdata->mii_readreg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg)) - -#define INPHY_WRITE(sc, reg, val) \ - (*(sc)->sc_mii.mii_pdata->mii_writereg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg), (val)) - int inphy_service __P((struct mii_softc *, struct mii_data *, int)); void inphy_reset __P((struct inphy_softc *)); void inphy_auto __P((struct inphy_softc *)); @@ -158,7 +150,7 @@ inphyattach(parent, self, aux) inphy_reset(sc); - sc->sc_capabilities = INPHY_READ(sc, MII_BMSR) & ma->mii_capmask; + sc->sc_capabilities = PHY_READ(&sc->sc_mii, MII_BMSR) & ma->mii_capmask; printf("%s: ", sc->sc_mii.mii_dev.dv_xname); if ((sc->sc_capabilities & BMSR_MEDIAMASK) == 0) printf("no media present"); @@ -193,8 +185,8 @@ inphy_service(self, mii, cmd) * isolate ourselves. */ if (IFM_INST(ife->ifm_media) != sc->sc_mii.mii_inst) { - reg = INPHY_READ(sc, MII_BMCR); - INPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); return (0); } @@ -209,7 +201,7 @@ inphy_service(self, mii, cmd) /* * If we're already in auto mode, just return. */ - if (INPHY_READ(sc, MII_BMCR) & BMCR_AUTOEN) + if (PHY_READ(&sc->sc_mii, MII_BMCR) & BMCR_AUTOEN) return (0); inphy_auto(sc); break; @@ -222,8 +214,9 @@ inphy_service(self, mii, cmd) /* * BMCR data is stored in the ifmedia entry. */ - INPHY_WRITE(sc, MII_ANAR, mii_anar(ife->ifm_media)); - INPHY_WRITE(sc, MII_BMCR, ife->ifm_data); + PHY_WRITE(&sc->sc_mii, MII_ANAR, + mii_anar(ife->ifm_media)); + PHY_WRITE(&sc->sc_mii, MII_BMCR, ife->ifm_data); } break; @@ -251,7 +244,8 @@ inphy_service(self, mii, cmd) * need to restart the autonegotiation process. Read * the BMSR twice in case it's latched. */ - reg = INPHY_READ(sc, MII_BMSR) | INPHY_READ(sc, MII_BMSR); + reg = PHY_READ(&sc->sc_mii, MII_BMSR) | + PHY_READ(&sc->sc_mii, MII_BMSR); if (reg & BMSR_LINK) return (0); @@ -288,11 +282,12 @@ inphy_status(sc) mii->mii_media_status = IFM_AVALID; mii->mii_media_active = IFM_ETHER; - bmsr = INPHY_READ(sc, MII_BMSR) | INPHY_READ(sc, MII_BMSR); + bmsr = PHY_READ(&sc->sc_mii, MII_BMSR) | + PHY_READ(&sc->sc_mii, MII_BMSR); if (bmsr & BMSR_LINK) mii->mii_media_status |= IFM_ACTIVE; - bmcr = INPHY_READ(sc, MII_BMCR); + bmcr = PHY_READ(&sc->sc_mii, MII_BMCR); if (bmcr & BMCR_ISO) { mii->mii_media_active |= IFM_NONE; mii->mii_media_status = 0; @@ -308,7 +303,7 @@ inphy_status(sc) mii->mii_media_active |= IFM_NONE; return; } - scr = INPHY_READ(sc, MII_INPHY_SCR); + scr = PHY_READ(&sc->sc_mii, MII_INPHY_SCR); if (scr & SCR_T4) mii->mii_media_active |= IFM_100_T4; else if (scr & SCR_S100) @@ -333,13 +328,13 @@ inphy_auto(sc) { int bmsr, i; - INPHY_WRITE(sc, MII_ANAR, + PHY_WRITE(&sc->sc_mii, MII_ANAR, BMSR_MEDIA_TO_ANAR(sc->sc_capabilities) | ANAR_CSMA); - INPHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); /* Wait 500ms for it to complete. */ for (i = 0; i < 500; i++) { - if ((bmsr = INPHY_READ(sc, MII_BMSR)) & BMSR_ACOMP) + if ((bmsr = PHY_READ(&sc->sc_mii, MII_BMSR)) & BMSR_ACOMP) return; delay(1000); } @@ -360,13 +355,13 @@ inphy_reset(sc) * The i82557 wedges if we isolate all of its PHYs! */ if (sc->sc_mii.mii_inst == 0) - INPHY_WRITE(sc, MII_BMCR, BMCR_RESET); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_RESET); else - INPHY_WRITE(sc, MII_BMCR, BMCR_RESET|BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_RESET|BMCR_ISO); /* Wait 100ms for it to complete. */ for (i = 0; i < 100; i++) { - reg = INPHY_READ(sc, MII_BMCR); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); if ((reg & BMCR_RESET) == 0) break; delay(1000); @@ -374,5 +369,5 @@ inphy_reset(sc) /* Make sure the PHY is isolated. */ if (sc->sc_mii.mii_inst != 0) - INPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); } diff --git a/sys/dev/mii/lxtphy.c b/sys/dev/mii/lxtphy.c index 71db294c63b3..debd8a5898c8 100644 --- a/sys/dev/mii/lxtphy.c +++ b/sys/dev/mii/lxtphy.c @@ -1,4 +1,4 @@ -/* $NetBSD: lxtphy.c,v 1.2 1998/11/02 22:31:37 thorpej Exp $ */ +/* $NetBSD: lxtphy.c,v 1.3 1998/11/04 22:15:40 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -101,14 +101,6 @@ struct cfattach lxtphy_ca = { sizeof(struct lxtphy_softc), lxtphymatch, lxtphyattach }; -#define LXTPHY_READ(sc, reg) \ - (*(sc)->sc_mii.mii_pdata->mii_readreg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg)) - -#define LXTPHY_WRITE(sc, reg, val) \ - (*(sc)->sc_mii.mii_pdata->mii_writereg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg), (val)) - int lxtphy_service __P((struct mii_softc *, struct mii_data *, int)); void lxtphy_reset __P((struct lxtphy_softc *)); void lxtphy_auto __P((struct lxtphy_softc *)); @@ -155,7 +147,7 @@ lxtphyattach(parent, self, aux) lxtphy_reset(sc); - sc->sc_capabilities = LXTPHY_READ(sc, MII_BMSR) & ma->mii_capmask; + sc->sc_capabilities = PHY_READ(&sc->sc_mii, MII_BMSR) & ma->mii_capmask; printf("%s: ", sc->sc_mii.mii_dev.dv_xname); if ((sc->sc_capabilities & BMSR_MEDIAMASK) == 0) printf("no media present"); @@ -190,8 +182,8 @@ lxtphy_service(self, mii, cmd) * isolate ourselves. */ if (IFM_INST(ife->ifm_media) != sc->sc_mii.mii_inst) { - reg = LXTPHY_READ(sc, MII_BMCR); - LXTPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); return (0); } @@ -206,7 +198,7 @@ lxtphy_service(self, mii, cmd) /* * If we're already in auto mode, just return. */ - if (LXTPHY_READ(sc, MII_BMCR) & BMCR_AUTOEN) + if (PHY_READ(&sc->sc_mii, MII_BMCR) & BMCR_AUTOEN) return (0); lxtphy_auto(sc); break; @@ -219,8 +211,9 @@ lxtphy_service(self, mii, cmd) /* * BMCR data is stored in the ifmedia entry. */ - LXTPHY_WRITE(sc, MII_ANAR, mii_anar(ife->ifm_media)); - LXTPHY_WRITE(sc, MII_BMCR, ife->ifm_data); + PHY_WRITE(&sc->sc_mii, MII_ANAR, + mii_anar(ife->ifm_media)); + PHY_WRITE(&sc->sc_mii, MII_BMCR, ife->ifm_data); } break; @@ -250,7 +243,7 @@ lxtphy_service(self, mii, cmd) * link indication is dynamic, not latched, so only * one register read is required. */ - reg = LXTPHY_READ(sc, MII_LXTPHY_CSR); + reg = PHY_READ(&sc->sc_mii, MII_LXTPHY_CSR); if (reg & CSR_LINK) return (0); @@ -292,11 +285,11 @@ lxtphy_status(sc) * for media type anyhow, and the link status in the CSR * doens't latch, so fewer register reads are required. */ - csr = LXTPHY_READ(sc, MII_LXTPHY_CSR); + csr = PHY_READ(&sc->sc_mii, MII_LXTPHY_CSR); if (csr & CSR_LINK) mii->mii_media_status |= IFM_ACTIVE; - bmcr = LXTPHY_READ(sc, MII_BMCR); + bmcr = PHY_READ(&sc->sc_mii, MII_BMCR); if (bmcr & BMCR_ISO) { mii->mii_media_active |= IFM_NONE; mii->mii_media_status = 0; @@ -326,9 +319,9 @@ lxtphy_auto(sc) { int csr, i; - LXTPHY_WRITE(sc, MII_ANAR, + PHY_WRITE(&sc->sc_mii, MII_ANAR, BMSR_MEDIA_TO_ANAR(sc->sc_capabilities) | ANAR_CSMA); - LXTPHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); /* Wait 500ms for it to complete. */ for (i = 0; i < 500; i++) { @@ -336,7 +329,7 @@ lxtphy_auto(sc) * Again, use the LXT CSR rather than BMSR, since it * doesn't latch. */ - if ((csr = LXTPHY_READ(sc, MII_LXTPHY_CSR)) & CSR_ACOMP) + if ((csr = PHY_READ(&sc->sc_mii, MII_LXTPHY_CSR)) & CSR_ACOMP) return; delay(1000); } @@ -353,11 +346,11 @@ lxtphy_reset(sc) { int reg, i; - LXTPHY_WRITE(sc, MII_BMCR, BMCR_RESET|BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_RESET|BMCR_ISO); /* Wait 100ms for it to complete. */ for (i = 0; i < 100; i++) { - reg = LXTPHY_READ(sc, MII_BMCR); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); if ((reg & BMCR_RESET) == 0) break; delay(1000); @@ -365,5 +358,5 @@ lxtphy_reset(sc) /* Make sure the PHY is isolated. */ if (sc->sc_mii.mii_inst != 0) - LXTPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); } diff --git a/sys/dev/mii/miivar.h b/sys/dev/mii/miivar.h index 04b0d692cfa4..11c0d92df9e7 100644 --- a/sys/dev/mii/miivar.h +++ b/sys/dev/mii/miivar.h @@ -1,4 +1,4 @@ -/* $NetBSD: miivar.h,v 1.1 1998/08/10 23:55:18 thorpej Exp $ */ +/* $NetBSD: miivar.h,v 1.2 1998/11/04 22:15:41 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -136,6 +136,14 @@ typedef struct mii_attach_args mii_attach_args_t; #ifdef _KERNEL #include "locators.h" +#define PHY_READ(p, r) \ + (*(p)->mii_pdata->mii_readreg)((p)->mii_dev.dv_parent, \ + (p)->mii_phy, (r)) + +#define PHY_WRITE(p, r, v) \ + (*(p)->mii_pdata->mii_writereg)((p)->mii_dev.dv_parent, \ + (p)->mii_phy, (r), (v)) + int mii_anar __P((int)); int mii_mediachg __P((struct mii_data *)); void mii_tick __P((struct mii_data *)); diff --git a/sys/dev/mii/nsphy.c b/sys/dev/mii/nsphy.c index f53e1b51f179..9f69c67f6425 100644 --- a/sys/dev/mii/nsphy.c +++ b/sys/dev/mii/nsphy.c @@ -1,4 +1,4 @@ -/* $NetBSD: nsphy.c,v 1.10 1998/11/02 22:31:37 thorpej Exp $ */ +/* $NetBSD: nsphy.c,v 1.11 1998/11/04 22:15:40 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -101,14 +101,6 @@ struct cfattach nsphy_ca = { sizeof(struct nsphy_softc), nsphymatch, nsphyattach }; -#define NSPHY_READ(sc, reg) \ - (*(sc)->sc_mii.mii_pdata->mii_readreg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg)) - -#define NSPHY_WRITE(sc, reg, val) \ - (*(sc)->sc_mii.mii_pdata->mii_writereg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg), (val)) - int nsphy_service __P((struct mii_softc *, struct mii_data *, int)); void nsphy_reset __P((struct nsphy_softc *)); void nsphy_auto __P((struct nsphy_softc *)); @@ -158,7 +150,7 @@ nsphyattach(parent, self, aux) nsphy_reset(sc); - sc->sc_capabilities = NSPHY_READ(sc, MII_BMSR) & ma->mii_capmask; + sc->sc_capabilities = PHY_READ(&sc->sc_mii, MII_BMSR) & ma->mii_capmask; printf("%s: ", sc->sc_mii.mii_dev.dv_xname); if ((sc->sc_capabilities & BMSR_MEDIAMASK) == 0) printf("no media present"); @@ -193,8 +185,8 @@ nsphy_service(self, mii, cmd) * isolate ourselves. */ if (IFM_INST(ife->ifm_media) != sc->sc_mii.mii_inst) { - reg = NSPHY_READ(sc, MII_BMCR); - NSPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); return (0); } @@ -204,7 +196,7 @@ nsphy_service(self, mii, cmd) if ((mii->mii_ifp->if_flags & IFF_UP) == 0) break; - reg = NSPHY_READ(sc, MII_NSPHY_PCR); + reg = PHY_READ(&sc->sc_mii, MII_NSPHY_PCR); /* * Set up the PCR to use LED4 to indicate full-duplex @@ -235,14 +227,14 @@ nsphy_service(self, mii, cmd) reg |= 0x0100 | 0x0400; #endif - NSPHY_WRITE(sc, MII_NSPHY_PCR, reg); + PHY_WRITE(&sc->sc_mii, MII_NSPHY_PCR, reg); switch (IFM_SUBTYPE(ife->ifm_media)) { case IFM_AUTO: /* * If we're already in auto mode, just return. */ - if (NSPHY_READ(sc, MII_BMCR) & BMCR_AUTOEN) + if (PHY_READ(&sc->sc_mii, MII_BMCR) & BMCR_AUTOEN) return (0); nsphy_auto(sc); break; @@ -255,8 +247,9 @@ nsphy_service(self, mii, cmd) /* * BMCR data is stored in the ifmedia entry. */ - NSPHY_WRITE(sc, MII_ANAR, mii_anar(ife->ifm_media)); - NSPHY_WRITE(sc, MII_BMCR, ife->ifm_data); + PHY_WRITE(&sc->sc_mii, MII_ANAR, + mii_anar(ife->ifm_media)); + PHY_WRITE(&sc->sc_mii, MII_BMCR, ife->ifm_data); } break; @@ -284,7 +277,8 @@ nsphy_service(self, mii, cmd) * need to restart the autonegotiation process. Read * the BMSR twice in case it's latched. */ - reg = NSPHY_READ(sc, MII_BMSR) | NSPHY_READ(sc, MII_BMSR); + reg = PHY_READ(&sc->sc_mii, MII_BMSR) | + PHY_READ(&sc->sc_mii, MII_BMSR); if (reg & BMSR_LINK) return (0); @@ -321,11 +315,12 @@ nsphy_status(sc) mii->mii_media_status = IFM_AVALID; mii->mii_media_active = IFM_ETHER; - bmsr = NSPHY_READ(sc, MII_BMSR) | NSPHY_READ(sc, MII_BMSR); + bmsr = PHY_READ(&sc->sc_mii, MII_BMSR) | + PHY_READ(&sc->sc_mii, MII_BMSR); if (bmsr & BMSR_LINK) mii->mii_media_status |= IFM_ACTIVE; - bmcr = NSPHY_READ(sc, MII_BMCR); + bmcr = PHY_READ(&sc->sc_mii, MII_BMCR); if (bmcr & BMCR_ISO) { mii->mii_media_active |= IFM_NONE; mii->mii_media_status = 0; @@ -351,9 +346,9 @@ nsphy_status(sc) * properly! Determine media based on link partner's * advertised capabilities. */ - if (NSPHY_READ(sc, MII_ANER) & ANER_LPAN) { - anlpar = NSPHY_READ(sc, MII_ANAR) & - NSPHY_READ(sc, MII_ANLPAR); + if (PHY_READ(&sc->sc_mii, MII_ANER) & ANER_LPAN) { + anlpar = PHY_READ(&sc->sc_mii, MII_ANAR) & + PHY_READ(&sc->sc_mii, MII_ANLPAR); if (anlpar & ANLPAR_T4) mii->mii_media_active |= IFM_100_T4; else if (anlpar & ANLPAR_TX_FD) @@ -374,7 +369,7 @@ nsphy_status(sc) * We will never be in full-duplex mode if this is * the case, so reading the PAR is OK. */ - par = NSPHY_READ(sc, MII_NSPHY_PAR); + par = PHY_READ(&sc->sc_mii, MII_NSPHY_PAR); if (par & PAR_10) mii->mii_media_active |= IFM_10_T; else @@ -399,13 +394,13 @@ nsphy_auto(sc) { int bmsr, i; - NSPHY_WRITE(sc, MII_ANAR, + PHY_WRITE(&sc->sc_mii, MII_ANAR, BMSR_MEDIA_TO_ANAR(sc->sc_capabilities) | ANAR_CSMA); - NSPHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); /* Wait 500ms for it to complete. */ for (i = 0; i < 500; i++) { - if ((bmsr = NSPHY_READ(sc, MII_BMSR)) & BMSR_ACOMP) + if ((bmsr = PHY_READ(&sc->sc_mii, MII_BMSR)) & BMSR_ACOMP) return; delay(1000); } @@ -426,13 +421,13 @@ nsphy_reset(sc) * The i82557 wedges if we isolate all of its PHYs! */ if (sc->sc_mii.mii_inst == 0) - NSPHY_WRITE(sc, MII_BMCR, BMCR_RESET); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_RESET); else - NSPHY_WRITE(sc, MII_BMCR, BMCR_RESET|BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_RESET|BMCR_ISO); /* Wait 100ms for it to complete. */ for (i = 0; i < 100; i++) { - reg = NSPHY_READ(sc, MII_BMCR); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); if ((reg & BMCR_RESET) == 0) break; delay(1000); @@ -440,5 +435,5 @@ nsphy_reset(sc) /* Make sure the PHY is isolated. */ if (sc->sc_mii.mii_inst != 0) - NSPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); } diff --git a/sys/dev/mii/qsphy.c b/sys/dev/mii/qsphy.c index 56e1230ddf9f..54d745069057 100644 --- a/sys/dev/mii/qsphy.c +++ b/sys/dev/mii/qsphy.c @@ -1,4 +1,4 @@ -/* $NetBSD: qsphy.c,v 1.4 1998/11/02 22:31:37 thorpej Exp $ */ +/* $NetBSD: qsphy.c,v 1.5 1998/11/04 22:15:41 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -100,14 +100,6 @@ struct cfattach qsphy_ca = { sizeof(struct qsphy_softc), qsphymatch, qsphyattach }; -#define QSPHY_READ(sc, reg) \ - (*(sc)->sc_mii.mii_pdata->mii_readreg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg)) - -#define QSPHY_WRITE(sc, reg, val) \ - (*(sc)->sc_mii.mii_pdata->mii_writereg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg), (val)) - int qsphy_service __P((struct mii_softc *, struct mii_data *, int)); void qsphy_reset __P((struct qsphy_softc *)); void qsphy_auto __P((struct qsphy_softc *)); @@ -154,7 +146,7 @@ qsphyattach(parent, self, aux) qsphy_reset(sc); - sc->sc_capabilities = QSPHY_READ(sc, MII_BMSR) & ma->mii_capmask; + sc->sc_capabilities = PHY_READ(&sc->sc_mii, MII_BMSR) & ma->mii_capmask; printf("%s: ", sc->sc_mii.mii_dev.dv_xname); if ((sc->sc_capabilities & BMSR_MEDIAMASK) == 0) printf("no media present"); @@ -189,8 +181,8 @@ qsphy_service(self, mii, cmd) * isolate ourselves. */ if (IFM_INST(ife->ifm_media) != sc->sc_mii.mii_inst) { - reg = QSPHY_READ(sc, MII_BMCR); - QSPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); return (0); } @@ -205,7 +197,7 @@ qsphy_service(self, mii, cmd) /* * If we're already in auto mode, just return. */ - if (QSPHY_READ(sc, MII_BMCR) & BMCR_AUTOEN) + if (PHY_READ(&sc->sc_mii, MII_BMCR) & BMCR_AUTOEN) return (0); qsphy_auto(sc); break; @@ -218,8 +210,9 @@ qsphy_service(self, mii, cmd) /* * BMCR data is stored in the ifmedia entry. */ - QSPHY_WRITE(sc, MII_ANAR, mii_anar(ife->ifm_media)); - QSPHY_WRITE(sc, MII_BMCR, ife->ifm_data); + PHY_WRITE(&sc->sc_mii, MII_ANAR, + mii_anar(ife->ifm_media)); + PHY_WRITE(&sc->sc_mii, MII_BMCR, ife->ifm_data); } break; @@ -270,11 +263,12 @@ qsphy_status(sc) mii->mii_media_status = IFM_AVALID; mii->mii_media_active = IFM_ETHER; - bmsr = QSPHY_READ(sc, MII_BMSR) | QSPHY_READ(sc, MII_BMSR); + bmsr = PHY_READ(&sc->sc_mii, MII_BMSR) | + PHY_READ(&sc->sc_mii, MII_BMSR); if (bmsr & BMSR_LINK) mii->mii_media_status |= IFM_ACTIVE; - bmcr = QSPHY_READ(sc, MII_BMCR); + bmcr = PHY_READ(&sc->sc_mii, MII_BMCR); if (bmcr & BMCR_ISO) { mii->mii_media_active |= IFM_NONE; mii->mii_media_status = 0; @@ -290,7 +284,8 @@ qsphy_status(sc) return; } - pctl = QSPHY_READ(sc, MII_QSPHY_PCTL) | QSPHY_READ(sc, MII_QSPHY_PCTL); + pctl = PHY_READ(&sc->sc_mii, MII_QSPHY_PCTL) | + PHY_READ(&sc->sc_mii, MII_QSPHY_PCTL); switch (pctl & PCTL_OPMASK) { case PCTL_10_T: mii->mii_media_active |= IFM_10_T; @@ -320,13 +315,13 @@ qsphy_auto(sc) { int bmsr, i; - QSPHY_WRITE(sc, MII_ANAR, + PHY_WRITE(&sc->sc_mii, MII_ANAR, BMSR_MEDIA_TO_ANAR(sc->sc_capabilities) | ANAR_CSMA); - QSPHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); /* Wait 500ms for it to complete. */ for (i = 0; i < 500; i++) { - if ((bmsr = QSPHY_READ(sc, MII_BMSR)) & BMSR_ACOMP) + if ((bmsr = PHY_READ(&sc->sc_mii, MII_BMSR)) & BMSR_ACOMP) return; delay(1000); } @@ -343,11 +338,11 @@ qsphy_reset(sc) { int reg, i; - QSPHY_WRITE(sc, MII_BMCR, BMCR_RESET|BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_RESET|BMCR_ISO); /* Wait 100ms for it to complete. */ for (i = 0; i < 100; i++) { - reg = QSPHY_READ(sc, MII_BMCR); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); if ((reg & BMCR_RESET) == 0) break; delay(1000); @@ -355,7 +350,7 @@ qsphy_reset(sc) /* Make sure the PHY is isolated. */ if (sc->sc_mii.mii_inst != 0) - QSPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); - QSPHY_WRITE(sc, MII_QSPHY_IMASK, 0); + PHY_WRITE(&sc->sc_mii, MII_QSPHY_IMASK, 0); } diff --git a/sys/dev/mii/sqphy.c b/sys/dev/mii/sqphy.c index 8813253d664c..045fc5383c2c 100644 --- a/sys/dev/mii/sqphy.c +++ b/sys/dev/mii/sqphy.c @@ -1,4 +1,4 @@ -/* $NetBSD: sqphy.c,v 1.1 1998/11/03 23:51:29 thorpej Exp $ */ +/* $NetBSD: sqphy.c,v 1.2 1998/11/04 22:15:41 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -101,14 +101,6 @@ struct cfattach sqphy_ca = { sizeof(struct sqphy_softc), sqphymatch, sqphyattach }; -#define SQPHY_READ(sc, reg) \ - (*(sc)->sc_mii.mii_pdata->mii_readreg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg)) - -#define SQPHY_WRITE(sc, reg, val) \ - (*(sc)->sc_mii.mii_pdata->mii_writereg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg), (val)) - int sqphy_service __P((struct mii_softc *, struct mii_data *, int)); void sqphy_reset __P((struct sqphy_softc *)); void sqphy_auto __P((struct sqphy_softc *)); @@ -155,7 +147,7 @@ sqphyattach(parent, self, aux) sqphy_reset(sc); - sc->sc_capabilities = SQPHY_READ(sc, MII_BMSR) & ma->mii_capmask; + sc->sc_capabilities = PHY_READ(&sc->sc_mii, MII_BMSR) & ma->mii_capmask; printf("%s: ", sc->sc_mii.mii_dev.dv_xname); if ((sc->sc_capabilities & BMSR_MEDIAMASK) == 0) printf("no media present"); @@ -190,8 +182,8 @@ sqphy_service(self, mii, cmd) * isolate ourselves. */ if (IFM_INST(ife->ifm_media) != sc->sc_mii.mii_inst) { - reg = SQPHY_READ(sc, MII_BMCR); - SQPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); return (0); } @@ -206,7 +198,7 @@ sqphy_service(self, mii, cmd) /* * If we're already in auto mode, just return. */ - if (SQPHY_READ(sc, MII_BMCR) & BMCR_AUTOEN) + if (PHY_READ(&sc->sc_mii, MII_BMCR) & BMCR_AUTOEN) return (0); sqphy_auto(sc); break; @@ -219,8 +211,9 @@ sqphy_service(self, mii, cmd) /* * BMCR data is stored in the ifmedia entry. */ - SQPHY_WRITE(sc, MII_ANAR, mii_anar(ife->ifm_media)); - SQPHY_WRITE(sc, MII_BMCR, ife->ifm_data); + PHY_WRITE(&sc->sc_mii, MII_ANAR, + mii_anar(ife->ifm_media)); + PHY_WRITE(&sc->sc_mii, MII_BMCR, ife->ifm_data); } break; @@ -248,7 +241,8 @@ sqphy_service(self, mii, cmd) * need to restart the autonegotiation process. Read * the BMSR twice in case it's latched. */ - reg = SQPHY_READ(sc, MII_BMSR) | SQPHY_READ(sc, MII_BMSR); + reg = PHY_READ(&sc->sc_mii, MII_BMSR) | + PHY_READ(&sc->sc_mii, MII_BMSR); if (reg & BMSR_LINK) return (0); @@ -285,11 +279,12 @@ sqphy_status(sc) mii->mii_media_status = IFM_AVALID; mii->mii_media_active = IFM_ETHER; - bmsr = SQPHY_READ(sc, MII_BMSR) | SQPHY_READ(sc, MII_BMSR); + bmsr = PHY_READ(&sc->sc_mii, MII_BMSR) | + PHY_READ(&sc->sc_mii, MII_BMSR); if (bmsr & BMSR_LINK) mii->mii_media_status |= IFM_ACTIVE; - bmcr = SQPHY_READ(sc, MII_BMCR); + bmcr = PHY_READ(&sc->sc_mii, MII_BMCR); if (bmcr & BMCR_ISO) { mii->mii_media_active |= IFM_NONE; mii->mii_media_status = 0; @@ -305,7 +300,7 @@ sqphy_status(sc) return; } - status = SQPHY_READ(sc, MII_SQPHY_STATUS); + status = PHY_READ(&sc->sc_mii, MII_SQPHY_STATUS); if (status & STATUS_SPD_DET) mii->mii_media_active |= IFM_100_TX; else @@ -320,13 +315,13 @@ sqphy_auto(sc) { int bmsr, i; - SQPHY_WRITE(sc, MII_ANAR, + PHY_WRITE(&sc->sc_mii, MII_ANAR, BMSR_MEDIA_TO_ANAR(sc->sc_capabilities) | ANAR_CSMA); - SQPHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); /* Wait 500ms for it to complete. */ for (i = 0; i < 500; i++) { - if ((bmsr = SQPHY_READ(sc, MII_BMSR)) & BMSR_ACOMP) + if ((bmsr = PHY_READ(&sc->sc_mii, MII_BMSR)) & BMSR_ACOMP) return; delay(1000); } @@ -343,11 +338,11 @@ sqphy_reset(sc) { int reg, i; - SQPHY_WRITE(sc, MII_BMCR, BMCR_RESET|BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_RESET|BMCR_ISO); /* Wait 100ms for it to complete. */ for (i = 0; i < 100; i++) { - reg = SQPHY_READ(sc, MII_BMCR); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); if ((reg & BMCR_RESET) == 0) break; delay(1000); @@ -355,5 +350,5 @@ sqphy_reset(sc) /* Make sure the PHY is isolated. */ if (sc->sc_mii.mii_inst != 0) - SQPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); } diff --git a/sys/dev/mii/tlphy.c b/sys/dev/mii/tlphy.c index f10c3d231f07..1776f5ed435e 100644 --- a/sys/dev/mii/tlphy.c +++ b/sys/dev/mii/tlphy.c @@ -1,4 +1,4 @@ -/* $NetBSD: tlphy.c,v 1.11 1998/11/02 22:31:37 thorpej Exp $ */ +/* $NetBSD: tlphy.c,v 1.12 1998/11/04 22:15:41 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -110,14 +110,6 @@ struct cfattach tlphy_ca = { sizeof(struct tlphy_softc), tlphymatch, tlphyattach }; -#define TLPHY_READ(sc, reg) \ - (*(sc)->sc_mii.mii_pdata->mii_readreg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg)) - -#define TLPHY_WRITE(sc, reg, val) \ - (*(sc)->sc_mii.mii_pdata->mii_writereg)((sc)->sc_mii.mii_dev.dv_parent, \ - (sc)->sc_mii.mii_phy, (reg), (val)) - int tlphy_service __P((struct mii_softc *, struct mii_data *, int)); void tlphy_reset __P((struct tlphy_softc *)); void tlphy_auto __P((struct tlphy_softc *)); @@ -169,7 +161,7 @@ tlphyattach(parent, self, aux) sc->sc_tlphycap = tlsc->tl_product->tp_tlphymedia; if ((sc->sc_tlphycap & TLPHY_MEDIA_NO_10_T) == 0) sc->sc_capabilities = - TLPHY_READ(sc, MII_BMSR) & ma->mii_capmask; + PHY_READ(&sc->sc_mii, MII_BMSR) & ma->mii_capmask; else sc->sc_capabilities = 0; @@ -232,8 +224,8 @@ tlphy_service(self, mii, cmd) * isolate ourselves. */ if (IFM_INST(ife->ifm_media) != sc->sc_mii.mii_inst) { - reg = TLPHY_READ(sc, MII_BMCR); - TLPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); return (0); } @@ -254,15 +246,16 @@ tlphy_service(self, mii, cmd) break; case IFM_10_2: case IFM_10_5: - TLPHY_WRITE(sc, MII_BMCR, 0); - TLPHY_WRITE(sc, MII_TLPHY_CTRL, CTRL_AUISEL); + PHY_WRITE(&sc->sc_mii, MII_BMCR, 0); + PHY_WRITE(&sc->sc_mii, MII_TLPHY_CTRL, CTRL_AUISEL); delay(100000); break; default: - TLPHY_WRITE(sc, MII_TLPHY_CTRL, 0); + PHY_WRITE(&sc->sc_mii, MII_TLPHY_CTRL, 0); delay(100000); - TLPHY_WRITE(sc, MII_ANAR, mii_anar(ife->ifm_media)); - TLPHY_WRITE(sc, MII_BMCR, ife->ifm_data); + PHY_WRITE(&sc->sc_mii, MII_ANAR, + mii_anar(ife->ifm_media)); + PHY_WRITE(&sc->sc_mii, MII_BMCR, ife->ifm_data); } break; @@ -292,7 +285,8 @@ tlphy_service(self, mii, cmd) * * XXX WHAT ABOUT CHECKING LINK ON THE BNC/AUI?! */ - reg = TLPHY_READ(sc, MII_BMSR) | TLPHY_READ(sc, MII_BMSR); + reg = PHY_READ(&sc->sc_mii, MII_BMSR) | + PHY_READ(&sc->sc_mii, MII_BMSR); if (reg & BMSR_LINK) return (0); @@ -330,14 +324,14 @@ tlphy_status(sc) mii->mii_media_status = IFM_AVALID; mii->mii_media_active = IFM_ETHER; - bmcr = TLPHY_READ(sc, MII_BMCR); + bmcr = PHY_READ(&sc->sc_mii, MII_BMCR); if (bmcr & BMCR_ISO) { mii->mii_media_active |= IFM_NONE; mii->mii_media_status = 0; return; } - tlctrl = TLPHY_READ(sc, MII_TLPHY_CTRL); + tlctrl = PHY_READ(&sc->sc_mii, MII_TLPHY_CTRL); if (tlctrl & CTRL_AUISEL) { if (sc->sc_tlphycap & TLPHY_MEDIA_10_2) mii->mii_media_active |= IFM_10_2; @@ -351,7 +345,8 @@ tlphy_status(sc) return; } - bmsr = TLPHY_READ(sc, MII_BMSR) | TLPHY_READ(sc, MII_BMSR); + bmsr = PHY_READ(&sc->sc_mii, MII_BMSR) | + PHY_READ(&sc->sc_mii, MII_BMSR); if (bmsr & BMSR_LINK) mii->mii_media_status |= IFM_ACTIVE; @@ -375,13 +370,13 @@ tlphy_auto(sc) { int aner, anlpar, bmsr, i; - TLPHY_WRITE(sc, MII_ANAR, + PHY_WRITE(&sc->sc_mii, MII_ANAR, BMSR_MEDIA_TO_ANAR(sc->sc_capabilities) | ANAR_CSMA); - TLPHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); /* Wait 500ms for it to complete. */ for (i = 0; i < 500; i++) { - if ((bmsr = TLPHY_READ(sc, MII_BMSR)) & BMSR_ACOMP) + if ((bmsr = PHY_READ(&sc->sc_mii, MII_BMSR)) & BMSR_ACOMP) return; delay(1000); } @@ -399,12 +394,12 @@ tlphy_auto(sc) * based on the link partner status. */ - aner = TLPHY_READ(sc, MII_ANER); + aner = PHY_READ(&sc->sc_mii, MII_ANER); if (aner & ANER_LPAN) { - anlpar = TLPHY_READ(sc, MII_ANLPAR) & - TLPHY_READ(sc, MII_ANAR); + anlpar = PHY_READ(&sc->sc_mii, MII_ANLPAR) & + PHY_READ(&sc->sc_mii, MII_ANAR); if (anlpar & ANAR_10_FD) { - TLPHY_WRITE(sc, MII_BMCR, BMCR_FDX); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_FDX); return; } } @@ -414,7 +409,7 @@ tlphy_auto(sc) * Just assume we're not in full-duplex mode. * XXX Check link and try AUI/BNC? */ - TLPHY_WRITE(sc, MII_BMCR, 0); + PHY_WRITE(&sc->sc_mii, MII_BMCR, 0); } void @@ -423,11 +418,11 @@ tlphy_reset(sc) { int reg, i; - TLPHY_WRITE(sc, MII_BMCR, BMCR_RESET|BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, BMCR_RESET|BMCR_ISO); /* Wait 100ms for it to complete. */ for (i = 0; i < 100; i++) { - reg = TLPHY_READ(sc, MII_BMCR); + reg = PHY_READ(&sc->sc_mii, MII_BMCR); if ((reg & BMCR_RESET) == 0) break; delay(1000); @@ -435,5 +430,5 @@ tlphy_reset(sc) /* Make sure the PHY is isolated. */ if (sc->sc_mii.mii_inst != 0) - TLPHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); + PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO); }