staging: octeon-usb: move next pipe selection into a separate function
authorAaro Koskinen <aaro.koskinen@iki.fi>
Fri, 26 Feb 2016 00:14:04 +0000 (02:14 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 26 Feb 2016 06:38:16 +0000 (22:38 -0800)
Move next pipe selection into a separate function to avoid deep
nesting.

Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/octeon-usb/octeon-hcd.c

index 12ea995478b80f03fa8802f8370b348fb3d8ec08..298fcaab76adf52f8f9e9d7b9b75d1ab5c44a133 100644 (file)
@@ -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;