|
@@ -192,10 +192,8 @@ static void link_start(struct port_info *p)
|
|
|
|
|
|
static void enable_hw_csum(struct adapter *adapter)
|
|
|
{
|
|
|
- if (adapter->flags & TSO_CAPABLE)
|
|
|
+ if (adapter->port[0].dev->hw_features & NETIF_F_TSO)
|
|
|
t1_tp_set_ip_checksum_offload(adapter->tp, 1); /* for TSO only */
|
|
|
- if (adapter->flags & UDP_CSUM_CAPABLE)
|
|
|
- t1_tp_set_udp_checksum_offload(adapter->tp, 1);
|
|
|
t1_tp_set_tcp_checksum_offload(adapter->tp, 1);
|
|
|
}
|
|
|
|
|
@@ -705,33 +703,6 @@ static int set_pauseparam(struct net_device *dev,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static u32 get_rx_csum(struct net_device *dev)
|
|
|
-{
|
|
|
- struct adapter *adapter = dev->ml_priv;
|
|
|
-
|
|
|
- return (adapter->flags & RX_CSUM_ENABLED) != 0;
|
|
|
-}
|
|
|
-
|
|
|
-static int set_rx_csum(struct net_device *dev, u32 data)
|
|
|
-{
|
|
|
- struct adapter *adapter = dev->ml_priv;
|
|
|
-
|
|
|
- if (data)
|
|
|
- adapter->flags |= RX_CSUM_ENABLED;
|
|
|
- else
|
|
|
- adapter->flags &= ~RX_CSUM_ENABLED;
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static int set_tso(struct net_device *dev, u32 value)
|
|
|
-{
|
|
|
- struct adapter *adapter = dev->ml_priv;
|
|
|
-
|
|
|
- if (!(adapter->flags & TSO_CAPABLE))
|
|
|
- return value ? -EOPNOTSUPP : 0;
|
|
|
- return ethtool_op_set_tso(dev, value);
|
|
|
-}
|
|
|
-
|
|
|
static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
|
|
|
{
|
|
|
struct adapter *adapter = dev->ml_priv;
|
|
@@ -831,17 +802,12 @@ static const struct ethtool_ops t1_ethtool_ops = {
|
|
|
.get_eeprom = get_eeprom,
|
|
|
.get_pauseparam = get_pauseparam,
|
|
|
.set_pauseparam = set_pauseparam,
|
|
|
- .get_rx_csum = get_rx_csum,
|
|
|
- .set_rx_csum = set_rx_csum,
|
|
|
- .set_tx_csum = ethtool_op_set_tx_csum,
|
|
|
- .set_sg = ethtool_op_set_sg,
|
|
|
.get_link = ethtool_op_get_link,
|
|
|
.get_strings = get_strings,
|
|
|
.get_sset_count = get_sset_count,
|
|
|
.get_ethtool_stats = get_stats,
|
|
|
.get_regs_len = get_regs_len,
|
|
|
.get_regs = get_regs,
|
|
|
- .set_tso = set_tso,
|
|
|
};
|
|
|
|
|
|
static int t1_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
|
|
@@ -1105,28 +1071,28 @@ static int __devinit init_one(struct pci_dev *pdev,
|
|
|
netdev->mem_start = mmio_start;
|
|
|
netdev->mem_end = mmio_start + mmio_len - 1;
|
|
|
netdev->ml_priv = adapter;
|
|
|
- netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
|
|
|
- netdev->features |= NETIF_F_LLTX;
|
|
|
+ netdev->hw_features |= NETIF_F_SG | NETIF_F_IP_CSUM |
|
|
|
+ NETIF_F_RXCSUM;
|
|
|
+ netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM |
|
|
|
+ NETIF_F_RXCSUM | NETIF_F_LLTX;
|
|
|
|
|
|
- adapter->flags |= RX_CSUM_ENABLED | TCP_CSUM_CAPABLE;
|
|
|
if (pci_using_dac)
|
|
|
netdev->features |= NETIF_F_HIGHDMA;
|
|
|
if (vlan_tso_capable(adapter)) {
|
|
|
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
|
|
|
- adapter->flags |= VLAN_ACCEL_CAPABLE;
|
|
|
netdev->features |=
|
|
|
NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
|
|
|
#endif
|
|
|
|
|
|
/* T204: disable TSO */
|
|
|
if (!(is_T2(adapter)) || bi->port_number != 4) {
|
|
|
- adapter->flags |= TSO_CAPABLE;
|
|
|
+ netdev->hw_features |= NETIF_F_TSO;
|
|
|
netdev->features |= NETIF_F_TSO;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
netdev->netdev_ops = &cxgb_netdev_ops;
|
|
|
- netdev->hard_header_len += (adapter->flags & TSO_CAPABLE) ?
|
|
|
+ netdev->hard_header_len += (netdev->hw_features & NETIF_F_TSO) ?
|
|
|
sizeof(struct cpl_tx_pkt_lso) : sizeof(struct cpl_tx_pkt);
|
|
|
|
|
|
netif_napi_add(netdev, &adapter->napi, t1_poll, 64);
|