Lines Matching refs:urb
322 static int rh_call_control (struct usb_hcd *hcd, struct urb *urb) in rh_call_control() argument
324 struct usb_ctrlrequest *cmd = (struct usb_ctrlrequest *) urb->setup_packet; in rh_call_control()
327 unsigned char *ubuf = (unsigned char*) urb->transfer_buffer; in rh_call_control()
331 urb->hcpriv = hcd; in rh_call_control()
338 if (wLength > urb->transfer_buffer_length) in rh_call_control()
342 urb->status = 0; in rh_call_control()
343 urb->actual_length = wLength; in rh_call_control()
419 urb->actual_length = rh_string ( in rh_call_control()
517 urb->status = hcd->driver->hub_control (hcd, in rh_call_control()
524 urb->status = -EPIPE; in rh_call_control()
526 urb->dev->maxchild); in rh_call_control()
528 if (urb->status) { in rh_call_control()
530 urb->actual_length = 0; in rh_call_control()
533 typeReq, wValue, wIndex, wLength, urb->status); in rh_call_control()
537 if (urb->transfer_buffer_length < len) in rh_call_control()
538 len = urb->transfer_buffer_length; in rh_call_control()
539 urb->actual_length = len; in rh_call_control()
546 usb_hcd_giveback_urb (hcd, urb, NULL); in rh_call_control()
586 static int rh_status_urb (struct usb_hcd *hcd, struct urb *urb) in rh_status_urb() argument
589 int len = 1 + (urb->dev->maxchild / 8); in rh_status_urb()
593 || urb->status != -EINPROGRESS in rh_status_urb()
594 || urb->transfer_buffer_length < len in rh_status_urb()
598 urb->status); in rh_status_urb()
610 hcd->rh_timer.data_ex = (U32) urb; in rh_status_urb()
616 urb->hcpriv = hcd; in rh_status_urb()
634 struct urb *urb; in rh_report_status() local
639 urb = (struct urb *) pTimer->data_ex; in rh_report_status()
641 spin_lock (&urb->lock); in rh_report_status()
645 if (!urb->dev in rh_report_status()
646 || urb->status != -EINPROGRESS in rh_report_status()
647 || (hcd = (struct usb_hcd*) urb->dev->bus->hcpriv) == 0) { in rh_report_status()
648 spin_unlock (&urb->lock); in rh_report_status()
650 diag_printf("rh_report_status: it's unlinked. urb->status: 0x%\n", urb->status); in rh_report_status()
656 length = hcd->driver->hub_status_data (hcd, (char*) urb->transfer_buffer); in rh_report_status()
659 length = hcd->driver->hub_status_data (hcd, urb->transfer_buffer); in rh_report_status()
665 urb->actual_length = length; in rh_report_status()
666 urb->status = 0; in rh_report_status()
667 urb->hcpriv = 0; in rh_report_status()
672 spin_unlock (&urb->lock); in rh_report_status()
676 usb_hcd_giveback_urb (hcd, urb, NULL); in rh_report_status()
701 static int rh_urb_enqueue (struct usb_hcd *hcd, struct urb *urb) in rh_urb_enqueue() argument
703 if (usb_pipeint (urb->pipe)) { in rh_urb_enqueue()
708 retval = rh_status_urb (hcd, urb); in rh_urb_enqueue()
712 if (usb_pipecontrol (urb->pipe)) in rh_urb_enqueue()
713 return rh_call_control (hcd, urb); in rh_urb_enqueue()
729 void usb_rh_status_dequeue (struct usb_hcd *hcd, struct urb *urb) in usb_rh_status_dequeue() argument
736 urb->hcpriv = 0; in usb_rh_status_dequeue()
737 usb_hcd_giveback_urb (hcd, urb, NULL); in usb_rh_status_dequeue()
757 struct urb *urb; in usb_hcd_poll_rh_status() local
772 urb = hcd->status_urb; in usb_hcd_poll_rh_status()
773 if (urb) { in usb_hcd_poll_rh_status()
776 urb->actual_length = length; in usb_hcd_poll_rh_status()
777 urb->status = 0; // update status in usb_hcd_poll_rh_status()
778 urb->hcpriv = 0; in usb_hcd_poll_rh_status()
779 memcpy(urb->transfer_buffer, buffer, length); in usb_hcd_poll_rh_status()
783 usb_hcd_giveback_urb(hcd, urb, NULL); in usb_hcd_poll_rh_status()
836 static int rh_queue_status (struct usb_hcd *hcd, struct urb *urb) in rh_queue_status() argument
840 int len = 1 + (urb->dev->maxchild / 8); in rh_queue_status()
843 if (hcd->status_urb || urb->transfer_buffer_length < len) { in rh_queue_status()
870 hcd->status_urb = urb; in rh_queue_status()
871 urb->hcpriv = hcd; /* indicate it's queued */ in rh_queue_status()
915 static int rh_urb_enqueue (struct usb_hcd *hcd, struct urb *urb) in rh_urb_enqueue() argument
917 if (usb_pipeint (urb->pipe)) { in rh_urb_enqueue()
923 retval = rh_queue_status (hcd, urb); in rh_urb_enqueue()
927 else if (usb_pipecontrol (urb->pipe)) in rh_urb_enqueue()
928 return rh_call_control (hcd, urb); in rh_urb_enqueue()
935 void usb_rh_status_dequeue (struct usb_hcd *hcd, struct urb *urb) in usb_rh_status_dequeue() argument
943 if (usb_pipecontrol (urb->pipe)) { /* Control URB */ in usb_rh_status_dequeue()
949 if (urb == hcd->status_urb) { in usb_rh_status_dequeue()
955 usb_hcd_giveback_urb(hcd, urb, NULL); in usb_rh_status_dequeue()
1373 void usb_claim_bandwidth (struct usb_device *dev, struct urb *urb, int bustime, int isoc) in usb_claim_bandwidth() argument
1380 urb->bandwidth = bustime; in usb_claim_bandwidth()
1452 void usb_release_bandwidth (struct usb_device *dev, struct urb *urb, int isoc) in usb_release_bandwidth() argument
1454 dev->bus->bandwidth_allocated -= urb->bandwidth; in usb_release_bandwidth()
1462 urb->bandwidth, in usb_release_bandwidth()
1467 urb->bandwidth = 0; in usb_release_bandwidth()
1586 static void urb_unlink (struct urb *urb) in urb_unlink() argument
1592 if (urb->bandwidth) in urb_unlink()
1593 usb_release_bandwidth (urb->dev, urb, in urb_unlink()
1594 usb_pipeisoc (urb->pipe)); in urb_unlink()
1599 list_del_init (&urb->urb_list); in urb_unlink()
1600 dev = urb->dev; in urb_unlink()
1606 static int hcd_submit_urb (struct urb *urb, int mem_flags) in hcd_submit_urb() argument
1609 struct usb_hcd *hcd = (struct usb_hcd*) urb->dev->bus->hcpriv; in hcd_submit_urb()
1610 struct hcd_dev *dev = (struct hcd_dev*) urb->dev->hcpriv; in hcd_submit_urb()
1615 return (hcd->driver->urb_enqueue (hcd, urb, mem_flags)); in hcd_submit_urb()
1628 usb_get_dev (urb->dev); in hcd_submit_urb()
1629 list_add_tail (&urb->urb_list, &dev->urb_list); in hcd_submit_urb()
1632 INIT_LIST_HEAD (&urb->urb_list); in hcd_submit_urb()
1641 urb = usb_get_urb (urb); in hcd_submit_urb()
1642 if (urb->dev == hcd->self.root_hub) { in hcd_submit_urb()
1644 urb->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP in hcd_submit_urb()
1646 status = rh_urb_enqueue (hcd, urb); in hcd_submit_urb()
1659 if (usb_pipecontrol (urb->pipe)) in hcd_submit_urb()
1662 …if ((((U32) urb->setup_packet) & CPU_L1_CACHE_BOUND) != 0 || ((sizeof(struct usb_ctrlrequest) & C… in hcd_submit_urb()
1665 urb->SetDMALen = sizeof(struct usb_ctrlrequest); in hcd_submit_urb()
1669 …urb->SetDMABuf = Usb_AllocateNonCachedMemory(((urb->SetDMALen+CPU_L1_CACHE_BOUND) & ~CPU_L1_CACHE_… in hcd_submit_urb()
1671 USB_ASSERT(urb->SetDMABuf != NULL, "Allocate SetDMABuf error\n"); in hcd_submit_urb()
1673 memcpy(urb->SetDMABuf, urb->setup_packet, urb->SetDMALen); in hcd_submit_urb()
1676 urb->setup_dma = (dma_addr_t) USB_VA2PA((U32)urb->SetDMABuf); in hcd_submit_urb()
1682 if ( urb->setup_packet != KSEG02KSEG1(urb->setup_packet) ) in hcd_submit_urb()
1684 MsOS_Dcache_Flush((U32) urb->setup_packet, sizeof(struct usb_ctrlrequest)); in hcd_submit_urb()
1686 urb->setup_dma = (dma_addr_t) USB_VA2PA((U32)urb->setup_packet); in hcd_submit_urb()
1690 USB_ASSERT((urb->setup_dma & 0xF) == 0, "DMA address is not 16 bytes aligned\n"); in hcd_submit_urb()
1695 if (urb->transfer_buffer_length != 0) in hcd_submit_urb()
1698 if ((Mass_stor_us!=NULL)&& ( urb->transfer_buffer == Mass_stor_us->iobuf )) in hcd_submit_urb()
1700 urb->transfer_dma= (dma_addr_t) USB_VA2PA((U32)urb->transfer_buffer); in hcd_submit_urb()
1706 …if ((((U32) urb->transfer_buffer) & CPU_L1_CACHE_BOUND) != 0 || ((urb->transfer_buffer_length & C… in hcd_submit_urb()
1710 if (urb->transfer_buffer_length >= 512) in hcd_submit_urb()
1711 … diag_printf("DMA address %x DMA length %x\n", urb->transfer_buffer, urb->transfer_buffer_length); in hcd_submit_urb()
1713 urb->TxDMALen= urb->transfer_buffer_length; in hcd_submit_urb()
1717 …urb->TxDMABuf = Usb_AllocateNonCachedMemory(((urb->TxDMALen+CPU_L1_CACHE_BOUND) & ~CPU_L1_CACHE_BO… in hcd_submit_urb()
1718 USB_ASSERT(urb->TxDMABuf != NULL, "Allocate TxDMABuf error\n"); in hcd_submit_urb()
1720 if (!usb_pipein(urb->pipe)) in hcd_submit_urb()
1722 memcpy(urb->TxDMABuf, urb->transfer_buffer, urb->transfer_buffer_length); in hcd_submit_urb()
1725 urb->transfer_dma= (dma_addr_t) USB_VA2PA((U32)urb->TxDMABuf); in hcd_submit_urb()
1730 if ( urb->transfer_buffer != KSEG02KSEG1(urb->transfer_buffer) ) in hcd_submit_urb()
1732 if (usb_pipein(urb->pipe)) in hcd_submit_urb()
1735 MsOS_Dcache_Flush((U32) urb->transfer_buffer, urb->transfer_buffer_length); in hcd_submit_urb()
1740 MsOS_Dcache_Flush((U32) urb->transfer_buffer, urb->transfer_buffer_length); in hcd_submit_urb()
1744 urb->transfer_dma= (dma_addr_t) USB_VA2PA((U32)urb->transfer_buffer); in hcd_submit_urb()
1748 USB_ASSERT((urb->transfer_dma & 0xF) == 0, "DMA address is not 16 bytes aligned\n"); in hcd_submit_urb()
1754 status = hcd->driver->urb_enqueue (hcd, urb, mem_flags); in hcd_submit_urb()
1757 usb_put_urb (urb); in hcd_submit_urb()
1758 urb_unlink (urb); in hcd_submit_urb()
1810 unlink1 (struct usb_hcd *hcd, struct urb *urb) in unlink1() argument
1812 if (urb == (struct urb *) hcd->rh_timer.data) in unlink1()
1813 usb_rh_status_dequeue (hcd, urb); in unlink1()
1818 value = hcd->driver->urb_dequeue (hcd, urb); in unlink1()
1822 urb, value); in unlink1()
1835 static void unlink_complete (struct urb *urb, struct pt_regs *regs) in unlink_complete() argument
1839 splice = (struct completion_splice *) urb->context; in unlink_complete()
1842 urb->complete = splice->complete; in unlink_complete()
1843 urb->context = splice->context; in unlink_complete()
1844 urb->complete (urb, regs); //Callback function in unlink_complete()
1852 static int hcd_unlink_urb (struct urb *urb) in hcd_unlink_urb() argument
1862 if (!urb) in hcd_unlink_urb()
1866 spin_lock_irqsave (&urb->lock, flags); in hcd_unlink_urb()
1869 if (!urb->dev || !urb->dev->bus) { in hcd_unlink_urb()
1874 dev = (struct hcd_dev*) urb->dev->hcpriv; in hcd_unlink_urb()
1875 sys = &urb->dev->dev; in hcd_unlink_urb()
1876 hcd = (struct usb_hcd*) urb->dev->bus->hcpriv; in hcd_unlink_urb()
1882 if (!urb->hcpriv) { in hcd_unlink_urb()
1888 if (urb->status != -EINPROGRESS) { in hcd_unlink_urb()
1894 if (!(urb->transfer_flags & URB_ASYNC_UNLINK)) { in hcd_unlink_urb()
1898 splice.complete = urb->complete; in hcd_unlink_urb()
1899 splice.context = urb->context; in hcd_unlink_urb()
1900 urb->complete = unlink_complete; in hcd_unlink_urb()
1901 urb->context = &splice; in hcd_unlink_urb()
1902 urb->status = -ENOENT; in hcd_unlink_urb()
1905 urb->status = -ECONNRESET; in hcd_unlink_urb()
1908 spin_unlock_irqrestore (&urb->lock, flags); in hcd_unlink_urb()
1911 if (urb == (struct urb *) hcd->rh_timer.data) { in hcd_unlink_urb()
1912 usb_rh_status_dequeue (hcd, urb); in hcd_unlink_urb()
1915 retval = hcd->driver->urb_dequeue (hcd, urb); in hcd_unlink_urb()
1919 dev_dbg (sys, "dequeue %p --> %d\n", urb, retval); in hcd_unlink_urb()
1920 if (!(urb->transfer_flags & URB_ASYNC_UNLINK)) { in hcd_unlink_urb()
1921 spin_lock_irqsave (&urb->lock, flags); in hcd_unlink_urb()
1922 urb->complete = splice.complete; in hcd_unlink_urb()
1923 urb->context = splice.context; in hcd_unlink_urb()
1924 spin_unlock_irqrestore (&urb->lock, flags); in hcd_unlink_urb()
1931 if (urb->transfer_flags & URB_ASYNC_UNLINK) in hcd_unlink_urb()
1962 spin_unlock_irqrestore (&urb->lock, flags); in hcd_unlink_urb()
1965 dev_dbg (sys, "hcd_unlink_urb %p fail %d\n", urb, retval); in hcd_unlink_urb()
1975 struct urb *urb; in hcd_endpoint_disable() local
2000 urb = list_entry((&dev->urb_list)->next, struct urb, urb_list); in hcd_endpoint_disable()
2001 for( ; &(urb->urb_list) != &(dev->urb_list); in hcd_endpoint_disable()
2002 __mptr = urb->urb_list.next, in hcd_endpoint_disable()
2003 urb = (struct urb *)( (char *)__mptr - (char *)offsetof(struct urb,urb_list) ) in hcd_endpoint_disable()
2006 int tmp = urb->pipe; in hcd_endpoint_disable()
2016 if (urb->status != -EINPROGRESS) in hcd_endpoint_disable()
2018 usb_get_urb (urb); in hcd_endpoint_disable()
2021 spin_lock (&urb->lock); in hcd_endpoint_disable()
2022 tmp = urb->status; in hcd_endpoint_disable()
2026 urb->status = -ESHUTDOWN; in hcd_endpoint_disable()
2028 spin_unlock (&urb->lock); in hcd_endpoint_disable()
2032 tmp = urb->pipe; in hcd_endpoint_disable()
2033 unlink1 (hcd, urb); in hcd_endpoint_disable()
2051 urb, tmp, usb_pipeendpoint (tmp), in hcd_endpoint_disable()
2055 usb_put_urb (urb); in hcd_endpoint_disable()
2161 void usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb, struct pt_regs *regs) in usb_hcd_giveback_urb() argument
2163 urb_unlink (urb); in usb_hcd_giveback_urb()
2164 urb->complete (urb, regs); in usb_hcd_giveback_urb()
2165 usb_put_urb (urb); in usb_hcd_giveback_urb()