From a086d60f386829bc2bce35201404a4712abd64d7 Mon Sep 17 00:00:00 2001 From: Alexander Viro Date: Fri, 4 Jun 2004 00:10:38 -0700 Subject: [PATCH] [PATCH] sparse: if_mii() helper (from jgarzik) From: Jeff Garzik Jeff's patch adds a helper for obtaining mii_ioctl_data from ifreq and switches drivers to it. It's almost a "move common expression into inline helper", except that instead of (struct mii_ioctl_data *)&rq->ifr_ifru.ifru_data it does (struct mii_ioctl_data *)&rq->ifr_ifru - pointer to union instead of pointer to a field of union that has nothing to do with mii_ioctl_data *and* adds confusion by being a pointer itself. --- arch/cris/arch-v10/drivers/ethernet.c | 4 ++-- drivers/net/3c59x.c | 2 +- drivers/net/8139cp.c | 3 +-- drivers/net/8139too.c | 3 +-- drivers/net/amd8111e.c | 2 +- drivers/net/b44.c | 2 +- drivers/net/bonding/bond_main.c | 6 +++--- drivers/net/e100.c | 3 +-- drivers/net/e1000/e1000_main.c | 2 +- drivers/net/eepro100.c | 2 +- drivers/net/epic100.c | 2 +- drivers/net/fealnx.c | 3 +-- drivers/net/hamachi.c | 2 +- drivers/net/ioc3-eth.c | 3 +-- drivers/net/natsemi.c | 2 +- drivers/net/pci-skeleton.c | 2 +- drivers/net/pcmcia/smc91c92_cs.c | 2 +- drivers/net/pcnet32.c | 3 +-- drivers/net/sis900.c | 2 +- drivers/net/starfire.c | 2 +- drivers/net/sundance.c | 3 +-- drivers/net/sungem.c | 2 +- drivers/net/tg3.c | 2 +- drivers/net/tlan.c | 2 +- drivers/net/tulip/tulip_core.c | 2 +- drivers/net/tulip/winbond-840.c | 4 ++-- drivers/net/via-rhine.c | 3 +-- drivers/net/yellowfin.c | 2 +- drivers/s390/net/qeth_main.c | 6 +++--- drivers/usb/net/usbnet.c | 4 +--- include/linux/mii.h | 7 +++++++ 31 files changed, 43 insertions(+), 46 deletions(-) diff --git a/arch/cris/arch-v10/drivers/ethernet.c b/arch/cris/arch-v10/drivers/ethernet.c index e13b754a27a64..f258c00085fcb 100644 --- a/arch/cris/arch-v10/drivers/ethernet.c +++ b/arch/cris/arch-v10/drivers/ethernet.c @@ -1396,8 +1396,8 @@ e100_close(struct net_device *dev) static int e100_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&ifr->ifr_data; - struct net_local *np = (struct net_local *)dev->priv; + struct mii_ioctl_data *data = if_mii(ifr); + struct net_local *np = netdev_priv(dev); spin_lock(&np->lock); /* Preempt protection */ switch (cmd) { diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c index 761a3ea3376b7..a450864a92b4a 100644 --- a/drivers/net/3c59x.c +++ b/drivers/net/3c59x.c @@ -2873,7 +2873,7 @@ static int vortex_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct vortex_private *vp = netdev_priv(dev); long ioaddr = dev->base_addr; - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data; + struct mii_ioctl_data *data = if_mii(rq); int phy = vp->phys[0] & 0x1f; int retval; diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c index da983661221fa..62dd139511711 100644 --- a/drivers/net/8139cp.c +++ b/drivers/net/8139cp.c @@ -1546,7 +1546,6 @@ static struct ethtool_ops cp_ethtool_ops = { static int cp_ioctl (struct net_device *dev, struct ifreq *rq, int cmd) { struct cp_private *cp = netdev_priv(dev); - struct mii_ioctl_data *mii = (struct mii_ioctl_data *) &rq->ifr_data; int rc; unsigned long flags; @@ -1554,7 +1553,7 @@ static int cp_ioctl (struct net_device *dev, struct ifreq *rq, int cmd) return -EINVAL; spin_lock_irqsave(&cp->lock, flags); - rc = generic_mii_ioctl(&cp->mii_if, mii, cmd, NULL); + rc = generic_mii_ioctl(&cp->mii_if, if_mii(rq), cmd, NULL); spin_unlock_irqrestore(&cp->lock, flags); return rc; } diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c index 511c2c814ae8f..83a1bd11bb8dd 100644 --- a/drivers/net/8139too.c +++ b/drivers/net/8139too.c @@ -2458,14 +2458,13 @@ static struct ethtool_ops rtl8139_ethtool_ops = { static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct rtl8139_private *np = dev->priv; - struct mii_ioctl_data *data = (struct mii_ioctl_data *) & rq->ifr_data; int rc; if (!netif_running(dev)) return -EINVAL; spin_lock_irq(&np->lock); - rc = generic_mii_ioctl(&np->mii, data, cmd, NULL); + rc = generic_mii_ioctl(&np->mii, if_mii(rq), cmd, NULL); spin_unlock_irq(&np->lock); return rc; diff --git a/drivers/net/amd8111e.c b/drivers/net/amd8111e.c index 5f3ee136a2e87..7b96c017d3627 100755 --- a/drivers/net/amd8111e.c +++ b/drivers/net/amd8111e.c @@ -1694,7 +1694,7 @@ static int amd8111e_ethtool_ioctl(struct net_device* dev, void __user *useraddr) } static int amd8111e_ioctl(struct net_device * dev , struct ifreq *ifr, int cmd) { - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&ifr->ifr_data; + struct mii_ioctl_data *data = if_mii(ifr); struct amd8111e_priv *lp = netdev_priv(dev); int err; u32 mii_regval; diff --git a/drivers/net/b44.c b/drivers/net/b44.c index 531568949024a..ba1d4fc9aa99c 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c @@ -1633,7 +1633,7 @@ static struct ethtool_ops b44_ethtool_ops = { static int b44_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { - struct mii_ioctl_data __user *data = ifr->ifr_data; + struct mii_ioctl_data *data = if_mii(ifr); struct b44 *bp = netdev_priv(dev); int err; diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 9ed2387605256..6e57c14342308 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -1103,7 +1103,7 @@ static int bond_check_dev_link(struct bonding *bond, struct net_device *slave_de /* Yes, the mii is overlaid on the ifreq.ifr_ifru */ strncpy(ifr.ifr_name, slave_dev->name, IFNAMSIZ); - mii = (struct mii_ioctl_data *)&ifr.ifr_data; + mii = if_mii(&ifr); if (IOCTL(slave_dev, &ifr, SIOCGMIIPHY) == 0) { mii->reg_num = MII_BMSR; if (IOCTL(slave_dev, &ifr, SIOCGMIIREG) == 0) { @@ -3682,7 +3682,7 @@ static int bond_do_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cmd case SIOCETHTOOL: return bond_ethtool_ioctl(bond_dev, ifr); case SIOCGMIIPHY: - mii = (struct mii_ioctl_data *)&ifr->ifr_data; + mii = if_mii(ifr); if (!mii) { return -EINVAL; } @@ -3693,7 +3693,7 @@ static int bond_do_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cmd * We do this again just in case we were called by SIOCGMIIREG * instead of SIOCGMIIPHY. */ - mii = (struct mii_ioctl_data *)&ifr->ifr_data; + mii = if_mii(ifr); if (!mii) { return -EINVAL; } diff --git a/drivers/net/e100.c b/drivers/net/e100.c index 4b95580683364..0698343c29451 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c @@ -2075,9 +2075,8 @@ static struct ethtool_ops e100_ethtool_ops = { static int e100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) { struct nic *nic = netdev_priv(netdev); - struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&ifr->ifr_data; - return generic_mii_ioctl(&nic->mii, mii, cmd, NULL); + return generic_mii_ioctl(&nic->mii, if_mii(ifr), cmd, NULL); } static int e100_alloc(struct nic *nic) diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 8a8173c6aff32..9000745cd2778 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c @@ -2503,7 +2503,7 @@ static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) { struct e1000_adapter *adapter = netdev->priv; - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&ifr->ifr_data; + struct mii_ioctl_data *data = if_mii(ifr); int retval; uint16_t mii_reg; uint16_t spddplx; diff --git a/drivers/net/eepro100.c b/drivers/net/eepro100.c index 70b3adc767674..56fc87881626b 100644 --- a/drivers/net/eepro100.c +++ b/drivers/net/eepro100.c @@ -2096,7 +2096,7 @@ static int netdev_ethtool_ioctl(struct net_device *dev, void __user *useraddr) static int speedo_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct speedo_private *sp = netdev_priv(dev); - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data; + struct mii_ioctl_data *data = if_mii(rq); int phy = sp->phy[0] & 0x1f; int saved_acpi; int t; diff --git a/drivers/net/epic100.c b/drivers/net/epic100.c index cf7ae05696b82..54a2dc3604883 100644 --- a/drivers/net/epic100.c +++ b/drivers/net/epic100.c @@ -1440,7 +1440,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct epic_private *np = dev->priv; long ioaddr = dev->base_addr; - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data; + struct mii_ioctl_data *data = if_mii(rq); int rc; /* power-up, if interface is down */ diff --git a/drivers/net/fealnx.c b/drivers/net/fealnx.c index b81777d757a79..b0fbb861c4da6 100644 --- a/drivers/net/fealnx.c +++ b/drivers/net/fealnx.c @@ -1923,14 +1923,13 @@ static struct ethtool_ops netdev_ethtool_ops = { static int mii_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct netdev_private *np = dev->priv; - struct mii_ioctl_data *data = (struct mii_ioctl_data *) & rq->ifr_data; int rc; if (!netif_running(dev)) return -EINVAL; spin_lock_irq(&np->lock); - rc = generic_mii_ioctl(&np->mii, data, cmd, NULL); + rc = generic_mii_ioctl(&np->mii, if_mii(rq), cmd, NULL); spin_unlock_irq(&np->lock); return rc; diff --git a/drivers/net/hamachi.c b/drivers/net/hamachi.c index 27c120ad6ca35..32fe8e5311ccd 100644 --- a/drivers/net/hamachi.c +++ b/drivers/net/hamachi.c @@ -1937,7 +1937,7 @@ static int netdev_ethtool_ioctl(struct net_device *dev, void __user *useraddr) static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct hamachi_private *np = dev->priv; - struct mii_ioctl_data *data = (struct mii_ioctl_data *) & rq->ifr_data; + struct mii_ioctl_data *data = if_mii(rq); int rc; if (!netif_running(dev)) diff --git a/drivers/net/ioc3-eth.c b/drivers/net/ioc3-eth.c index 654fd6907bef6..a93cda669010b 100644 --- a/drivers/net/ioc3-eth.c +++ b/drivers/net/ioc3-eth.c @@ -1529,12 +1529,11 @@ static struct ethtool_ops ioc3_ethtool_ops = { static int ioc3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { - struct mii_ioctl_data *data = (struct mii_ioctl_data *) & rq->ifr_data; struct ioc3_private *ip = netdev_priv(dev); int rc; spin_lock_irq(&ip->ioc3_lock); - rc = generic_mii_ioctl(&ip->mii, data, cmd, NULL); + rc = generic_mii_ioctl(&ip->mii, if_mii(rq), cmd, NULL); spin_unlock_irq(&ip->ioc3_lock); return rc; diff --git a/drivers/net/natsemi.c b/drivers/net/natsemi.c index a154b18bd25bd..8c45911fec230 100644 --- a/drivers/net/natsemi.c +++ b/drivers/net/natsemi.c @@ -2417,7 +2417,7 @@ static int netdev_get_eeprom(struct net_device *dev, u8 *buf) static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data; + struct mii_ioctl_data *data = if_mii(rq); switch(cmd) { case SIOCETHTOOL: diff --git a/drivers/net/pci-skeleton.c b/drivers/net/pci-skeleton.c index 28d8b5342898c..2385386602d4b 100644 --- a/drivers/net/pci-skeleton.c +++ b/drivers/net/pci-skeleton.c @@ -1778,7 +1778,7 @@ static int netdrv_close (struct net_device *dev) static int netdrv_ioctl (struct net_device *dev, struct ifreq *rq, int cmd) { struct netdrv_private *tp = dev->priv; - struct mii_ioctl_data *data = (struct mii_ioctl_data *) & rq->ifr_data; + struct mii_ioctl_data *data = if_mii(rq); unsigned long flags; int rc = 0; diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c index e848b4942b993..7c1bd346e09d1 100644 --- a/drivers/net/pcmcia/smc91c92_cs.c +++ b/drivers/net/pcmcia/smc91c92_cs.c @@ -2221,7 +2221,7 @@ static int smc_ioctl (struct net_device *dev, struct ifreq *rq, int cmd) u_short saved_bank; ioaddr_t ioaddr = dev->base_addr; - mii = (struct mii_ioctl_data *) &rq->ifr_data; + mii = if_mii(rq); if (!netif_running(dev)) return -EINVAL; diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c index 511bc109b6de0..bdf90d4e602f8 100644 --- a/drivers/net/pcnet32.c +++ b/drivers/net/pcnet32.c @@ -2170,14 +2170,13 @@ static void mdio_write(struct net_device *dev, int phy_id, int reg_num, int val) static int pcnet32_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct pcnet32_private *lp = dev->priv; - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data; int rc; unsigned long flags; /* SIOC[GS]MIIxxx ioctls */ if (lp->mii) { spin_lock_irqsave(&lp->lock, flags); - rc = generic_mii_ioctl(&lp->mii_if, data, cmd, NULL); + rc = generic_mii_ioctl(&lp->mii_if, if_mii(rq), cmd, NULL); spin_unlock_irqrestore(&lp->lock, flags); } else { rc = -EOPNOTSUPP; diff --git a/drivers/net/sis900.c b/drivers/net/sis900.c index 05479dd808e3d..aa045b62c3354 100644 --- a/drivers/net/sis900.c +++ b/drivers/net/sis900.c @@ -1893,7 +1893,7 @@ static struct ethtool_ops sis900_ethtool_ops = { static int mii_ioctl(struct net_device *net_dev, struct ifreq *rq, int cmd) { struct sis900_private *sis_priv = net_dev->priv; - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data; + struct mii_ioctl_data *data = if_mii(rq); switch(cmd) { case SIOCGMIIPHY: /* Get address of MII PHY in use. */ diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index 1f99fb1eabccb..0eb660aa732c3 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c @@ -2079,7 +2079,6 @@ static int netdev_ethtool_ioctl(struct net_device *dev, void __user *useraddr) static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct netdev_private *np = dev->priv; - struct mii_ioctl_data *data = (struct mii_ioctl_data *) & rq->ifr_data; int rc; if (!netif_running(dev)) @@ -2089,6 +2088,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) rc = netdev_ethtool_ioctl(dev, rq->ifr_data); else { + struct mii_ioctl_data *data = if_mii(rq); spin_lock_irq(&np->lock); rc = generic_mii_ioctl(&np->mii_if, data, cmd, NULL); spin_unlock_irq(&np->lock); diff --git a/drivers/net/sundance.c b/drivers/net/sundance.c index 130f4d6954bbc..e5069fca17920 100644 --- a/drivers/net/sundance.c +++ b/drivers/net/sundance.c @@ -1659,7 +1659,6 @@ static int netdev_ethtool_ioctl(struct net_device *dev, void __user *useraddr) static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct netdev_private *np = dev->priv; - struct mii_ioctl_data *data = (struct mii_ioctl_data *) & rq->ifr_data; int rc; int i; long ioaddr = dev->base_addr; @@ -1672,7 +1671,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) else { spin_lock_irq(&np->lock); - rc = generic_mii_ioctl(&np->mii_if, data, cmd, NULL); + rc = generic_mii_ioctl(&np->mii_if, if_mii(rq), cmd, NULL); spin_unlock_irq(&np->lock); } switch (cmd) { diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c index 36ddb6d84ca00..cb890cd3e0359 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c @@ -2510,7 +2510,7 @@ static struct ethtool_ops gem_ethtool_ops = { static int gem_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { struct gem *gp = dev->priv; - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&ifr->ifr_data; + struct mii_ioctl_data *data = if_mii(ifr); int rc = -EOPNOTSUPP; /* Hold the PM semaphore while doing ioctl's or we may collide diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 20ba895dc424a..9ef37fc890ea6 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c @@ -6678,7 +6678,7 @@ static void tg3_get_ethtool_stats (struct net_device *dev, static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&ifr->ifr_data; + struct mii_ioctl_data *data = if_mii(ifr); struct tg3 *tp = netdev_priv(dev); int err; diff --git a/drivers/net/tlan.c b/drivers/net/tlan.c index 3c10d2a98715c..4c57ab2909252 100644 --- a/drivers/net/tlan.c +++ b/drivers/net/tlan.c @@ -984,7 +984,7 @@ static int TLan_Open( struct net_device *dev ) static int TLan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { TLanPrivateInfo *priv = dev->priv; - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data; + struct mii_ioctl_data *data = if_mii(rq); u32 phy = priv->phy[priv->phyNum]; if (!priv->phyOnline) diff --git a/drivers/net/tulip/tulip_core.c b/drivers/net/tulip/tulip_core.c index 76994b06267f1..498f612cf59d3 100644 --- a/drivers/net/tulip/tulip_core.c +++ b/drivers/net/tulip/tulip_core.c @@ -859,7 +859,7 @@ static int private_ioctl (struct net_device *dev, struct ifreq *rq, int cmd) { struct tulip_private *tp = netdev_priv(dev); long ioaddr = dev->base_addr; - struct mii_ioctl_data *data = (struct mii_ioctl_data *) & rq->ifr_data; + struct mii_ioctl_data *data = if_mii(rq); const unsigned int phy_idx = 0; int phy = tp->phys[phy_idx] & 0x1f; unsigned int regnum = data->reg_num; diff --git a/drivers/net/tulip/winbond-840.c b/drivers/net/tulip/winbond-840.c index 74d42535c3f3f..f5aeb3dda9583 100644 --- a/drivers/net/tulip/winbond-840.c +++ b/drivers/net/tulip/winbond-840.c @@ -1526,8 +1526,8 @@ static struct ethtool_ops netdev_ethtool_ops = { static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data; - struct netdev_private *np = dev->priv; + struct mii_ioctl_data *data = if_mii(rq); + struct netdev_private *np = netdev_priv(dev); switch(cmd) { case SIOCGMIIPHY: /* Get address of MII PHY in use. */ diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c index d399b347dec5a..721e92f49ee0d 100644 --- a/drivers/net/via-rhine.c +++ b/drivers/net/via-rhine.c @@ -1875,14 +1875,13 @@ static struct ethtool_ops netdev_ethtool_ops = { static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct rhine_private *rp = netdev_priv(dev); - struct mii_ioctl_data *data = (struct mii_ioctl_data *) & rq->ifr_data; int rc; if (!netif_running(dev)) return -EINVAL; spin_lock_irq(&rp->lock); - rc = generic_mii_ioctl(&rp->mii_if, data, cmd, NULL); + rc = generic_mii_ioctl(&rp->mii_if, if_mii(rq), cmd, NULL); spin_unlock_irq(&rp->lock); return rc; diff --git a/drivers/net/yellowfin.c b/drivers/net/yellowfin.c index b058f5a55468c..81e97947c4b9f 100644 --- a/drivers/net/yellowfin.c +++ b/drivers/net/yellowfin.c @@ -1433,7 +1433,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct yellowfin_private *np = dev->priv; long ioaddr = dev->base_addr; - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data; + struct mii_ioctl_data *data = if_mii(rq); switch(cmd) { case SIOCETHTOOL: diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index ee7b0bcc22575..aa76a13d8b070 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c @@ -4484,11 +4484,11 @@ qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) return 0; break; case SIOCGMIIPHY: - mii_data = (struct mii_ioctl_data *) &rq->ifr_ifru.ifru_data; + mii_data = if_mii(rq); mii_data->phy_id = 0; break; case SIOCGMIIREG: - mii_data = (struct mii_ioctl_data *) &rq->ifr_ifru.ifru_data; + mii_data = if_mii(rq); if (mii_data->phy_id != 0) rc = -EINVAL; else @@ -4503,7 +4503,7 @@ qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) rc = -EPERM; break; } - mii_data = (struct mii_ioctl_data *) &rq->ifr_ifru.ifru_data; + mii_data = if_mii(rq); if (mii_data->phy_id != 0) rc = -EINVAL; else diff --git a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c index e2e328f331ddb..557edde67c79d 100644 --- a/drivers/usb/net/usbnet.c +++ b/drivers/usb/net/usbnet.c @@ -2668,9 +2668,7 @@ static int usbnet_ioctl (struct net_device *net, struct ifreq *rq, int cmd) struct usbnet *dev = (struct usbnet *)net->priv; if (dev->mii.mdio_read != NULL && dev->mii.mdio_write != NULL) - return generic_mii_ioctl(&dev->mii, - (struct mii_ioctl_data *) &rq->ifr_data, - cmd, NULL); + return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL); } #endif return -EOPNOTSUPP; diff --git a/include/linux/mii.h b/include/linux/mii.h index 9a5799601ee3e..c87b17ff2cc36 100644 --- a/include/linux/mii.h +++ b/include/linux/mii.h @@ -9,6 +9,7 @@ #define __LINUX_MII_H__ #include +#include /* Generic MII registers. */ @@ -144,6 +145,12 @@ struct mii_ioctl_data { }; +static inline struct mii_ioctl_data *if_mii(struct ifreq *rq) +{ + return (struct mii_ioctl_data *) &rq->ifr_ifru; +} + + /** * mii_nway_result * @negotiated: value of MII ANAR and'd with ANLPAR -- 2.53.0