ethtool: Add reset operation
[pandora-kernel.git] / net / core / ethtool.c
index e195108..d8aee58 100644 (file)
@@ -302,6 +302,26 @@ static int ethtool_get_regs(struct net_device *dev, char __user *useraddr)
        return ret;
 }
 
+static int ethtool_reset(struct net_device *dev, char __user *useraddr)
+{
+       struct ethtool_value reset;
+       int ret;
+
+       if (!dev->ethtool_ops->reset)
+               return -EOPNOTSUPP;
+
+       if (copy_from_user(&reset, useraddr, sizeof(reset)))
+               return -EFAULT;
+
+       ret = dev->ethtool_ops->reset(dev, &reset.data);
+       if (ret)
+               return ret;
+
+       if (copy_to_user(useraddr, &reset, sizeof(reset)))
+               return -EFAULT;
+       return 0;
+}
+
 static int ethtool_get_wol(struct net_device *dev, char __user *useraddr)
 {
        struct ethtool_wolinfo wol = { ETHTOOL_GWOL };
@@ -1089,6 +1109,9 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
        case ETHTOOL_FLASHDEV:
                rc = ethtool_flash_device(dev, useraddr);
                break;
+       case ETHTOOL_RESET:
+               rc = ethtool_reset(dev, useraddr);
+               break;
        default:
                rc = -EOPNOTSUPP;
        }