aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/mii
diff options
context:
space:
mode:
authorPyun YongHyeon <yongari@FreeBSD.org>2006-05-19 03:51:42 +0000
committerPyun YongHyeon <yongari@FreeBSD.org>2006-05-19 03:51:42 +0000
commit41cfbdeb514ab78cb2542b8e3047003b5006a98c (patch)
treebf05ca1b78d3a831869b64a2958c0ed74c1795be /sys/dev/mii
parent58f05c01d4d41fe53ec54e67c33e3b5e7d02efe8 (diff)
Notes
Diffstat (limited to 'sys/dev/mii')
-rw-r--r--sys/dev/mii/ukphy_subr.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/sys/dev/mii/ukphy_subr.c b/sys/dev/mii/ukphy_subr.c
index 123d52913179..9d7df3d594b8 100644
--- a/sys/dev/mii/ukphy_subr.c
+++ b/sys/dev/mii/ukphy_subr.c
@@ -67,7 +67,7 @@ ukphy_status(struct mii_softc *phy)
{
struct mii_data *mii = phy->mii_pdata;
struct ifmedia_entry *ife = mii->mii_media.ifm_cur;
- int bmsr, bmcr, anlpar;
+ int bmsr, bmcr, anlpar, gtcr, gtsr;
mii->mii_media_status = IFM_AVALID;
mii->mii_media_active = IFM_ETHER;
@@ -99,7 +99,20 @@ ukphy_status(struct mii_softc *phy)
}
anlpar = PHY_READ(phy, MII_ANAR) & PHY_READ(phy, MII_ANLPAR);
- if (anlpar & ANLPAR_T4)
+ if ((phy->mii_flags & MIIF_HAVE_GTCR) != 0 &&
+ (phy->mii_extcapabilities &
+ (EXTSR_1000THDX | EXTSR_1000TFDX)) != 0) {
+ gtcr = PHY_READ(phy, MII_100T2CR);
+ gtsr = PHY_READ(phy, MII_100T2SR);
+ } else
+ gtcr = gtsr = 0;
+
+ if ((gtcr & GTCR_ADV_1000TFDX) && (gtsr & GTSR_LP_1000TFDX))
+ mii->mii_media_active |= IFM_1000_T|IFM_FDX;
+ else if ((gtcr & GTCR_ADV_1000THDX) &&
+ (gtsr & GTSR_LP_1000THDX))
+ mii->mii_media_active |= IFM_1000_T;
+ else if (anlpar & ANLPAR_T4)
mii->mii_media_active |= IFM_100_T4;
else if (anlpar & ANLPAR_TX_FD)
mii->mii_media_active |= IFM_100_TX|IFM_FDX;