net: chelsio: convert to hw_features

Also remove flags that were not used or are now redundant to hw_features bits.
No device had UDP_CSUM_CAPABLE set.

Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Michał Mirosław 2011-04-18 13:31:20 +00:00 committed by David S. Miller
parent b437a8cc7d
commit 30f554f925
5 changed files with 14 additions and 58 deletions

View file

@ -264,11 +264,6 @@ struct adapter {
enum { /* adapter flags */ enum { /* adapter flags */
FULL_INIT_DONE = 1 << 0, FULL_INIT_DONE = 1 << 0,
TSO_CAPABLE = 1 << 2,
TCP_CSUM_CAPABLE = 1 << 3,
UDP_CSUM_CAPABLE = 1 << 4,
VLAN_ACCEL_CAPABLE = 1 << 5,
RX_CSUM_ENABLED = 1 << 6,
}; };
struct mdio_ops; struct mdio_ops;

View file

@ -192,10 +192,8 @@ static void link_start(struct port_info *p)
static void enable_hw_csum(struct adapter *adapter) 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 */ 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); t1_tp_set_tcp_checksum_offload(adapter->tp, 1);
} }
@ -705,33 +703,6 @@ static int set_pauseparam(struct net_device *dev,
return 0; 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) static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
{ {
struct adapter *adapter = dev->ml_priv; struct adapter *adapter = dev->ml_priv;
@ -831,17 +802,12 @@ static const struct ethtool_ops t1_ethtool_ops = {
.get_eeprom = get_eeprom, .get_eeprom = get_eeprom,
.get_pauseparam = get_pauseparam, .get_pauseparam = get_pauseparam,
.set_pauseparam = set_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_link = ethtool_op_get_link,
.get_strings = get_strings, .get_strings = get_strings,
.get_sset_count = get_sset_count, .get_sset_count = get_sset_count,
.get_ethtool_stats = get_stats, .get_ethtool_stats = get_stats,
.get_regs_len = get_regs_len, .get_regs_len = get_regs_len,
.get_regs = get_regs, .get_regs = get_regs,
.set_tso = set_tso,
}; };
static int t1_ioctl(struct net_device *dev, struct ifreq *req, int cmd) 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_start = mmio_start;
netdev->mem_end = mmio_start + mmio_len - 1; netdev->mem_end = mmio_start + mmio_len - 1;
netdev->ml_priv = adapter; netdev->ml_priv = adapter;
netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM; netdev->hw_features |= NETIF_F_SG | NETIF_F_IP_CSUM |
netdev->features |= NETIF_F_LLTX; 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) if (pci_using_dac)
netdev->features |= NETIF_F_HIGHDMA; netdev->features |= NETIF_F_HIGHDMA;
if (vlan_tso_capable(adapter)) { if (vlan_tso_capable(adapter)) {
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
adapter->flags |= VLAN_ACCEL_CAPABLE;
netdev->features |= netdev->features |=
NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
#endif #endif
/* T204: disable TSO */ /* T204: disable TSO */
if (!(is_T2(adapter)) || bi->port_number != 4) { if (!(is_T2(adapter)) || bi->port_number != 4) {
adapter->flags |= TSO_CAPABLE; netdev->hw_features |= NETIF_F_TSO;
netdev->features |= NETIF_F_TSO; netdev->features |= NETIF_F_TSO;
} }
} }
netdev->netdev_ops = &cxgb_netdev_ops; 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); sizeof(struct cpl_tx_pkt_lso) : sizeof(struct cpl_tx_pkt);
netif_napi_add(netdev, &adapter->napi, t1_poll, 64); netif_napi_add(netdev, &adapter->napi, t1_poll, 64);

View file

