Commit 024a0a3c authored by Shan Lu's avatar Shan Lu Committed by Jeff Garzik

network: add the missing phy_device speed information to phy_mii_ioctl

Function `phy_mii_ioctl' returns physical device's information based on
user requests.  When requested to return the basic mode control register
information (BMCR), the original implementation only returns the physical
device's duplex information and forgets to return speed information, which
should not be because BMCR register is used to hold both duplex and speed
information.

The patch checks the BMCR value against speed-related flags and fills the
return structure's speed field accordingly.
Signed-off-by: default avatarShan <shanlu@cs.uiuc.edu>
Cc: Jeff Garzik <jeff@garzik.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 2b272221
...@@ -382,6 +382,12 @@ int phy_mii_ioctl(struct phy_device *phydev, ...@@ -382,6 +382,12 @@ int phy_mii_ioctl(struct phy_device *phydev,
phydev->duplex = DUPLEX_FULL; phydev->duplex = DUPLEX_FULL;
else else
phydev->duplex = DUPLEX_HALF; phydev->duplex = DUPLEX_HALF;
if ((!phydev->autoneg) &&
(val & BMCR_SPEED1000))
phydev->speed = SPEED_1000;
else if ((!phydev->autoneg) &&
(val & BMCR_SPEED100))
phydev->speed = SPEED_100;
break; break;
case MII_ADVERTISE: case MII_ADVERTISE:
phydev->advertising = val; phydev->advertising = val;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment