diff options
author | Richard Cochran <richardcochran@gmail.com> | 2010-07-17 04:48:55 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-07-18 22:15:25 -0400 |
commit | 28b041139e344ecd0f144d6205b004ae354cfa1e (patch) | |
tree | 7fc0e05d01717da0410a7b3252b0cac3fc8db81d /drivers/net/stmmac | |
parent | 4507a71507d4ff37e9a499c4241b7701ed1feab4 (diff) |
net: preserve ifreq parameter when calling generic phy_mii_ioctl().
The phy_mii_ioctl() function unnecessarily throws away the original ifreq.
We need access to the ifreq in order to support PHYs that can perform
hardware time stamping.
Two maverick drivers filter the ioctl commands passed to phy_mii_ioctl().
This is unnecessary since phylib will check the command in any case.
Signed-off-by: Richard Cochran <richard.cochran@omicron.at>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/stmmac')
-rw-r--r-- | drivers/net/stmmac/stmmac_main.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/drivers/net/stmmac/stmmac_main.c b/drivers/net/stmmac/stmmac_main.c index a31d580f306d..acf061686940 100644 --- a/drivers/net/stmmac/stmmac_main.c +++ b/drivers/net/stmmac/stmmac_main.c | |||
@@ -1437,24 +1437,18 @@ static void stmmac_poll_controller(struct net_device *dev) | |||
1437 | static int stmmac_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | 1437 | static int stmmac_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) |
1438 | { | 1438 | { |
1439 | struct stmmac_priv *priv = netdev_priv(dev); | 1439 | struct stmmac_priv *priv = netdev_priv(dev); |
1440 | int ret = -EOPNOTSUPP; | 1440 | int ret; |
1441 | 1441 | ||
1442 | if (!netif_running(dev)) | 1442 | if (!netif_running(dev)) |
1443 | return -EINVAL; | 1443 | return -EINVAL; |
1444 | 1444 | ||
1445 | switch (cmd) { | 1445 | if (!priv->phydev) |
1446 | case SIOCGMIIPHY: | 1446 | return -EINVAL; |
1447 | case SIOCGMIIREG: | 1447 | |
1448 | case SIOCSMIIREG: | 1448 | spin_lock(&priv->lock); |
1449 | if (!priv->phydev) | 1449 | ret = phy_mii_ioctl(priv->phydev, rq, cmd); |
1450 | return -EINVAL; | 1450 | spin_unlock(&priv->lock); |
1451 | 1451 | ||
1452 | spin_lock(&priv->lock); | ||
1453 | ret = phy_mii_ioctl(priv->phydev, if_mii(rq), cmd); | ||
1454 | spin_unlock(&priv->lock); | ||
1455 | default: | ||
1456 | break; | ||
1457 | } | ||
1458 | return ret; | 1452 | return ret; |
1459 | } | 1453 | } |
1460 | 1454 | ||