summaryrefslogtreecommitdiffstats
path: root/drivers/staging/hv/netvsc_drv.c
diff options
context:
space:
mode:
authorStephen Hemminger2010-05-04 18:58:57 +0200
committerGreg Kroah-Hartman2010-05-11 20:36:10 +0200
commitf82f4ad7bf9dc3c7268080cc2afdff897e1d72ca (patch)
treee4bf388c2175dc1b75ba8f9709913c90465389a3 /drivers/staging/hv/netvsc_drv.c
parentStaging: hv: add transmit flow control (diff)
downloadkernel-qcow2-linux-f82f4ad7bf9dc3c7268080cc2afdff897e1d72ca.tar.gz
kernel-qcow2-linux-f82f4ad7bf9dc3c7268080cc2afdff897e1d72ca.tar.xz
kernel-qcow2-linux-f82f4ad7bf9dc3c7268080cc2afdff897e1d72ca.zip
Staging: hv: add basic ethtool support
Ethtool allows querying device information and controlling parameters. For now just add ability to turn on/off scatter/gather. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Acked-by: Hank Janssen <hjanssen@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/hv/netvsc_drv.c')
-rw-r--r--drivers/staging/hv/netvsc_drv.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c
index a6ca01025e48..a6584a876618 100644
--- a/drivers/staging/hv/netvsc_drv.c
+++ b/drivers/staging/hv/netvsc_drv.c
@@ -326,6 +326,21 @@ static int netvsc_recv_callback(struct hv_device *device_obj,
return 0;
}
+static void netvsc_get_drvinfo(struct net_device *net,
+ struct ethtool_drvinfo *info)
+{
+ strcpy(info->driver, "hv_netvsc");
+ strcpy(info->version, HV_DRV_VERSION);
+ strcpy(info->fw_version, "N/A");
+}
+
+static const struct ethtool_ops ethtool_ops = {
+ .get_drvinfo = netvsc_get_drvinfo,
+ .get_sg = ethtool_op_get_sg,
+ .set_sg = ethtool_op_set_sg,
+ .get_link = ethtool_op_get_link,
+};
+
static const struct net_device_ops device_ops = {
.ndo_open = netvsc_open,
.ndo_stop = netvsc_close,
@@ -396,6 +411,7 @@ static int netvsc_probe(struct device *device)
/* TODO: Add GSO and Checksum offload */
net->features = NETIF_F_SG;
+ SET_ETHTOOL_OPS(net, &ethtool_ops);
SET_NETDEV_DEV(net, device);
ret = register_netdev(net);