midi
cdev_midi_init(NMIDI,midi), /* 41: MIDI I/O */
cdev_decl(midi);
cdev_midi_init(NMIDI,midi), /* 52: MIDI I/O */
cdev_midi_init(NMIDI,midi), /* 57: MIDI I/O */
cdev_midi_init(NMIDI,midi), /* 52: MIDI I/O */
cdev_midi_init(NMIDI,midi), /* 52: MIDI I/O */
cdev_midi_init(NMIDI,midi), /* 57: MIDI I/O */
cdev_midi_init(NMIDI,midi), /* 52: MIDI I/O */
cdev_midi_init(NMIDI,midi), /* 33: MIDI I/O */
cdev_midi_init(NMIDI,midi), /* 52: MIDI I/O */
cdev_midi_init(NMIDI,midi), /* 68: /dev/rmidi */
sc->midi = midi_attach_mi(&envy_midi_hw_if, sc, &sc->dev);
struct device *midi;
cdev_decl(midi);
midi_send(o->midi, msg, msglen);
midi_abort(o->midi);
midi_del(struct midi *ep)
struct midi *peer;
midi_link(struct midi *ep, struct midi *peer)
midi_rxmask(struct midi *ep)
midi_tag(struct midi *ep, unsigned int tag)
struct midi *peer;
midi_tags(struct midi *ep)
midi_send(struct midi *iep, unsigned char *msg, int size)
struct midi *oep;
midi_tickets(struct midi *iep)
struct midi *oep;
midi_fill(struct midi *oep)
struct midi *iep;
midi_in(struct midi *iep, unsigned char *idata, int icount)
midi_out(struct midi *oep, unsigned char *idata, int icount)
midi_abort(struct midi *p)
struct midi *ep;
struct midi midi_ep[MIDI_NEP];
midi_migrate(struct midi *oep, struct midi *nep)
struct midi *ep;
midi_send(p->midi, msg, size);
midi_out(p->midi, msg, size);
logx(0, "midi%u: port exit", p->midi->num);
c->midi = midi_new(&port_midiops, c, mode);
midi_del(c->midi);
logx(3, "midi%u: port requested", c->midi->num);
logx(3, "midi%u: port released", c->midi->num);
if ((rxmask & c->midi->self) == 0 && c->midi->txmask == 0 &&
logx(2, "midi%u: no fall-back port found", op->midi->num);
logx(2, "midi%u: switching to midi%u", op->midi->num, np->midi->num);
midi_migrate(op->midi, np->midi);
logx(1, "midi%u: failed to open midi port", c->midi->num);
logx(0, "midi%u: can't close port (not opened)", c->midi->num);
logx(2, "midi%u: closed", c->midi->num);
struct midi *ep = c->midi;
logx(3, "midi%u: draining", c->midi->num);
struct midi *
struct midi *ep;
struct midi *midi_new(struct midiops *, void *, int);
void midi_del(struct midi *);
void midi_tickets(struct midi *);
void midi_in(struct midi *, unsigned char *, int);
void midi_out(struct midi *, unsigned char *, int);
void midi_send(struct midi *, unsigned char *, int);
void midi_fill(struct midi *);
void midi_tag(struct midi *, unsigned int);
unsigned int midi_tags(struct midi *);
unsigned int midi_rxmask(struct midi *);
void midi_link(struct midi *, struct midi *);
void midi_abort(struct midi *);
void midi_migrate(struct midi *, struct midi *);
struct midi *owner; /* current writer stream */
struct midi *midi;
struct midi *ep = p->midi;
midi_abort(p->midi);
p->mio.hdl = fdpass_mio_open(p->num, p->midi->mode);
struct midi *ep = p->midi;
struct midi *ep = p->midi;
midi_send(o->midi, msg, sizeof(msg));
midi_send(o->midi, (unsigned char *)&x, SYSEX_SIZE(slotdesc));
midi_send(o->midi, (unsigned char *)&x, SYSEX_SIZE(dumpend));
o->midi = midi_new(&opt_midiops, o, MODE_MIDIIN | MODE_MIDIOUT);
midi_tag(o->midi, o->num);
midi_del(o->midi);
struct midi *midi;
if (midi_rxmask(a->midi) || a->midi->txmask)
midi_migrate(a->midi, apri->midi);
if (f->midi != NULL && f->midi->obuf.used > 0) {
size = f->midi->obuf.used;
if (f->midi) {
tags = midi_tags(f->midi);
midi_del(f->midi);
f->midi = NULL;
midi_send(f->midi, msg, size);
midi_out(f->midi, msg, size);
f->midi = NULL;
midi_in(f->midi, midibuf, n);
else if (f->midi)
data = abuf_rgetblk(&f->midi->obuf, &count);
else if (f->midi)
abuf_rdiscard(&f->midi->obuf, n);
if (f->midi)
midi_fill(f->midi);
f->midi = midi_new(&sock_midiops, f, mode);
if (f->midi == NULL)
midi_tag(f->midi, opt->num);
midi_tag(f->midi, opt->num);
midi_tag(f->midi, p->devnum);
midi_link(f->midi, c->midi);
f->midi = NULL;
(f->midi && !(f->midi->mode & MODE_MIDIOUT))) {
struct midi;
struct midi *midi; /* midi endpoint */