mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
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
@@ -229,6 +229,10 @@ ndo_siocdevprivate:
|
||||
This is used to implement SIOCDEVPRIVATE ioctl helpers.
|
||||
These should not be added to new drivers, so don't use.
|
||||
|
||||
ndo_eth_ioctl:
|
||||
Synchronization: rtnl_lock() semaphore.
|
||||
Context: process
|
||||
|
||||
ndo_get_stats:
|
||||
Synchronization: rtnl_lock() semaphore, dev_base_lock rwlock, or RCU.
|
||||
Context: atomic (can't sleep under rwlock or RCU)
|
||||
|
||||
@@ -625,7 +625,7 @@ interfaces of a DSA switch to share the same PHC.
|
||||
By design, PTP timestamping with a DSA switch does not need any special
|
||||
handling in the driver for the host port it is attached to. However, when the
|
||||
host port also supports PTP timestamping, DSA will take care of intercepting
|
||||
the ``.ndo_do_ioctl`` calls towards the host port, and block attempts to enable
|
||||
the ``.ndo_eth_ioctl`` calls towards the host port, and block attempts to enable
|
||||
hardware timestamping on it. This is because the SO_TIMESTAMPING API does not
|
||||
allow the delivery of multiple hardware timestamps for the same packet, so
|
||||
anybody else except for the DSA switch port must be prevented from doing so.
|
||||
@@ -688,7 +688,7 @@ ethtool ioctl operations for them need to be mediated by their respective MAC
|
||||
driver. Therefore, as opposed to DSA switches, modifications need to be done
|
||||
to each individual MAC driver for PHY timestamping support. This entails:
|
||||
|
||||
- Checking, in ``.ndo_do_ioctl``, whether ``phy_has_hwtstamp(netdev->phydev)``
|
||||
- Checking, in ``.ndo_eth_ioctl``, whether ``phy_has_hwtstamp(netdev->phydev)``
|
||||
is true or not. If it is, then the MAC driver should not process this request
|
||||
but instead pass it on to the PHY using ``phy_mii_ioctl()``.
|
||||
|
||||
@@ -747,7 +747,7 @@ For example, a typical driver design for TX timestamping might be to split the
|
||||
transmission part into 2 portions:
|
||||
|
||||
1. "TX": checks whether PTP timestamping has been previously enabled through
|
||||
the ``.ndo_do_ioctl`` ("``priv->hwtstamp_tx_enabled == true``") and the
|
||||
the ``.ndo_eth_ioctl`` ("``priv->hwtstamp_tx_enabled == true``") and the
|
||||
current skb requires a TX timestamp ("``skb_shinfo(skb)->tx_flags &
|
||||
SKBTX_HW_TSTAMP``"). If this is true, it sets the
|
||||
"``skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS``" flag. Note: as
|
||||
|
||||
@@ -1745,10 +1745,10 @@ static int ipoib_ioctl(struct net_device *dev, struct ifreq *ifr,
|
||||
{
|
||||
struct ipoib_dev_priv *priv = ipoib_priv(dev);
|
||||
|
||||
if (!priv->rn_ops->ndo_do_ioctl)
|
||||
if (!priv->rn_ops->ndo_eth_ioctl)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return priv->rn_ops->ndo_do_ioctl(dev, ifr, cmd);
|
||||
return priv->rn_ops->ndo_eth_ioctl(dev, ifr, cmd);
|
||||
}
|
||||
|
||||
static int ipoib_dev_init(struct net_device *dev)
|
||||
@@ -2078,7 +2078,7 @@ static const struct net_device_ops ipoib_netdev_ops_pf = {
|
||||
.ndo_set_vf_guid = ipoib_set_vf_guid,
|
||||
.ndo_set_mac_address = ipoib_set_mac,
|
||||
.ndo_get_stats64 = ipoib_get_stats,
|
||||
.ndo_do_ioctl = ipoib_ioctl,
|
||||
.ndo_eth_ioctl = ipoib_ioctl,
|
||||
};
|
||||
|
||||
static const struct net_device_ops ipoib_netdev_ops_vf = {
|
||||
@@ -2093,7 +2093,7 @@ static const struct net_device_ops ipoib_netdev_ops_vf = {
|
||||
.ndo_set_rx_mode = ipoib_set_mcast_list,
|
||||
.ndo_get_iflink = ipoib_get_iflink,
|
||||
.ndo_get_stats64 = ipoib_get_stats,
|
||||
.ndo_do_ioctl = ipoib_ioctl,
|
||||
.ndo_eth_ioctl = ipoib_ioctl,
|
||||
};
|
||||
|
||||
static const struct net_device_ops ipoib_netdev_default_pf = {
|
||||
|
||||
@@ -732,7 +732,7 @@ static int bond_check_dev_link(struct bonding *bond,
|
||||
BMSR_LSTATUS : 0;
|
||||
|
||||
/* Ethtool can't be used, fallback to MII ioctls. */
|
||||
ioctl = slave_ops->ndo_do_ioctl;
|
||||
ioctl = slave_ops->ndo_eth_ioctl;
|
||||
if (ioctl) {
|
||||
/* TODO: set pointer to correct ioctl on a per team member
|
||||
* bases to make this more efficient. that is, once
|
||||
@@ -756,7 +756,7 @@ static int bond_check_dev_link(struct bonding *bond,
|
||||
}
|
||||
}
|
||||
|
||||
/* If reporting, report that either there's no dev->do_ioctl,
|
||||
/* If reporting, report that either there's no ndo_eth_ioctl,
|
||||
* or both SIOCGMIIREG and get_link failed (meaning that we
|
||||
* cannot report link status). If not reporting, pretend
|
||||
* we're ok.
|
||||
@@ -1733,7 +1733,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
|
||||
|
||||
if (!bond->params.use_carrier &&
|
||||
slave_dev->ethtool_ops->get_link == NULL &&
|
||||
slave_ops->ndo_do_ioctl == NULL) {
|
||||
slave_ops->ndo_eth_ioctl == NULL) {
|
||||
slave_warn(bond_dev, slave_dev, "no link monitoring support\n");
|
||||
}
|
||||
|
||||
@@ -3962,20 +3962,13 @@ static void bond_get_stats(struct net_device *bond_dev,
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
static int bond_do_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cmd)
|
||||
static int bond_eth_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cmd)
|
||||
{
|
||||
struct bonding *bond = netdev_priv(bond_dev);
|
||||
struct net_device *slave_dev = NULL;
|
||||
struct ifbond k_binfo;
|
||||
struct ifbond __user *u_binfo = NULL;
|
||||
struct ifslave k_sinfo;
|
||||
struct ifslave __user *u_sinfo = NULL;
|
||||
struct mii_ioctl_data *mii = NULL;
|
||||
struct bond_opt_value newval;
|
||||
struct net *net;
|
||||
int res = 0;
|
||||
int res;
|
||||
|
||||
netdev_dbg(bond_dev, "bond_ioctl: cmd=%d\n", cmd);
|
||||
netdev_dbg(bond_dev, "bond_eth_ioctl: cmd=%d\n", cmd);
|
||||
|
||||
switch (cmd) {
|
||||
case SIOCGMIIPHY:
|
||||
@@ -4000,6 +3993,28 @@ static int bond_do_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cmd
|
||||
}
|
||||
|
||||
return 0;
|
||||
default:
|
||||
res = -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static int bond_do_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cmd)
|
||||
{
|
||||
struct bonding *bond = netdev_priv(bond_dev);
|
||||
struct net_device *slave_dev = NULL;
|
||||
struct ifbond k_binfo;
|
||||
struct ifbond __user *u_binfo = NULL;
|
||||
struct ifslave k_sinfo;
|
||||
struct ifslave __user *u_sinfo = NULL;
|
||||
struct bond_opt_value newval;
|
||||
struct net *net;
|
||||
int res = 0;
|
||||
|
||||
netdev_dbg(bond_dev, "bond_ioctl: cmd=%d\n", cmd);
|
||||
|
||||
switch (cmd) {
|
||||
case SIOCBONDINFOQUERY:
|
||||
u_binfo = (struct ifbond __user *)ifr->ifr_data;
|
||||
|
||||
@@ -4972,6 +4987,7 @@ static const struct net_device_ops bond_netdev_ops = {
|
||||
.ndo_start_xmit = bond_start_xmit,
|
||||
.ndo_select_queue = bond_select_queue,
|
||||
.ndo_get_stats64 = bond_get_stats,
|
||||
.ndo_eth_ioctl = bond_eth_ioctl,
|
||||
.ndo_do_ioctl = bond_do_ioctl,
|
||||
.ndo_siocdevprivate = bond_siocdevprivate,
|
||||
.ndo_change_rx_flags = bond_change_rx_flags,
|
||||
|
||||
@@ -252,7 +252,7 @@ static const struct net_device_ops el3_netdev_ops = {
|
||||
.ndo_start_xmit = el3_start_xmit,
|
||||
.ndo_tx_timeout = el3_tx_timeout,
|
||||
.ndo_get_stats = el3_get_stats,
|
||||
.ndo_do_ioctl = el3_ioctl,
|
||||
.ndo_eth_ioctl = el3_ioctl,
|
||||
.ndo_set_rx_mode = set_multicast_list,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
|
||||
@@ -1052,7 +1052,7 @@ static const struct net_device_ops boomrang_netdev_ops = {
|
||||
.ndo_tx_timeout = vortex_tx_timeout,
|
||||
.ndo_get_stats = vortex_get_stats,
|
||||
#ifdef CONFIG_PCI
|
||||
.ndo_do_ioctl = vortex_ioctl,
|
||||
.ndo_eth_ioctl = vortex_ioctl,
|
||||
#endif
|
||||
.ndo_set_rx_mode = set_rx_mode,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
@@ -1069,7 +1069,7 @@ static const struct net_device_ops vortex_netdev_ops = {
|
||||
.ndo_tx_timeout = vortex_tx_timeout,
|
||||
.ndo_get_stats = vortex_get_stats,
|
||||
#ifdef CONFIG_PCI
|
||||
.ndo_do_ioctl = vortex_ioctl,
|
||||
.ndo_eth_ioctl = vortex_ioctl,
|
||||
#endif
|
||||
.ndo_set_rx_mode = set_rx_mode,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
|
||||
@@ -635,7 +635,7 @@ static void ax_eeprom_register_write(struct eeprom_93cx6 *eeprom)
|
||||
static const struct net_device_ops ax_netdev_ops = {
|
||||
.ndo_open = ax_open,
|
||||
.ndo_stop = ax_close,
|
||||
.ndo_do_ioctl = ax_ioctl,
|
||||
.ndo_eth_ioctl = ax_ioctl,
|
||||
|
||||
.ndo_start_xmit = ax_ei_start_xmit,
|
||||
.ndo_tx_timeout = ax_ei_tx_timeout,
|
||||
|
||||
@@ -128,7 +128,7 @@ static inline struct axnet_dev *PRIV(struct net_device *dev)
|
||||
static const struct net_device_ops axnet_netdev_ops = {
|
||||
.ndo_open = axnet_open,
|
||||
.ndo_stop = axnet_close,
|
||||
.ndo_do_ioctl = axnet_ioctl,
|
||||
.ndo_eth_ioctl = axnet_ioctl,
|
||||
.ndo_start_xmit = axnet_start_xmit,
|
||||
.ndo_tx_timeout = axnet_tx_timeout,
|
||||
.ndo_get_stats = get_stats,
|
||||
|
||||
@@ -223,7 +223,7 @@ static const struct net_device_ops pcnet_netdev_ops = {
|
||||
.ndo_set_config = set_config,
|
||||
.ndo_start_xmit = ei_start_xmit,
|
||||
.ndo_get_stats = ei_get_stats,
|
||||
.ndo_do_ioctl = ei_ioctl,
|
||||
.ndo_eth_ioctl = ei_ioctl,
|
||||
.ndo_set_rx_mode = ei_set_multicast_list,
|
||||
.ndo_tx_timeout = ei_tx_timeout,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
|
||||
@@ -1179,8 +1179,8 @@ static int owl_emac_ndo_set_mac_addr(struct net_device *netdev, void *addr)
|
||||
return owl_emac_setup_frame_xmit(netdev_priv(netdev));
|
||||
}
|
||||
|
||||
static int owl_emac_ndo_do_ioctl(struct net_device *netdev,
|
||||
struct ifreq *req, int cmd)
|
||||
static int owl_emac_ndo_eth_ioctl(struct net_device *netdev,
|
||||
struct ifreq *req, int cmd)
|
||||
{
|
||||
if (!netif_running(netdev))
|
||||
return -EINVAL;
|
||||
@@ -1224,7 +1224,7 @@ static const struct net_device_ops owl_emac_netdev_ops = {
|
||||
.ndo_set_rx_mode = owl_emac_ndo_set_rx_mode,
|
||||
.ndo_set_mac_address = owl_emac_ndo_set_mac_addr,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_do_ioctl = owl_emac_ndo_do_ioctl,
|
||||
.ndo_eth_ioctl = owl_emac_ndo_eth_ioctl,
|
||||
.ndo_tx_timeout = owl_emac_ndo_tx_timeout,
|
||||
.ndo_get_stats = owl_emac_ndo_get_stats,
|
||||
};
|
||||
|
||||
@@ -625,7 +625,7 @@ static const struct net_device_ops netdev_ops = {
|
||||
.ndo_tx_timeout = tx_timeout,
|
||||
.ndo_get_stats = get_stats,
|
||||
.ndo_set_rx_mode = set_rx_mode,
|
||||
.ndo_do_ioctl = netdev_ioctl,
|
||||
.ndo_eth_ioctl = netdev_ioctl,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
#ifdef VLAN_SUPPORT
|
||||
|
||||
@@ -3882,7 +3882,7 @@ static const struct net_device_ops et131x_netdev_ops = {
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_get_stats = et131x_stats,
|
||||
.ndo_do_ioctl = phy_do_ioctl,
|
||||
.ndo_eth_ioctl = phy_do_ioctl,
|
||||
};
|
||||
|
||||
static int et131x_pci_setup(struct pci_dev *pdev,
|
||||
|
||||
@@ -774,7 +774,7 @@ static const struct net_device_ops emac_netdev_ops = {
|
||||
.ndo_start_xmit = emac_start_xmit,
|
||||
.ndo_tx_timeout = emac_timeout,
|
||||
.ndo_set_rx_mode = emac_set_rx_mode,
|
||||
.ndo_do_ioctl = phy_do_ioctl_running,
|
||||
.ndo_eth_ioctl = phy_do_ioctl_running,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_set_mac_address = emac_set_mac_address,
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
|
||||
@@ -1729,7 +1729,7 @@ static const struct net_device_ops amd8111e_netdev_ops = {
|
||||
.ndo_set_rx_mode = amd8111e_set_multicast_list,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_set_mac_address = amd8111e_set_mac_address,
|
||||
.ndo_do_ioctl = amd8111e_ioctl,
|
||||
.ndo_eth_ioctl = amd8111e_ioctl,
|
||||
.ndo_change_mtu = amd8111e_change_mtu,
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
.ndo_poll_controller = amd8111e_poll,
|
||||
|
||||
@@ -1051,7 +1051,7 @@ static const struct net_device_ops au1000_netdev_ops = {
|
||||
.ndo_stop = au1000_close,
|
||||
.ndo_start_xmit = au1000_tx,
|
||||
.ndo_set_rx_mode = au1000_multicast_list,
|
||||
.ndo_do_ioctl = phy_do_ioctl_running,
|
||||
.ndo_eth_ioctl = phy_do_ioctl_running,
|
||||
.ndo_tx_timeout = au1000_tx_timeout,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
|
||||
@@ -1572,7 +1572,7 @@ static const struct net_device_ops pcnet32_netdev_ops = {
|
||||
.ndo_tx_timeout = pcnet32_tx_timeout,
|
||||
.ndo_get_stats = pcnet32_get_stats,
|
||||
.ndo_set_rx_mode = pcnet32_set_multicast_list,
|
||||
.ndo_do_ioctl = pcnet32_ioctl,
|
||||
.ndo_eth_ioctl = pcnet32_ioctl,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
|
||||
@@ -2284,7 +2284,7 @@ static const struct net_device_ops xgbe_netdev_ops = {
|
||||
.ndo_set_rx_mode = xgbe_set_rx_mode,
|
||||
.ndo_set_mac_address = xgbe_set_mac_address,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_do_ioctl = xgbe_ioctl,
|
||||
.ndo_eth_ioctl = xgbe_ioctl,
|
||||
.ndo_change_mtu = xgbe_change_mtu,
|
||||
.ndo_tx_timeout = xgbe_tx_timeout,
|
||||
.ndo_get_stats64 = xgbe_get_stats64,
|
||||
|
||||
@@ -421,7 +421,7 @@ static const struct net_device_ops aq_ndev_ops = {
|
||||
.ndo_change_mtu = aq_ndev_change_mtu,
|
||||
.ndo_set_mac_address = aq_ndev_set_mac_address,
|
||||
.ndo_set_features = aq_ndev_set_features,
|
||||
.ndo_do_ioctl = aq_ndev_ioctl,
|
||||
.ndo_eth_ioctl = aq_ndev_ioctl,
|
||||
.ndo_vlan_rx_add_vid = aq_ndo_vlan_rx_add_vid,
|
||||
.ndo_vlan_rx_kill_vid = aq_ndo_vlan_rx_kill_vid,
|
||||
.ndo_setup_tc = aq_ndo_setup_tc,
|
||||
|
||||
@@ -844,7 +844,7 @@ static const struct net_device_ops arc_emac_netdev_ops = {
|
||||
.ndo_set_mac_address = arc_emac_set_address,
|
||||
.ndo_get_stats = arc_emac_stats,
|
||||
.ndo_set_rx_mode = arc_emac_set_rx_mode,
|
||||
.ndo_do_ioctl = phy_do_ioctl_running,
|
||||
.ndo_eth_ioctl = phy_do_ioctl_running,
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
.ndo_poll_controller = arc_emac_poll_controller,
|
||||
#endif
|
||||
|
||||
@@ -1851,7 +1851,7 @@ static const struct net_device_ops ag71xx_netdev_ops = {
|
||||
.ndo_open = ag71xx_open,
|
||||
.ndo_stop = ag71xx_stop,
|
||||
.ndo_start_xmit = ag71xx_hard_start_xmit,
|
||||
.ndo_do_ioctl = phy_do_ioctl,
|
||||
.ndo_eth_ioctl = phy_do_ioctl,
|
||||
.ndo_tx_timeout = ag71xx_tx_timeout,
|
||||
.ndo_change_mtu = ag71xx_change_mtu,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user