net: myri10ge: convert to hw_features
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Acked-by: Jon Mason <jon.mason@myri.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
56d37f1716
Коммит
47c2cdf551
|
@ -205,7 +205,6 @@ struct myri10ge_priv {
|
|||
int tx_boundary; /* boundary transmits cannot cross */
|
||||
int num_slices;
|
||||
int running; /* running? */
|
||||
int csum_flag; /* rx_csums? */
|
||||
int small_bytes;
|
||||
int big_bytes;
|
||||
int max_intr_slots;
|
||||
|
@ -1386,7 +1385,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum,
|
|||
skb->protocol = eth_type_trans(skb, dev);
|
||||
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)) ||
|
||||
(skb->protocol == htons(ETH_P_IPV6))) {
|
||||
skb->csum = csum;
|
||||
|
@ -1757,43 +1756,6 @@ myri10ge_get_ringparam(struct net_device *netdev,
|
|||
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] = {
|
||||
"rx_packets", "tx_packets", "rx_bytes", "tx_bytes", "rx_errors",
|
||||
"tx_errors", "rx_dropped", "tx_dropped", "multicast", "collisions",
|
||||
|
@ -1944,11 +1906,6 @@ static u32 myri10ge_get_msglevel(struct net_device *netdev)
|
|||
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 = {
|
||||
.get_settings = myri10ge_get_settings,
|
||||
.get_drvinfo = myri10ge_get_drvinfo,
|
||||
|
@ -1957,19 +1914,12 @@ static const struct ethtool_ops myri10ge_ethtool_ops = {
|
|||
.get_pauseparam = myri10ge_get_pauseparam,
|
||||
.set_pauseparam = myri10ge_set_pauseparam,
|
||||
.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_strings = myri10ge_get_strings,
|
||||
.get_sset_count = myri10ge_get_sset_count,
|
||||
.get_ethtool_stats = myri10ge_get_ethtool_stats,
|
||||
.set_msglevel = myri10ge_set_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)
|
||||
|
@ -3136,6 +3086,14 @@ static int myri10ge_set_mac_address(struct net_device *dev, void *addr)
|
|||
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)
|
||||
{
|
||||
struct myri10ge_priv *mgp = netdev_priv(dev);
|
||||
|
@ -3834,6 +3792,7 @@ static const struct net_device_ops myri10ge_netdev_ops = {
|
|||
.ndo_get_stats = myri10ge_get_stats,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_change_mtu = myri10ge_change_mtu,
|
||||
.ndo_fix_features = myri10ge_fix_features,
|
||||
.ndo_set_multicast_list = myri10ge_set_multicast_list,
|
||||
.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)
|
|||
mgp = netdev_priv(netdev);
|
||||
mgp->dev = netdev;
|
||||
mgp->pdev = pdev;
|
||||
mgp->csum_flag = MXGEFW_FLAGS_CKSUM;
|
||||
mgp->pause = myri10ge_flow_control;
|
||||
mgp->intr_coal_delay = myri10ge_intr_coal_delay;
|
||||
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)
|
|||
netdev->netdev_ops = &myri10ge_netdev_ops;
|
||||
netdev->mtu = myri10ge_initial_mtu;
|
||||
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)
|
||||
netdev->features |= NETIF_F_HIGHDMA;
|
||||
netdev->features |= NETIF_F_LRO;
|
||||
|
||||
netdev->vlan_features |= mgp->features;
|
||||
if (mgp->fw_ver_tiny < 37)
|
||||
|
|
Загрузка…
Ссылка в новой задаче