diff options
Diffstat (limited to 'sys/dev/usb/net/if_ure.c')
-rw-r--r-- | sys/dev/usb/net/if_ure.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/sys/dev/usb/net/if_ure.c b/sys/dev/usb/net/if_ure.c index e9112f403ef5..c3f7b622d687 100644 --- a/sys/dev/usb/net/if_ure.c +++ b/sys/dev/usb/net/if_ure.c @@ -96,10 +96,12 @@ static const STRUCT_USB_HOST_ID ure_devs[] = { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i), \ USB_IFACE_CLASS(UICLASS_VENDOR), \ USB_IFACE_SUBCLASS(UISUBCLASS_VENDOR) } + URE_DEV(ELECOM, EDCQUA3C, 0), URE_DEV(LENOVO, RTL8153, URE_FLAG_8153), URE_DEV(LENOVO, TBT3LANGEN2, 0), URE_DEV(LENOVO, ONELINK, 0), URE_DEV(LENOVO, RTL8153_04, URE_FLAG_8153), + URE_DEV(LENOVO, ONELINKPLUS, URE_FLAG_8153), URE_DEV(LENOVO, USBCLAN, 0), URE_DEV(LENOVO, USBCLANGEN2, 0), URE_DEV(LENOVO, USBCLANHYBRID, 0), @@ -478,7 +480,7 @@ done: } /* - * Probe for a RTL8152/RTL8153 chip. + * Probe for a RTL8152/RTL8153/RTL8156 chip. */ static int ure_probe(device_t dev) @@ -705,7 +707,13 @@ ure_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error) /* set the necessary flags for rx checksum */ ure_rxcsum(caps, &pkt, m); - uether_rxmbuf(ue, m, len - ETHER_CRC_LEN); + /* + * len has been known to be bogus at times, + * which leads to problems when passed to + * uether_rxmbuf(). Better understanding why we + * can get there make for good future work. + */ + uether_rxmbuf(ue, m, 0); } off += roundup(len, URE_RXPKT_ALIGN); |