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);