Lines Matching defs:sc

136 	struct mii_softc *sc;
138 sc = device_get_softc(dev);
143 (sc->mii_flags & MIIF_MACPRIV0) != 0)
144 sc->mii_flags |= MIIF_PHYPRIV0;
146 switch (sc->mii_mpd_model) {
149 if (PHY_READ(sc, E1000_ESSR) & E1000_ESSR_FIBER_LINK)
150 sc->mii_flags |= MIIF_HAVEFIBER;
165 PHY_WRITE(sc, E1000_EADR, 0);
169 PHY_RESET(sc);
171 sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & sc->mii_capmask;
172 if (sc->mii_capabilities & BMSR_EXTSTAT) {
173 sc->mii_extcapabilities = PHY_READ(sc, MII_EXTSR);
174 if ((sc->mii_extcapabilities &
176 sc->mii_flags |= MIIF_HAVE_GTCR;
179 mii_phy_add_media(sc);
182 MIIBUS_MEDIAINIT(sc->mii_dev);
187 e1000phy_reset(struct mii_softc *sc)
191 reg = PHY_READ(sc, E1000_SCR);
192 if ((sc->mii_flags & MIIF_HAVEFIBER) != 0) {
194 PHY_WRITE(sc, E1000_SCR, reg);
195 if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1112) {
197 page = PHY_READ(sc, E1000_EADR);
198 PHY_WRITE(sc, E1000_EADR, 2);
199 reg = PHY_READ(sc, E1000_SCR);
202 PHY_WRITE(sc, E1000_SCR, reg);
203 if ((sc->mii_flags & MIIF_PHYPRIV0) != 0) {
205 PHY_WRITE(sc, E1000_EADR, 1);
206 reg = PHY_READ(sc, E1000_SCR);
208 PHY_WRITE(sc, E1000_SCR, reg);
210 PHY_WRITE(sc, E1000_EADR, page);
213 switch (sc->mii_mpd_model) {
225 if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116 ||
226 sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116R_29)
240 PHY_WRITE(sc, 0x1C, PHY_READ(sc, 0x1C) | 0x0001);
247 if (sc->mii_mpd_model != MII_MODEL_xxMARVELL_E3016) {
251 PHY_WRITE(sc, E1000_SCR, reg);
253 if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116 ||
254 sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116R_29 ||
255 sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1149 ||
256 sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1149R) {
257 PHY_WRITE(sc, E1000_EADR, 2);
258 reg = PHY_READ(sc, E1000_SCR);
260 PHY_WRITE(sc, E1000_SCR, reg);
261 PHY_WRITE(sc, E1000_EADR, 0);
265 switch (sc->mii_mpd_model) {
272 page = PHY_READ(sc, E1000_EADR);
274 PHY_WRITE(sc, E1000_EADR, 3);
275 PHY_WRITE(sc, E1000_SCR,
281 PHY_WRITE(sc, E1000_IER, E1000_PULSE_DUR(E1000_PULSE_170MS) |
283 PHY_WRITE(sc, E1000_EADR, page);
287 PHY_WRITE(sc, 0x16, 0x0B << 8 | 0x05 << 4 | 0x04);
289 PHY_WRITE(sc, 0x1D, 17);
290 PHY_WRITE(sc, 0x1E, 0x3F60);
294 reg = PHY_READ(sc, E1000_ESCR);
296 PHY_WRITE(sc, E1000_ESCR, reg);
301 reg = PHY_READ(sc, E1000_CR);
303 PHY_WRITE(sc, E1000_CR, reg);
307 e1000phy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
319 e1000phy_mii_phy_auto(sc, ife->ifm_media);
326 if ((sc->mii_flags & MIIF_HAVE_GTCR) == 0)
331 if ((sc->mii_extcapabilities &
343 reg = PHY_READ(sc, E1000_CR);
344 PHY_WRITE(sc, E1000_CR,
357 reg = PHY_READ(sc, E1000_CR);
359 PHY_WRITE(sc, E1000_CR, reg | E1000_CR_RESET);
365 } else if ((sc->mii_flags & MIIF_HAVE_GTCR) != 0)
367 PHY_WRITE(sc, E1000_1GCR, gig);
368 PHY_WRITE(sc, E1000_AR, E1000_AR_SELECTOR_FIELD);
369 PHY_WRITE(sc, E1000_CR, speed | E1000_CR_RESET);
377 sc->mii_ticks = 0;
385 reg = PHY_READ(sc, MII_BMSR) | PHY_READ(sc, MII_BMSR);
387 sc->mii_ticks = 0;
392 if (sc->mii_ticks++ == 0)
394 if (sc->mii_ticks <= sc->mii_anegticks)
397 sc->mii_ticks = 0;
398 PHY_RESET(sc);
399 e1000phy_mii_phy_auto(sc, ife->ifm_media);
404 PHY_STATUS(sc);
407 mii_phy_update(sc, cmd);
412 e1000phy_status(struct mii_softc *sc)
414 struct mii_data *mii = sc->mii_pdata;
420 bmsr = PHY_READ(sc, E1000_SR) | PHY_READ(sc, E1000_SR);
421 bmcr = PHY_READ(sc, E1000_CR);
422 ssr = PHY_READ(sc, E1000_SSR);
437 if ((sc->mii_flags & MIIF_HAVEFIBER) == 0) {
462 if ((sc->mii_flags & MIIF_HAVEFIBER) == 0)
463 mii->mii_media_active |= mii_phy_flowstatus(sc);
468 if (((PHY_READ(sc, E1000_1GSR) | PHY_READ(sc, E1000_1GSR)) &
475 e1000phy_mii_phy_auto(struct mii_softc *sc, int media)
479 if ((sc->mii_flags & MIIF_HAVEFIBER) == 0) {
480 reg = PHY_READ(sc, E1000_AR);
485 (sc->mii_flags & MIIF_FORCEPAUSE) != 0)
487 PHY_WRITE(sc, E1000_AR, reg | E1000_AR_SELECTOR_FIELD);
489 PHY_WRITE(sc, E1000_AR, E1000_FA_1000X_FD | E1000_FA_1000X);
490 if ((sc->mii_flags & MIIF_HAVE_GTCR) != 0) {
492 if ((sc->mii_extcapabilities & EXTSR_1000TFDX) != 0)
494 if ((sc->mii_extcapabilities & EXTSR_1000THDX) != 0)
496 PHY_WRITE(sc, E1000_1GCR, reg);
498 PHY_WRITE(sc, E1000_CR,