Commit 47c2cdf5 authored by Michał Mirosław's avatar Michał Mirosław Committed by David S. Miller

net: myri10ge: convert to hw_features

Signed-off-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: default avatarJon Mason <jon.mason@myri.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 56d37f17
...@@ -205,7 +205,6 @@ struct myri10ge_priv { ...@@ -205,7 +205,6 @@ struct myri10ge_priv {
int tx_boundary; /* boundary transmits cannot cross */ int tx_boundary; /* boundary transmits cannot cross */
int num_slices; int num_slices;
int running; /* running? */ int running; /* running? */
int csum_flag; /* rx_csums? */
int small_bytes; int small_bytes;
int big_bytes; int big_bytes;
int max_intr_slots; int max_intr_slots;
...@@ -1386,7 +1385,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum, ...@@ -1386,7 +1385,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum,
skb->protocol = eth_type_trans(skb, dev); skb->protocol = eth_type_trans(skb, dev);
skb_record_rx_queue(skb, ss - &mgp->ss[0]); skb_record_rx_queue(skb, ss - &mgp->ss[0]);
if (mgp->csum_flag) { if (dev->features & NETIF_F_RXCSUM) {
if ((skb->protocol == htons(ETH_P_IP)) || if ((skb->protocol == htons(ETH_P_IP)) ||
(skb->protocol == htons(ETH_P_IPV6))) { (skb->protocol == htons(ETH_P_IPV6))) {
skb->csum = csum; skb->csum = csum;
...@@ -1757,43 +1756,6 @@ myri10ge_get_ringparam(struct net_device *netdev, ...@@ -1757,43 +1756,6 @@ myri10ge_get_ringparam(struct net_device *netdev,
ring->tx_pending = ring->tx_max_pending; ring->tx_pending = ring->tx_max_pending;
} }
static u32 myri10ge_get_rx_csum(struct net_device *netdev)
{
struct myri10ge_priv *mgp = netdev_priv(netdev);
if (mgp->csum_flag)
return 1;
else
return 0;
}
static int myri10ge_set_rx_csum(struct net_device *netdev, u32 csum_enabled)
{
struct myri10ge_priv *mgp = netdev_priv(netdev);
int err = 0;
if (csum_enabled)
mgp->csum_flag = MXGEFW_FLAGS_CKSUM;
else {
netdev->features &= ~NETIF_F_LRO;
mgp->csum_flag = 0;
}
return err;
}
static int myri10ge_set_tso(struct net_device *netdev, u32 tso_enabled)
{
struct myri10ge_priv *mgp = netdev_priv(netdev);
u32 flags = mgp->features & (NETIF_F_TSO6 | NETIF_F_TSO);
if (tso_enabled)
netdev->features |= flags;
else
netdev->features &= ~flags;
return 0;
}
static const char myri10ge_gstrings_main_stats[][ETH_GSTRING_LEN] = { static const char myri10ge_gstrings_main_stats[][ETH_GSTRING_LEN] = {
"rx_packets", "tx_packets", "rx_bytes", "tx_bytes", "rx_errors", "rx_packets", "tx_packets", "rx_bytes", "tx_bytes", "rx_errors",
"tx_errors", "rx_dropped", "tx_dropped", "multicast", "collisions", "tx_errors", "rx_dropped", "tx_dropped", "multicast", "collisions",
...@@ -1944,11 +1906,6 @@ static u32 myri10ge_get_msglevel(struct net_device *netdev) ...@@ -1944,11 +1906,6 @@ static u32 myri10ge_get_msglevel(struct net_device *netdev)
return mgp->msg_enable; return mgp->msg_enable;
} }
static int myri10ge_set_flags(struct net_device *netdev, u32 value)
{
return ethtool_op_set_flags(netdev, value, ETH_FLAG_LRO);
}
static const struct ethtool_ops myri10ge_ethtool_ops = { static const struct ethtool_ops myri10ge_ethtool_ops = {
.get_settings = myri10ge_get_settings, .get_settings = myri10ge_get_settings,
.get_drvinfo = myri10ge_get_drvinfo, .get_drvinfo = myri10ge_get_drvinfo,
...@@ -1957,19 +1914,12 @@ static const struct ethtool_ops myri10ge_ethtool_ops = { ...@@ -1957,19 +1914,12 @@ static const struct ethtool_ops myri10ge_ethtool_ops = {
.get_pauseparam = myri10ge_get_pauseparam, .get_pauseparam = myri10ge_get_pauseparam,
.set_pauseparam = myri10ge_set_pauseparam, .set_pauseparam = myri10ge_set_pauseparam,
.get_ringparam = myri10ge_get_ringparam, .get_ringparam = myri10ge_get_ringparam,
.get_rx_csum = myri10ge_get_rx_csum,
.set_rx_csum = myri10ge_set_rx_csum,
.set_tx_csum = ethtool_op_set_tx_hw_csum,
.set_sg = ethtool_op_set_sg,
.set_tso = myri10ge_set_tso,
.get_link = ethtool_op_get_link, .get_link = ethtool_op_get_link,
.get_strings = myri10ge_get_strings, .get_strings = myri10ge_get_strings,
.get_sset_count = myri10ge_get_sset_count, .get_sset_count = myri10ge_get_sset_count,
.get_ethtool_stats = myri10ge_get_ethtool_stats, .get_ethtool_stats = myri10ge_get_ethtool_stats,
.set_msglevel = myri10ge_set_msglevel, .set_msglevel = myri10ge_set_msglevel,
.get_msglevel = myri10ge_get_msglevel, .get_msglevel = myri10ge_get_msglevel,
.get_flags = ethtool_op_get_flags,
.set_flags = myri10ge_set_flags
}; };
static int myri10ge_allocate_rings(struct myri10ge_slice_state *ss) static int myri10ge_allocate_rings(struct myri10ge_slice_state *ss)
...@@ -3136,6 +3086,14 @@ static int myri10ge_set_mac_address(struct net_device *dev, void *addr) ...@@ -3136,6 +3086,14 @@ static int myri10ge_set_mac_address(struct net_device *dev, void *addr)
return 0; return 0;
} }
static u32 myri10ge_fix_features(struct net_device *dev, u32 features)
{
if (!(features & NETIF_F_RXCSUM))
features &= ~NETIF_F_LRO;
return features;
}
static int myri10ge_change_mtu(struct net_device *dev, int new_mtu) static int myri10ge_change_mtu(struct net_device *dev, int new_mtu)
{ {
struct myri10ge_priv *mgp = netdev_priv(dev); struct myri10ge_priv *mgp = netdev_priv(dev);
...@@ -3834,6 +3792,7 @@ static const struct net_device_ops myri10ge_netdev_ops = { ...@@ -3834,6 +3792,7 @@ static const struct net_device_ops myri10ge_netdev_ops = {
.ndo_get_stats = myri10ge_get_stats, .ndo_get_stats = myri10ge_get_stats,
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
.ndo_change_mtu = myri10ge_change_mtu, .ndo_change_mtu = myri10ge_change_mtu,
.ndo_fix_features = myri10ge_fix_features,
.ndo_set_multicast_list = myri10ge_set_multicast_list, .ndo_set_multicast_list = myri10ge_set_multicast_list,
.ndo_set_mac_address = myri10ge_set_mac_address, .ndo_set_mac_address = myri10ge_set_mac_address,
}; };
...@@ -3860,7 +3819,6 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -3860,7 +3819,6 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
mgp = netdev_priv(netdev); mgp = netdev_priv(netdev);
mgp->dev = netdev; mgp->dev = netdev;
mgp->pdev = pdev; mgp->pdev = pdev;
mgp->csum_flag = MXGEFW_FLAGS_CKSUM;
mgp->pause = myri10ge_flow_control; mgp->pause = myri10ge_flow_control;
mgp->intr_coal_delay = myri10ge_intr_coal_delay; mgp->intr_coal_delay = myri10ge_intr_coal_delay;
mgp->msg_enable = netif_msg_init(myri10ge_debug, MYRI10GE_MSG_DEFAULT); mgp->msg_enable = netif_msg_init(myri10ge_debug, MYRI10GE_MSG_DEFAULT);
...@@ -3976,11 +3934,11 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -3976,11 +3934,11 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
netdev->netdev_ops = &myri10ge_netdev_ops; netdev->netdev_ops = &myri10ge_netdev_ops;
netdev->mtu = myri10ge_initial_mtu; netdev->mtu = myri10ge_initial_mtu;
netdev->base_addr = mgp->iomem_base; netdev->base_addr = mgp->iomem_base;
netdev->features = mgp->features; netdev->hw_features = mgp->features | NETIF_F_LRO | NETIF_F_RXCSUM;
netdev->features = netdev->hw_features;
if (dac_enabled) if (dac_enabled)
netdev->features |= NETIF_F_HIGHDMA; netdev->features |= NETIF_F_HIGHDMA;
netdev->features |= NETIF_F_LRO;
netdev->vlan_features |= mgp->features; netdev->vlan_features |= mgp->features;
if (mgp->fw_ver_tiny < 37) if (mgp->fw_ver_tiny < 37)
......
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