return ret;
 }
 
+static int netvsc_get_regs_len(struct net_device *netdev)
+{
+       return VRSS_SEND_TAB_SIZE * sizeof(u32);
+}
+
+static void netvsc_get_regs(struct net_device *netdev,
+                           struct ethtool_regs *regs, void *p)
+{
+       struct net_device_context *ndc = netdev_priv(netdev);
+       u32 *regs_buff = p;
+
+       /* increase the version, if buffer format is changed. */
+       regs->version = 1;
+
+       memcpy(regs_buff, ndc->tx_table, VRSS_SEND_TAB_SIZE * sizeof(u32));
+}
+
 static u32 netvsc_get_msglevel(struct net_device *ndev)
 {
        struct net_device_context *ndev_ctx = netdev_priv(ndev);
 
 static const struct ethtool_ops ethtool_ops = {
        .get_drvinfo    = netvsc_get_drvinfo,
+       .get_regs_len   = netvsc_get_regs_len,
+       .get_regs       = netvsc_get_regs,
        .get_msglevel   = netvsc_get_msglevel,
        .set_msglevel   = netvsc_set_msglevel,
        .get_link       = ethtool_op_get_link,