Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c3acd590 authored by Felipe Balbi's avatar Felipe Balbi
Browse files

usb: dwc3: gadget: use num_trbs when skipping TRBs on ->dequeue()



Now that we track how many TRBs a request uses, it's easier to skip
over them in case of a call to usb_ep_dequeue(). Let's do so and
simplify the code a bit.

Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent 09fe1f8d
Loading
Loading
Loading
Loading
+4 −24
Original line number Diff line number Diff line
@@ -1502,6 +1502,8 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
				break;
		}
		if (r == req) {
			int i;

			/* wait until it is processed */
			dwc3_stop_active_transfer(dep, true);

@@ -1539,33 +1541,13 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
			if (!r->trb)
				goto out0;

			if (r->num_pending_sgs) {
			for (i = 0; i < r->num_trbs; i++) {
				struct dwc3_trb *trb;
				int i = 0;

				for (i = 0; i < r->num_pending_sgs; i++) {
				trb = r->trb + i;
				trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
				dwc3_ep_inc_deq(dep);
			}

				if (r->needs_extra_trb) {
					trb = r->trb + r->num_pending_sgs + 1;
					trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
					dwc3_ep_inc_deq(dep);
				}
			} else {
				struct dwc3_trb *trb = r->trb;

				trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
				dwc3_ep_inc_deq(dep);

				if (r->needs_extra_trb) {
					trb = r->trb + 1;
					trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
					dwc3_ep_inc_deq(dep);
				}
			}
			goto out1;
		}
		dev_err(dwc->dev, "request %pK was not queued to %s\n",
@@ -1575,8 +1557,6 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
	}

out1:
	/* giveback the request */

	dwc3_gadget_giveback(dep, req, -ECONNRESET);

out0: