Commit 794eee25 authored by David S. Miller's avatar David S. Miller

Merge branch 'net-phy-add-generic-ndo_do_ioctl-handler-phy_do_ioctl'

Heiner Kallweit says:

====================
net: phy: add generic ndo_do_ioctl handler phy_do_ioctl

A number of network drivers has the same glue code to use phy_mii_ioctl
as ndo_do_ioctl handler. So let's add such a generic ndo_do_ioctl
handler to phylib. As first user convert r8169.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 4262c38d df007186
...@@ -2298,16 +2298,6 @@ static int rtl_set_mac_address(struct net_device *dev, void *p) ...@@ -2298,16 +2298,6 @@ static int rtl_set_mac_address(struct net_device *dev, void *p)
return 0; return 0;
} }
static int rtl8169_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{
struct rtl8169_private *tp = netdev_priv(dev);
if (!netif_running(dev))
return -ENODEV;
return phy_mii_ioctl(tp->phydev, ifr, cmd);
}
static void rtl_wol_suspend_quirk(struct rtl8169_private *tp) static void rtl_wol_suspend_quirk(struct rtl8169_private *tp)
{ {
switch (tp->mac_version) { switch (tp->mac_version) {
...@@ -5168,7 +5158,7 @@ static const struct net_device_ops rtl_netdev_ops = { ...@@ -5168,7 +5158,7 @@ static const struct net_device_ops rtl_netdev_ops = {
.ndo_fix_features = rtl8169_fix_features, .ndo_fix_features = rtl8169_fix_features,
.ndo_set_features = rtl8169_set_features, .ndo_set_features = rtl8169_set_features,
.ndo_set_mac_address = rtl_set_mac_address, .ndo_set_mac_address = rtl_set_mac_address,
.ndo_do_ioctl = rtl8169_ioctl, .ndo_do_ioctl = phy_do_ioctl,
.ndo_set_rx_mode = rtl_set_rx_mode, .ndo_set_rx_mode = rtl_set_rx_mode,
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
.ndo_poll_controller = rtl8169_netpoll, .ndo_poll_controller = rtl8169_netpoll,
......
...@@ -432,6 +432,21 @@ int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd) ...@@ -432,6 +432,21 @@ int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd)
} }
EXPORT_SYMBOL(phy_mii_ioctl); EXPORT_SYMBOL(phy_mii_ioctl);
/**
* 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(struct net_device *dev, struct ifreq *ifr, int cmd)
{
if (!netif_running(dev) || !dev->phydev)
return -ENODEV;
return phy_mii_ioctl(dev->phydev, ifr, cmd);
}
EXPORT_SYMBOL(phy_do_ioctl);
void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies) void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies)
{ {
mod_delayed_work(system_power_efficient_wq, &phydev->state_queue, mod_delayed_work(system_power_efficient_wq, &phydev->state_queue,
......
...@@ -1242,6 +1242,7 @@ void phy_ethtool_ksettings_get(struct phy_device *phydev, ...@@ -1242,6 +1242,7 @@ void phy_ethtool_ksettings_get(struct phy_device *phydev,
int phy_ethtool_ksettings_set(struct phy_device *phydev, int phy_ethtool_ksettings_set(struct phy_device *phydev,
const struct ethtool_link_ksettings *cmd); const struct ethtool_link_ksettings *cmd);
int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int 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);
void phy_request_interrupt(struct phy_device *phydev); void phy_request_interrupt(struct phy_device *phydev);
void phy_free_interrupt(struct phy_device *phydev); void phy_free_interrupt(struct phy_device *phydev);
void phy_print_status(struct phy_device *phydev); void phy_print_status(struct phy_device *phydev);
......
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