Example #1
0
static int qu_queue_urb (hci_t * hci, struct urb * urb)
{
	int index = qu_pipeindex (urb->pipe);
	struct hci_device * hci_dev = usb_to_hci (urb->dev);

	if (hci_dev->pipe_head [index]) {
		__list_add (&urb->urb_list, 
				hci_dev->urb_queue [index].prev, &(hci_dev->urb_queue [index]));
	 } else {
	 	hci_dev->pipe_head [index] = urb;
		qu_queue_active_urb (hci, urb);
	}
	return 0;
}
Example #2
0
static void qu_return_urb (hci_t * hci, struct urb * urb, int resub_ok) 
{	
	struct hci_device * hci_dev = usb_to_hci (urb->dev);
	int index = qu_pipeindex (urb->pipe);
	
	list_del (&urb->urb_list);
	INIT_LIST_HEAD (&urb->urb_list);
		
	if (!list_empty (&(hci_dev->urb_queue [index]))) {
		urb = list_entry (hci_dev->urb_queue [index].next, struct urb, urb_list);
		list_del (&urb->urb_list);
		INIT_LIST_HEAD (&urb->urb_list);
		hci_dev->pipe_head [index] = urb;
		qu_queue_active_urb (hci, urb);
	} else {
Example #3
0
static inline int qu_queue_urb (hci_t * hci, urb_t * urb)
{
	struct hci_endpoint * ep = &usb_to_ep(urb->dev,qu_pipeindex(urb->pipe));

	unsigned long flags;
	int i;
	spin_lock_irqsave (&hci->urb_list_lock, flags);
//	if (qu_pipeindex(urb->pipe)==2) printk(KERN_ERR __FILE__  ": pipe 2\n");

	i =checkAlreadyActive(hci,urb,ep);
	if (i==1) {
		__list_add (&urb->urb_list,ep->urb_queue.prev, &(ep->urb_queue));
	} else if (i==0) {
		qu_queue_active_urb (hci, urb);
	} else {
		list_add (&urb->urb_list, &hci->active_list);
		hc116x_enable_sofint(hci);
	}
	spin_unlock_irqrestore (&hci->urb_list_lock, flags);
	return 0;
}