Date: Thu, 23 Apr 98 21:38:27 EDT From: luoqi@watermarkgroup.com (Luoqi Chen) To: cvs-all@FreeBSD.ORG, cvs-committers@FreeBSD.ORG, cvs-sys@FreeBSD.ORG, eivind@FreeBSD.ORG Subject: Re: cvs commit: src/sys/i386/isa/sound soundcard.c Message-ID: <9804240138.AA11338@watermarkgroup.com>
next in thread | raw e-mail | index | archive | help
> eivind 1998/04/22 17:06:44 PDT
>
> Modified files:
> sys/i386/isa/sound soundcard.c
> Log:
> Add devfs support.
>
> Submitted by: somebody whose name escapes me :-(
>
> Revision Changes Path
> 1.65 +32 -2 src/sys/i386/isa/sound/soundcard.c
>
This patch doesn't work quite right. For my AWE32 card, there are two mixer
devices, but this patch will only install the first one. I have a patch that
should work for more general cases (and should continue to work if new
card drivers are added).
-lq
Index: soundcard.c
===================================================================
RCS file: /fun/cvs/src/sys/i386/isa/sound/soundcard.c,v
retrieving revision 1.64
diff -u -r1.64 soundcard.c
--- soundcard.c 1998/03/29 12:15:57 1.64
+++ soundcard.c 1998/04/22 02:13:51
@@ -27,6 +27,8 @@
*
*/
+#include "opt_devfs.h"
+
#include <i386/isa/sound/sound_config.h>
#if NSND > 0 /* from "snd.h" */
@@ -36,6 +38,9 @@
#include <i386/isa/isa_device.h>
+#ifdef DEVFS
+#include <sys/devfsext.h>
+#endif /*DEVFS*/
/*
** Register definitions for DMA controller 1 (channels 0..3):
@@ -61,6 +66,9 @@
static struct fileinfo files[SND_NDEVS];
struct selinfo selinfo[SND_NDEVS >> 4];
+#ifdef DEVFS
+static void *devfs_token[SND_NDEVS];
+#endif
int
MIDIbuf_poll (int dev, struct fileinfo *file, int events, select_table * wait);
@@ -447,6 +455,83 @@
cdevsw_add(&dev, &snd_cdevsw, NULL);
}
+#ifdef DEVFS
+ {
+ static int prev_num_sndstat = 0;
+ static int prev_num_mixers = 0;
+ static int prev_num_audiodevs = 0;
+ static int prev_num_seqs = 0;
+ static int prev_num_midis = 0;
+ int i, dev;
+
+ if (prev_num_sndstat == 0) {
+ dev = SND_DEV_STATUS;
+ devfs_token[dev] = devfs_add_devswf(&snd_cdevsw, dev,
+ DV_CHR, UID_ROOT, GID_WHEEL, 0666, "sndstat");
+ prev_num_sndstat++;
+ }
+
+ if (num_mixers > prev_num_mixers) {
+ for (i = prev_num_mixers; i < num_mixers; i++) {
+ dev = (i << 4) + SND_DEV_CTL;
+ devfs_token[dev] = devfs_add_devswf(&snd_cdevsw, dev,
+ DV_CHR, UID_ROOT, GID_WHEEL, 0666, "mixer%d", i);
+ }
+ if (prev_num_mixers == 0)
+ devfs_link(devfs_token[SND_DEV_CTL], "mixer");
+ prev_num_mixers = num_mixers;
+ }
+
+#ifdef CONFIG_AUDIO
+ if (num_audiodevs > prev_num_audiodevs) {
+ for (i = prev_num_audiodevs; i < num_audiodevs; i++) {
+ dev = (i << 4) + SND_DEV_DSP;
+ devfs_token[dev] = devfs_add_devswf(&snd_cdevsw, dev,
+ DV_CHR, UID_ROOT, GID_WHEEL, 0666, "dsp%d", i);
+ dev = (i << 4) + SND_DEV_DSP16;
+ devfs_token[dev] = devfs_add_devswf(&snd_cdevsw, dev,
+ DV_CHR, UID_ROOT, GID_WHEEL, 0666, "dspW%d", i);
+ dev = (i << 4) + SND_DEV_AUDIO;
+ devfs_token[dev] = devfs_add_devswf(&snd_cdevsw, dev,
+ DV_CHR, UID_ROOT, GID_WHEEL, 0666, "audio%d", i);
+ }
+ if (prev_num_audiodevs == 0) {
+ devfs_link(devfs_token[SND_DEV_DSP], "dsp");
+ devfs_link(devfs_token[SND_DEV_DSP16], "dspW");
+ devfs_link(devfs_token[SND_DEV_AUDIO], "audio");
+ }
+ prev_num_audiodevs = num_audiodevs;
+ }
+#endif
+
+#ifdef CONFIG_SEQUENCER
+ if (prev_num_seqs == 0 && num_midis + num_synths > 0) {
+ dev = SND_DEV_SEQ;
+ devfs_token[dev] = devfs_add_devswf(&snd_cdevsw, dev,
+ DV_CHR, UID_ROOT, GID_WHEEL, 0666, "sequencer%d", 0);
+ dev = SND_DEV_SEQ2;
+ devfs_token[dev] = devfs_add_devswf(&snd_cdevsw, dev,
+ DV_CHR, UID_ROOT, GID_WHEEL, 0666, "music%d", 0);
+ devfs_link(devfs_token[SND_DEV_SEQ], "sequencer");
+ devfs_link(devfs_token[SND_DEV_SEQ2], "music");
+ prev_num_seqs++;
+ }
+#endif
+
+#ifdef CONFIG_MIDI
+ if (num_midis > prev_num_midis) {
+ for (i = prev_num_midis; i < num_midis; i++) {
+ dev = (i << 4) + SND_DEV_MIDIN;
+ devfs_token[dev] = devfs_add_devswf(&snd_cdevsw, dev,
+ DV_CHR, UID_ROOT, GID_WHEEL, 0666, "midi%d", i);
+ }
+ if (prev_num_midis == 0)
+ devfs_link(devfs_token[SND_DEV_MIDIN], "midi");
+ prev_num_midis = num_midis;
+ }
+#endif
+ }
+#endif /*DEVFS*/
return TRUE;
}
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9804240138.AA11338>
