Lines Matching refs:urbp
554 static void xenhcd_free_urb_priv(struct urb_priv *urbp)
556 urbp->urb->hcpriv = NULL;
557 kmem_cache_free(xenhcd_urbp_cachep, urbp);
765 struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
766 int priv_status = urbp->status;
768 list_del_init(&urbp->list);
769 xenhcd_free_urb_priv(urbp);
780 static int xenhcd_do_request(struct xenhcd_info *info, struct urb_priv *urbp)
783 struct urb *urb = urbp->urb;
792 if (unlikely(urbp->unlinked)) {
793 req->u.unlink.unlink_id = urbp->req_id;
796 urbp->unlink_req_id = id;
803 urbp->req_id = id;
822 struct urb_priv *urbp;
830 urbp = list_entry(info->pending_submit_list.next,
832 if (!xenhcd_do_request(info, urbp))
833 list_move_tail(&urbp->list, &info->in_progress_list);
835 xenhcd_giveback_urb(info, urbp->urb, -ESHUTDOWN);
845 struct urb_priv *urbp, *tmp;
848 list_for_each_entry_safe(urbp, tmp, &info->in_progress_list, list) {
849 req_id = urbp->req_id;
850 if (!urbp->unlinked) {
854 if (urbp->urb->status == -EINPROGRESS)
856 xenhcd_giveback_urb(info, urbp->urb,
859 xenhcd_giveback_urb(info, urbp->urb,
860 urbp->urb->status);
865 list_for_each_entry_safe(urbp, tmp, &info->pending_submit_list, list)
866 xenhcd_giveback_urb(info, urbp->urb, -ESHUTDOWN);
874 struct urb_priv *urbp, *tmp;
876 list_for_each_entry_safe(urbp, tmp, &info->giveback_waiting_list, list)
877 xenhcd_giveback_urb(info, urbp->urb, urbp->urb->status);
880 static int xenhcd_submit_urb(struct xenhcd_info *info, struct urb_priv *urbp)
885 list_add_tail(&urbp->list, &info->pending_submit_list);
891 list_add_tail(&urbp->list, &info->pending_submit_list);
896 ret = xenhcd_do_request(info, urbp);
898 list_add_tail(&urbp->list, &info->in_progress_list);
903 static int xenhcd_unlink_urb(struct xenhcd_info *info, struct urb_priv *urbp)
908 if (urbp->unlinked)
911 urbp->unlinked = true;
914 if (urbp->req_id == ~0) {
915 list_move_tail(&urbp->list, &info->giveback_waiting_list);
922 list_move_tail(&urbp->list, &info->pending_unlink_list);
928 list_move_tail(&urbp->list, &info->pending_unlink_list);
933 ret = xenhcd_do_request(info, urbp);
935 list_move_tail(&urbp->list, &info->in_progress_list);
1327 struct urb_priv *urbp;
1334 urbp = kmem_cache_zalloc(xenhcd_urbp_cachep, mem_flags);
1335 if (!urbp)
1340 urbp->urb = urb;
1341 urb->hcpriv = urbp;
1342 urbp->req_id = ~0;
1343 urbp->unlink_req_id = ~0;
1344 INIT_LIST_HEAD(&urbp->list);
1345 urbp->status = 1;
1348 ret = xenhcd_submit_urb(info, urbp);
1351 xenhcd_free_urb_priv(urbp);
1364 struct urb_priv *urbp;
1370 urbp = urb->hcpriv;
1371 if (urbp) {
1372 urbp->status = status;
1373 ret = xenhcd_unlink_urb(info, urbp);