};
 #define IXGBE_TEST_LEN sizeof(ixgbe_gstrings_test) / ETH_GSTRING_LEN
 
+static const char ixgbe_priv_flags_strings[][ETH_GSTRING_LEN] = {
+#define IXGBE_PRIV_FLAGS_LEGACY_RX     BIT(0)
+       "legacy-rx",
+};
+
+#define IXGBE_PRIV_FLAGS_STR_LEN ARRAY_SIZE(ixgbe_priv_flags_strings)
+
 /* currently supported speeds for 10G */
 #define ADVRTSD_MSK_10G (SUPPORTED_10000baseT_Full | \
                         SUPPORTED_10000baseKX4_Full | \
 
        strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
                sizeof(drvinfo->bus_info));
+
+       drvinfo->n_priv_flags = IXGBE_PRIV_FLAGS_STR_LEN;
 }
 
 static void ixgbe_get_ringparam(struct net_device *netdev,
                return IXGBE_TEST_LEN;
        case ETH_SS_STATS:
                return IXGBE_STATS_LEN;
+       case ETH_SS_PRIV_FLAGS:
+               return IXGBE_PRIV_FLAGS_STR_LEN;
        default:
                return -EOPNOTSUPP;
        }
                }
                /* BUG_ON(p - data != IXGBE_STATS_LEN * ETH_GSTRING_LEN); */
                break;
+       case ETH_SS_PRIV_FLAGS:
+               memcpy(data, ixgbe_priv_flags_strings,
+                      IXGBE_PRIV_FLAGS_STR_LEN * ETH_GSTRING_LEN);
        }
 }
 
        return 0;
 }
 
+static u32 ixgbe_get_priv_flags(struct net_device *netdev)
+{
+       struct ixgbe_adapter *adapter = netdev_priv(netdev);
+       u32 priv_flags = 0;
+
+       if (adapter->flags2 & IXGBE_FLAG2_RX_LEGACY)
+               priv_flags |= IXGBE_PRIV_FLAGS_LEGACY_RX;
+
+       return priv_flags;
+}
+
+static int ixgbe_set_priv_flags(struct net_device *netdev, u32 priv_flags)
+{
+       struct ixgbe_adapter *adapter = netdev_priv(netdev);
+       unsigned int flags2 = adapter->flags2;
+
+       flags2 &= ~IXGBE_FLAG2_RX_LEGACY;
+       if (priv_flags & IXGBE_PRIV_FLAGS_LEGACY_RX)
+               flags2 |= IXGBE_FLAG2_RX_LEGACY;
+
+       if (flags2 != adapter->flags2) {
+               adapter->flags2 = flags2;
+
+               /* reset interface to repopulate queues */
+               if (netif_running(netdev))
+                       ixgbe_reinit_locked(adapter);
+       }
+
+       return 0;
+}
+
 static const struct ethtool_ops ixgbe_ethtool_ops = {
        .get_settings           = ixgbe_get_settings,
        .set_settings           = ixgbe_set_settings,
        .set_eee                = ixgbe_set_eee,
        .get_channels           = ixgbe_get_channels,
        .set_channels           = ixgbe_set_channels,
+       .get_priv_flags         = ixgbe_get_priv_flags,
+       .set_priv_flags         = ixgbe_set_priv_flags,
        .get_ts_info            = ixgbe_get_ts_info,
        .get_module_info        = ixgbe_get_module_info,
        .get_module_eeprom      = ixgbe_get_module_eeprom,