dev_ioctl: split out ndo_eth_ioctl
Most users of ndo_do_ioctl are ethernet drivers that implement the MII commands SIOCGMIIPHY/SIOCGMIIREG/SIOCSMIIREG, or hardware timestamping with SIOCSHWTSTAMP/SIOCGHWTSTAMP. Separate these from the few drivers that use ndo_do_ioctl to implement SIOCBOND, SIOCBR and SIOCWANDEV commands. This is a purely cosmetic change intended to help readers find their way through the implementation. Cc: Doug Ledford <dledford@redhat.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jay Vosburgh <j.vosburgh@gmail.com> Cc: Veaceslav Falico <vfalico@gmail.com> Cc: Andy Gospodarek <andy@greyhouse.net> Cc: Andrew Lunn <andrew@lunn.ch> Cc: Vivien Didelot <vivien.didelot@gmail.com> Cc: Florian Fainelli <f.fainelli@gmail.com> Cc: Vladimir Oltean <olteanv@gmail.com> Cc: Leon Romanovsky <leon@kernel.org> Cc: linux-rdma@vger.kernel.org Signed-off-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Jason Gunthorpe <jgg@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
a554bf96b4
commit
a76053707d
@@ -239,19 +239,19 @@ static int net_hwtstamp_validate(struct ifreq *ifr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dev_do_ioctl(struct net_device *dev,
|
||||
struct ifreq *ifr, unsigned int cmd)
|
||||
static int dev_eth_ioctl(struct net_device *dev,
|
||||
struct ifreq *ifr, unsigned int cmd)
|
||||
{
|
||||
const struct net_device_ops *ops = dev->netdev_ops;
|
||||
int err;
|
||||
|
||||
err = dsa_ndo_do_ioctl(dev, ifr, cmd);
|
||||
err = dsa_ndo_eth_ioctl(dev, ifr, cmd);
|
||||
if (err == 0 || err != -EOPNOTSUPP)
|
||||
return err;
|
||||
|
||||
if (ops->ndo_do_ioctl) {
|
||||
if (ops->ndo_eth_ioctl) {
|
||||
if (netif_device_present(dev))
|
||||
err = ops->ndo_do_ioctl(dev, ifr, cmd);
|
||||
err = ops->ndo_eth_ioctl(dev, ifr, cmd);
|
||||
else
|
||||
err = -ENODEV;
|
||||
}
|
||||
@@ -259,6 +259,21 @@ static int dev_do_ioctl(struct net_device *dev,
|
||||
return err;
|
||||
}
|
||||
|
||||
static int dev_do_ioctl(struct net_device *dev,
|
||||
struct ifreq *ifr, unsigned int cmd)
|
||||
{
|
||||
const struct net_device_ops *ops = dev->netdev_ops;
|
||||
|
||||
if (ops->ndo_do_ioctl) {
|
||||
if (netif_device_present(dev))
|
||||
return ops->ndo_do_ioctl(dev, ifr, cmd);
|
||||
else
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static int dev_siocdevprivate(struct net_device *dev, struct ifreq *ifr,
|
||||
void __user *data, unsigned int cmd)
|
||||
{
|
||||
@@ -358,19 +373,20 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, void __user *data,
|
||||
cmd <= SIOCDEVPRIVATE + 15)
|
||||
return dev_siocdevprivate(dev, ifr, data, cmd);
|
||||
|
||||
if (cmd == SIOCBONDENSLAVE ||
|
||||
if (cmd == SIOCGMIIPHY ||
|
||||
cmd == SIOCGMIIREG ||
|
||||
cmd == SIOCSMIIREG ||
|
||||
cmd == SIOCSHWTSTAMP ||
|
||||
cmd == SIOCGHWTSTAMP) {
|
||||
err = dev_eth_ioctl(dev, ifr, cmd);
|
||||
} else if (cmd == SIOCBONDENSLAVE ||
|
||||
cmd == SIOCBONDRELEASE ||
|
||||
cmd == SIOCBONDSETHWADDR ||
|
||||
cmd == SIOCBONDSLAVEINFOQUERY ||
|
||||
cmd == SIOCBONDINFOQUERY ||
|
||||
cmd == SIOCBONDCHANGEACTIVE ||
|
||||
cmd == SIOCGMIIPHY ||
|
||||
cmd == SIOCGMIIREG ||
|
||||
cmd == SIOCSMIIREG ||
|
||||
cmd == SIOCBRADDIF ||
|
||||
cmd == SIOCBRDELIF ||
|
||||
cmd == SIOCSHWTSTAMP ||
|
||||
cmd == SIOCGHWTSTAMP ||
|
||||
cmd == SIOCWANDEV) {
|
||||
err = dev_do_ioctl(dev, ifr, cmd);
|
||||
} else
|
||||
|
Reference in New Issue
Block a user