summaryrefslogtreecommitdiff
path: root/net/core
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2007-09-16 01:41:06 +0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-11 03:51:17 +0400
commit88d3aafdae5c5e1d2dd9489a5c8a24e29d335f2e (patch)
tree272ce75c30a170420ac8bbfd679c3faed9f9d20a /net/core
parent09f75cd7bf13720738e6a196cc0107ce9a5bd5a0 (diff)
downloadlinux-88d3aafdae5c5e1d2dd9489a5c8a24e29d335f2e.tar.xz
[ETHTOOL] Provide default behaviors for a few ethtool sub-ioctls
For the operations get-tx-csum get-sg get-tso get-ufo the default ethtool_op_xxx behavior is fine for all drivers, so we permit op==NULL to imply the default behavior. This provides a more uniform behavior across all drivers, eliminating ethtool(8) "ioctl not supported" errors on older drivers that had not been updated for the latest sub-ioctls. The ethtool_op_xxx() functions are left exported, in case anyone wishes to call them directly from a driver-private implementation -- a not-uncommon case. Should an ethtool_op_xxx() helper remain unused for a while, except by net/core/ethtool.c, we can un-export it at a later date. [ Resolved conflicts with set/get value ethtool patch... -DaveM ] Signed-off-by: Jeff Garzik <jeff@garzik.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/ethtool.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index 0d0b13cc1dd3..1163eb2256d0 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -893,21 +893,27 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
break;
case ETHTOOL_GTXCSUM:
rc = ethtool_get_value(dev, useraddr, ethcmd,
- dev->ethtool_ops->get_tx_csum);
+ (dev->ethtool_ops->get_tx_csum ?
+ dev->ethtool_ops->get_tx_csum :
+ ethtool_op_get_tx_csum));
break;
case ETHTOOL_STXCSUM:
rc = ethtool_set_tx_csum(dev, useraddr);
break;
case ETHTOOL_GSG:
rc = ethtool_get_value(dev, useraddr, ethcmd,
- dev->ethtool_ops->get_sg);
+ (dev->ethtool_ops->get_sg ?
+ dev->ethtool_ops->get_sg :
+ ethtool_op_get_sg));
break;
case ETHTOOL_SSG:
rc = ethtool_set_sg(dev, useraddr);
break;
case ETHTOOL_GTSO:
rc = ethtool_get_value(dev, useraddr, ethcmd,
- dev->ethtool_ops->get_tso);
+ (dev->ethtool_ops->get_tso ?
+ dev->ethtool_ops->get_tso :
+ ethtool_op_get_tso));
break;
case ETHTOOL_STSO:
rc = ethtool_set_tso(dev, useraddr);
@@ -929,7 +935,9 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
break;
case ETHTOOL_GUFO:
rc = ethtool_get_value(dev, useraddr, ethcmd,
- dev->ethtool_ops->get_ufo);
+ (dev->ethtool_ops->get_ufo ?
+ dev->ethtool_ops->get_ufo :
+ ethtool_op_get_ufo));
break;
case ETHTOOL_SUFO:
rc = ethtool_set_ufo(dev, useraddr);