On Fri, Jan 15, 2021 at 06:32:04AM -0700, Thomas Frohwein wrote:
> @@ -557,6 +571,23 @@ uhidev_open(struct uhidev *scd)
>                       DPRINTF(("uhidev_open: couldn't allocate owxfer\n"));
>                       error = ENOMEM;
>                       goto out3;
> +             }
> +
> +             /* XBox One controller initialization */

Shouldn't this initialization code be under #ifndef SMALL_KERNEL,
like the rest of the code your patch is adding to this file?

> +             if (sc->sc_flags & UHIDEV_F_XB1) {
> +                     uint8_t init_data[] = { 0x05, 0x20, 0x00, 0x01, 0x00 };
> +                     int init_data_len = sizeof(init_data);

I would use 'size_t init_data_len' instead of 'int init_data_len'.
Largely a matter of taste, but this way everything stays unsigned.
usbd_setup_xfer() expects an unsigned int.

> +                     usbd_setup_xfer(sc->sc_oxfer, sc->sc_opipe, 0,
> +                         init_data, init_data_len,
> +                         USBD_SYNCHRONOUS | USBD_CATCH, USBD_NO_TIMEOUT,
> +                         NULL);
> +                     err = usbd_transfer(sc->sc_oxfer);
> +                     if (err != USBD_NORMAL_COMPLETION) {
> +                             DPRINTF(("uhidev_open: xb1 init failed, "
> +                             "error=%d\n", err));
> +                             error = EIO;
> +                             goto out3;
> +                     }
>               }
>       }

Both of the above suggestions as a diff:

diff 978a5fa5205c9adcf7df6f7cb4e82b0fc5f3612a /usr/src
blob - 2aa48d139f7b1a0ddedd79e53da2f0c846ca2745
file + sys/dev/usb/uhidev.c
--- sys/dev/usb/uhidev.c
+++ sys/dev/usb/uhidev.c
@@ -599,11 +599,11 @@ uhidev_open(struct uhidev *scd)
                        error = ENOMEM;
                        goto out3;
                }
-
+#ifndef SMALL_KERNEL
                /* XBox One controller initialization */
                if (sc->sc_flags & UHIDEV_F_XB1) {
                        uint8_t init_data[] = { 0x05, 0x20 };
-                       int init_data_len = sizeof(init_data);
+                       size_t init_data_len = sizeof(init_data);
                        usbd_setup_xfer(sc->sc_oxfer, sc->sc_opipe, 0,
                            init_data, init_data_len,
                            USBD_SYNCHRONOUS | USBD_CATCH, USBD_NO_TIMEOUT,
@@ -616,6 +616,7 @@ uhidev_open(struct uhidev *scd)
                                goto out3;
                        }
                }
+#endif
        }
 
        return (0);

Reply via email to