/* * queue push/pop */ static void usbhsg_queue_pop(struct usbhsg_uep *uep, struct usbhsg_request *ureq, int status) { struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep); struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep); struct device *dev = usbhsg_gpriv_to_dev(gpriv); dev_dbg(dev, "pipe %d : queue pop\n", usbhs_pipe_number(pipe)); ureq->req.status = status; usb_gadget_giveback_request(&uep->ep, &ureq->req); }
/* * s3c2410_udc_done */ static void s3c2410_udc_done(struct s3c2410_ep *ep, struct s3c2410_request *req, int status) { unsigned halted = ep->halted; list_del_init(&req->queue); if (likely(req->req.status == -EINPROGRESS)) req->req.status = status; else status = req->req.status; ep->halted = 1; usb_gadget_giveback_request(&ep->ep, &req->req); ep->halted = halted; }
static void fotg210_done(struct fotg210_ep *ep, struct fotg210_request *req, int status) { list_del_init(&req->queue); /* don't modify queue heads during completion callback */ if (ep->fotg210->gadget.speed == USB_SPEED_UNKNOWN) req->req.status = -ESHUTDOWN; else req->req.status = status; spin_unlock(&ep->fotg210->lock); usb_gadget_giveback_request(&ep->ep, &req->req); spin_lock(&ep->fotg210->lock); if (ep->epnum) { if (list_empty(&ep->queue)) fotg210_disable_fifo_int(ep); } else { fotg210_set_cxdone(ep->fotg210); } }