]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: usb: introduce usbnet_mii_ioctl helper function
authorEthan Nelson-Moore <enelsonmoore@gmail.com>
Tue, 3 Feb 2026 01:34:55 +0000 (17:34 -0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 4 Feb 2026 03:41:19 +0000 (19:41 -0800)
Many USB network drivers use identical code to pass ioctl
requests on to the MII layer. Reduce code duplication by
refactoring this code into a helper function.

Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev> (v1)
Reviewed-by: Andrew Lunn <andrew@lunn.ch> (v3)
Signed-off-by: Ethan Nelson-Moore <enelsonmoore@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://patch.msgid.link/20260203013517.26170-1-enelsonmoore@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/usb/asix_devices.c
drivers/net/usb/ax88179_178a.c
drivers/net/usb/dm9601.c
drivers/net/usb/mcs7830.c
drivers/net/usb/smsc75xx.c
drivers/net/usb/sr9800.c
drivers/net/usb/usbnet.c
include/linux/usb/usbnet.h

index d8744291d84349e30e18e821f99960c8bc1fce40..7eb6e86adb16488a8b301a53485619941412e473 100644 (file)
@@ -97,13 +97,6 @@ static u32 asix_get_phyid(struct usbnet *dev)
        return phy_id;
 }
 
-static int asix_ioctl (struct net_device *net, struct ifreq *rq, int cmd)
-{
-       struct usbnet *dev = netdev_priv(net);
-
-       return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
-}
-
 /* We need to override some ethtool_ops so we require our
    own structure so we don't interfere with other usbnet
    devices that may be connected at the same time. */
@@ -190,7 +183,7 @@ static const struct net_device_ops ax88172_netdev_ops = {
        .ndo_get_stats64        = dev_get_tstats64,
        .ndo_set_mac_address    = eth_mac_addr,
        .ndo_validate_addr      = eth_validate_addr,
-       .ndo_eth_ioctl          = asix_ioctl,
+       .ndo_eth_ioctl          = usbnet_mii_ioctl,
        .ndo_set_rx_mode        = ax88172_set_multicast,
 };
 
@@ -1269,7 +1262,7 @@ static const struct net_device_ops ax88178_netdev_ops = {
        .ndo_set_mac_address    = asix_set_mac_address,
        .ndo_validate_addr      = eth_validate_addr,
        .ndo_set_rx_mode        = asix_set_multicast,
-       .ndo_eth_ioctl          = asix_ioctl,
+       .ndo_eth_ioctl          = usbnet_mii_ioctl,
        .ndo_change_mtu         = ax88178_change_mtu,
 };
 
index b034ef8a73ea7a1918873ae898d6c35c6422d006..0e9ae89b840e707e817153920074479b05c3245d 100644 (file)
@@ -847,12 +847,6 @@ static int ax88179_set_eee(struct net_device *net, struct ethtool_keee *edata)
        return ret;
 }
 