@ -929,7 +929,7 @@ void t1_sge_intr_enable(struct sge *sge)
u32 en = SGE_INT_ENABLE; u32 en = SGE_INT_ENABLE;
u32 val = readl(sge->adapter->regs + A_PL_ENABLE); u32 val = readl(sge->adapter->regs + A_PL_ENABLE);
if (sge->adapter->flags & TSO_CAPABLE) if (sge->adapter->port[0].dev->hw_features & NETIF_F_TSO)
en &= ~F_PACKET_TOO_BIG; en &= ~F_PACKET_TOO_BIG;
writel(en, sge->adapter->regs + A_SG_INT_ENABLE); writel(en, sge->adapter->regs + A_SG_INT_ENABLE);
writel(val | SGE_PL_INTR_MASK, sge->adapter->regs + A_PL_ENABLE); writel(val | SGE_PL_INTR_MASK, sge->adapter->regs + A_PL_ENABLE);
@ -952,7 +952,7 @@ int t1_sge_intr_error_handler(struct sge *sge)
struct adapter *adapter = sge->adapter; struct adapter *adapter = sge->adapter;
u32 cause = readl(adapter->regs + A_SG_INT_CAUSE); u32 cause = readl(adapter->regs + A_SG_INT_CAUSE);
if (adapter->flags & TSO_CAPABLE) if (adapter->port[0].dev->hw_features & NETIF_F_TSO)
cause &= ~F_PACKET_TOO_BIG; cause &= ~F_PACKET_TOO_BIG;
if (cause & F_RESPQ_EXHAUSTED) if (cause & F_RESPQ_EXHAUSTED)
sge->stats.respQ_empty++; sge->stats.respQ_empty++;
@ -1369,6 +1369,7 @@ static void sge_rx(struct sge *sge, struct freelQ *fl, unsigned int len)
const struct cpl_rx_pkt *p; const struct cpl_rx_pkt *p;
struct adapter *adapter = sge->adapter; struct adapter *adapter = sge->adapter;
struct sge_port_stats *st; struct sge_port_stats *st;
struct net_device *dev;
skb = get_packet(adapter->pdev, fl, len - sge->rx_pkt_pad); skb = get_packet(adapter->pdev, fl, len - sge->rx_pkt_pad);
if (unlikely(!skb)) { if (unlikely(!skb)) {
@ -1384,9 +1385,10 @@ static void sge_rx(struct sge *sge, struct freelQ *fl, unsigned int len)
__skb_pull(skb, sizeof(*p)); __skb_pull(skb, sizeof(*p));
st = this_cpu_ptr(sge->port_stats[p->iff]); st = this_cpu_ptr(sge->port_stats[p->iff]);
dev = adapter->port[p->iff].dev;
skb->protocol = eth_type_trans(skb, adapter->port[p->iff].dev); skb->protocol = eth_type_trans(skb, dev);
if ((adapter->flags & RX_CSUM_ENABLED) && p->csum == 0xffff && if ((dev->features & NETIF_F_RXCSUM) && p->csum == 0xffff &&
skb->protocol == htons(ETH_P_IP) && skb->protocol == htons(ETH_P_IP) &&
(skb->data[9] == IPPROTO_TCP || skb->data[9] == IPPROTO_UDP)) { (skb->data[9] == IPPROTO_TCP || skb->data[9] == IPPROTO_UDP)) {
++st->rx_cso_good; ++st->rx_cso_good;
@ -1838,8 +1840,7 @@ netdev_tx_t t1_start_xmit(struct sk_buff *skb, struct net_device *dev)
return NETDEV_TX_OK; return NETDEV_TX_OK;
} }
if (!(adapter->flags & UDP_CSUM_CAPABLE) && if (skb->ip_summed == CHECKSUM_PARTIAL &&
skb->ip_summed == CHECKSUM_PARTIAL &&
ip_hdr(skb)->protocol == IPPROTO_UDP) { ip_hdr(skb)->protocol == IPPROTO_UDP) {
if (unlikely(skb_checksum_help(skb))) { if (unlikely(skb_checksum_help(skb))) {
pr_debug("%s: unable to do udp checksum\n", dev->name); pr_debug("%s: unable to do udp checksum\n", dev->name);

View file

@ -152,11 +152,6 @@ void t1_tp_set_ip_checksum_offload(struct petp *tp, int enable)
set_csum_offload(tp, F_IP_CSUM, enable); set_csum_offload(tp, F_IP_CSUM, enable);
} }
void t1_tp_set_udp_checksum_offload(struct petp *tp, int enable)
{
set_csum_offload(tp, F_UDP_CSUM, enable);
}
void t1_tp_set_tcp_checksum_offload(struct petp *tp, int enable) void t1_tp_set_tcp_checksum_offload(struct petp *tp, int enable)
{ {
set_csum_offload(tp, F_TCP_CSUM, enable); set_csum_offload(tp, F_TCP_CSUM, enable);

View file

@ -65,7 +65,6 @@ void t1_tp_intr_clear(struct petp *tp);
int t1_tp_intr_handler(struct petp *tp); int t1_tp_intr_handler(struct petp *tp);
void t1_tp_get_mib_statistics(adapter_t *adap, struct tp_mib_statistics *tps); void t1_tp_get_mib_statistics(adapter_t *adap, struct tp_mib_statistics *tps);
void t1_tp_set_udp_checksum_offload(struct petp *tp, int enable);
void t1_tp_set_tcp_checksum_offload(struct petp *tp, int enable); void t1_tp_set_tcp_checksum_offload(struct petp *tp, int enable);
void t1_tp_set_ip_checksum_offload(struct petp *tp, int enable); void t1_tp_set_ip_checksum_offload(struct petp *tp, int enable);
int t1_tp_set_coalescing_size(struct petp *tp, unsigned int size); int t1_tp_set_coalescing_size(struct petp *tp, unsigned int size);