|
Lines 239-249
Link Here
|
| 239 |
*/ |
239 |
*/ |
| 240 |
if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && |
240 |
if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && |
| 241 |
sc->mii_mpd_rev >= 2) { |
241 |
sc->mii_mpd_rev >= 2) { |
| 242 |
/* RTL8211B(L) */ |
242 |
if (sc->mii_mpd_rev == 6) { |
| 243 |
reg = PHY_READ(sc, RGEPHY_MII_SSR); |
243 |
/* RTL8211F */ |
| 244 |
if (reg & RGEPHY_SSR_LINK) { |
244 |
reg = PHY_READ(sc, RGEPHY_F_MII_SSR); |
| 245 |
sc->mii_ticks = 0; |
245 |
if (reg & RGEPHY_F_SSR_LINK) { |
| 246 |
break; |
246 |
sc->mii_ticks = 0; |
|
|
247 |
break; |
| 248 |
} |
| 249 |
} else { |
| 250 |
/* RTL8211B(L) */ |
| 251 |
reg = PHY_READ(sc, RGEPHY_MII_SSR); |
| 252 |
if (reg & RGEPHY_SSR_LINK) { |
| 253 |
sc->mii_ticks = 0; |
| 254 |
break; |
| 255 |
} |
| 247 |
} |
256 |
} |
| 248 |
} else { |
257 |
} else { |
| 249 |
reg = PHY_READ(sc, RL_GMEDIASTAT); |
258 |
reg = PHY_READ(sc, RL_GMEDIASTAT); |
|
Lines 294-302
Link Here
|
| 294 |
mii->mii_media_active = IFM_ETHER; |
303 |
mii->mii_media_active = IFM_ETHER; |
| 295 |
|
304 |
|
| 296 |
if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && sc->mii_mpd_rev >= 2) { |
305 |
if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && sc->mii_mpd_rev >= 2) { |
| 297 |
ssr = PHY_READ(sc, RGEPHY_MII_SSR); |
306 |
if (sc->mii_mpd_rev == 6) { |
| 298 |
if (ssr & RGEPHY_SSR_LINK) |
307 |
/* RTL8211F */ |
| 299 |
mii->mii_media_status |= IFM_ACTIVE; |
308 |
ssr = PHY_READ(sc, RGEPHY_F_MII_SSR); |
|
|
309 |
if (ssr & RGEPHY_F_SSR_LINK) |
| 310 |
mii->mii_media_status |= IFM_ACTIVE; |
| 311 |
} else { |
| 312 |
ssr = PHY_READ(sc, RGEPHY_MII_SSR); |
| 313 |
if (ssr & RGEPHY_SSR_LINK) |
| 314 |
mii->mii_media_status |= IFM_ACTIVE; |
| 315 |
} |
| 300 |
} else { |
316 |
} else { |
| 301 |
bmsr = PHY_READ(sc, RL_GMEDIASTAT); |
317 |
bmsr = PHY_READ(sc, RL_GMEDIASTAT); |
| 302 |
if (bmsr & RL_GMEDIASTAT_LINK) |
318 |
if (bmsr & RL_GMEDIASTAT_LINK) |
|
Lines 324-348
Link Here
|
| 324 |
} |
340 |
} |
| 325 |
|
341 |
|
| 326 |
if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && sc->mii_mpd_rev >= 2) { |
342 |
if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && sc->mii_mpd_rev >= 2) { |
| 327 |
ssr = PHY_READ(sc, RGEPHY_MII_SSR); |
343 |
if (sc->mii_mpd_rev == 6) { |
| 328 |
switch (ssr & RGEPHY_SSR_SPD_MASK) { |
344 |
/* RTL8211F */ |
| 329 |
case RGEPHY_SSR_S1000: |
345 |
ssr = PHY_READ(sc, RGEPHY_F_MII_SSR); |
| 330 |
mii->mii_media_active |= IFM_1000_T; |
346 |
switch (ssr & RGEPHY_F_SSR_SPD_MASK) { |
| 331 |
break; |
347 |
case RGEPHY_F_SSR_S1000: |
| 332 |
case RGEPHY_SSR_S100: |
348 |
mii->mii_media_active |= IFM_1000_T; |
| 333 |
mii->mii_media_active |= IFM_100_TX; |
349 |
break; |
| 334 |
break; |
350 |
case RGEPHY_F_SSR_S100: |
| 335 |
case RGEPHY_SSR_S10: |
351 |
mii->mii_media_active |= IFM_100_TX; |
| 336 |
mii->mii_media_active |= IFM_10_T; |
352 |
break; |
| 337 |
break; |
353 |
case RGEPHY_F_SSR_S10: |
| 338 |
default: |
354 |
mii->mii_media_active |= IFM_10_T; |
| 339 |
mii->mii_media_active |= IFM_NONE; |
355 |
break; |
| 340 |
break; |
356 |
default: |
|
|
357 |
mii->mii_media_active |= IFM_NONE; |
| 358 |
break; |
| 359 |
} |
| 360 |
if (ssr & RGEPHY_F_SSR_FDX) |
| 361 |
mii->mii_media_active |= IFM_FDX; |
| 362 |
else |
| 363 |
mii->mii_media_active |= IFM_HDX; |
| 364 |
} else { |
| 365 |
ssr = PHY_READ(sc, RGEPHY_MII_SSR); |
| 366 |
switch (ssr & RGEPHY_SSR_SPD_MASK) { |
| 367 |
case RGEPHY_SSR_S1000: |
| 368 |
mii->mii_media_active |= IFM_1000_T; |
| 369 |
break; |
| 370 |
case RGEPHY_SSR_S100: |
| 371 |
mii->mii_media_active |= IFM_100_TX; |
| 372 |
break; |
| 373 |
case RGEPHY_SSR_S10: |
| 374 |
mii->mii_media_active |= IFM_10_T; |
| 375 |
break; |
| 376 |
default: |
| 377 |
mii->mii_media_active |= IFM_NONE; |
| 378 |
break; |
| 379 |
} |
| 380 |
if (ssr & RGEPHY_SSR_FDX) |
| 381 |
mii->mii_media_active |= IFM_FDX; |
| 382 |
else |
| 383 |
mii->mii_media_active |= IFM_HDX; |
| 341 |
} |
384 |
} |
| 342 |
if (ssr & RGEPHY_SSR_FDX) |
|
|
| 343 |
mii->mii_media_active |= IFM_FDX; |
| 344 |
else |
| 345 |
mii->mii_media_active |= IFM_HDX; |
| 346 |
} else { |
385 |
} else { |
| 347 |
bmsr = PHY_READ(sc, RL_GMEDIASTAT); |
386 |
bmsr = PHY_READ(sc, RL_GMEDIASTAT); |
| 348 |
if (bmsr & RL_GMEDIASTAT_1000MBPS) |
387 |
if (bmsr & RL_GMEDIASTAT_1000MBPS) |