diff options
| author | Gary King <gking@nvidia.com> | 2009-12-07 20:38:23 -0800 |
|---|---|---|
| committer | Gary King <gking@nvidia.com> | 2009-12-08 13:52:59 -0800 |
| commit | 4405ca17e8e67b6f80f5d95b28731d18306be94d (patch) | |
| tree | 92f16f1acbd6467be4709d4d78bc5e1c11fec856 | |
| parent | 6684ee87cd190812667b878f5997d1fcf9ed7753 (diff) | |
smsc95xx: add support for SMSC 9514 USB ethernet device
fixes a few bugs with skid buffer usage, adds device ID for SMSC 9514
| -rw-r--r-- | drivers/net/usb/smsc95xx.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index 5574abe29c73..d93e31f41d2a 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -1118,6 +1118,7 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) if (pdata->use_rx_csum) smsc95xx_rx_csum_offload(skb); + skb_trim(skb, skb->len - 4); /* remove fcs */ skb->truesize = size + sizeof(struct sk_buff); return 1; @@ -1136,6 +1137,7 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) if (pdata->use_rx_csum) smsc95xx_rx_csum_offload(ax_skb); + skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */ ax_skb->truesize = size + sizeof(struct sk_buff); usbnet_skb_return(dev, ax_skb); @@ -1175,7 +1177,14 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev, /* We do not advertise SG, so skbs should be already linearized */ BUG_ON(skb_shinfo(skb)->nr_frags); - if (skb_headroom(skb) < overhead) { +/* + * This condition is commented since otherwise, it causes the driver to hang. + * The root cause is yet to be fixed, but if a new skb is always allocated, then + * the driver works fine without any problem. + */ + + // if (skb->len >= 382 || skb_headroom(skb) < overhead) + { struct sk_buff *skb2 = skb_copy_expand(skb, overhead, 0, flags); dev_kfree_skb_any(skb); @@ -1215,7 +1224,7 @@ static const struct driver_info smsc95xx_info = { .rx_fixup = smsc95xx_rx_fixup, .tx_fixup = smsc95xx_tx_fixup, .status = smsc95xx_status, - .flags = FLAG_ETHER, + .flags = FLAG_ETHER | FLAG_SEND_ZLP, }; static const struct usb_device_id products[] = { @@ -1224,6 +1233,11 @@ static const struct usb_device_id products[] = { USB_DEVICE(0x0424, 0x9500), .driver_info = (unsigned long) &smsc95xx_info, }, + { + /* SMSC9514 USB Ethernet Device */ + USB_DEVICE(0x0424, 0xEC00), + .driver_info = (unsigned long) &smsc95xx_info, + }, { }, /* END */ }; MODULE_DEVICE_TABLE(usb, products); |
