goku_queue(struct usb_ep *_ep, struct usb_request *_req, int gfp_flags) 
goku_queue(struct usb_ep *_ep, struct usb_request *_req, unsigned gfp_flags) 
goku_queue(struct usb_ep *_ep, struct usb_request *_req, int gfp_flags){	struct goku_request	*req;	struct goku_ep		*ep;	struct goku_udc		*dev;	unsigned long		flags;	int			status;	/* always require a cpu-view buffer so pio works */	req = container_of(_req, struct goku_request, req);	if (unlikely(!_req || !_req->complete			|| !_req->buf || !list_empty(&req->queue)))		return -EINVAL;	ep = container_of(_ep, struct goku_ep, ep);	if (unlikely(!_ep || (!ep->desc && ep->num != 0)))		return -EINVAL;	dev = ep->dev;	if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN))		return -ESHUTDOWN;	/* can't touch registers when suspended */	if (dev->ep0state == EP0_SUSPEND)		return -EBUSY;	/* set up dma mapping in case the caller didn't */	if (ep->dma && _req->dma == DMA_ADDR_INVALID) {		_req->dma = pci_map_single(dev->pdev, _req->buf, _req->length,			ep->is_in ? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE);		req->mapped = 1;	}#ifdef USB_TRACE	VDBG(dev, "%s queue req %p, len %u buf %p\n",			_ep->name, _req, _req->length, _req->buf);#endif	spin_lock_irqsave(&dev->lock, flags);	_req->status = -EINPROGRESS;	_req->actual = 0;	/* for ep0 IN without premature status, zlp is required and	 * writing EOP starts the status stage (OUT).	 */	if (unlikely(ep->num == 0 && ep->is_in))		_req->zero = 1;	/* kickstart this i/o queue? */	status = 0;	if (list_empty(&ep->queue) && likely(!ep->stopped)) {		/* dma:  done after dma completion IRQ (or error)		 * pio:  done after last fifo operation		 */		if (ep->dma)			status = start_dma(ep, req);		else			status = (ep->is_in ? write_fifo : read_fifo)(ep, req);		if (unlikely(status != 0)) {			if (status > 0)				status = 0;			req = NULL;		}	} /* else pio or dma irq handler advances the queue. */	if (likely(req != 0))		list_add_tail(&req->queue, &ep->queue);	if (likely(!list_empty(&ep->queue))			&& likely(ep->num != 0)			&& !ep->dma			&& !(dev->int_enable & INT_EPxDATASET (ep->num)))		pio_irq_enable(dev, dev->regs, ep->num);	spin_unlock_irqrestore(&dev->lock, flags);	/* pci writes may still be posted */	return status;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/5db539e49fc7471e23bf3c94ca304f008cb7b7f3/goku_udc.c/clean/drivers/usb/gadget/goku_udc.c