static ssize_t sound_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) { int dev = iminor(file->f_path.dentry->d_inode); int ret = -EINVAL; /* * The OSS drivers aren't remotely happy without this locking, * and unless someone fixes them when they are about to bite the * big one anyway, we might as well bandage here.. */ lock_kernel(); DEB(printk("sound_read(dev=%d, count=%d)\n", dev, count)); switch (dev & 0x0f) { case SND_DEV_DSP: case SND_DEV_DSP16: case SND_DEV_AUDIO: ret = audio_read(dev, file, buf, count); break; case SND_DEV_SEQ: case SND_DEV_SEQ2: ret = sequencer_read(dev, file, buf, count); break; case SND_DEV_MIDIN: ret = MIDIbuf_read(dev, file, buf, count); } unlock_kernel(); return ret; }
static ssize_t sound_read(struct file *file, char *buf, size_t count, loff_t *ppos) { int dev = MINOR(file->f_dentry->d_inode->i_rdev); DEB(printk("sound_read(dev=%d, count=%d)\n", dev, count)); switch (dev & 0x0f) { case SND_DEV_STATUS: return sndstat_file_read(file, buf, count, ppos); #ifdef CONFIG_AUDIO case SND_DEV_DSP: case SND_DEV_DSP16: case SND_DEV_AUDIO: return audio_read(dev, file, buf, count); #endif #ifdef CONFIG_SEQUENCER case SND_DEV_SEQ: case SND_DEV_SEQ2: return sequencer_read(dev, file, buf, count); #endif #ifdef CONFIG_MIDI case SND_DEV_MIDIN: return MIDIbuf_read(dev, file, buf, count); #endif default:; } return -EINVAL; }