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

Commit d0737498 authored by Aaro Koskinen's avatar Aaro Koskinen Committed by Greg Kroah-Hartman
Browse files

staging: octeon-usb: move next pipe selection into a separate function



Move next pipe selection into a separate function to avoid deep
nesting.

Signed-off-by: default avatarAaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent dd588994
Loading
Loading
Loading
Loading
+28 −21
Original line number Diff line number Diff line
@@ -1858,6 +1858,33 @@ static struct cvmx_usb_pipe *cvmx_usb_find_ready_pipe(
	return NULL;
}

static struct cvmx_usb_pipe *cvmx_usb_next_pipe(struct octeon_hcd *usb,
						int is_sof)
{
	struct cvmx_usb_pipe *pipe;

	/* Find a pipe needing service. */
	if (is_sof) {
		/*
		 * Only process periodic pipes on SOF interrupts. This way we
		 * are sure that the periodic data is sent in the beginning of
		 * the frame.
		 */
		pipe = cvmx_usb_find_ready_pipe(usb,
						CVMX_USB_TRANSFER_ISOCHRONOUS);
		if (pipe)
			return pipe;
		pipe = cvmx_usb_find_ready_pipe(usb,
						CVMX_USB_TRANSFER_INTERRUPT);
		if (pipe)
			return pipe;
	}
	pipe = cvmx_usb_find_ready_pipe(usb, CVMX_USB_TRANSFER_CONTROL);
	if (pipe)
		return pipe;
	return cvmx_usb_find_ready_pipe(usb, CVMX_USB_TRANSFER_BULK);
}

/**
 * Called whenever a pipe might need to be scheduled to the
 * hardware.
@@ -1897,27 +1924,7 @@ static void cvmx_usb_schedule(struct octeon_hcd *usb, int is_sof)
		if (unlikely(channel > 7))
			break;

		/* Find a pipe needing service */
		pipe = NULL;
		if (is_sof) {
			/*
			 * Only process periodic pipes on SOF interrupts. This
			 * way we are sure that the periodic data is sent in the
			 * beginning of the frame
			 */
			pipe = cvmx_usb_find_ready_pipe(usb,
							CVMX_USB_TRANSFER_ISOCHRONOUS);
			if (likely(!pipe))
				pipe = cvmx_usb_find_ready_pipe(usb,
								CVMX_USB_TRANSFER_INTERRUPT);
		}
		if (likely(!pipe)) {
			pipe = cvmx_usb_find_ready_pipe(usb,
							CVMX_USB_TRANSFER_CONTROL);
			if (likely(!pipe))
				pipe = cvmx_usb_find_ready_pipe(usb,
								CVMX_USB_TRANSFER_BULK);
		}
		pipe = cvmx_usb_next_pipe(usb, is_sof);
		if (!pipe)
			break;