|
@@ -681,7 +681,7 @@ static int smsc95xx_set_features(struct net_device *netdev,
|
|
|
if (ret < 0)
|
|
|
return ret;
|
|
|
|
|
|
- if (features & NETIF_F_HW_CSUM)
|
|
|
+ if (features & NETIF_F_IP_CSUM)
|
|
|
read_buf |= Tx_COE_EN_;
|
|
|
else
|
|
|
read_buf &= ~Tx_COE_EN_;
|
|
@@ -1279,12 +1279,19 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
|
|
|
|
|
|
spin_lock_init(&pdata->mac_cr_lock);
|
|
|
|
|
|
+ /* LAN95xx devices do not alter the computed checksum of 0 to 0xffff.
|
|
|
+ * RFC 2460, ipv6 UDP calculated checksum yields a result of zero must
|
|
|
+ * be changed to 0xffff. RFC 768, ipv4 UDP computed checksum is zero,
|
|
|
+ * it is transmitted as all ones. The zero transmitted checksum means
|
|
|
+ * transmitter generated no checksum. Hence, enable csum offload only
|
|
|
+ * for ipv4 packets.
|
|
|
+ */
|
|
|
if (DEFAULT_TX_CSUM_ENABLE)
|
|
|
- dev->net->features |= NETIF_F_HW_CSUM;
|
|
|
+ dev->net->features |= NETIF_F_IP_CSUM;
|
|
|
if (DEFAULT_RX_CSUM_ENABLE)
|
|
|
dev->net->features |= NETIF_F_RXCSUM;
|
|
|
|
|
|
- dev->net->hw_features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM;
|
|
|
+ dev->net->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
|
|
|
|
|
|
smsc95xx_init_mac_address(dev);
|
|
|
|