Commit 0364d6fd authored by Alexander Duyck's avatar Alexander Duyck Committed by David S. Miller
Browse files

igbvf: cleanup flags and allow for rx checksum to be disabled



This patch cleans up a number of unused or unneeded feature flags.  As a
result of these changes the user should now be able to enable or disable rx
checksumming via ethtool.
Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e0ca8410
...@@ -133,6 +133,24 @@ static int igbvf_set_pauseparam(struct net_device *netdev, ...@@ -133,6 +133,24 @@ static int igbvf_set_pauseparam(struct net_device *netdev,
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
static u32 igbvf_get_rx_csum(struct net_device *netdev)
{
struct igbvf_adapter *adapter = netdev_priv(netdev);
return !(adapter->flags & IGBVF_FLAG_RX_CSUM_DISABLED);
}
static int igbvf_set_rx_csum(struct net_device *netdev, u32 data)
{
struct igbvf_adapter *adapter = netdev_priv(netdev);
if (data)
adapter->flags &= ~IGBVF_FLAG_RX_CSUM_DISABLED;
else
adapter->flags |= IGBVF_FLAG_RX_CSUM_DISABLED;
return 0;
}
static u32 igbvf_get_tx_csum(struct net_device *netdev) static u32 igbvf_get_tx_csum(struct net_device *netdev)
{ {
return ((netdev->features & NETIF_F_IP_CSUM) != 0); return ((netdev->features & NETIF_F_IP_CSUM) != 0);
...@@ -150,8 +168,6 @@ static int igbvf_set_tx_csum(struct net_device *netdev, u32 data) ...@@ -150,8 +168,6 @@ static int igbvf_set_tx_csum(struct net_device *netdev, u32 data)
static int igbvf_set_tso(struct net_device *netdev, u32 data) static int igbvf_set_tso(struct net_device *netdev, u32 data)
{ {
struct igbvf_adapter *adapter = netdev_priv(netdev); struct igbvf_adapter *adapter = netdev_priv(netdev);
int i;
struct net_device *v_netdev;
if (data) { if (data) {
netdev->features |= NETIF_F_TSO; netdev->features |= NETIF_F_TSO;
...@@ -159,24 +175,10 @@ static int igbvf_set_tso(struct net_device *netdev, u32 data) ...@@ -159,24 +175,10 @@ static int igbvf_set_tso(struct net_device *netdev, u32 data)
} else { } else {
netdev->features &= ~NETIF_F_TSO; netdev->features &= ~NETIF_F_TSO;
netdev->features &= ~NETIF_F_TSO6; netdev->features &= ~NETIF_F_TSO6;
/* disable TSO on all VLANs if they're present */
if (!adapter->vlgrp)
goto tso_out;
for (i = 0; i < VLAN_GROUP_ARRAY_LEN; i++) {
v_netdev = vlan_group_get_device(adapter->vlgrp, i);
if (!v_netdev)
continue;
v_netdev->features &= ~NETIF_F_TSO;
v_netdev->features &= ~NETIF_F_TSO6;
vlan_group_set_device(adapter->vlgrp, i, v_netdev);
}
} }
tso_out:
dev_info(&adapter->pdev->dev, "TSO is %s\n", dev_info(&adapter->pdev->dev, "TSO is %s\n",
data ? "Enabled" : "Disabled"); data ? "Enabled" : "Disabled");
adapter->flags |= FLAG_TSO_FORCE;
return 0; return 0;
} }
...@@ -517,6 +519,8 @@ static const struct ethtool_ops igbvf_ethtool_ops = { ...@@ -517,6 +519,8 @@ static const struct ethtool_ops igbvf_ethtool_ops = {
.set_ringparam = igbvf_set_ringparam, .set_ringparam = igbvf_set_ringparam,
.get_pauseparam = igbvf_get_pauseparam, .get_pauseparam = igbvf_get_pauseparam,
.set_pauseparam = igbvf_set_pauseparam, .set_pauseparam = igbvf_set_pauseparam,
.get_rx_csum = igbvf_get_rx_csum,
.set_rx_csum = igbvf_set_rx_csum,
.get_tx_csum = igbvf_get_tx_csum, .get_tx_csum = igbvf_get_tx_csum,
.set_tx_csum = igbvf_set_tx_csum, .set_tx_csum = igbvf_set_tx_csum,
.get_sg = ethtool_op_get_sg, .get_sg = ethtool_op_get_sg,
......
...@@ -286,11 +286,7 @@ struct igbvf_info { ...@@ -286,11 +286,7 @@ struct igbvf_info {
}; };
/* hardware capability, feature, and workaround flags */ /* hardware capability, feature, and workaround flags */
#define FLAG_HAS_HW_VLAN_FILTER (1 << 0) #define IGBVF_FLAG_RX_CSUM_DISABLED (1 << 0)
#define FLAG_HAS_JUMBO_FRAMES (1 << 1)
#define FLAG_MSI_ENABLED (1 << 2)
#define FLAG_RX_CSUM_ENABLED (1 << 3)
#define FLAG_TSO_FORCE (1 << 4)
#define IGBVF_RX_DESC_ADV(R, i) \ #define IGBVF_RX_DESC_ADV(R, i) \
(&((((R).desc))[i].rx_desc)) (&((((R).desc))[i].rx_desc))
......
...@@ -58,8 +58,7 @@ static void igbvf_reset_interrupt_capability(struct igbvf_adapter *); ...@@ -58,8 +58,7 @@ static void igbvf_reset_interrupt_capability(struct igbvf_adapter *);
static struct igbvf_info igbvf_vf_info = { static struct igbvf_info igbvf_vf_info = {
.mac = e1000_vfadapt, .mac = e1000_vfadapt,
.flags = FLAG_HAS_JUMBO_FRAMES .flags = 0,
| FLAG_RX_CSUM_ENABLED,
.pba = 10, .pba = 10,
.init_ops = e1000_init_function_pointers_vf, .init_ops = e1000_init_function_pointers_vf,
}; };
...@@ -107,8 +106,10 @@ static inline void igbvf_rx_checksum_adv(struct igbvf_adapter *adapter, ...@@ -107,8 +106,10 @@ static inline void igbvf_rx_checksum_adv(struct igbvf_adapter *adapter,
skb->ip_summed = CHECKSUM_NONE; skb->ip_summed = CHECKSUM_NONE;
/* Ignore Checksum bit is set or checksum is disabled through ethtool */ /* Ignore Checksum bit is set or checksum is disabled through ethtool */
if ((status_err & E1000_RXD_STAT_IXSM)) if ((status_err & E1000_RXD_STAT_IXSM) ||
(adapter->flags & IGBVF_FLAG_RX_CSUM_DISABLED))
return; return;
/* TCP/UDP checksum error bit is set */ /* TCP/UDP checksum error bit is set */
if (status_err & if (status_err &
(E1000_RXDEXT_STATERR_TCPE | E1000_RXDEXT_STATERR_IPE)) { (E1000_RXDEXT_STATERR_TCPE | E1000_RXDEXT_STATERR_IPE)) {
...@@ -116,6 +117,7 @@ static inline void igbvf_rx_checksum_adv(struct igbvf_adapter *adapter, ...@@ -116,6 +117,7 @@ static inline void igbvf_rx_checksum_adv(struct igbvf_adapter *adapter,
adapter->hw_csum_err++; adapter->hw_csum_err++;
return; return;
} }
/* It must be a TCP or UDP packet with a valid checksum */ /* It must be a TCP or UDP packet with a valid checksum */
if (status_err & (E1000_RXD_STAT_TCPCS | E1000_RXD_STAT_UDPCS)) if (status_err & (E1000_RXD_STAT_TCPCS | E1000_RXD_STAT_UDPCS))
skb->ip_summed = CHECKSUM_UNNECESSARY; skb->ip_summed = CHECKSUM_UNNECESSARY;
...@@ -2351,15 +2353,6 @@ static int igbvf_change_mtu(struct net_device *netdev, int new_mtu) ...@@ -2351,15 +2353,6 @@ static int igbvf_change_mtu(struct net_device *netdev, int new_mtu)
return -EINVAL; return -EINVAL;
} }
/* Jumbo frame size limits */
if (max_frame > ETH_FRAME_LEN + ETH_FCS_LEN) {
if (!(adapter->flags & FLAG_HAS_JUMBO_FRAMES)) {
dev_err(&adapter->pdev->dev,
"Jumbo Frames not supported.\n");
return -EINVAL;
}
}
#define MAX_STD_JUMBO_FRAME_SIZE 9234 #define MAX_STD_JUMBO_FRAME_SIZE 9234
if (max_frame > MAX_STD_JUMBO_FRAME_SIZE) { if (max_frame > MAX_STD_JUMBO_FRAME_SIZE) {
dev_err(&adapter->pdev->dev, "MTU > 9216 not supported.\n"); dev_err(&adapter->pdev->dev, "MTU > 9216 not supported.\n");
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment