/* * midi_if stuffs */ int umidi_open(void *addr, int flags, void (*iintr)(void *, int), void (*ointr)(void *), void *arg) { struct umidi_mididev *mididev = addr; struct umidi_softc *sc = mididev->sc; DPRINTF(("%s: sc=%p\n", __func__, sc)); if (!sc) return ENXIO; if (mididev->opened) return EBUSY; if (usbd_is_dying(sc->sc_udev)) return EIO; mididev->opened = 1; mididev->flags = flags; if ((mididev->flags & FWRITE) && mididev->out_jack) open_out_jack(mididev->out_jack, arg, ointr); if ((mididev->flags & FREAD) && mididev->in_jack) open_in_jack(mididev->in_jack, arg, iintr); return 0; }
/* * midi_if stuffs */ int umidi_open(void *addr, int flags, void (*iintr)(void *, int), void (*ointr)(void *), void *arg) { struct umidi_mididev *mididev = addr; struct umidi_softc *sc = mididev->sc; usbd_status err; DPRINTF(("umidi_open: sc=%p\n", sc)); if (!sc) return ENXIO; if (mididev->opened) return EBUSY; if (sc->sc_dying) return EIO; mididev->opened = 1; mididev->flags = flags; if ((mididev->flags & FWRITE) && mididev->out_jack) { err = open_out_jack(mididev->out_jack, arg, ointr); if ( err != USBD_NORMAL_COMPLETION ) goto bad; } if ((mididev->flags & FREAD) && mididev->in_jack) { err = open_in_jack(mididev->in_jack, arg, iintr); if ( err != USBD_NORMAL_COMPLETION && err != USBD_IN_PROGRESS ) goto bad; } return 0; bad: mididev->opened = 0; DPRINTF(("umidi_open: usbd_status %d\n", err)); return USBD_IN_USE == err ? EBUSY : EIO; }