Encapselate midi_info, nmidi and nsynth into midi.c.
This commit is contained in:
parent
18d474781f
commit
548e16646a
@ -723,7 +723,7 @@ emu_attach(device_t dev)
|
||||
emu_writehwcf3(scp, 0x0004);
|
||||
|
||||
/* Fill the softc for this unit. */
|
||||
scp->devinfo = devinfo = &midi_info[unit];
|
||||
scp->devinfo = devinfo = create_mididev_info_unit(&unit, MDT_SYNTH);
|
||||
bcopy(&emu_synthinfo, &scp->synthinfo, sizeof(emu_synthinfo));
|
||||
|
||||
/* Fill the midi info. */
|
||||
@ -741,9 +741,6 @@ emu_attach(device_t dev)
|
||||
midibuf_init(&devinfo->midi_dbuf_in);
|
||||
midibuf_init(&devinfo->midi_dbuf_out);
|
||||
|
||||
/* Increase the number of the synthesizers. */
|
||||
nsynth++;
|
||||
|
||||
DEB(printf("emu%d: attached.\n", unit));
|
||||
|
||||
return (0);
|
||||
@ -776,11 +773,6 @@ emu_read(dev_t i_dev, struct uio *buf, int flag)
|
||||
|
||||
unit = MIDIUNIT(i_dev);
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("emu_read: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("emu_read: unit %d is not configured.\n", unit));
|
||||
@ -807,11 +799,6 @@ emu_write(dev_t i_dev, struct uio *buf, int flag)
|
||||
|
||||
unit = MIDIUNIT(i_dev);
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("emu_write: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("emu_write: unit %d is not configured.\n", unit));
|
||||
@ -843,11 +830,6 @@ emu_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
|
||||
DEB(printf("emu%d: ioctlling, cmd 0x%x.\n", unit, (int)cmd));
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("emu_ioctl: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("emu_ioctl: unit %d is not configured.\n", unit));
|
||||
@ -858,7 +840,7 @@ emu_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
switch (cmd) {
|
||||
case SNDCTL_SYNTH_INFO:
|
||||
synthinfo = (struct synth_info *)arg;
|
||||
if (synthinfo->device >= nmidi + nsynth || synthinfo->device != unit)
|
||||
if (synthinfo->device != unit)
|
||||
return (ENXIO);
|
||||
bcopy(&scp->synthinfo, synthinfo, sizeof(scp->synthinfo));
|
||||
synthinfo->device = unit;
|
||||
@ -866,7 +848,7 @@ emu_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
break;
|
||||
case SNDCTL_MIDI_INFO:
|
||||
midiinfo = (struct midi_info *)arg;
|
||||
if (midiinfo->device >= nmidi + nsynth || midiinfo->device != unit)
|
||||
if (midiinfo->device != unit)
|
||||
return (ENXIO);
|
||||
bcopy(&emu_midiinfo, midiinfo, sizeof(emu_midiinfo));
|
||||
strcpy(midiinfo->name, scp->synthinfo.name);
|
||||
|
@ -199,7 +199,7 @@ gusmidi_init(device_t dev)
|
||||
|
||||
/* Fill the softc. */
|
||||
scp->dev = dev;
|
||||
scp->devinfo = devinfo = &midi_info[unit];
|
||||
scp->devinfo = devinfo = create_mididev_info_unit(&unit, MDT_MIDI);
|
||||
|
||||
/* Fill the midi info. */
|
||||
bcopy(&gusmidi_op_desc, devinfo, sizeof(gusmidi_op_desc));
|
||||
@ -222,9 +222,6 @@ gusmidi_init(device_t dev)
|
||||
bus_setup_intr(dev, scp->irq, INTR_TYPE_TTY, gusmidi_intr, scp,
|
||||
&scp->ih);
|
||||
|
||||
/* Increase the number of midi devices. */
|
||||
nmidi++;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -237,11 +234,6 @@ gusmidi_open(dev_t i_dev, int flags, int mode, struct proc *p)
|
||||
|
||||
unit = MIDIUNIT(i_dev);
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("gusmidi_open: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("gusmidi_open: unit %d is not configured.\n", unit));
|
||||
@ -268,11 +260,6 @@ gusmidi_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
|
||||
unit = MIDIUNIT(i_dev);
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("gusmidi_ioctl: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("gusmidi_ioctl: unit %d is not configured.\n", unit));
|
||||
@ -283,7 +270,7 @@ gusmidi_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
switch (cmd) {
|
||||
case SNDCTL_SYNTH_INFO:
|
||||
synthinfo = (struct synth_info *)arg;
|
||||
if (synthinfo->device > nmidi + nsynth || synthinfo->device != unit)
|
||||
if (synthinfo->device != unit)
|
||||
return (ENXIO);
|
||||
bcopy(&gusmidi_synthinfo, synthinfo, sizeof(gusmidi_synthinfo));
|
||||
synthinfo->device = unit;
|
||||
@ -291,7 +278,7 @@ gusmidi_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
break;
|
||||
case SNDCTL_MIDI_INFO:
|
||||
midiinfo = (struct midi_info *)arg;
|
||||
if (midiinfo->device > nmidi + nsynth || midiinfo->device != unit)
|
||||
if (midiinfo->device != unit)
|
||||
return (ENXIO);
|
||||
bcopy(&gusmidi_midiinfo, midiinfo, sizeof(gusmidi_midiinfo));
|
||||
midiinfo->device = unit;
|
||||
|
@ -379,7 +379,7 @@ mpu_attach(device_t dev)
|
||||
|
||||
/* Fill the softc. */
|
||||
scp->dev = dev;
|
||||
scp->devinfo = devinfo = &midi_info[unit];
|
||||
scp->devinfo = devinfo = create_mididev_info_unit(&unit, MDT_MIDI);
|
||||
callout_handle_init(&scp->dh);
|
||||
|
||||
/* Fill the midi info. */
|
||||
@ -399,9 +399,6 @@ mpu_attach(device_t dev)
|
||||
midibuf_init(&devinfo->midi_dbuf_in);
|
||||
midibuf_init(&devinfo->midi_dbuf_out);
|
||||
|
||||
/* Increase the number of midi devices. */
|
||||
nmidi++;
|
||||
|
||||
/* Now we can handle the interrupts. */
|
||||
if (scp->irq != NULL)
|
||||
bus_setup_intr(dev, scp->irq, INTR_TYPE_TTY, mpu_intr, scp,
|
||||
@ -437,11 +434,6 @@ mpu_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
|
||||
unit = MIDIUNIT(i_dev);
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("mpu_ioctl: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("mpu_ioctl: unit %d is not configured.\n", unit));
|
||||
@ -452,7 +444,7 @@ mpu_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
switch (cmd) {
|
||||
case SNDCTL_SYNTH_INFO:
|
||||
synthinfo = (struct synth_info *)arg;
|
||||
if (synthinfo->device > nmidi + nsynth || synthinfo->device != unit)
|
||||
if (synthinfo->device != unit)
|
||||
return (ENXIO);
|
||||
bcopy(&mpu_synthinfo, synthinfo, sizeof(mpu_synthinfo));
|
||||
synthinfo->device = unit;
|
||||
@ -460,7 +452,7 @@ mpu_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
break;
|
||||
case SNDCTL_MIDI_INFO:
|
||||
midiinfo = (struct midi_info *)arg;
|
||||
if (midiinfo->device > nmidi + nsynth || midiinfo->device != unit)
|
||||
if (midiinfo->device != unit)
|
||||
return (ENXIO);
|
||||
bcopy(&mpu_midiinfo, midiinfo, sizeof(mpu_midiinfo));
|
||||
midiinfo->device = unit;
|
||||
|
@ -654,7 +654,7 @@ opl_attach(device_t dev)
|
||||
|
||||
/* Fill the softc for this unit. */
|
||||
scp->dev = dev;
|
||||
scp->devinfo = devinfo = &midi_info[unit];
|
||||
scp->devinfo = devinfo = create_mididev_info_unit(&unit, MDT_SYNTH);
|
||||
|
||||
/* Allocate other resources. */
|
||||
if (opl_allocres(scp, dev)) {
|
||||
@ -761,9 +761,6 @@ opl_attach(device_t dev)
|
||||
midibuf_init(&devinfo->midi_dbuf_in);
|
||||
midibuf_init(&devinfo->midi_dbuf_out);
|
||||
|
||||
/* Increase the number of the synthesizers. */
|
||||
nsynth++;
|
||||
|
||||
DEB(printf("opl%d: attached.\n", unit));
|
||||
DEB(printf("opl%d: the chip is OPL%d.\n", unit, scp->model));
|
||||
|
||||
@ -787,11 +784,6 @@ opl_open(dev_t i_dev, int flags, int mode, struct proc *p)
|
||||
|
||||
DEB(printf("opl%d: opening.\n", unit));
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("opl_open: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("opl_open: unit %d is not configured.\n", unit));
|
||||
@ -828,11 +820,6 @@ opl_close(dev_t i_dev, int flags, int mode, struct proc *p)
|
||||
|
||||
DEB(printf("opl%d: closing.\n", unit));
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("opl_close: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("opl_close: unit %d is not configured.\n", unit));
|
||||
@ -862,11 +849,6 @@ opl_read(dev_t i_dev, struct uio *buf, int flag)
|
||||
|
||||
unit = MIDIUNIT(i_dev);
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("opl_read: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("opl_read: unit %d is not configured.\n", unit));
|
||||
@ -894,11 +876,6 @@ opl_write(dev_t i_dev, struct uio *buf, int flag)
|
||||
|
||||
unit = MIDIUNIT(i_dev);
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("opl_write: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("opl_write: unit %d is not configured.\n", unit));
|
||||
@ -932,11 +909,6 @@ opl_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
|
||||
DEB(printf("opl%d: ioctlling, cmd 0x%x.\n", unit, (int)cmd));
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("opl_ioctl: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("opl_ioctl: unit %d is not configured.\n", unit));
|
||||
@ -947,7 +919,7 @@ opl_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
switch (cmd) {
|
||||
case SNDCTL_SYNTH_INFO:
|
||||
synthinfo = (struct synth_info *)arg;
|
||||
if (synthinfo->device >= nmidi + nsynth || synthinfo->device != unit)
|
||||
if (synthinfo->device != unit)
|
||||
return (ENXIO);
|
||||
bcopy(&scp->synthinfo, synthinfo, sizeof(scp->synthinfo));
|
||||
synthinfo->device = unit;
|
||||
@ -959,7 +931,7 @@ opl_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
break;
|
||||
case SNDCTL_MIDI_INFO:
|
||||
midiinfo = (struct midi_info *)arg;
|
||||
if (midiinfo->device >= nmidi + nsynth || midiinfo->device != unit)
|
||||
if (midiinfo->device != unit)
|
||||
return (ENXIO);
|
||||
bcopy(&opl_midiinfo, midiinfo, sizeof(opl_midiinfo));
|
||||
strcpy(midiinfo->name, scp->synthinfo.name);
|
||||
|
@ -228,7 +228,7 @@ uartsio_attach(device_t dev)
|
||||
|
||||
/* Fill the softc. */
|
||||
scp->dev = dev;
|
||||
scp->devinfo = devinfo = &midi_info[unit];
|
||||
scp->devinfo = devinfo = create_mididev_info_unit(&unit, MDT_MIDI);
|
||||
|
||||
/* Fill the midi info. */
|
||||
bcopy(&uartsio_op_desc, devinfo, sizeof(uartsio_op_desc));
|
||||
@ -262,9 +262,6 @@ uartsio_attach(device_t dev)
|
||||
uartsio_readport(scp, com_iir);
|
||||
uartsio_readport(scp, com_data);
|
||||
|
||||
/* Increase the number of midi devices. */
|
||||
nmidi++;
|
||||
|
||||
/* Now we can handle the interrupts. */
|
||||
bus_setup_intr(dev, scp->irq, INTR_TYPE_TTY, uartsio_intr, scp, &scp->ih);
|
||||
|
||||
@ -284,11 +281,6 @@ uartsio_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
|
||||
unit = MIDIUNIT(i_dev);
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("uartsio_ioctl: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("uartsio_ioctl: unit %d is not configured.\n", unit));
|
||||
@ -299,7 +291,7 @@ uartsio_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
switch (cmd) {
|
||||
case SNDCTL_SYNTH_INFO:
|
||||
synthinfo = (struct synth_info *)arg;
|
||||
if (synthinfo->device > nmidi + nsynth || synthinfo->device != unit)
|
||||
if (synthinfo->device != unit)
|
||||
return (ENXIO);
|
||||
bcopy(&uartsio_synthinfo, synthinfo, sizeof(uartsio_synthinfo));
|
||||
synthinfo->device = unit;
|
||||
@ -307,7 +299,7 @@ uartsio_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
break;
|
||||
case SNDCTL_MIDI_INFO:
|
||||
midiinfo = (struct midi_info *)arg;
|
||||
if (midiinfo->device > nmidi + nsynth || midiinfo->device != unit)
|
||||
if (midiinfo->device != unit)
|
||||
return (ENXIO);
|
||||
bcopy(&uartsio_midiinfo, midiinfo, sizeof(uartsio_midiinfo));
|
||||
midiinfo->device = unit;
|
||||
|
@ -90,10 +90,8 @@ static struct cdevsw midi_cdevsw = {
|
||||
* descriptors for active devices. also used as the public softc
|
||||
* of a device.
|
||||
*/
|
||||
mididev_info midi_info[NMIDI_MAX];
|
||||
|
||||
u_long nmidi; /* total number of midi devices, filled in by the driver */
|
||||
u_long nsynth; /* total number of synthesizers, filled in by the driver */
|
||||
static mididev_info midi_info[NMIDI_MAX];
|
||||
static int nmidi, nsynth;
|
||||
|
||||
/* These make the buffer for /dev/midistat */
|
||||
static int midistatbusy;
|
||||
@ -141,7 +139,6 @@ mididev_info *
|
||||
get_mididev_info(dev_t i_dev, int *unit)
|
||||
{
|
||||
int u;
|
||||
mididev_info *d = NULL;
|
||||
|
||||
if (MIDIDEV(i_dev) != MIDI_DEV_MIDIN)
|
||||
return NULL;
|
||||
@ -149,15 +146,55 @@ get_mididev_info(dev_t i_dev, int *unit)
|
||||
if (unit)
|
||||
*unit = u;
|
||||
|
||||
if (u >= nmidi + nsynth) {
|
||||
DEB(printf("get_mididev_info: unit %d is not configured.\n", u));
|
||||
return get_mididev_info_unit(u);
|
||||
}
|
||||
|
||||
/*
|
||||
* a small utility function which, given a unit number, returns
|
||||
* a pointer to the associated mididev_info struct.
|
||||
*/
|
||||
mididev_info *
|
||||
get_mididev_info_unit(int unit)
|
||||
{
|
||||
mididev_info *d;
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("get_mididev_info_unit: unit %d is not configured.\n", u));
|
||||
return NULL;
|
||||
}
|
||||
d = &midi_info[u];
|
||||
d = &midi_info[unit];
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
/* Create a new midi device info structure. */
|
||||
mididev_info *
|
||||
create_mididev_info_unit(int *unit, int type)
|
||||
{
|
||||
/* XXX midi_info is still static. */
|
||||
switch (type) {
|
||||
case MDT_MIDI:
|
||||
nmidi++;
|
||||
break;
|
||||
case MDT_SYNTH:
|
||||
nsynth++;
|
||||
break;
|
||||
default:
|
||||
panic("unsupported device type");
|
||||
break;
|
||||
}
|
||||
|
||||
*unit = nmidi + nsynth - 1;
|
||||
return get_mididev_info_unit(*unit);
|
||||
}
|
||||
|
||||
/* Return the number of configured devices. */
|
||||
int
|
||||
mididev_info_number(void)
|
||||
{
|
||||
return nmidi + nsynth;
|
||||
}
|
||||
|
||||
/*
|
||||
* here are the switches for the main functions. The switches do
|
||||
* all necessary checks on the device number to make sure
|
||||
|
@ -257,16 +257,16 @@ struct _mididev_info {
|
||||
#define DEB(x)
|
||||
#endif
|
||||
|
||||
extern mididev_info midi_info[NMIDI_MAX];
|
||||
|
||||
extern u_long nmidi;
|
||||
extern u_long nsynth;
|
||||
|
||||
/* This is the generic midi drvier initializer. */
|
||||
int midiinit(mididev_info *d, device_t dev);
|
||||
|
||||
/* This provides an access to the mididev_info. */
|
||||
mididev_info *get_mididev_info(dev_t i_dev, int *unit);
|
||||
mididev_info *get_mididev_info_unit(int unit);
|
||||
mididev_info *create_mididev_info_unit(int *unit, int type);
|
||||
int mididev_info_number(void);
|
||||
#define MDT_MIDI (0)
|
||||
#define MDT_SYNTH (1)
|
||||
|
||||
/* These are the generic methods for a midi driver. */
|
||||
d_open_t midi_open;
|
||||
|
@ -529,10 +529,6 @@ synth_readraw(mididev_info *md, u_char *buf, int len, int nonblock)
|
||||
return (ENXIO);
|
||||
|
||||
unit = md->unit;
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("synth_readraw: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
if ((md->fflags & FREAD) == 0) {
|
||||
DEB(printf("mpu_readraw: unit %d is not for reading.\n", unit));
|
||||
return (EIO);
|
||||
@ -571,10 +567,6 @@ synth_writeraw(mididev_info *md, u_char *buf, int len, int nonblock)
|
||||
|
||||
unit = md->unit;
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("synth_writeraw: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
if ((md->fflags & FWRITE) == 0) {
|
||||
DEB(printf("synth_writeraw: unit %d is not for writing.\n", unit));
|
||||
return (EIO);
|
||||
|
@ -174,7 +174,7 @@ static int seq_closemidi(sc_p scp, mididev_info *md, int flags, int mode, struct
|
||||
static void seq_panic(sc_p scp);
|
||||
static int seq_sync(sc_p scp);
|
||||
|
||||
static seqdev_info * get_seqdev_info(dev_t i_dev, int *unit);
|
||||
static seqdev_info *get_seqdev_info(dev_t i_dev, int *unit);
|
||||
|
||||
/*
|
||||
* Here are the main functions to interact to the user process.
|
||||
@ -287,8 +287,8 @@ seq_open(dev_t i_dev, int flags, int mode, struct proc *p)
|
||||
splx(s);
|
||||
|
||||
/* Open midi devices. */
|
||||
for (midiunit = 0 ; midiunit < nmidi + nsynth ; midiunit++) {
|
||||
md = &midi_info[midiunit];
|
||||
for (midiunit = 0 ; midiunit < mididev_info_number() ; midiunit++) {
|
||||
md = get_mididev_info_unit(midiunit);
|
||||
if (MIDICONFED(md))
|
||||
seq_openmidi(scp, md, scp->fflags, MIDIDEV_MODE, p);
|
||||
}
|
||||
@ -335,8 +335,8 @@ seq_close(dev_t i_dev, int flags, int mode, struct proc *p)
|
||||
seq_sync(scp);
|
||||
|
||||
/* Clean up the midi device. */
|
||||
for (i = 0 ; i < nmidi + nsynth ; i++) {
|
||||
md = &midi_info[i];
|
||||
for (i = 0 ; i < mididev_info_number() ; i++) {
|
||||
md = get_mididev_info_unit(i);
|
||||
if (MIDICONFED(md))
|
||||
seq_closemidi(scp, md, scp->fflags, MIDIDEV_MODE, p);
|
||||
}
|
||||
@ -448,9 +448,9 @@ seq_write(dev_t i_dev, struct uio *buf, int flag)
|
||||
|
||||
/* A long event, these are the patches/samples for a synthesizer. */
|
||||
midiunit = *(u_short *)&event[2];
|
||||
if (midiunit < 0 || midiunit >= nmidi + nsynth)
|
||||
if (midiunit < 0 || midiunit >= mididev_info_number())
|
||||
return (ENXIO);
|
||||
md = &midi_info[midiunit];
|
||||
md = get_mididev_info_unit(midiunit);
|
||||
if (!MIDICONFED(md))
|
||||
return (ENXIO);
|
||||
s = splmidi();
|
||||
@ -502,9 +502,9 @@ seq_write(dev_t i_dev, struct uio *buf, int flag)
|
||||
if (ev_code == SEQ_MIDIPUTC) {
|
||||
/* An event passed to the midi device itself. */
|
||||
midiunit = event[2];
|
||||
if (midiunit < 0 || midiunit >= nmidi + nsynth)
|
||||
if (midiunit < 0 || midiunit >= mididev_info_number())
|
||||
return (ENXIO);
|
||||
md = &midi_info[midiunit];
|
||||
md = get_mididev_info_unit(midiunit);
|
||||
if (!MIDICONFED(md))
|
||||
return (ENXIO);
|
||||
if ((md->flags & MIDI_F_BUSY) == 0
|
||||
@ -618,8 +618,8 @@ seq_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
sd->callback(sd, SEQ_CB_ABORT | SEQ_CB_WR);
|
||||
|
||||
/* Pass the ioctl to the midi devices. */
|
||||
for (midiunit = 0 ; midiunit < nmidi + nsynth ; midiunit++) {
|
||||
md = &midi_info[midiunit];
|
||||
for (midiunit = 0 ; midiunit < mididev_info_number() ; midiunit++) {
|
||||
md = get_mididev_info_unit(midiunit);
|
||||
if (MIDICONFED(md) && scp->midi_open[midiunit] && (md->flags & MIDI_F_WRITING) != 0) {
|
||||
arg2 = *(int *)arg;
|
||||
midi_ioctl(MIDIMKDEV(major(i_dev), midiunit, SND_DEV_MIDIN), cmd, (caddr_t)&arg2, mode, p);
|
||||
@ -636,8 +636,8 @@ seq_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
sd->callback(sd, SEQ_CB_ABORT | SEQ_CB_RD);
|
||||
|
||||
/* Pass the ioctl to the midi devices. */
|
||||
for (midiunit = 0 ; midiunit < nmidi + nsynth ; midiunit++) {
|
||||
md = &midi_info[midiunit];
|
||||
for (midiunit = 0 ; midiunit < mididev_info_number() ; midiunit++) {
|
||||
md = get_mididev_info_unit(midiunit);
|
||||
if (MIDICONFED(md) && scp->midi_open[midiunit] && (md->flags & MIDI_F_WRITING) != 0) {
|
||||
arg2 = *(int *)arg;
|
||||
midi_ioctl(MIDIMKDEV(major(i_dev), midiunit, SND_DEV_MIDIN), cmd, (caddr_t)&arg2, mode, p);
|
||||
@ -708,11 +708,11 @@ seq_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
break;
|
||||
case SNDCTL_SEQ_TESTMIDI:
|
||||
midiunit = *(int *)arg;
|
||||
if (midiunit >= nmidi + nsynth) {
|
||||
if (midiunit >= mididev_info_number()) {
|
||||
ret = ENXIO;
|
||||
break;
|
||||
}
|
||||
md = &midi_info[midiunit];
|
||||
md = get_mididev_info_unit(midiunit);
|
||||
if (MIDICONFED(md) && !scp->midi_open[midiunit]) {
|
||||
ret = seq_openmidi(scp, md, scp->fflags, MIDIDEV_MODE, curproc);
|
||||
break;
|
||||
@ -749,12 +749,12 @@ seq_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
break;
|
||||
case SNDCTL_SEQ_RESETSAMPLES:
|
||||
midiunit = *(int *)arg;
|
||||
if (midiunit >= nmidi + nsynth) {
|
||||
if (midiunit >= mididev_info_number()) {
|
||||
ret = ENXIO;
|
||||
break;
|
||||
}
|
||||
if (!scp->midi_open[midiunit]) {
|
||||
md = &midi_info[midiunit];
|
||||
md = get_mididev_info_unit(midiunit);
|
||||
if (MIDICONFED(md)) {
|
||||
ret = seq_openmidi(scp, md, scp->fflags, MIDIDEV_MODE, curproc);
|
||||
if (ret != 0)
|
||||
@ -767,21 +767,21 @@ seq_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
ret = midi_ioctl(MIDIMKDEV(major(i_dev), midiunit, SND_DEV_MIDIN), cmd, arg, mode, p);
|
||||
break;
|
||||
case SNDCTL_SEQ_NRSYNTHS:
|
||||
*(int *)arg = nmidi + nsynth;
|
||||
*(int *)arg = mididev_info_number();
|
||||
ret = 0;
|
||||
break;
|
||||
case SNDCTL_SEQ_NRMIDIS:
|
||||
*(int *)arg = nmidi + nsynth;
|
||||
*(int *)arg = mididev_info_number();
|
||||
ret = 0;
|
||||
break;
|
||||
case SNDCTL_SYNTH_MEMAVL:
|
||||
midiunit = *(int *)arg;
|
||||
if (midiunit >= nmidi + nsynth) {
|
||||
if (midiunit >= mididev_info_number()) {
|
||||
ret = ENXIO;
|
||||
break;
|
||||
}
|
||||
if (!scp->midi_open[midiunit]) {
|
||||
md = &midi_info[midiunit];
|
||||
md = get_mididev_info_unit(midiunit);
|
||||
if (MIDICONFED(md)) {
|
||||
ret = seq_openmidi(scp, md, scp->fflags, MIDIDEV_MODE, curproc);
|
||||
if (ret != 0)
|
||||
@ -795,12 +795,12 @@ seq_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
break;
|
||||
case SNDCTL_FM_4OP_ENABLE:
|
||||
midiunit = *(int *)arg;
|
||||
if (midiunit >= nmidi + nsynth) {
|
||||
if (midiunit >= mididev_info_number()) {
|
||||
ret = ENXIO;
|
||||
break;
|
||||
}
|
||||
if (!scp->midi_open[midiunit]) {
|
||||
md = &midi_info[midiunit];
|
||||
md = get_mididev_info_unit(midiunit);
|
||||
if (MIDICONFED(md)) {
|
||||
ret = seq_openmidi(scp, md, scp->fflags, MIDIDEV_MODE, curproc);
|
||||
if (ret != 0)
|
||||
@ -815,7 +815,7 @@ seq_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
case SNDCTL_SYNTH_INFO:
|
||||
synthinfo = (struct synth_info *)arg;
|
||||
midiunit = synthinfo->device;
|
||||
if (midiunit >= nmidi + nsynth) {
|
||||
if (midiunit >= mididev_info_number()) {
|
||||
ret = ENXIO;
|
||||
break;
|
||||
}
|
||||
@ -830,7 +830,7 @@ seq_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
case SNDCTL_MIDI_INFO:
|
||||
midiinfo = (struct midi_info *)arg;
|
||||
midiunit = midiinfo->device;
|
||||
if (midiunit >= nmidi + nsynth) {
|
||||
if (midiunit >= mididev_info_number()) {
|
||||
ret = ENXIO;
|
||||
break;
|
||||
}
|
||||
@ -839,7 +839,7 @@ seq_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
case SNDCTL_PMGR_IFACE:
|
||||
patinfo = (struct patmgr_info *)arg;
|
||||
midiunit = patinfo->device;
|
||||
if (midiunit >= nmidi + nsynth) {
|
||||
if (midiunit >= mididev_info_number()) {
|
||||
ret = ENXIO;
|
||||
break;
|
||||
}
|
||||
@ -852,12 +852,12 @@ seq_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
case SNDCTL_PMGR_ACCESS:
|
||||
patinfo = (struct patmgr_info *)arg;
|
||||
midiunit = patinfo->device;
|
||||
if (midiunit >= nmidi + nsynth) {
|
||||
if (midiunit >= mididev_info_number()) {
|
||||
ret = ENXIO;
|
||||
break;
|
||||
}
|
||||
if (!scp->midi_open[midiunit]) {
|
||||
md = &midi_info[midiunit];
|
||||
md = get_mididev_info_unit(midiunit);
|
||||
if (MIDICONFED(md)) {
|
||||
ret = seq_openmidi(scp, md, scp->fflags, MIDIDEV_MODE, curproc);
|
||||
if (ret != 0)
|
||||
@ -889,7 +889,7 @@ seq_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
break;
|
||||
}
|
||||
if (!scp->midi_open[0]) {
|
||||
md = &midi_info[0];
|
||||
md = get_mididev_info_unit(0);
|
||||
if (MIDICONFED(md)) {
|
||||
ret = seq_openmidi(scp, md, scp->fflags, MIDIDEV_MODE, curproc);
|
||||
if (ret != 0)
|
||||
@ -1139,7 +1139,7 @@ seq_playevent(sc_p scp, u_char *event)
|
||||
sd = scp->devinfo;
|
||||
unit = sd->unit;
|
||||
|
||||
md = &midi_info[0];
|
||||
md = get_mididev_info_unit(0);
|
||||
if (!MIDICONFED(md))
|
||||
return (MORE);
|
||||
|
||||
@ -1195,8 +1195,8 @@ seq_playevent(sc_p scp, u_char *event)
|
||||
break;
|
||||
case SEQ_MIDIPUTC:
|
||||
/* Pass through to the midi device. */
|
||||
if (event[2] < nmidi + nsynth) {
|
||||
md = &midi_info[event[2]];
|
||||
if (event[2] < mididev_info_number()) {
|
||||
md = get_mididev_info_unit(event[2]);
|
||||
if (MIDICONFED(md) && ((md->flags & MIDI_F_BUSY) != 0 || seq_openmidi(scp, md, scp->fflags, MIDIDEV_MODE, curproc) == 0)) {
|
||||
if (md->synth.writeraw(md, &event[1], sizeof(event[1]), 1) == EAGAIN) {
|
||||
/* The queue was full. Try again later. */
|
||||
@ -1216,8 +1216,8 @@ seq_playevent(sc_p scp, u_char *event)
|
||||
ret = MORE;
|
||||
break;
|
||||
case SEQ_PRIVATE:
|
||||
if (event[1] < nmidi + nsynth) {
|
||||
md = &midi_info[event[1]];
|
||||
if (event[1] < mididev_info_number()) {
|
||||
md = get_mididev_info_unit(event[1]);
|
||||
if (MIDICONFED(md) && md->synth.hwcontrol(md, event) == EAGAIN) {
|
||||
ret = QUEUEFULL;
|
||||
break;
|
||||
@ -1380,9 +1380,9 @@ seq_extended(sc_p scp, u_char *event)
|
||||
sd = scp->devinfo;
|
||||
unit = sd->unit;
|
||||
|
||||
if (event[2] >= nmidi + nsynth)
|
||||
if (event[2] >= mididev_info_number())
|
||||
return (MORE);
|
||||
md = &midi_info[event[2]];
|
||||
md = get_mididev_info_unit(event[2]);
|
||||
if (!MIDICONFED(md) && (md->flags & MIDI_F_BUSY) == 0 && seq_openmidi(scp, md, scp->fflags, MIDIDEV_MODE, curproc) != 0)
|
||||
return (MORE);
|
||||
|
||||
@ -1439,9 +1439,9 @@ seq_chnvoice(sc_p scp, u_char *event)
|
||||
|
||||
sd = scp->devinfo;
|
||||
|
||||
if (dev >= nmidi + nsynth)
|
||||
if (dev >= mididev_info_number())
|
||||
return (MORE);
|
||||
md = &midi_info[dev];
|
||||
md = get_mididev_info_unit(dev);
|
||||
if (!MIDICONFED(md) && (md->flags & MIDI_F_BUSY) == 0 && seq_openmidi(scp, md, scp->fflags, MIDIDEV_MODE, curproc) != 0)
|
||||
return (MORE);
|
||||
|
||||
@ -1464,7 +1464,7 @@ seq_chnvoice(sc_p scp, u_char *event)
|
||||
voice = chn;
|
||||
|
||||
#if notyet
|
||||
if (scp->seq_mode == SEQ_2 && dev < nmidi + nsynth && chn == 9) {
|
||||
if (scp->seq_mode == SEQ_2 && dev < mididev_info_number() && chn == 9) {
|
||||
/* This channel is a percussion. The note number is the patch number. */
|
||||
if (md->synth.setinstr(md, voice, 128 + note) == EAGAIN)
|
||||
return (QUEUEFULL);
|
||||
@ -1544,9 +1544,9 @@ seq_chncommon(sc_p scp, u_char *event)
|
||||
sd = scp->devinfo;
|
||||
unit = sd->unit;
|
||||
|
||||
if (dev >= nmidi + nsynth)
|
||||
if (dev >= mididev_info_number())
|
||||
return (MORE);
|
||||
md = &midi_info[dev];
|
||||
md = get_mididev_info_unit(dev);
|
||||
if (!MIDICONFED(md) && (md->flags & MIDI_F_BUSY) == 0 && seq_openmidi(scp, md, scp->fflags, MIDIDEV_MODE, curproc) != 0)
|
||||
return (MORE);
|
||||
|
||||
@ -1555,7 +1555,7 @@ seq_chncommon(sc_p scp, u_char *event)
|
||||
#if notyet
|
||||
if (scp->seq_mode == SEQ_2) {
|
||||
md->synth.chn_info[chn].pgm_num = p1;
|
||||
if (dev < nmidi + nsynth)
|
||||
if (dev < mididev_info_number())
|
||||
if (md->synth.setinstr(md, chn, p1) == EAGAIN)
|
||||
return (QUEUEFULL);
|
||||
} else
|
||||
@ -1572,7 +1572,7 @@ seq_chncommon(sc_p scp, u_char *event)
|
||||
if (p1 < 32)
|
||||
/* We have set the MSB, clear the LSB. */
|
||||
md->synth.chn_info[chn].controllers[p1 + 32] = 0;
|
||||
if (dev < nmidi + nsynth) {
|
||||
if (dev < mididev_info_number()) {
|
||||
val = w14 & 0x7f;
|
||||
if (p1 < 64) {
|
||||
/* Combine the MSB and the LSB. */
|
||||
@ -1600,7 +1600,7 @@ seq_chncommon(sc_p scp, u_char *event)
|
||||
#if notyet
|
||||
if (scp->seq_mode == SEQ_2) {
|
||||
md->synth.chn_info[chn].bender_value = w14;
|
||||
if (dev < nmidi + nsynth) {
|
||||
if (dev < mididev_info_number()) {
|
||||
/* Handle all of the notes playing on this channel. */
|
||||
key = ((int)chn << 8);
|
||||
for (i = 0 ; i < md->synth.alloc.max_voice ; i++)
|
||||
@ -1708,9 +1708,9 @@ seq_sysex(sc_p scp, u_char *event)
|
||||
sd = scp->devinfo;
|
||||
unit = sd->unit;
|
||||
|
||||
if (event[1] >= nmidi + nsynth)
|
||||
if (event[1] >= mididev_info_number())
|
||||
return (MORE);
|
||||
md = &midi_info[event[1]];
|
||||
md = get_mididev_info_unit(event[1]);
|
||||
if (!MIDICONFED(md) || md->synth.sendsysex == NULL
|
||||
|| ((md->flags & MIDI_F_BUSY) == 0 && seq_openmidi(scp, md, scp->fflags, MIDIDEV_MODE, curproc) != 0))
|
||||
return (MORE);
|
||||
@ -1824,8 +1824,8 @@ seq_reset(sc_p scp)
|
||||
|
||||
#if notyet
|
||||
/* Reset the synthesizers. */
|
||||
for (i = 0 ; i < nmidi + nsynth ; i++) {
|
||||
md = &midi_info[i];
|
||||
for (i = 0 ; i < mididev_info_number() ; i++) {
|
||||
md = get_mididev_info_unit(i);
|
||||
if (MIDICONFED(md) && scp->midi_open[i])
|
||||
md->synth.reset(md);
|
||||
}
|
||||
@ -1834,9 +1834,9 @@ seq_reset(sc_p scp)
|
||||
#if notyet
|
||||
if (scp->seq_mode == SEQ_2) {
|
||||
for (chn = 0 ; chn < 16 ; chn++)
|
||||
for (i = 0 ; i < nmidi + nsynth ; i++)
|
||||
for (i = 0 ; i < mididev_info_number() ; i++)
|
||||
if (midi_open[i]) {
|
||||
md = &midi_info[i];
|
||||
md = get_mididev_info_unit(i);
|
||||
if (!MIDICONFED(md))
|
||||
continue;
|
||||
if (md->synth.controller(md, chn, 123, 0) == EAGAIN /* All notes off. */
|
||||
@ -1850,8 +1850,8 @@ seq_reset(sc_p scp)
|
||||
} else {
|
||||
#endif /* notyet */
|
||||
splx(s);
|
||||
for (i = 0 ; i < nmidi + nsynth ; i++) {
|
||||
md = &midi_info[i];
|
||||
for (i = 0 ; i < mididev_info_number() ; i++) {
|
||||
md = get_mididev_info_unit(i);
|
||||
if (!MIDICONFED(md))
|
||||
continue;
|
||||
|
||||
@ -1878,8 +1878,8 @@ seq_reset(sc_p scp)
|
||||
return (EAGAIN);
|
||||
}
|
||||
}
|
||||
for (i = 0 ; i < nmidi + nsynth ; i++){
|
||||
md = &midi_info[i];
|
||||
for (i = 0 ; i < mididev_info_number() ; i++){
|
||||
md = get_mididev_info_unit(i);
|
||||
if (MIDICONFED(md))
|
||||
seq_closemidi(scp, md, scp->fflags, MIDIDEV_MODE, curproc);
|
||||
}
|
||||
|
@ -112,8 +112,11 @@ static int csamidi_readdata(sc_p scp);
|
||||
static int csamidi_writedata(sc_p scp, u_int32_t value);
|
||||
static u_int32_t csamidi_readio(sc_p scp, u_long offset);
|
||||
static void csamidi_writeio(sc_p scp, u_long offset, u_int32_t data);
|
||||
/* Not used in this file. */
|
||||
#if notdef
|
||||
static u_int32_t csamidi_readmem(sc_p scp, u_long offset);
|
||||
static void csamidi_writemem(sc_p scp, u_long offset, u_int32_t data);
|
||||
#endif /* notdef */
|
||||
static int csamidi_allocres(sc_p scp, device_t dev);
|
||||
static void csamidi_releaseres(sc_p scp, device_t dev);
|
||||
|
||||
@ -189,7 +192,7 @@ csamidi_attach(device_t dev)
|
||||
|
||||
/* Fill the softc. */
|
||||
scp->dev = dev;
|
||||
scp->devinfo = devinfo = &midi_info[unit];
|
||||
scp->devinfo = devinfo = create_mididev_info_unit(&unit, MDT_MIDI);
|
||||
|
||||
/* Fill the midi info. */
|
||||
bcopy(&csamidi_op_desc, devinfo, sizeof(csamidi_op_desc));
|
||||
@ -204,9 +207,6 @@ csamidi_attach(device_t dev)
|
||||
midibuf_init(&devinfo->midi_dbuf_in);
|
||||
midibuf_init(&devinfo->midi_dbuf_out);
|
||||
|
||||
/* Increase the number of midi devices. */
|
||||
nmidi++;
|
||||
|
||||
/* Enable interrupt. */
|
||||
if (bus_setup_intr(dev, scp->irq, INTR_TYPE_TTY, csamidi_intr, scp, &scp->ih)) {
|
||||
csamidi_releaseres(scp, dev);
|
||||
@ -230,11 +230,6 @@ csamidi_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
|
||||
unit = MIDIUNIT(i_dev);
|
||||
|
||||
if (unit >= nmidi + nsynth) {
|
||||
DEB(printf("csamidi_ioctl: unit %d does not exist.\n", unit));
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
devinfo = get_mididev_info(i_dev, &unit);
|
||||
if (devinfo == NULL) {
|
||||
DEB(printf("csamidi_ioctl: unit %d is not configured.\n", unit));
|
||||
@ -245,7 +240,7 @@ csamidi_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
switch (cmd) {
|
||||
case SNDCTL_SYNTH_INFO:
|
||||
synthinfo = (struct synth_info *)arg;
|
||||
if (synthinfo->device > nmidi + nsynth || synthinfo->device != unit)
|
||||
if (synthinfo->device != unit)
|
||||
return (ENXIO);
|
||||
bcopy(&csamidi_synthinfo, synthinfo, sizeof(csamidi_synthinfo));
|
||||
synthinfo->device = unit;
|
||||
@ -253,7 +248,7 @@ csamidi_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
|
||||
break;
|
||||
case SNDCTL_MIDI_INFO:
|
||||
midiinfo = (struct midi_info *)arg;
|
||||
if (midiinfo->device > nmidi + nsynth || midiinfo->device != unit)
|
||||
if (midiinfo->device != unit)
|
||||
return (ENXIO);
|
||||
bcopy(&csamidi_midiinfo, midiinfo, sizeof(csamidi_midiinfo));
|
||||
midiinfo->device = unit;
|
||||
@ -482,6 +477,8 @@ csamidi_writeio(sc_p scp, u_long offset, u_int32_t data)
|
||||
bus_space_write_4(rman_get_bustag(scp->io), rman_get_bushandle(scp->io), offset, data);
|
||||
}
|
||||
|
||||
/* Not used in this file. */
|
||||
#if notdef
|
||||
static u_int32_t
|
||||
csamidi_readmem(sc_p scp, u_long offset)
|
||||
{
|
||||
@ -493,6 +490,7 @@ csamidi_writemem(sc_p scp, u_long offset, u_int32_t data)
|
||||
{
|
||||
bus_space_write_4(rman_get_bustag(scp->mem), rman_get_bushandle(scp->mem), offset, data);
|
||||
}
|
||||
#endif /* notdef */
|
||||
|
||||
/* Allocates resources. */
|
||||
static int
|
||||
|
Loading…
Reference in New Issue
Block a user