Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b0026624 authored by Michael Chan's avatar Michael Chan Committed by David S. Miller
Browse files

[TG3]: Add ipv6 TSO feature



Enable ipv6 TSO feature on chips that support it.

Update version to 3.61.

Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6703931c
Loading
Loading
Loading
Loading
+24 −9
Original line number Diff line number Diff line
@@ -68,8 +68,8 @@

#define DRV_MODULE_NAME		"tg3"
#define PFX DRV_MODULE_NAME	": "
#define DRV_MODULE_VERSION	"3.61"
#define DRV_MODULE_RELDATE	"June 29, 2006"
#define DRV_MODULE_VERSION	"3.62"
#define DRV_MODULE_RELDATE	"June 30, 2006"

#define TG3_DEF_MAC_MODE	0
#define TG3_DEF_RX_MODE		0
@@ -3798,18 +3798,24 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
			goto out_unlock;
		}

		if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
			mss |= (skb_headlen(skb) - ETH_HLEN) << 9;
		else {
			tcp_opt_len = ((skb->h.th->doff - 5) * 4);
		ip_tcp_len = (skb->nh.iph->ihl * 4) + sizeof(struct tcphdr);
			ip_tcp_len = (skb->nh.iph->ihl * 4) +
				     sizeof(struct tcphdr);

			skb->nh.iph->check = 0;
			skb->nh.iph->tot_len = htons(mss + ip_tcp_len +
						     tcp_opt_len);
			mss |= (ip_tcp_len + tcp_opt_len) << 9;
		}

		base_flags |= (TXD_FLAG_CPU_PRE_DMA |
			       TXD_FLAG_CPU_POST_DMA);

		skb->nh.iph->check = 0;
		skb->nh.iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len);

		skb->h.th->check = 0;

		mss |= (ip_tcp_len + tcp_opt_len) << 9;
	}
	else if (skb->ip_summed == CHECKSUM_HW)
		base_flags |= TXD_FLAG_TCPUDP_CSUM;
@@ -7887,6 +7893,12 @@ static int tg3_set_tso(struct net_device *dev, u32 value)
			return -EINVAL;
		return 0;
	}
	if (tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) {
		if (value)
			dev->features |= NETIF_F_TSO6;
		else
			dev->features &= ~NETIF_F_TSO6;
	}
	return ethtool_op_set_tso(dev, value);
}
#endif
@@ -11507,8 +11519,11 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
	 * Firmware TSO on older chips gives lower performance, so it
	 * is off by default, but can be enabled using ethtool.
	 */
	if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
	if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
		dev->features |= NETIF_F_TSO;
		if (tp->tg3_flags2 & TG3_FLG2_HW_TSO_2)
			dev->features |= NETIF_F_TSO6;
	}

#endif