Lines Matching refs:urb

16 #define to_urb(d) container_of(d, struct urb, kref)
21 struct urb *urb = to_urb(kref); in urb_destroy() local
23 if (urb->transfer_flags & URB_FREE_BUFFER) in urb_destroy()
24 kfree(urb->transfer_buffer); in urb_destroy()
26 kfree(urb); in urb_destroy()
43 void usb_init_urb(struct urb *urb) in usb_init_urb() argument
45 if (urb) { in usb_init_urb()
46 memset(urb, 0, sizeof(*urb)); in usb_init_urb()
47 kref_init(&urb->kref); in usb_init_urb()
48 INIT_LIST_HEAD(&urb->urb_list); in usb_init_urb()
49 INIT_LIST_HEAD(&urb->anchor_list); in usb_init_urb()
70 struct urb *usb_alloc_urb(int iso_packets, gfp_t mem_flags) in usb_alloc_urb()
72 struct urb *urb; in usb_alloc_urb() local
74 urb = kmalloc(struct_size(urb, iso_frame_desc, iso_packets), in usb_alloc_urb()
76 if (!urb) in usb_alloc_urb()
78 usb_init_urb(urb); in usb_alloc_urb()
79 return urb; in usb_alloc_urb()
93 void usb_free_urb(struct urb *urb) in usb_free_urb() argument
95 if (urb) in usb_free_urb()
96 kref_put(&urb->kref, urb_destroy); in usb_free_urb()
110 struct urb *usb_get_urb(struct urb *urb) in usb_get_urb() argument
112 if (urb) in usb_get_urb()
113 kref_get(&urb->kref); in usb_get_urb()
114 return urb; in usb_get_urb()
126 void usb_anchor_urb(struct urb *urb, struct usb_anchor *anchor) in usb_anchor_urb() argument
131 usb_get_urb(urb); in usb_anchor_urb()
132 list_add_tail(&urb->anchor_list, &anchor->urb_list); in usb_anchor_urb()
133 urb->anchor = anchor; in usb_anchor_urb()
136 atomic_inc(&urb->reject); in usb_anchor_urb()
149 static void __usb_unanchor_urb(struct urb *urb, struct usb_anchor *anchor) in __usb_unanchor_urb() argument
151 urb->anchor = NULL; in __usb_unanchor_urb()
152 list_del(&urb->anchor_list); in __usb_unanchor_urb()
153 usb_put_urb(urb); in __usb_unanchor_urb()
164 void usb_unanchor_urb(struct urb *urb) in usb_unanchor_urb() argument
169 if (!urb) in usb_unanchor_urb()
172 anchor = urb->anchor; in usb_unanchor_urb()
182 if (likely(anchor == urb->anchor)) in usb_unanchor_urb()
183 __usb_unanchor_urb(urb, anchor); in usb_unanchor_urb()
224 int usb_urb_ep_type_check(const struct urb *urb) in usb_urb_ep_type_check() argument
226 return usb_pipe_type_check(urb->dev, urb->pipe); in usb_urb_ep_type_check()
367 int usb_submit_urb(struct urb *urb, gfp_t mem_flags) in usb_submit_urb() argument
375 if (!urb || !urb->complete) in usb_submit_urb()
377 if (urb->hcpriv) { in usb_submit_urb()
378 WARN_ONCE(1, "URB %pK submitted while active\n", urb); in usb_submit_urb()
382 dev = urb->dev; in usb_submit_urb()
390 ep = usb_pipe_endpoint(dev, urb->pipe); in usb_submit_urb()
394 urb->ep = ep; in usb_submit_urb()
395 urb->status = -EINPROGRESS; in usb_submit_urb()
396 urb->actual_length = 0; in usb_submit_urb()
404 (struct usb_ctrlrequest *) urb->setup_packet; in usb_submit_urb()
410 dev_WARN_ONCE(&dev->dev, (usb_pipeout(urb->pipe) != is_out), in usb_submit_urb()
412 urb->pipe, setup->bRequestType); in usb_submit_urb()
413 if (le16_to_cpu(setup->wLength) != urb->transfer_buffer_length) { in usb_submit_urb()
416 urb->transfer_buffer_length); in usb_submit_urb()
424 urb->transfer_flags &= ~(URB_DIR_MASK | URB_DMA_MAP_SINGLE | in usb_submit_urb()
428 urb->transfer_flags |= (is_out ? URB_DIR_OUT : URB_DIR_IN); in usb_submit_urb()
472 if (urb->number_of_packets <= 0) in usb_submit_urb()
474 for (n = 0; n < urb->number_of_packets; n++) { in usb_submit_urb()
475 len = urb->iso_frame_desc[n].length; in usb_submit_urb()
478 urb->iso_frame_desc[n].status = -EXDEV; in usb_submit_urb()
479 urb->iso_frame_desc[n].actual_length = 0; in usb_submit_urb()
481 } else if (urb->num_sgs && !urb->dev->bus->no_sg_constraint && in usb_submit_urb()
486 for_each_sg(urb->sg, sg, urb->num_sgs - 1, i) in usb_submit_urb()
492 if (urb->transfer_buffer_length > INT_MAX) in usb_submit_urb()
501 if (usb_pipe_type_check(urb->dev, urb->pipe)) in usb_submit_urb()
503 usb_pipetype(urb->pipe), pipetypes[xfertype]); in usb_submit_urb()
522 allowed &= urb->transfer_flags; in usb_submit_urb()
525 if (allowed != urb->transfer_flags) in usb_submit_urb()
527 urb->transfer_flags, allowed); in usb_submit_urb()
543 if ((urb->interval < 6) in usb_submit_urb()
548 if (urb->interval <= 0) in usb_submit_urb()
557 if (urb->interval > (1 << 15)) in usb_submit_urb()
562 if (urb->interval > 16) in usb_submit_urb()
567 if (urb->interval > (1024 * 8)) in usb_submit_urb()
568 urb->interval = 1024 * 8; in usb_submit_urb()
574 if (urb->interval > 255) in usb_submit_urb()
579 if (urb->interval > 1024) in usb_submit_urb()
580 urb->interval = 1024; in usb_submit_urb()
590 urb->interval = min(max, 1 << ilog2(urb->interval)); in usb_submit_urb()
594 return usb_hcd_submit_urb(urb, mem_flags); in usb_submit_urb()
673 int usb_unlink_urb(struct urb *urb) in usb_unlink_urb() argument
675 if (!urb) in usb_unlink_urb()
677 if (!urb->dev) in usb_unlink_urb()
679 if (!urb->ep) in usb_unlink_urb()
681 return usb_hcd_unlink_urb(urb, -ECONNRESET); in usb_unlink_urb()
712 void usb_kill_urb(struct urb *urb) in usb_kill_urb() argument
715 if (!(urb && urb->dev && urb->ep)) in usb_kill_urb()
717 atomic_inc(&urb->reject); in usb_kill_urb()
719 usb_hcd_unlink_urb(urb, -ENOENT); in usb_kill_urb()
720 wait_event(usb_kill_urb_queue, atomic_read(&urb->use_count) == 0); in usb_kill_urb()
722 atomic_dec(&urb->reject); in usb_kill_urb()
753 void usb_poison_urb(struct urb *urb) in usb_poison_urb() argument
756 if (!urb) in usb_poison_urb()
758 atomic_inc(&urb->reject); in usb_poison_urb()
760 if (!urb->dev || !urb->ep) in usb_poison_urb()
763 usb_hcd_unlink_urb(urb, -ENOENT); in usb_poison_urb()
764 wait_event(usb_kill_urb_queue, atomic_read(&urb->use_count) == 0); in usb_poison_urb()
768 void usb_unpoison_urb(struct urb *urb) in usb_unpoison_urb() argument
770 if (!urb) in usb_unpoison_urb()
773 atomic_dec(&urb->reject); in usb_unpoison_urb()
789 void usb_block_urb(struct urb *urb) in usb_block_urb() argument
791 if (!urb) in usb_block_urb()
794 atomic_inc(&urb->reject); in usb_block_urb()
811 struct urb *victim; in usb_kill_anchored_urbs()
818 struct urb, anchor_list); in usb_kill_anchored_urbs()
849 struct urb *victim; in usb_poison_anchored_urbs()
857 struct urb, anchor_list); in usb_poison_anchored_urbs()
884 struct urb *lazarus; in usb_unpoison_anchored_urbs()
908 struct urb *victim; in usb_unlink_anchored_urbs()
979 struct urb *usb_get_from_anchor(struct usb_anchor *anchor) in usb_get_from_anchor()
981 struct urb *victim; in usb_get_from_anchor()
986 victim = list_entry(anchor->urb_list.next, struct urb, in usb_get_from_anchor()
1008 struct urb *victim; in usb_scuttle_anchored_urbs()
1016 struct urb, anchor_list); in usb_scuttle_anchored_urbs()