Messages in this thread Patch in this message | | | From | Heiko Eissfeldt <> | Subject | some 2.1.4 sound patches | Date | Sat, 19 Oct 1996 18:03:27 +0200 (MEST) |
| |
Hi,
here are some rough patches to make 2.1.4 compile with the sound driver.
I did a rough test with with playing a wav file through my Media Vision Sound Pro Audio Spectrum 16.
Please have a look, Heiko
--- drivers/sound/audio.c.or Wed Oct 16 18:16:35 1996 +++ drivers/sound/audio.c Wed Oct 16 20:33:34 1996 @@ -243,7 +243,7 @@ copy_from_user (&dma_buf[buf_ptr], &(buf)[p], l); } else - audio_devs[dev]->d->copy_from_user (dev, + (audio_devs[dev]->d->copy_from_user) (dev, dma_buf, buf_ptr, buf, p, l); if (local_conversion[dev] == AFMT_MU_LAW) @@ -381,7 +381,11 @@ break; case SNDCTL_DSP_SETFMT: - return snd_ioctl_return ((int *) arg, set_format (dev, get_user ((int *) arg))); + { + int i; + get_user(i, (int *)arg); + return snd_ioctl_return ((int *) arg, set_format (dev, i)); + } case SNDCTL_DSP_GETISPACE: if (!(audio_devs[dev]->open_mode & OPEN_READ)) --- drivers/sound/dmabuf.c.or Wed Oct 16 18:16:36 1996 +++ drivers/sound/dmabuf.c Wed Oct 16 21:00:24 1996 @@ -766,9 +766,13 @@ switch (cmd) { case SOUND_PCM_WRITE_RATE: - if (local) - return audio_devs[dev]->d->set_speed (dev, larg); - return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_speed (dev, get_user ((int *) arg))); + { + int i; + if (local) + return audio_devs[dev]->d->set_speed (dev, larg); + get_user (i,(int *) arg); + return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_speed (dev, i)); + } case SOUND_PCM_READ_RATE: if (local) @@ -776,14 +780,22 @@ return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_speed (dev, 0)); case SNDCTL_DSP_STEREO: - if (local) - return audio_devs[dev]->d->set_channels (dev, larg + 1) - 1; - return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_channels (dev, get_user ((int *) arg) + 1) - 1); + { + int i; + if (local) + return audio_devs[dev]->d->set_channels (dev, larg + 1) - 1; + get_user (i, (int *) arg); + return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_channels (dev, i + 1) - 1); + } case SOUND_PCM_WRITE_CHANNELS: - if (local) - return audio_devs[dev]->d->set_channels (dev, (short) larg); - return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_channels (dev, get_user ((int *) arg))); + { + int i; + if (local) + return audio_devs[dev]->d->set_channels (dev, (short) larg); + get_user (i, (int *) arg); + return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_channels (dev, i)); + } case SOUND_PCM_READ_CHANNELS: if (local) @@ -791,9 +803,13 @@ return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_channels (dev, 0)); case SNDCTL_DSP_SAMPLESIZE: - if (local) - return audio_devs[dev]->d->set_bits (dev, larg); - return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_bits (dev, get_user ((int *) arg))); + { + int i; + if (local) + return audio_devs[dev]->d->set_bits (dev, larg); + get_user (i, (int *) arg); + return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_bits (dev, i )); + } case SOUND_PCM_READ_BITS: if (local) @@ -827,9 +843,10 @@ case SNDCTL_DSP_SUBDIVIDE: { - int fact = get_user ((int *) arg); + int fact; int ret; + get_user (fact,(int *) arg); ret = dma_subdivide (dev, dmap_out, arg, fact); if (ret < 0) return ret; @@ -851,9 +868,10 @@ case SNDCTL_DSP_SETFRAGMENT: { - int fact = get_user ((int *) arg); + int fact; int ret; + get_user (fact,(int *) arg); ret = dma_set_fragment (dev, dmap_out, arg, fact); if (ret < 0) return ret; @@ -930,9 +948,11 @@ { unsigned long flags; - int bits = get_user ((int *) arg) & audio_devs[dev]->open_mode; + int bits; int changed; + get_user (bits,(int *) arg); + bits &= audio_devs[dev]->open_mode; if (audio_devs[dev]->d->trigger == NULL) return -(EINVAL); --- drivers/sound/midi_synth.c.or Wed Oct 16 18:16:37 1996 +++ drivers/sound/midi_synth.c Wed Oct 16 21:10:43 1996 @@ -537,7 +537,7 @@ { unsigned char data; - data = get_fs_byte (&((addr)[hdr_size + i])); + get_user (data,&((addr)[hdr_size + i])); eox_seen = (i > 0 && data & 0x80); /* End of sysex */ --- drivers/sound/midibuf.c.or Wed Oct 16 18:16:37 1996 +++ drivers/sound/midibuf.c Wed Oct 16 21:09:13 1996 @@ -473,7 +473,7 @@ { case SNDCTL_MIDI_PRETIME: - val = (int) get_user ((int *) arg); + get_user (val, (int *) arg); if (val < 0) val = 0; --- drivers/sound/pas2_mixer.c.or Thu Aug 22 13:21:05 1996 +++ drivers/sound/pas2_mixer.c Wed Oct 16 21:13:49 1996 @@ -218,7 +218,9 @@ if (cmd == SOUND_MIXER_PRIVATE1) /* Set loudness bit */ { - int level = get_user ((int *) arg); + int level; + + get_user (level,(int *) arg); if (level == -1) /* Return current settings */ { @@ -240,7 +242,9 @@ if (cmd == SOUND_MIXER_PRIVATE2) /* Set enhance bit */ { - int level = get_user ((int *) arg); + int level; + + get_user (level,(int *) arg); if (level == -1) /* Return current settings */ { @@ -269,7 +273,9 @@ if (cmd == SOUND_MIXER_PRIVATE3) /* Set mute bit */ { - int level = get_user ((int *) arg); + int level; + + get_user (level,(int *) arg); if (level == -1) /* Return current settings */ { @@ -292,9 +298,12 @@ if (((cmd >> 8) & 0xff) == 'M') { - if (_IOC_DIR (cmd) & _IOC_WRITE) - return snd_ioctl_return ((int *) arg, pas_mixer_set (cmd & 0xff, get_user ((int *) arg))); - else + if (_IOC_DIR (cmd) & _IOC_WRITE) { + int i; + + get_user (i,(int *) arg); + return snd_ioctl_return ((int *) arg, pas_mixer_set (cmd & 0xff, i)); + } else { /* * Read parameters */ --- drivers/sound/pas2_pcm.c.or Thu Aug 22 13:21:05 1996 +++ drivers/sound/pas2_pcm.c Wed Oct 16 21:18:09 1996 @@ -156,7 +156,11 @@ case SOUND_PCM_WRITE_RATE: if (local) return pcm_set_speed ((int) arg); - return snd_ioctl_return ((int *) arg, pcm_set_speed (get_user ((int *) arg))); + { + int i; + get_user (i,(int *) arg); + return snd_ioctl_return ((int *) arg, pcm_set_speed (i)); + } break; case SOUND_PCM_READ_RATE: @@ -168,13 +172,21 @@ case SNDCTL_DSP_STEREO: if (local) return pcm_set_channels ((int) arg + 1) - 1; - return snd_ioctl_return ((int *) arg, pcm_set_channels (get_user ((int *) arg) + 1) - 1); + { + int i; + get_user (i,(int *) arg); + return snd_ioctl_return ((int *) arg, pcm_set_channels (i + 1) - 1); + } break; case SOUND_PCM_WRITE_CHANNELS: if (local) return pcm_set_channels ((int) arg); - return snd_ioctl_return ((int *) arg, pcm_set_channels (get_user ((int *) arg))); + { + int i; + get_user (i,(int *) arg); + return snd_ioctl_return ((int *) arg, pcm_set_channels (i)); + } break; case SOUND_PCM_READ_CHANNELS: @@ -186,7 +198,11 @@ case SNDCTL_DSP_SETFMT: if (local) return pcm_set_bits ((int) arg); - return snd_ioctl_return ((int *) arg, pcm_set_bits (get_user ((int *) arg))); + { + int i; + get_user (i,(int *) arg); + return snd_ioctl_return ((int *) arg, pcm_set_bits (i)); + } break; case SOUND_PCM_READ_BITS: @@ -197,9 +213,13 @@ case SOUND_PCM_WRITE_FILTER: /* * NOT YET IMPLEMENTED */ - if (get_user ((int *) arg) > 1) - return -(EINVAL); - pcm_filter = get_user ((int *) arg); + { + int i; + get_user (i,(int *) arg); + if (i > 1) + return -(EINVAL); + pcm_filter = i; + } break; case SOUND_PCM_READ_FILTER: --- drivers/sound/patmgr.c.or Wed Oct 16 18:16:37 1996 +++ drivers/sound/patmgr.c Thu Oct 17 03:46:43 1996 @@ -81,6 +81,7 @@ { unsigned long flags; int ok = 0; + struct patmgr_info *mboxdev; if (count != sizeof (struct patmgr_info)) { @@ -88,12 +89,13 @@ return -(EIO); } + mboxdev = mbox[dev]; while (!ok && !current_got_fatal_signal ()) { save_flags (flags); cli (); - while (!(mbox[dev] && msg_direction[dev] == A_TO_S) && + while (!(mboxdev && msg_direction[dev] == A_TO_S) && !current_got_fatal_signal ()) { @@ -102,9 +104,9 @@ server_wait_flag[dev].flags &= ~WK_SLEEP;; } - if (mbox[dev] && msg_direction[dev] == A_TO_S) + if (mboxdev && msg_direction[dev] == A_TO_S) { - copy_to_user (&(buf)[0], (char *) mbox[dev], count); + copy_to_user (&(buf)[0], (char *) mboxdev, count); msg_direction[dev] = 0; ok = 1; } --- drivers/sound/sequencer.c.or Wed Oct 16 18:16:37 1996 +++ drivers/sound/sequencer.c Thu Oct 17 05:06:48 1996 @@ -1512,6 +1512,69 @@ */ } +static int sndctl_midi_info(int dev, struct midi_info *inf, void *arg) +{ + struct midi_info *infop; + + if (dev < 0 || dev >= max_mididev) + return -(ENXIO); + + infop = &midi_devs[dev]->info; + copy_to_user ((char *) arg, (char *) infop, sizeof (inf)); + return 0; +} + +static int sndctl_pmgr_iface(struct patmgr_info *inf, void *arg) +{ + int err, dev; + copy_from_user ((char *) inf, (char *) arg, sizeof (*inf)); + dev = inf->device; + + if (dev < 0 || dev >= num_synths) + { + return -(ENXIO); + } + + if (!synth_devs[dev]->pmgr_interface) + { + return -(ENXIO); + } + + if ((err = synth_devs[dev]->pmgr_interface (dev, inf)) == -1) + { + return err; + } + + copy_to_user ((char *) arg, (char *) inf, sizeof (*inf)); + return 0; +} + +static int sndctl_pmgr_access(struct patmgr_info *inf, void *arg) +{ + int dev, err; + + copy_from_user ((char *) inf, (char *) arg, sizeof (*inf)); + dev = inf->device; + + if (dev < 0 || dev >= num_synths) + { + return -(ENXIO); + } + + if (!pmgr_present[dev]) + { + return -(ESRCH); + } + + if ((err = pmgr_access (dev, inf)) < 0) + { + return err; + } + + copy_to_user ((char *) arg, (char *) inf, sizeof (*inf)); + return 0; +} + int sequencer_ioctl (int dev, struct fileinfo *file, unsigned int cmd, caddr_t arg) @@ -1544,7 +1607,8 @@ if (seq_mode != SEQ_2) return -(EINVAL); - pending_timer = get_user ((int *) arg); + + get_user (pending_timer,(int *) arg); if (pending_timer < 0 || pending_timer >= num_sound_timers) { @@ -1591,7 +1655,7 @@ */ return -(EIO); - midi_dev = get_user ((int *) arg); + get_user (midi_dev,(int *) arg); if (midi_dev >= max_mididev) return -(ENXIO); @@ -1639,9 +1703,12 @@ if (seq_mode == SEQ_2) return tmr->ioctl (tmr_no, cmd, arg); - if (get_user ((int *) arg) != 0) - return -(EINVAL); - + { + int rate; + get_user (rate, (int *) arg); + if (rate != 0) + return -(EINVAL); + } return snd_ioctl_return ((int *) arg, HZ); break; @@ -1649,7 +1716,7 @@ { int err; - dev = get_user ((int *) arg); + get_user (dev,(int *) arg); if (dev < 0 || dev >= num_synths) { return -(ENXIO); @@ -1678,7 +1745,9 @@ case SNDCTL_SYNTH_MEMAVL: { - int dev = get_user ((int *) arg); + int dev; + + get_user (dev,(int *) arg); if (dev < 0 || dev >= num_synths) return -(ENXIO); @@ -1692,7 +1761,9 @@ case SNDCTL_FM_4OP_ENABLE: { - int dev = get_user ((int *) arg); + int dev; + + get_user (dev,(int *) arg); if (dev < 0 || dev >= num_synths) return -(ENXIO); @@ -1710,7 +1781,7 @@ struct synth_info inf; int dev; - copy_from_user ((char *) &inf, &((char *) arg)[0], sizeof (inf)); + copy_from_user ((char *) &inf, (char *) arg, sizeof (inf)); dev = inf.device; if (dev < 0 || dev >= max_synthdev) @@ -1728,7 +1799,7 @@ struct seq_event_rec event_rec; unsigned long flags; - copy_from_user ((char *) &event_rec, &((char *) arg)[0], sizeof (event_rec)); + copy_from_user ((char *) &event_rec, (char *) arg, sizeof (event_rec)); save_flags (flags); cli (); @@ -1741,24 +1812,20 @@ case SNDCTL_MIDI_INFO: { - struct midi_info inf; int dev; + struct midi_info inf; - copy_from_user ((char *) &inf, &((char *) arg)[0], sizeof (inf)); + copy_from_user ((char *) &inf, (char *) arg, sizeof (inf)); dev = inf.device; - if (dev < 0 || dev >= max_mididev) - return -(ENXIO); - - copy_to_user (&((char *) arg)[0], (char *) &(midi_devs[dev]->info), sizeof (inf)); - return 0; + return sndctl_midi_info(dev, &inf, arg); } break; case SNDCTL_PMGR_IFACE: { struct patmgr_info *inf; - int dev, err; + int err; if ((inf = (struct patmgr_info *) vmalloc (sizeof (*inf))) == NULL) { @@ -1766,37 +1833,16 @@ return -(EIO); } - copy_from_user ((char *) inf, &((char *) arg)[0], sizeof (*inf)); - dev = inf->device; - - if (dev < 0 || dev >= num_synths) - { - vfree (inf); - return -(ENXIO); - } - - if (!synth_devs[dev]->pmgr_interface) - { - vfree (inf); - return -(ENXIO); - } - - if ((err = synth_devs[dev]->pmgr_interface (dev, inf)) == -1) - { - vfree (inf); - return err; - } - - copy_to_user (&((char *) arg)[0], (char *) inf, sizeof (*inf)); + err = sndctl_pmgr_iface(inf, arg); vfree (inf); - return 0; + return err; } break; case SNDCTL_PMGR_ACCESS: { struct patmgr_info *inf; - int dev, err; + int err; if ((inf = (struct patmgr_info *) vmalloc (sizeof (*inf))) == NULL) { @@ -1804,36 +1850,17 @@ return -(EIO); } - copy_from_user ((char *) inf, &((char *) arg)[0], sizeof (*inf)); - dev = inf->device; - - if (dev < 0 || dev >= num_synths) - { - vfree (inf); - return -(ENXIO); - } - - if (!pmgr_present[dev]) - { - vfree (inf); - return -(ESRCH); - } - - if ((err = pmgr_access (dev, inf)) < 0) - { - vfree (inf); - return err; - } - - copy_to_user (&((char *) arg)[0], (char *) inf, sizeof (*inf)); + err = sndctl_pmgr_access(inf, arg); vfree (inf); - return 0; + return err; } break; case SNDCTL_SEQ_THRESHOLD: { - int tmp = get_user ((int *) arg); + int tmp; + + get_user (tmp,(int *) arg); if (dev) /* * Patch manager @@ -1851,7 +1878,9 @@ case SNDCTL_MIDI_PRETIME: { - int val = get_user ((int *) arg); + int val; + + get_user (val,(int *) arg); if (val < 0) val = 0; --- drivers/sound/sound_timer.c.or Thu Aug 22 13:21:05 1996 +++ drivers/sound/sound_timer.c Thu Oct 17 05:11:44 1996 @@ -214,7 +214,9 @@ case SNDCTL_TMR_TIMEBASE: { - int val = get_user ((int *) arg); + int val; + + get_user (val,(int *) arg); if (val) { @@ -231,7 +233,9 @@ case SNDCTL_TMR_TEMPO: { - int val = get_user ((int *) arg); + int val; + + get_user (val,(int *) arg); if (val) { @@ -251,9 +255,12 @@ break; case SNDCTL_SEQ_CTRLRATE: - if (get_user ((int *) arg) != 0) /* Can't change */ - return -(EINVAL); - + { + int i; + get_user (i,(int *) arg); + if (i != 0) /* Can't change */ + return -(EINVAL); + } return snd_ioctl_return ((int *) arg, ((curr_tempo * curr_timebase) + 30) / 60); break; --- drivers/sound/sys_timer.c.or Thu Aug 22 13:21:05 1996 +++ drivers/sound/sys_timer.c Thu Oct 17 05:13:40 1996 @@ -213,7 +213,9 @@ case SNDCTL_TMR_TIMEBASE: { - int val = get_user ((int *) arg); + int val; + + get_user (val,(int *) arg); if (val) { @@ -230,7 +232,9 @@ case SNDCTL_TMR_TEMPO: { - int val = get_user ((int *) arg); + int val; + + get_user (val,(int *) arg); if (val) { @@ -249,9 +253,13 @@ break; case SNDCTL_SEQ_CTRLRATE: - if (get_user ((int *) arg) != 0) /* Can't change */ - return -(EINVAL); + { + int i; + get_user (i,(int *) arg); + if (i != 0) /* Can't change */ + return -(EINVAL); + } return snd_ioctl_return ((int *) arg, ((curr_tempo * curr_timebase) + 30) / 60); break;
| |