aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiner Kallweit <hkallweit1@gmail.com>2020-01-20 22:17:11 +0100
committerDavid S. Miller <davem@davemloft.net>2020-01-21 10:50:41 +0100
commitbbbf8430afe6906abbf879352fe10d24d380e588 (patch)
tree26f3313778fd98f972e996921ac79d8c5c2a87c0
parentnet: phy: rename phy_do_ioctl to phy_do_ioctl_running (diff)
downloadlinux-dev-bbbf8430afe6906abbf879352fe10d24d380e588.tar.xz
linux-dev-bbbf8430afe6906abbf879352fe10d24d380e588.zip
net: phy: add new version of phy_do_ioctl
Add a new version of phy_do_ioctl that doesn't check whether net_device is running. It will typically be used if suitable drivers attach the PHY in probe already. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/phy/phy.c16
-rw-r--r--include/linux/phy.h1
2 files changed, 14 insertions, 3 deletions
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index cf25fa3be123..d76e038cf2cb 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -433,18 +433,28 @@ int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd)
EXPORT_SYMBOL(phy_mii_ioctl);
/**
- * phy_do_ioctl_running - generic ndo_do_ioctl implementation
+ * phy_do_ioctl - generic ndo_do_ioctl implementation
* @dev: the net_device struct
* @ifr: &struct ifreq for socket ioctl's
* @cmd: ioctl cmd to execute
*/
-int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd)
+int phy_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{
- if (!netif_running(dev) || !dev->phydev)
+ if (!dev->phydev)
return -ENODEV;
return phy_mii_ioctl(dev->phydev, ifr, cmd);
}
+EXPORT_SYMBOL(phy_do_ioctl);
+
+/* same as phy_do_ioctl, but ensures that net_device is running */
+int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd)
+{
+ if (!netif_running(dev))
+ return -ENODEV;
+
+ return phy_do_ioctl(dev, ifr, cmd);
+}
EXPORT_SYMBOL(phy_do_ioctl_running);
void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies)
diff --git a/include/linux/phy.h b/include/linux/phy.h
index f6e714da37d8..c570e162e05e 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -1242,6 +1242,7 @@ void phy_ethtool_ksettings_get(struct phy_device *phydev,
int phy_ethtool_ksettings_set(struct phy_device *phydev,
const struct ethtool_link_ksettings *cmd);
int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
+int phy_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd);
void phy_request_interrupt(struct phy_device *phydev);
void phy_free_interrupt(struct phy_device *phydev);