Esempio n. 1
0
static int tegra_ehci_urb_enqueue(
	struct usb_hcd	*hcd,
	struct urb		*urb,
	gfp_t			mem_flags
) {
	struct tegra_hcd_platform_data *pdata;
	int xfertype;
	int transfer_buffer_length;

	pdata = hcd->self.controller->platform_data;

	xfertype = usb_endpoint_type(&urb->ep->desc);
	transfer_buffer_length = urb->transfer_buffer_length;
	/* Turn on the USB busy hints */
	switch (xfertype) {
		case USB_ENDPOINT_XFER_INT:
			if (transfer_buffer_length < 255) {
				/* Do nothing for interrupt buffers < 255 */
			} else {
				// signal to set the busy hints
				schedule_work(&pdata->work);
			}
		break;
		case USB_ENDPOINT_XFER_ISOC:
		case USB_ENDPOINT_XFER_BULK:
			// signal to set the busy hints
			schedule_work(&pdata->work);
		break;
		case USB_ENDPOINT_XFER_CONTROL:
		default:
		/* Do nothing special here */
		break;
	}

	return ehci_urb_enqueue(hcd, urb, mem_flags);
}
Esempio n. 2
0
static int ehci_hsic_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
		gfp_t mem_flags)
{
	dbg_log_event(urb, event_to_str(URB_SUBMIT), 0);
	return ehci_urb_enqueue(hcd, urb, mem_flags);
}