On Fri, Sep 07, 2018 at 12:40:49AM +0800, Michael Mikonos wrote:
> Hello,
>
> The umidi(4) driver has three different endpoint allocation
> functions, which are called by alloc_all_endpoints(). The
> initial jack count can be moved here because it is zero
> no matter which allocation function is used.
> Also when we eventually free the jacks the count can
> be reset. Does this look OK?
Yes, it does.
>
> - Michael
>
>
> Index: umidi.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/umidi.c,v
> retrieving revision 1.47
> diff -u -p -u -r1.47 umidi.c
> --- umidi.c 6 Sep 2018 09:48:23 -0000 1.47
> +++ umidi.c 6 Sep 2018 16:24:22 -0000
> @@ -387,6 +387,8 @@ alloc_all_endpoints(struct umidi_softc *
> struct umidi_endpoint *ep;
> int i;
>
> + sc->sc_out_num_jacks = sc->sc_in_num_jacks = 0;
> +
> if (UMQ_ISTYPE(sc, UMQ_TYPE_FIXED_EP))
> err = alloc_all_endpoints_fixed_ep(sc);
> else if (UMQ_ISTYPE(sc, UMQ_TYPE_YAMAHA))
> @@ -436,8 +438,6 @@ alloc_all_endpoints_fixed_ep(struct umid
>
> fp = umidi_get_quirk_data_from_type(sc->sc_quirk,
> UMQ_TYPE_FIXED_EP);
> - sc->sc_out_num_jacks = 0;
> - sc->sc_in_num_jacks = 0;
> sc->sc_out_num_endpoints = fp->num_out_ep;
> sc->sc_in_num_endpoints = fp->num_in_ep;
> sc->sc_endpoints = mallocarray(sc->sc_out_num_endpoints +
> @@ -521,7 +521,6 @@ alloc_all_endpoints_yamaha(struct umidi_
> int out_addr, in_addr, in_packetsize, i, dir;
> size_t remain, descsize;
>
> - sc->sc_out_num_jacks = sc->sc_in_num_jacks = 0;
> out_addr = in_addr = 0;
>
> /* detect endpoints */
> @@ -627,7 +626,6 @@ alloc_all_endpoints_genuine(struct umidi
> if (!p)
> return USBD_NOMEM;
>
> - sc->sc_out_num_jacks = sc->sc_in_num_jacks = 0;
> sc->sc_out_num_endpoints = sc->sc_in_num_endpoints = 0;
> epaddr = -1;
>
> @@ -780,6 +778,7 @@ free_all_jacks(struct umidi_softc *sc)
> if (sc->sc_out_jacks) {
> free(sc->sc_jacks, M_USBDEV, jacks * sizeof(*sc->sc_out_jacks));
> sc->sc_jacks = sc->sc_in_jacks = sc->sc_out_jacks = NULL;
> + sc->sc_out_num_jacks = sc->sc_in_num_jacks = 0;
> }
> splx(s);
> }
>