Lines Matching defs:sc

80 mii_phy_setmedia(struct mii_softc *sc)
82 struct mii_data *mii = sc->mii_pdata;
87 if ((PHY_READ(sc, MII_BMCR) & BMCR_AUTOEN) == 0 ||
88 (sc->mii_flags & MIIF_FORCEANEG))
89 (void) mii_phy_auto(sc, 1);
119 PHY_WRITE(sc, MII_ANAR, anar);
120 PHY_WRITE(sc, MII_BMCR, bmcr);
121 if (sc->mii_flags & MIIF_HAVE_GTCR)
122 PHY_WRITE(sc, MII_100T2CR, gtcr);
126 mii_phy_auto(struct mii_softc *sc, int waitfor)
130 if ((sc->mii_flags & MIIF_DOINGAUTO) == 0) {
135 if (sc->mii_flags & MIIF_IS_1000X) {
138 if (sc->mii_extcapabilities & EXTSR_1000XFDX)
140 if (sc->mii_extcapabilities & EXTSR_1000XHDX)
143 if (sc->mii_flags & MIIF_DOPAUSE &&
144 sc->mii_extcapabilities & EXTSR_1000XFDX)
147 PHY_WRITE(sc, MII_ANAR, anar);
151 anar = BMSR_MEDIA_TO_ANAR(sc->mii_capabilities) |
158 if (sc->mii_flags & MIIF_DOPAUSE) {
159 if (sc->mii_capabilities & BMSR_100TXFDX)
161 if (sc->mii_extcapabilities & EXTSR_1000TFDX)
164 PHY_WRITE(sc, MII_ANAR, anar);
165 if (sc->mii_flags & MIIF_HAVE_GTCR) {
168 if (sc->mii_extcapabilities & EXTSR_1000TFDX)
170 if (sc->mii_extcapabilities & EXTSR_1000THDX)
173 PHY_WRITE(sc, MII_100T2CR, gtcr);
176 PHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG);
182 if ((bmsr = PHY_READ(sc, MII_BMSR)) & BMSR_ACOMP)
200 if (sc->mii_flags & MIIF_AUTOTSLEEP) {
201 sc->mii_flags |= MIIF_DOINGAUTO;
202 tsleep_nsec(&sc->mii_flags, PZERO, "miiaut", MSEC_TO_NSEC(500));
203 mii_phy_auto_timeout(sc);
204 } else if ((sc->mii_flags & MIIF_DOINGAUTO) == 0) {
205 sc->mii_flags |= MIIF_DOINGAUTO;
206 timeout_set(&sc->mii_phy_timo, mii_phy_auto_timeout, sc);
207 timeout_add_msec(&sc->mii_phy_timo, 500);
215 struct mii_softc *sc = arg;
218 if ((sc->mii_dev.dv_flags & DVF_ACTIVE) == 0)
222 sc->mii_flags &= ~MIIF_DOINGAUTO;
223 bmsr = PHY_READ(sc, MII_BMSR);
226 (void) PHY_SERVICE(sc, sc->mii_pdata, MII_POLLSTAT);
231 mii_phy_tick(struct mii_softc *sc)
233 struct mii_data *mii = sc->mii_pdata;
251 reg = PHY_READ(sc, MII_BMSR) | PHY_READ(sc, MII_BMSR);
262 if (!sc->mii_anegticks)
263 sc->mii_anegticks = MII_ANEGTICKS;
265 if (++sc->mii_ticks <= sc->mii_anegticks)
268 sc->mii_ticks = 0;
269 PHY_RESET(sc);
271 if (mii_phy_auto(sc, 0) == EJUSTRETURN)
282 mii_phy_reset(struct mii_softc *sc)
286 if (sc->mii_flags & MIIF_NOISOLATE)
290 PHY_WRITE(sc, MII_BMCR, reg);
304 reg = PHY_READ(sc, MII_BMCR);
310 if (sc->mii_inst != 0 && ((sc->mii_flags & MIIF_NOISOLATE) == 0))
311 PHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO);
315 mii_phy_down(struct mii_softc *sc)
317 if (sc->mii_flags & MIIF_DOINGAUTO) {
318 sc->mii_flags &= ~MIIF_DOINGAUTO;
319 timeout_del(&sc->mii_phy_timo);
325 mii_phy_status(struct mii_softc *sc)
327 PHY_STATUS(sc);
331 mii_phy_update(struct mii_softc *sc, int cmd)
333 struct mii_data *mii = sc->mii_pdata;
337 if (sc->mii_media_active != mii->mii_media_active ||
338 sc->mii_media_status != mii->mii_media_status ||
340 announce = mii_phy_statusmsg(sc);
341 (*mii->mii_statchg)(sc->mii_dev.dv_parent);
342 sc->mii_media_active = mii->mii_media_active;
343 sc->mii_media_status = mii->mii_media_status;
354 mii_phy_statusmsg(struct mii_softc *sc)
356 struct mii_data *mii = sc->mii_pdata;
397 mii_phy_add_media(struct mii_softc *sc)
399 struct mii_data *mii = sc->mii_pdata;
403 if ((sc->mii_flags & MIIF_NOISOLATE) == 0)
404 ADD(IFM_MAKEWORD(IFM_ETHER, IFM_NONE, 0, sc->mii_inst),
407 if (sc->mii_capabilities & BMSR_10THDX) {
408 ADD(IFM_MAKEWORD(IFM_ETHER, IFM_10_T, 0, sc->mii_inst),
411 if (sc->mii_capabilities & BMSR_10TFDX) {
412 ADD(IFM_MAKEWORD(IFM_ETHER, IFM_10_T, IFM_FDX, sc->mii_inst),
415 if (sc->mii_capabilities & BMSR_100TXHDX) {
416 ADD(IFM_MAKEWORD(IFM_ETHER, IFM_100_TX, 0, sc->mii_inst),
419 if (sc->mii_capabilities & BMSR_100TXFDX) {
420 ADD(IFM_MAKEWORD(IFM_ETHER, IFM_100_TX, IFM_FDX, sc->mii_inst),
423 if (sc->mii_capabilities & BMSR_100T4) {
424 ADD(IFM_MAKEWORD(IFM_ETHER, IFM_100_T4, 0, sc->mii_inst),
427 if (sc->mii_extcapabilities & EXTSR_MEDIAMASK) {
432 if (sc->mii_extcapabilities & EXTSR_1000XHDX) {
433 sc->mii_anegticks = MII_ANEGTICKS_GIGE;
434 sc->mii_flags |= MIIF_IS_1000X;
436 sc->mii_inst), MII_MEDIA_1000_X);
438 if (sc->mii_extcapabilities & EXTSR_1000XFDX) {
439 sc->mii_anegticks = MII_ANEGTICKS_GIGE;
440 sc->mii_flags |= MIIF_IS_1000X;
442 sc->mii_inst), MII_MEDIA_1000_X_FDX);
453 if (sc->mii_extcapabilities & EXTSR_1000THDX) {
454 sc->mii_anegticks = MII_ANEGTICKS_GIGE;
455 sc->mii_flags |= MIIF_HAVE_GTCR;
458 sc->mii_inst), MII_MEDIA_1000_T);
460 if (sc->mii_extcapabilities & EXTSR_1000TFDX) {
461 sc->mii_anegticks = MII_ANEGTICKS_GIGE;
462 sc->mii_flags |= MIIF_HAVE_GTCR;
465 sc->mii_inst), MII_MEDIA_1000_T_FDX);
469 if (sc->mii_capabilities & BMSR_ANEG) {
470 ADD(IFM_MAKEWORD(IFM_ETHER, IFM_AUTO, 0, sc->mii_inst),
477 mii_phy_delete_media(struct mii_softc *sc)
479 struct mii_data *mii = sc->mii_pdata;
481 ifmedia_delete_instance(&mii->mii_media, sc->mii_inst);
487 struct mii_softc *sc = (void *) self;
489 if (sc->mii_flags & MIIF_DOINGAUTO)
490 timeout_del(&sc->mii_phy_timo);
492 mii_phy_delete_media(sc);
513 mii_phy_flowstatus(struct mii_softc *sc)
517 if ((sc->mii_flags & MIIF_DOPAUSE) == 0)
520 anar = PHY_READ(sc, MII_ANAR);
521 anlpar = PHY_READ(sc, MII_ANLPAR);
524 if (sc->mii_flags & MIIF_IS_1000X) {