-static int ax88179_ioctl(struct net_device *net, struct ifreq *rq, int cmd)
-{
-       struct usbnet *dev = netdev_priv(net);
-       return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
-}
-
 static const struct ethtool_ops ax88179_ethtool_ops = {
        .get_link               = ethtool_op_get_link,
        .get_msglevel           = usbnet_get_msglevel,
@@ -998,7 +992,7 @@ static const struct net_device_ops ax88179_netdev_ops = {
        .ndo_change_mtu         = ax88179_change_mtu,
        .ndo_set_mac_address    = ax88179_set_mac_addr,
        .ndo_validate_addr      = eth_validate_addr,
-       .ndo_eth_ioctl          = ax88179_ioctl,
+       .ndo_eth_ioctl          = usbnet_mii_ioctl,
        .ndo_set_rx_mode        = ax88179_set_multicast,
        .ndo_set_features       = ax88179_set_features,
 };
index 9e5649cefcbc20e6dd6fdf19c6e44a71fe0fe26f..c8e0f886821006947266191e98117a91ae48119e 100644 (file)
@@ -259,13 +259,6 @@ static void dm9601_mdio_write(struct net_device *netdev, int phy_id, int loc,
        dm_write_shared_word(dev, 1, loc, res);
 }
 
-static int dm9601_ioctl(struct net_device *net, struct ifreq *rq, int cmd)
-{
-       struct usbnet *dev = netdev_priv(net);
-
-       return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
-}
-
 static const struct ethtool_ops dm9601_ethtool_ops = {
        .get_drvinfo    = usbnet_get_drvinfo,
        .get_link       = usbnet_get_link,
@@ -337,7 +330,7 @@ static const struct net_device_ops dm9601_netdev_ops = {
        .ndo_change_mtu         = usbnet_change_mtu,
        .ndo_get_stats64        = dev_get_tstats64,
        .ndo_validate_addr      = eth_validate_addr,
-       .ndo_eth_ioctl          = dm9601_ioctl,
+       .ndo_eth_ioctl          = usbnet_mii_ioctl,
        .ndo_set_rx_mode        = dm9601_set_multicast,
        .ndo_set_mac_address    = dm9601_set_mac_address,
 };
index 3a551ad363d063b5b3e331b3f35195682e3a732e..d6698f30218d827405b91dd481a52c49ae5ac924 100644 (file)
@@ -325,12 +325,6 @@ static void mcs7830_mdio_write(struct net_device *netdev, int phy_id,
        mcs7830_write_phy(dev, location, val);
 }
 
-static int mcs7830_ioctl(struct net_device *net, struct ifreq *rq, int cmd)
-{
-       struct usbnet *dev = netdev_priv(net);
-       return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
-}
-
 static inline struct mcs7830_data *mcs7830_get_data(struct usbnet *dev)
 {
        return (struct mcs7830_data *)&dev->data;
@@ -468,7 +462,7 @@ static const struct net_device_ops mcs7830_netdev_ops = {
        .ndo_change_mtu         = usbnet_change_mtu,
        .ndo_get_stats64        = dev_get_tstats64,
        .ndo_validate_addr      = eth_validate_addr,
-       .ndo_eth_ioctl          = mcs7830_ioctl,
+       .ndo_eth_ioctl          = usbnet_mii_ioctl,
        .ndo_set_rx_mode        = mcs7830_set_multicast,
        .ndo_set_mac_address    = mcs7830_set_mac_address,
 };
index fbc9d796f605680c4c1227647086ba9eaeaa8999..1a61a8bcf5d379fed5a5278a610590c120a12105 100644 (file)
@@ -743,12 +743,10 @@ static const struct ethtool_ops smsc75xx_ethtool_ops = {
 
 static int smsc75xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
 {
-       struct usbnet *dev = netdev_priv(netdev);
-
        if (!netif_running(netdev))
                return -EINVAL;
 
-       return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
+       return usbnet_mii_ioctl(netdev, rq, cmd);
 }
 
 static void smsc75xx_init_mac_address(struct usbnet *dev)
index e3f6233e5866f8d74b505508b7efe7859e7c85b8..6fd33a5b2279cb477c01c5e6b829317400ae07aa 100644 (file)
@@ -469,13 +469,6 @@ static int sr_get_eeprom(struct net_device *net,
        return 0;
 }
 
-static int sr_ioctl(struct net_device *net, struct ifreq *rq, int cmd)
-{
-       struct usbnet *dev = netdev_priv(net);
-
-       return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
-}
-
 static int sr_set_mac_address(struct net_device *net, void *p)
 {
        struct usbnet *dev = netdev_priv(net);
@@ -668,7 +661,7 @@ static const struct net_device_ops sr9800_netdev_ops = {
        .ndo_get_stats64        = dev_get_tstats64,
        .ndo_set_mac_address    = sr_set_mac_address,
        .ndo_validate_addr      = eth_validate_addr,
-       .ndo_eth_ioctl          = sr_ioctl,
+       .ndo_eth_ioctl          = usbnet_mii_ioctl,
        .ndo_set_rx_mode        = sr_set_multicast,
 };
 
index 9280ef544bbb90ffd1c49ae916bd005ed22ab01e..41b95b04143dc7dae8a7900ed1a838a72f3cc8f2 100644 (file)
@@ -1085,6 +1085,14 @@ int usbnet_nway_reset(struct net_device *net)
 }
 EXPORT_SYMBOL_GPL(usbnet_nway_reset);
 
+int usbnet_mii_ioctl(struct net_device *net, struct ifreq *rq, int cmd)
+{
+       struct usbnet *dev = netdev_priv(net);
+
+       return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
+}
+EXPORT_SYMBOL_GPL(usbnet_mii_ioctl);
+
 void usbnet_get_drvinfo(struct net_device *net, struct ethtool_drvinfo *info)
 {
        struct usbnet *dev = netdev_priv(net);
index 2945923a8a9584847db64f14cd04843da35e4c78..b0e84896e6aca3ff5a0284fbb2f5c3ebd41364e2 100644 (file)
@@ -290,6 +290,7 @@ extern u32 usbnet_get_msglevel(struct net_device *);
 extern void usbnet_set_msglevel(struct net_device *, u32);
 extern void usbnet_set_rx_mode(struct net_device *net);
 extern void usbnet_get_drvinfo(struct net_device *, struct ethtool_drvinfo *);
+extern int usbnet_mii_ioctl(struct net_device *net, struct ifreq *rq, int cmd);
 extern int usbnet_nway_reset(struct net_device *net);
 
 extern int usbnet_manage_power(struct usbnet *, int);