struct usb_host_endpoint *hep = urb->hcpriv; 
struct usb_host_endpoint *hep; 
static int sl811h_urb_dequeue(struct usb_hcd *hcd, struct urb *urb){	struct sl811		*sl811 = hcd_to_sl811(hcd);	struct usb_host_endpoint *hep = urb->hcpriv;	unsigned long		flags;	struct sl811h_ep	*ep;	int			retval = 0;	if (!hep)		return -EINVAL;	spin_lock_irqsave(&sl811->lock, flags);	ep = hep->hcpriv;	if (ep) {		/* finish right away if this urb can't be active ...		 * note that some drivers wrongly expect delays		 */		if (ep->hep->urb_list.next != &urb->urb_list) {			/* not front of queue?  never active */		/* for active transfers, we expect an IRQ */		} else if (sl811->active_a == ep) {			if (time_before_eq(sl811->jiffies_a, jiffies)) {				/* happens a lot with lowspeed?? */				DBG("giveup on DONE_A: ctrl %02x sts %02x\n",					sl811_read(sl811,						SL811_EP_A(SL11H_HOSTCTLREG)),					sl811_read(sl811,						SL811_EP_A(SL11H_PKTSTATREG)));				sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG),						0);				sl811->active_a = NULL;			} else				urb = NULL;#ifdef	USE_B		} else if (sl811->active_b == ep) {			if (time_before_eq(sl811->jiffies_a, jiffies)) {				/* happens a lot with lowspeed?? */				DBG("giveup on DONE_B: ctrl %02x sts %02x\n",					sl811_read(sl811,						SL811_EP_B(SL11H_HOSTCTLREG)),					sl811_read(sl811,						SL811_EP_B(SL11H_PKTSTATREG)));				sl811_write(sl811, SL811_EP_B(SL11H_HOSTCTLREG),						0);				sl811->active_b = NULL;			} else				urb = NULL;#endif		} else {			/* front of queue for inactive endpoint */		}		if (urb)			finish_request(sl811, ep, urb, NULL, 0);		else			VDBG("dequeue, urb %p active %s; wait4irq\n", urb,				(sl811->active_a == ep) ? "A" : "B");	} else		retval = -EINVAL;	spin_unlock_irqrestore(&sl811->lock, flags);	return retval;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1e9a47b62f7daf5a94fdd74a94dd4e076f44909a/sl811-hcd.c/buggy/drivers/usb/host/sl811-hcd.c