#define MSR_SPEED              (1<<3)
 #define MSR_LINK               (1<<2)
 
+/* USB endpoints */
+enum rtl8150_usb_ep {
+       RTL8150_USB_EP_CONTROL = 0,
+       RTL8150_USB_EP_BULK_IN = 1,
+       RTL8150_USB_EP_BULK_OUT = 2,
+       RTL8150_USB_EP_INT_IN = 3,
+};
+
 /* Interrupt pipe data */
 #define INT_TSR                        0x00
 #define INT_RSR                        0x01
        struct usb_device *udev = interface_to_usbdev(intf);
        rtl8150_t *dev;
        struct net_device *netdev;
+       static const u8 bulk_ep_addr[] = {
+               RTL8150_USB_EP_BULK_IN | USB_DIR_IN,
+               RTL8150_USB_EP_BULK_OUT | USB_DIR_OUT,
+               0};
+       static const u8 int_ep_addr[] = {
+               RTL8150_USB_EP_INT_IN | USB_DIR_IN,
+               0};
 
        netdev = alloc_etherdev(sizeof(rtl8150_t));
        if (!netdev)
                return -ENOMEM;
        }
 
+       /* Verify that all required endpoints are present */
+       if (!usb_check_bulk_endpoints(intf, bulk_ep_addr) ||
+           !usb_check_int_endpoints(intf, int_ep_addr)) {
+               dev_err(&intf->dev, "couldn't find required endpoints\n");
+               goto out;
+       }
+
        tasklet_setup(&dev->tl, rx_fixup);
        spin_lock_init(&dev->rx_pool_lock);