svn commit: r193640 - in head/sys: conf dev/sound dev/sound/isa dev/sound/macio dev/sound/midi dev/sound/pci dev/sound/pci/hda dev/sound/pcm dev/sound/sbus dev/sound/usb modules/sound/sound sys tools

Ariff Abdullah ariff at FreeBSD.org
Sun Jun 7 19:12:10 UTC 2009


Author: ariff
Date: Sun Jun  7 19:12:08 2009
New Revision: 193640
URL: http://svn.freebsd.org/changeset/base/193640

Log:
  Sound Mega-commit. Expect further cleanup until code freeze.
  
  For a slightly thorough explaination, please refer to
  	[1] http://people.freebsd.org/~ariff/SOUND_4.TXT.html .
  
  Summary of changes includes:
  
  1 Volume Per-Channel (vpc).  Provides private / standalone volume control
    unique per-stream pcm channel without touching master volume / pcm.
    Applications can directly use SNDCTL_DSP_[GET|SET][PLAY|REC]VOL, or for
    backwards compatibility, SOUND_MIXER_PCM through the opened dsp device
    instead of /dev/mixer.  Special "bypass" mode is enabled through
    /dev/mixer which will automatically detect if the adjustment is made
    through /dev/mixer and forward its request to this private volume
    controller.  Changes to this volume object will not interfere with
    other channels.
  
    Requirements:
      - SNDCTL_DSP_[GET|SET][PLAY|REC]_VOL are newer ioctls (OSSv4) which
        require specific application modifications (preferred).
      - No modifications required for using bypass mode, so applications
        like mplayer or xmms should work out of the box.
  
    Kernel hints:
      - hint.pcm.%d.vpc (0 = disable vpc).
  
    Kernel sysctls:
      - hw.snd.vpc_mixer_bypass (default: 1).  Enable or disable /dev/mixer
        bypass mode.
      - hw.snd.vpc_autoreset (default: 1).  By default, closing/opening
        /dev/dsp will reset the volume back to 0 db gain/attenuation.
        Setting this to 0 will preserve its settings across device
        closing/opening.
      - hw.snd.vpc_reset (default: 0).  Panic/reset button to reset all
        volume settings back to 0 db.
      - hw.snd.vpc_0db (default: 45).  0 db relative to linear mixer value.
  
  2 High quality fixed-point Bandlimited SINC sampling rate converter,
    based on Julius O'Smith's Digital Audio Resampling -
    http://ccrma.stanford.edu/~jos/resample/.  It includes a filter design
    script written in awk (the clumsiest joke I've ever written)
      - 100% 32bit fixed-point, 64bit accumulator.
      - Possibly among the fastest (if not fastest) of its kind.
      - Resampling quality is tunable, either runtime or during kernel
        compilation (FEEDER_RATE_PRESETS).
      - Quality can be further customized during kernel compilation by
        defining FEEDER_RATE_PRESETS in /etc/make.conf.
  
    Kernel sysctls:
      - hw.snd.feeder_rate_quality.
        0 - Zero-order Hold (ZOH).  Fastest, bad quality.
        1 - Linear Interpolation (LINEAR).  Slightly slower than ZOH,
            better quality but still does not eliminate aliasing.
        2 - (and above) - Sinc Interpolation(SINC).  Best quality.  SINC
            quality always start from 2 and above.
  
    Rough quality comparisons:
      - http://people.freebsd.org/~ariff/z_comparison/
  
  3 Bit-perfect mode.  Bypasses all feeder/dsp effects.  Pure sound will be
    directly fed into the hardware.
  
  4 Parametric (compile time) Software Equalizer (Bass/Treble mixer). Can
    be customized by defining FEEDER_EQ_PRESETS in /etc/make.conf.
  
  5 Transparent/Adaptive Virtual Channel. Now you don't have to disable
    vchans in order to make digital format pass through.  It also makes
    vchans more dynamic by choosing a better format/rate among all the
    concurrent streams, which means that dev.pcm.X.play.vchanformat/rate
    becomes sort of optional.
  
  6 Exclusive Stream, with special open() mode O_EXCL.  This will "mute"
    other concurrent vchan streams and only allow a single channel with
    O_EXCL set to keep producing sound.
  
  Other Changes:
      * most feeder_* stuffs are compilable in userland. Let's not
        speculate whether we should go all out for it (save that for
        FreeBSD 16.0-RELEASE).
      * kobj signature fixups, thanks to Andriy Gapon <avg at freebsd.org>
      * pull out channel mixing logic out of vchan.c and create its own
        feeder_mixer for world justice.
      * various refactoring here and there, for good or bad.
      * activation of few more OSSv4 ioctls() (see [1] above).
      * opt_snd.h for possible compile time configuration:
        (mostly for debugging purposes, don't try these at home)
          SND_DEBUG
          SND_DIAGNOSTIC
          SND_FEEDER_MULTIFORMAT
          SND_FEEDER_FULL_MULTIFORMAT
          SND_FEEDER_RATE_HP
          SND_PCM_64
          SND_OLDSTEREO
  
  Manual page updates are on the way.
  
  Tested by:	joel, Olivier SMEDTS <olivier at gid0 d org>, too many
            	unsung / unnamed heroes.

Added:
  head/sys/dev/sound/pcm/feeder_chain.c   (contents, props changed)
  head/sys/dev/sound/pcm/feeder_eq.c   (contents, props changed)
  head/sys/dev/sound/pcm/feeder_format.c   (contents, props changed)
  head/sys/dev/sound/pcm/feeder_matrix.c   (contents, props changed)
  head/sys/dev/sound/pcm/feeder_mixer.c   (contents, props changed)
  head/sys/dev/sound/pcm/g711.h   (contents, props changed)
  head/sys/dev/sound/pcm/intpcm.h   (contents, props changed)
  head/sys/dev/sound/pcm/matrix.h   (contents, props changed)
  head/sys/dev/sound/pcm/matrix_map.h   (contents, props changed)
  head/sys/dev/sound/pcm/pcm.h   (contents, props changed)
  head/sys/dev/sound/pcm/sndstat.h   (contents, props changed)
  head/sys/tools/feeder_eq_mkfilter.awk   (contents, props changed)
  head/sys/tools/feeder_rate_mkfilter.awk   (contents, props changed)
  head/sys/tools/snd_fxdiv_gen.awk   (contents, props changed)
Deleted:
  head/sys/dev/sound/pcm/fake.c
  head/sys/dev/sound/pcm/feeder_fmt.c
Modified:
  head/sys/conf/files
  head/sys/conf/options
  head/sys/dev/sound/clone.c
  head/sys/dev/sound/driver.c
  head/sys/dev/sound/isa/ad1816.c
  head/sys/dev/sound/isa/ess.c
  head/sys/dev/sound/isa/gusc.c
  head/sys/dev/sound/isa/mss.c
  head/sys/dev/sound/isa/sb16.c
  head/sys/dev/sound/isa/sb8.c
  head/sys/dev/sound/isa/sbc.c
  head/sys/dev/sound/isa/sndbuf_dma.c
  head/sys/dev/sound/macio/aoa.c
  head/sys/dev/sound/macio/davbus.c
  head/sys/dev/sound/macio/i2s.c
  head/sys/dev/sound/macio/snapper.c
  head/sys/dev/sound/macio/tumbler.c
  head/sys/dev/sound/midi/midi.c
  head/sys/dev/sound/midi/mpu401.c
  head/sys/dev/sound/midi/sequencer.c
  head/sys/dev/sound/midi/sequencer.h
  head/sys/dev/sound/pci/als4000.c
  head/sys/dev/sound/pci/atiixp.c
  head/sys/dev/sound/pci/aureal.c
  head/sys/dev/sound/pci/cmi.c
  head/sys/dev/sound/pci/cs4281.c
  head/sys/dev/sound/pci/csa.c
  head/sys/dev/sound/pci/csapcm.c
  head/sys/dev/sound/pci/ds1.c
  head/sys/dev/sound/pci/emu10k1.c
  head/sys/dev/sound/pci/emu10kx-midi.c
  head/sys/dev/sound/pci/emu10kx-pcm.c
  head/sys/dev/sound/pci/emu10kx.c
  head/sys/dev/sound/pci/envy24.c
  head/sys/dev/sound/pci/envy24ht.c
  head/sys/dev/sound/pci/es137x.c
  head/sys/dev/sound/pci/fm801.c
  head/sys/dev/sound/pci/hda/hdac.c
  head/sys/dev/sound/pci/ich.c
  head/sys/dev/sound/pci/maestro.c
  head/sys/dev/sound/pci/maestro3.c
  head/sys/dev/sound/pci/neomagic.c
  head/sys/dev/sound/pci/solo.c
  head/sys/dev/sound/pci/spicds.c
  head/sys/dev/sound/pci/t4dwave.c
  head/sys/dev/sound/pci/via8233.c
  head/sys/dev/sound/pci/via82c686.c
  head/sys/dev/sound/pci/vibes.c
  head/sys/dev/sound/pcm/ac97.c
  head/sys/dev/sound/pcm/ac97_patch.c
  head/sys/dev/sound/pcm/buffer.c
  head/sys/dev/sound/pcm/buffer.h
  head/sys/dev/sound/pcm/channel.c
  head/sys/dev/sound/pcm/channel.h
  head/sys/dev/sound/pcm/channel_if.m
  head/sys/dev/sound/pcm/dsp.c
  head/sys/dev/sound/pcm/dsp.h
  head/sys/dev/sound/pcm/feeder.c
  head/sys/dev/sound/pcm/feeder.h
  head/sys/dev/sound/pcm/feeder_rate.c
  head/sys/dev/sound/pcm/feeder_volume.c
  head/sys/dev/sound/pcm/mixer.c
  head/sys/dev/sound/pcm/mixer.h
  head/sys/dev/sound/pcm/sndstat.c
  head/sys/dev/sound/pcm/sound.c
  head/sys/dev/sound/pcm/sound.h
  head/sys/dev/sound/pcm/vchan.c
  head/sys/dev/sound/pcm/vchan.h
  head/sys/dev/sound/sbus/cs4231.c
  head/sys/dev/sound/unit.c
  head/sys/dev/sound/usb/uaudio.c
  head/sys/dev/sound/usb/uaudio.h
  head/sys/dev/sound/usb/uaudio_pcm.c
  head/sys/dev/sound/version.h
  head/sys/modules/sound/sound/Makefile
  head/sys/sys/soundcard.h

Modified: head/sys/conf/files
==============================================================================
--- head/sys/conf/files	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/conf/files	Sun Jun  7 19:12:08 2009	(r193640)
@@ -65,6 +65,21 @@ p17v-alsa%diked.h		optional snd_emu10kx 
 	compile-with	"CC='${CC}' AWK=${AWK} sh $S/tools/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/p17v-alsa.h p17v-alsa%diked.h" \
 	no-obj no-implicit-rule before-depend				   \
 	clean		"p17v-alsa%diked.h"
+feeder_eq_gen.h			optional sound				   \
+	dependency	"$S/tools/feeder_eq_mkfilter.awk"		   \
+	compile-with	"${AWK} -f $S/tools/feeder_eq_mkfilter.awk -- ${FEEDER_EQ_PRESETS} > feeder_eq_gen.h" \
+	no-obj no-implicit-rule before-depend				   \
+	clean		"feeder_eq_gen.h"
+feeder_rate_gen.h		optional sound				   \
+	dependency	"$S/tools/feeder_rate_mkfilter.awk"		   \
+	compile-with	"${AWK} -f $S/tools/feeder_rate_mkfilter.awk -- ${FEEDER_RATE_PRESETS} > feeder_rate_gen.h" \
+	no-obj no-implicit-rule before-depend				   \
+	clean		"feeder_rate_gen.h"
+snd_fxdiv_gen.h			optional sound				   \
+	dependency	"$S/tools/snd_fxdiv_gen.awk"			   \
+	compile-with	"${AWK} -f $S/tools/snd_fxdiv_gen.awk -- > snd_fxdiv_gen.h" \
+	no-obj no-implicit-rule before-depend				   \
+	clean		"snd_fxdiv_gen.h"
 miidevs.h			optional miibus | mii			   \
 	dependency	"$S/tools/miidevs2h.awk $S/dev/mii/miidevs"	   \
 	compile-with	"${AWK} -f $S/tools/miidevs2h.awk $S/dev/mii/miidevs" \
@@ -1433,16 +1448,28 @@ dev/sound/pci/hda/hdac.c	optional snd_hd
 dev/sound/pcm/ac97.c		optional sound
 dev/sound/pcm/ac97_if.m		optional sound
 dev/sound/pcm/ac97_patch.c	optional sound
-dev/sound/pcm/buffer.c		optional sound
+dev/sound/pcm/buffer.c		optional sound	\
+	dependency	"snd_fxdiv_gen.h"
 dev/sound/pcm/channel.c		optional sound
 dev/sound/pcm/channel_if.m	optional sound
 dev/sound/pcm/dsp.c		optional sound
-dev/sound/pcm/fake.c		optional sound
 dev/sound/pcm/feeder.c		optional sound
-dev/sound/pcm/feeder_fmt.c	optional sound
+dev/sound/pcm/feeder_chain.c	optional sound
+dev/sound/pcm/feeder_eq.c	optional sound	\
+	dependency	"feeder_eq_gen.h"	\
+	dependency	"snd_fxdiv_gen.h"
 dev/sound/pcm/feeder_if.m	optional sound
-dev/sound/pcm/feeder_rate.c	optional sound
-dev/sound/pcm/feeder_volume.c	optional sound
+dev/sound/pcm/feeder_format.c	optional sound  \
+	dependency	"snd_fxdiv_gen.h"
+dev/sound/pcm/feeder_matrix.c	optional sound  \
+	dependency	"snd_fxdiv_gen.h"
+dev/sound/pcm/feeder_mixer.c	optional sound  \
+	dependency	"snd_fxdiv_gen.h"
+dev/sound/pcm/feeder_rate.c	optional sound	\
+	dependency	"feeder_rate_gen.h"	\
+	dependency	"snd_fxdiv_gen.h"
+dev/sound/pcm/feeder_volume.c	optional sound  \
+	dependency	"snd_fxdiv_gen.h"
 dev/sound/pcm/mixer.c		optional sound
 dev/sound/pcm/mixer_if.m	optional sound
 dev/sound/pcm/sndstat.c		optional sound

Modified: head/sys/conf/options
==============================================================================
--- head/sys/conf/options	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/conf/options	Sun Jun  7 19:12:08 2009	(r193640)
@@ -830,3 +830,12 @@ VIMAGE_GLOBALS		opt_global.h
 # Common Flash Interface (CFI) options
 CFI_SUPPORT_STRATAFLASH	opt_cfi.h
 CFI_ARMEDANDDANGEROUS	opt_cfi.h
+
+# Sound options
+SND_DEBUG		opt_snd.h
+SND_DIAGNOSTIC		opt_snd.h
+SND_FEEDER_MULTIFORMAT	opt_snd.h
+SND_FEEDER_FULL_MULTIFORMAT	opt_snd.h
+SND_FEEDER_RATE_HP	opt_snd.h
+SND_PCM_64		opt_snd.h
+SND_OLDSTEREO		opt_snd.h

Modified: head/sys/dev/sound/clone.c
==============================================================================
--- head/sys/dev/sound/clone.c	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/dev/sound/clone.c	Sun Jun  7 19:12:08 2009	(r193640)
@@ -33,6 +33,10 @@
 #include <sys/malloc.h>
 #include <sys/proc.h>
 
+#ifdef HAVE_KERNEL_OPTION_HEADERS
+#include "opt_snd.h"
+#endif
+
 #if defined(SND_DIAGNOSTIC) || defined(SND_DEBUG)
 #include <dev/sound/pcm/sound.h>
 #endif
@@ -88,9 +92,9 @@ struct snd_clone {
 #define SND_CLONE_ASSERT(x, y)		do {			\
 	if (!(x))						\
 		panic y;					\
-} while(0)
+} while (0)
 #else
-#define SND_CLONE_ASSERT(x...)		KASSERT(x)
+#define SND_CLONE_ASSERT(...)		KASSERT(__VA_ARGS__)
 #endif
 
 /*

Modified: head/sys/dev/sound/driver.c
==============================================================================
--- head/sys/dev/sound/driver.c	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/dev/sound/driver.c	Sun Jun  7 19:12:08 2009	(r193640)
@@ -26,6 +26,10 @@
  * $FreeBSD$
  */
 
+#ifdef HAVE_KERNEL_OPTION_HEADERS
+#include "opt_snd.h"
+#endif
+
 #include <dev/sound/pcm/sound.h>
 
 static int
@@ -38,7 +42,7 @@ snd_modevent(module_t mod, int type, voi
 	case MOD_UNLOAD:
 		break;
 	default:
-		return (EOPNOTSUPP);
+		return (ENOTSUP);
 		break;
 	}
 	return 0;

Modified: head/sys/dev/sound/isa/ad1816.c
==============================================================================
--- head/sys/dev/sound/isa/ad1816.c	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/dev/sound/isa/ad1816.c	Sun Jun  7 19:12:08 2009	(r193640)
@@ -26,6 +26,10 @@
  * SUCH DAMAGE.
  */
 
+#ifdef HAVE_KERNEL_OPTION_HEADERS
+#include "opt_snd.h"
+#endif
+
 #include <dev/sound/pcm/sound.h>
 #include <dev/sound/isa/ad1816.h>
 
@@ -62,14 +66,14 @@ struct ad1816_info {
 };
 
 static u_int32_t ad1816_fmt[] = {
-	AFMT_U8,
-	AFMT_STEREO | AFMT_U8,
-	AFMT_S16_LE,
-	AFMT_STEREO | AFMT_S16_LE,
-	AFMT_MU_LAW,
-	AFMT_STEREO | AFMT_MU_LAW,
-	AFMT_A_LAW,
-	AFMT_STEREO | AFMT_A_LAW,
+	SND_FORMAT(AFMT_U8, 1, 0),
+	SND_FORMAT(AFMT_U8, 2, 0),
+	SND_FORMAT(AFMT_S16_LE, 1, 0),
+	SND_FORMAT(AFMT_S16_LE, 2, 0),
+	SND_FORMAT(AFMT_MU_LAW, 1, 0),
+	SND_FORMAT(AFMT_MU_LAW, 2, 0),
+	SND_FORMAT(AFMT_A_LAW, 1, 0),
+	SND_FORMAT(AFMT_A_LAW, 2, 0),
 	0
 };
 
@@ -269,7 +273,7 @@ ad1816mix_set(struct snd_mixer *m, unsig
     	return left | (right << 8);
 }
 
-static int
+static u_int32_t
 ad1816mix_setrecsrc(struct snd_mixer *m, u_int32_t src)
 {
 	struct ad1816_info *ad1816 = mix_getdevinfo(m);
@@ -303,7 +307,7 @@ static kobj_method_t ad1816mixer_methods
     	KOBJMETHOD(mixer_init,		ad1816mix_init),
     	KOBJMETHOD(mixer_set,		ad1816mix_set),
     	KOBJMETHOD(mixer_setrecsrc,	ad1816mix_setrecsrc),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 MIXER_DECLARE(ad1816mixer);
 
@@ -315,23 +319,19 @@ ad1816chan_init(kobj_t obj, void *devinf
 	struct ad1816_info *ad1816 = devinfo;
 	struct ad1816_chinfo *ch = (dir == PCMDIR_PLAY)? &ad1816->pch : &ad1816->rch;
 
+	ch->dir = dir;
 	ch->parent = ad1816;
 	ch->channel = c;
 	ch->buffer = b;
 	if (sndbuf_alloc(ch->buffer, ad1816->parent_dmat, 0, ad1816->bufsize) != 0)
 		return NULL;
-	return ch;
-}
 
-static int
-ad1816chan_setdir(kobj_t obj, void *data, int dir)
-{
-	struct ad1816_chinfo *ch = data;
-  	struct ad1816_info *ad1816 = ch->parent;
+	sndbuf_dmasetup(ch->buffer, (dir == PCMDIR_PLAY) ? ad1816->drq1 :
+	    ad1816->drq2);
+	if (SND_DMA(ch->buffer))
+		sndbuf_dmasetdir(ch->buffer, dir);
 
-	sndbuf_dmasetup(ch->buffer, (dir == PCMDIR_PLAY)? ad1816->drq1 : ad1816->drq2);
-	ch->dir = dir;
-	return 0;
+	return ch;
 }
 
 static int
@@ -351,7 +351,7 @@ ad1816chan_setformat(kobj_t obj, void *d
         	ad1816_write(ad1816, 10, 0x0000);
         	ad1816_write(ad1816, 11, 0x0000);
     	}
-    	switch (format & ~AFMT_STEREO) {
+    	switch (AFMT_ENCODING(format)) {
     	case AFMT_A_LAW:
         	fmt = AD1816_ALAW;
 		break;
@@ -372,7 +372,7 @@ ad1816chan_setformat(kobj_t obj, void *d
 		fmt = AD1816_U8;
 		break;
     	}
-    	if (format & AFMT_STEREO) fmt |= AD1816_STEREO;
+    	if (AFMT_CHANNEL(format) > 1) fmt |= AD1816_STEREO;
     	io_wr(ad1816, reg, fmt);
 	ad1816_unlock(ad1816);
 #if 0
@@ -382,7 +382,7 @@ ad1816chan_setformat(kobj_t obj, void *d
 #endif
 }
 
-static int
+static u_int32_t
 ad1816chan_setspeed(kobj_t obj, void *data, u_int32_t speed)
 {
 	struct ad1816_chinfo *ch = data;
@@ -395,7 +395,7 @@ ad1816chan_setspeed(kobj_t obj, void *da
     	return speed;
 }
 
-static int
+static u_int32_t
 ad1816chan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)
 {
 	struct ad1816_chinfo *ch = data;
@@ -456,7 +456,7 @@ ad1816chan_trigger(kobj_t obj, void *dat
     	return 0;
 }
 
-static int
+static u_int32_t
 ad1816chan_getptr(kobj_t obj, void *data)
 {
 	struct ad1816_chinfo *ch = data;
@@ -471,14 +471,13 @@ ad1816chan_getcaps(kobj_t obj, void *dat
 
 static kobj_method_t ad1816chan_methods[] = {
     	KOBJMETHOD(channel_init,		ad1816chan_init),
-    	KOBJMETHOD(channel_setdir,		ad1816chan_setdir),
     	KOBJMETHOD(channel_setformat,		ad1816chan_setformat),
     	KOBJMETHOD(channel_setspeed,		ad1816chan_setspeed),
     	KOBJMETHOD(channel_setblocksize,	ad1816chan_setblocksize),
     	KOBJMETHOD(channel_trigger,		ad1816chan_trigger),
     	KOBJMETHOD(channel_getptr,		ad1816chan_getptr),
     	KOBJMETHOD(channel_getcaps,		ad1816chan_getcaps),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 CHANNEL_DECLARE(ad1816chan);
 

Modified: head/sys/dev/sound/isa/ess.c
==============================================================================
--- head/sys/dev/sound/isa/ess.c	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/dev/sound/isa/ess.c	Sun Jun  7 19:12:08 2009	(r193640)
@@ -29,6 +29,10 @@
  * SUCH DAMAGE.
  */
 
+#ifdef HAVE_KERNEL_OPTION_HEADERS
+#include "opt_snd.h"
+#endif
+
 #include <dev/sound/pcm/sound.h>
 
 #include  <dev/sound/isa/sb.h>
@@ -50,28 +54,28 @@ SND_DECLARE_FILE("$FreeBSD$");
 #define ESS18XX_NEWSPEED
 
 static u_int32_t ess_pfmt[] = {
-	AFMT_U8,
-	AFMT_STEREO | AFMT_U8,
-	AFMT_S8,
-	AFMT_STEREO | AFMT_S8,
-	AFMT_S16_LE,
-	AFMT_STEREO | AFMT_S16_LE,
-	AFMT_U16_LE,
-	AFMT_STEREO | AFMT_U16_LE,
+	SND_FORMAT(AFMT_U8, 1, 0),
+	SND_FORMAT(AFMT_U8, 2, 0),
+	SND_FORMAT(AFMT_S8, 1, 0),
+	SND_FORMAT(AFMT_S8, 2, 0),
+	SND_FORMAT(AFMT_S16_LE, 1, 0),
+	SND_FORMAT(AFMT_S16_LE, 2, 0),
+	SND_FORMAT(AFMT_U16_LE, 1, 0),
+	SND_FORMAT(AFMT_U16_LE, 2, 0),
 	0
 };
 
 static struct pcmchan_caps ess_playcaps = {6000, 48000, ess_pfmt, 0};
 
 static u_int32_t ess_rfmt[] = {
-	AFMT_U8,
-	AFMT_STEREO | AFMT_U8,
-	AFMT_S8,
-	AFMT_STEREO | AFMT_S8,
-	AFMT_S16_LE,
-	AFMT_STEREO | AFMT_S16_LE,
-	AFMT_U16_LE,
-	AFMT_STEREO | AFMT_U16_LE,
+	SND_FORMAT(AFMT_U8, 1, 0),
+	SND_FORMAT(AFMT_U8, 2, 0),
+	SND_FORMAT(AFMT_S8, 1, 0),
+	SND_FORMAT(AFMT_S8, 2, 0),
+	SND_FORMAT(AFMT_S16_LE, 1, 0),
+	SND_FORMAT(AFMT_S16_LE, 2, 0),
+	SND_FORMAT(AFMT_U16_LE, 1, 0),
+	SND_FORMAT(AFMT_U16_LE, 2, 0),
 	0
 };
 
@@ -458,7 +462,7 @@ ess_setupch(struct ess_info *sc, int ch,
 {
 	int play = (dir == PCMDIR_PLAY)? 1 : 0;
 	int b16 = (fmt & AFMT_16BIT)? 1 : 0;
-	int stereo = (fmt & AFMT_STEREO)? 1 : 0;
+	int stereo = (AFMT_CHANNEL(fmt) > 1)? 1 : 0;
 	int unsign = (fmt == AFMT_U8 || fmt == AFMT_U16_LE)? 1 : 0;
 	u_int8_t spdval, fmtval;
 
@@ -583,7 +587,7 @@ esschan_setformat(kobj_t obj, void *data
 	return 0;
 }
 
-static int
+static u_int32_t
 esschan_setspeed(kobj_t obj, void *data, u_int32_t speed)
 {
 	struct ess_chinfo *ch = data;
@@ -597,7 +601,7 @@ esschan_setspeed(kobj_t obj, void *data,
 	return ch->spd;
 }
 
-static int
+static u_int32_t
 esschan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)
 {
 	struct ess_chinfo *ch = data;
@@ -630,7 +634,7 @@ esschan_trigger(kobj_t obj, void *data, 
 	return 0;
 }
 
-static int
+static u_int32_t
 esschan_getptr(kobj_t obj, void *data)
 {
 	struct ess_chinfo *ch = data;
@@ -654,7 +658,7 @@ static kobj_method_t esschan_methods[] =
     	KOBJMETHOD(channel_trigger,		esschan_trigger),
     	KOBJMETHOD(channel_getptr,		esschan_getptr),
     	KOBJMETHOD(channel_getcaps,		esschan_getcaps),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 CHANNEL_DECLARE(esschan);
 
@@ -741,7 +745,7 @@ essmix_set(struct snd_mixer *m, unsigned
     	return left | (right << 8);
 }
 
-static int
+static u_int32_t
 essmix_setrecsrc(struct snd_mixer *m, u_int32_t src)
 {
     	struct ess_info *sc = mix_getdevinfo(m);
@@ -776,7 +780,7 @@ static kobj_method_t essmixer_methods[] 
     	KOBJMETHOD(mixer_init,		essmix_init),
     	KOBJMETHOD(mixer_set,		essmix_set),
     	KOBJMETHOD(mixer_setrecsrc,	essmix_setrecsrc),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 MIXER_DECLARE(essmixer);
 

Modified: head/sys/dev/sound/isa/gusc.c
==============================================================================
--- head/sys/dev/sound/isa/gusc.c	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/dev/sound/isa/gusc.c	Sun Jun  7 19:12:08 2009	(r193640)
@@ -34,7 +34,11 @@
 #include <machine/resource.h>
 #include <machine/bus.h>
 #include <sys/rman.h>
-#include <sys/soundcard.h>
+
+#ifdef HAVE_KERNEL_OPTION_HEADERS
+#include "opt_snd.h"
+#endif
+
 #include <dev/sound/pcm/sound.h>
 #include <dev/sound/chip.h>
 #include "bus_if.h"
@@ -301,11 +305,9 @@ static int
 gusc_attach(device_t dev)
 {
 	sc_p scp;
-	int unit;
 	void *ih;
 
 	scp = device_get_softc(dev);
-	unit = device_get_unit(dev);
 
 	bzero(scp, sizeof(*scp));
 
@@ -580,16 +582,14 @@ alloc_resource(sc_p scp)
 static int
 release_resource(sc_p scp)
 {
-	int i, lid, flags;
+	int i, lid;
 	device_t dev;
 
-	flags = 0;
 	if (isa_get_vendorid(scp->dev))
 		lid = isa_get_logicalid(scp->dev);
-	else {
+	else
 		lid = LOGICALID_NOPNP;
-		flags = device_get_flags(scp->dev);
-	}
+
 	switch(lid) {
 	case LOGICALID_PCM:
 	case LOGICALID_NOPNP:		/* XXX Non-PnP */

Modified: head/sys/dev/sound/isa/mss.c
==============================================================================
--- head/sys/dev/sound/isa/mss.c	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/dev/sound/isa/mss.c	Sun Jun  7 19:12:08 2009	(r193640)
@@ -27,6 +27,10 @@
  * SUCH DAMAGE.
  */
 
+#ifdef HAVE_KERNEL_OPTION_HEADERS
+#include "opt_snd.h"
+#endif
+
 #include <dev/sound/pcm/sound.h>
 
 SND_DECLARE_FILE("$FreeBSD$");
@@ -128,34 +132,34 @@ static int 		pnpmss_attach(device_t dev)
 static driver_intr_t 	opti931_intr;
 
 static u_int32_t mss_fmt[] = {
-	AFMT_U8,
-	AFMT_STEREO | AFMT_U8,
-	AFMT_S16_LE,
-	AFMT_STEREO | AFMT_S16_LE,
-	AFMT_MU_LAW,
-	AFMT_STEREO | AFMT_MU_LAW,
-	AFMT_A_LAW,
-	AFMT_STEREO | AFMT_A_LAW,
+	SND_FORMAT(AFMT_U8, 1, 0),
+	SND_FORMAT(AFMT_U8, 2, 0),
+	SND_FORMAT(AFMT_S16_LE, 1, 0),
+	SND_FORMAT(AFMT_S16_LE, 2, 0),
+	SND_FORMAT(AFMT_MU_LAW, 1, 0),
+	SND_FORMAT(AFMT_MU_LAW, 2, 0),
+	SND_FORMAT(AFMT_A_LAW, 1, 0),
+	SND_FORMAT(AFMT_A_LAW, 2, 0),
 	0
 };
 static struct pcmchan_caps mss_caps = {4000, 48000, mss_fmt, 0};
 
 static u_int32_t guspnp_fmt[] = {
-	AFMT_U8,
-	AFMT_STEREO | AFMT_U8,
-	AFMT_S16_LE,
-	AFMT_STEREO | AFMT_S16_LE,
-	AFMT_A_LAW,
-	AFMT_STEREO | AFMT_A_LAW,
+	SND_FORMAT(AFMT_U8, 1, 0),
+	SND_FORMAT(AFMT_U8, 2, 0),
+	SND_FORMAT(AFMT_S16_LE, 1, 0),
+	SND_FORMAT(AFMT_S16_LE, 2, 0),
+	SND_FORMAT(AFMT_A_LAW, 1, 0),
+	SND_FORMAT(AFMT_A_LAW, 2, 0),
 	0
 };
 static struct pcmchan_caps guspnp_caps = {4000, 48000, guspnp_fmt, 0};
 
 static u_int32_t opti931_fmt[] = {
-	AFMT_U8,
-	AFMT_STEREO | AFMT_U8,
-	AFMT_S16_LE,
-	AFMT_STEREO | AFMT_S16_LE,
+	SND_FORMAT(AFMT_U8, 1, 0),
+	SND_FORMAT(AFMT_U8, 2, 0),
+	SND_FORMAT(AFMT_S16_LE, 1, 0),
+	SND_FORMAT(AFMT_S16_LE, 2, 0),
 	0
 };
 static struct pcmchan_caps opti931_caps = {4000, 48000, opti931_fmt, 0};
@@ -520,7 +524,7 @@ mssmix_set(struct snd_mixer *m, unsigned
 	return left | (right << 8);
 }
 
-static int
+static u_int32_t
 mssmix_setrecsrc(struct snd_mixer *m, u_int32_t src)
 {
 	struct mss_info *mss = mix_getdevinfo(m);
@@ -535,7 +539,7 @@ static kobj_method_t mssmix_mixer_method
     	KOBJMETHOD(mixer_init,		mssmix_init),
     	KOBJMETHOD(mixer_set,		mssmix_set),
     	KOBJMETHOD(mixer_setrecsrc,	mssmix_setrecsrc),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 MIXER_DECLARE(mssmix_mixer);
 
@@ -604,7 +608,7 @@ ymmix_set(struct snd_mixer *m, unsigned 
 	return left | (right << 8);
 }
 
-static int
+static u_int32_t
 ymmix_setrecsrc(struct snd_mixer *m, u_int32_t src)
 {
 	struct mss_info *mss = mix_getdevinfo(m);
@@ -618,7 +622,7 @@ static kobj_method_t ymmix_mixer_methods
     	KOBJMETHOD(mixer_init,		ymmix_init),
     	KOBJMETHOD(mixer_set,		ymmix_set),
     	KOBJMETHOD(mixer_setrecsrc,	ymmix_setrecsrc),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 MIXER_DECLARE(ymmix_mixer);
 
@@ -997,7 +1001,7 @@ static int
 mss_format(struct mss_chinfo *ch, u_int32_t format)
 {
     	struct mss_info *mss = ch->parent;
-    	int i, arg = format & ~AFMT_STEREO;
+    	int i, arg = AFMT_ENCODING(format);
 
     	/*
      	* The data format uses 3 bits (just 2 on the 1848). For each
@@ -1014,7 +1018,7 @@ mss_format(struct mss_chinfo *ch, u_int3
 	ch->fmt = format;
     	for (i = 0; i < 8; i++) if (arg == fmts[i]) break;
     	arg = i << 1;
-    	if (format & AFMT_STEREO) arg |= 1;
+    	if (AFMT_CHANNEL(format) > 1) arg |= 1;
     	arg <<= 4;
     	ad_enter_MCE(mss);
     	ad_write(mss, 8, (ad_read(mss, 8) & 0x0f) | arg);
@@ -1035,7 +1039,7 @@ mss_trigger(struct mss_chinfo *ch, int g
     	int retry, wr, cnt, ss;
 
 	ss = 1;
-	ss <<= (ch->fmt & AFMT_STEREO)? 1 : 0;
+	ss <<= (AFMT_CHANNEL(ch->fmt) > 1)? 1 : 0;
 	ss <<= (ch->fmt & AFMT_16BIT)? 1 : 0;
 
 	wr = (ch->dir == PCMDIR_PLAY)? 1 : 0;
@@ -1170,12 +1174,12 @@ msschan_setformat(kobj_t obj, void *data
 	return 0;
 }
 
-static int
+static u_int32_t
 msschan_setspeed(kobj_t obj, void *data, u_int32_t speed)
 {
 	struct mss_chinfo *ch = data;
 	struct mss_info *mss = ch->parent;
-	int r;
+	u_int32_t r;
 
 	mss_lock(mss);
 	r = mss_speed(ch, speed);
@@ -1184,7 +1188,7 @@ msschan_setspeed(kobj_t obj, void *data,
 	return r;
 }
 
-static int
+static u_int32_t
 msschan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)
 {
 	struct mss_chinfo *ch = data;
@@ -1211,7 +1215,7 @@ msschan_trigger(kobj_t obj, void *data, 
 	return 0;
 }
 
-static int
+static u_int32_t
 msschan_getptr(kobj_t obj, void *data)
 {
 	struct mss_chinfo *ch = data;
@@ -1247,7 +1251,7 @@ static kobj_method_t msschan_methods[] =
     	KOBJMETHOD(channel_trigger,		msschan_trigger),
     	KOBJMETHOD(channel_getptr,		msschan_getptr),
     	KOBJMETHOD(channel_getcaps,		msschan_getcaps),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 CHANNEL_DECLARE(msschan);
 

Modified: head/sys/dev/sound/isa/sb16.c
==============================================================================
--- head/sys/dev/sound/isa/sb16.c	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/dev/sound/isa/sb16.c	Sun Jun  7 19:12:08 2009	(r193640)
@@ -29,6 +29,10 @@
  * SUCH DAMAGE.
  */
 
+#ifdef HAVE_KERNEL_OPTION_HEADERS
+#include "opt_snd.h"
+#endif
+
 #include <dev/sound/pcm/sound.h>
 
 #include  <dev/sound/isa/sb.h>
@@ -44,24 +48,24 @@ SND_DECLARE_FILE("$FreeBSD$");
 #define PLAIN_SB16(x) ((((x)->bd_flags) & (BD_F_SB16|BD_F_SB16X)) == BD_F_SB16)
 
 static u_int32_t sb16_fmt8[] = {
-	AFMT_U8,
-	AFMT_STEREO | AFMT_U8,
+	SND_FORMAT(AFMT_U8, 1, 0),
+	SND_FORMAT(AFMT_U8, 2, 0),
 	0
 };
 static struct pcmchan_caps sb16_caps8 = {5000, 45000, sb16_fmt8, 0};
 
 static u_int32_t sb16_fmt16[] = {
-	AFMT_S16_LE,
-	AFMT_STEREO | AFMT_S16_LE,
+	SND_FORMAT(AFMT_S16_LE, 1, 0),
+	SND_FORMAT(AFMT_S16_LE, 2, 0),
 	0
 };
 static struct pcmchan_caps sb16_caps16 = {5000, 45000, sb16_fmt16, 0};
 
 static u_int32_t sb16x_fmt[] = {
-	AFMT_U8,
-	AFMT_STEREO | AFMT_U8,
-	AFMT_S16_LE,
-	AFMT_STEREO | AFMT_S16_LE,
+	SND_FORMAT(AFMT_U8, 1, 0),
+	SND_FORMAT(AFMT_U8, 2, 0),
+	SND_FORMAT(AFMT_S16_LE, 1, 0),
+	SND_FORMAT(AFMT_S16_LE, 2, 0),
 	0
 };
 static struct pcmchan_caps sb16x_caps = {5000, 49000, sb16x_fmt, 0};
@@ -366,7 +370,7 @@ sb16mix_set(struct snd_mixer *m, unsigne
     	return left | (right << 8);
 }
 
-static int
+static u_int32_t
 sb16mix_setrecsrc(struct snd_mixer *m, u_int32_t src)
 {
     	struct sb_info *sb = mix_getdevinfo(m);
@@ -420,7 +424,7 @@ static kobj_method_t sb16mix_mixer_metho
     	KOBJMETHOD(mixer_init,		sb16mix_init),
     	KOBJMETHOD(mixer_set,		sb16mix_set),
     	KOBJMETHOD(mixer_setrecsrc,	sb16mix_setrecsrc),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 MIXER_DECLARE(sb16mix_mixer);
 
@@ -633,7 +637,7 @@ sb_setup(struct sb_info *sb)
 		v |= (ch->fmt & AFMT_16BIT)? DSP_DMA16 : DSP_DMA8;
 		sb_cmd(sb, v);
 
-		v = (ch->fmt & AFMT_STEREO)? DSP_F16_STEREO : 0;
+		v = (AFMT_CHANNEL(ch->fmt) > 1)? DSP_F16_STEREO : 0;
 		v |= (ch->fmt & AFMT_SIGNED)? DSP_F16_SIGNED : 0;
 		sb_cmd2(sb, v, l);
 		sndbuf_dma(ch->buffer, PCMTRIG_START);
@@ -658,7 +662,7 @@ sb_setup(struct sb_info *sb)
 		v |= (ch->fmt & AFMT_16BIT)? DSP_DMA16 : DSP_DMA8;
 		sb_cmd(sb, v);
 
-		v = (ch->fmt & AFMT_STEREO)? DSP_F16_STEREO : 0;
+		v = (AFMT_CHANNEL(ch->fmt) > 1)? DSP_F16_STEREO : 0;
 		v |= (ch->fmt & AFMT_SIGNED)? DSP_F16_SIGNED : 0;
 		sb_cmd2(sb, v, l);
 		sndbuf_dma(ch->buffer, PCMTRIG_START);
@@ -700,7 +704,7 @@ sb16chan_setformat(kobj_t obj, void *dat
 	return 0;
 }
 
-static int
+static u_int32_t
 sb16chan_setspeed(kobj_t obj, void *data, u_int32_t speed)
 {
 	struct sb_chinfo *ch = data;
@@ -709,7 +713,7 @@ sb16chan_setspeed(kobj_t obj, void *data
 	return speed;
 }
 
-static int
+static u_int32_t
 sb16chan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)
 {
 	struct sb_chinfo *ch = data;
@@ -737,7 +741,7 @@ sb16chan_trigger(kobj_t obj, void *data,
 	return 0;
 }
 
-static int
+static u_int32_t
 sb16chan_getptr(kobj_t obj, void *data)
 {
 	struct sb_chinfo *ch = data;
@@ -777,7 +781,7 @@ static kobj_method_t sb16chan_methods[] 
     	KOBJMETHOD(channel_trigger,		sb16chan_trigger),
     	KOBJMETHOD(channel_getptr,		sb16chan_getptr),
     	KOBJMETHOD(channel_getcaps,		sb16chan_getcaps),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 CHANNEL_DECLARE(sb16chan);
 

Modified: head/sys/dev/sound/isa/sb8.c
==============================================================================
--- head/sys/dev/sound/isa/sb8.c	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/dev/sound/isa/sb8.c	Sun Jun  7 19:12:08 2009	(r193640)
@@ -29,6 +29,10 @@
  * SUCH DAMAGE.
  */
 
+#ifdef HAVE_KERNEL_OPTION_HEADERS
+#include "opt_snd.h"
+#endif
+
 #include <dev/sound/pcm/sound.h>
 
 #include  <dev/sound/isa/sb.h>
@@ -43,7 +47,7 @@ SND_DECLARE_FILE("$FreeBSD$");
 #define SB_DEFAULT_BUFSZ	4096
 
 static u_int32_t sb_fmt[] = {
-	AFMT_U8,
+	SND_FORMAT(AFMT_U8, 1, 0),
 	0
 };
 static struct pcmchan_caps sb200_playcaps = {4000, 23000, sb_fmt, 0};
@@ -52,8 +56,8 @@ static struct pcmchan_caps sb201_playcap
 static struct pcmchan_caps sb201_reccaps = {4000, 15000, sb_fmt, 0};
 
 static u_int32_t sbpro_fmt[] = {
-	AFMT_U8,
-	AFMT_STEREO | AFMT_U8,
+	SND_FORMAT(AFMT_U8, 1, 0),
+	SND_FORMAT(AFMT_U8, 2, 0),
 	0
 };
 static struct pcmchan_caps sbpro_playcaps = {4000, 44100, sbpro_fmt, 0};
@@ -372,7 +376,7 @@ sbpromix_set(struct snd_mixer *m, unsign
     	return left | (right << 8);
 }
 
-static int
+static u_int32_t
 sbpromix_setrecsrc(struct snd_mixer *m, u_int32_t src)
 {
     	struct sb_info *sb = mix_getdevinfo(m);
@@ -395,7 +399,7 @@ static kobj_method_t sbpromix_mixer_meth
     	KOBJMETHOD(mixer_init,		sbpromix_init),
     	KOBJMETHOD(mixer_set,		sbpromix_set),
     	KOBJMETHOD(mixer_setrecsrc,	sbpromix_setrecsrc),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 MIXER_DECLARE(sbpromix_mixer);
 
@@ -453,7 +457,7 @@ sbmix_set(struct snd_mixer *m, unsigned 
     	return left | (left << 8);
 }
 
-static int
+static u_int32_t
 sbmix_setrecsrc(struct snd_mixer *m, u_int32_t src)
 {
 	return 0;
@@ -463,7 +467,7 @@ static kobj_method_t sbmix_mixer_methods
     	KOBJMETHOD(mixer_init,		sbmix_init),
     	KOBJMETHOD(mixer_set,		sbmix_set),
     	KOBJMETHOD(mixer_setrecsrc,	sbmix_setrecsrc),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 MIXER_DECLARE(sbmix_mixer);
 
@@ -496,7 +500,7 @@ sb_speed(struct sb_chinfo *ch)
 {
 	struct sb_info *sb = ch->parent;
     	int play = (ch->dir == PCMDIR_PLAY)? 1 : 0;
-	int stereo = (ch->fmt & AFMT_STEREO)? 1 : 0;
+	int stereo = (AFMT_CHANNEL(ch->fmt) > 1)? 1 : 0;
 	int speed, tmp, thresh, max;
 	u_char tconst;
 
@@ -537,7 +541,7 @@ sb_start(struct sb_chinfo *ch)
 {
 	struct sb_info *sb = ch->parent;
     	int play = (ch->dir == PCMDIR_PLAY)? 1 : 0;
-    	int stereo = (ch->fmt & AFMT_STEREO)? 1 : 0;
+    	int stereo = (AFMT_CHANNEL(ch->fmt) > 1)? 1 : 0;
 	int l = ch->blksz;
 	u_char i;
 
@@ -614,7 +618,7 @@ sbchan_setformat(kobj_t obj, void *data,
 	return 0;
 }
 
-static int
+static u_int32_t
 sbchan_setspeed(kobj_t obj, void *data, u_int32_t speed)
 {
 	struct sb_chinfo *ch = data;
@@ -623,7 +627,7 @@ sbchan_setspeed(kobj_t obj, void *data, 
 	return sb_speed(ch);
 }
 
-static int
+static u_int32_t
 sbchan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)
 {
 	struct sb_chinfo *ch = data;
@@ -648,7 +652,7 @@ sbchan_trigger(kobj_t obj, void *data, i
 	return 0;
 }
 
-static int
+static u_int32_t
 sbchan_getptr(kobj_t obj, void *data)
 {
 	struct sb_chinfo *ch = data;
@@ -677,7 +681,7 @@ static kobj_method_t sbchan_methods[] = 
     	KOBJMETHOD(channel_trigger,		sbchan_trigger),
     	KOBJMETHOD(channel_getptr,		sbchan_getptr),
     	KOBJMETHOD(channel_getcaps,		sbchan_getcaps),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 CHANNEL_DECLARE(sbchan);
 

Modified: head/sys/dev/sound/isa/sbc.c
==============================================================================
--- head/sys/dev/sound/isa/sbc.c	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/dev/sound/isa/sbc.c	Sun Jun  7 19:12:08 2009	(r193640)
@@ -24,6 +24,10 @@
  * SUCH DAMAGE.
  */
 
+#ifdef HAVE_KERNEL_OPTION_HEADERS
+#include "opt_snd.h"
+#endif
+
 #include <dev/sound/chip.h>
 #include <dev/sound/pcm/sound.h>
 #include <dev/sound/isa/sb.h>

Modified: head/sys/dev/sound/isa/sndbuf_dma.c
==============================================================================
--- head/sys/dev/sound/isa/sndbuf_dma.c	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/dev/sound/isa/sndbuf_dma.c	Sun Jun  7 19:12:08 2009	(r193640)
@@ -24,6 +24,10 @@
  * SUCH DAMAGE.
  */
 
+#ifdef HAVE_KERNEL_OPTION_HEADERS
+#include "opt_snd.h"
+#endif
+
 #include <dev/sound/pcm/sound.h>
 
 #include <isa/isavar.h>

Modified: head/sys/dev/sound/macio/aoa.c
==============================================================================
--- head/sys/dev/sound/macio/aoa.c	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/dev/sound/macio/aoa.c	Sun Jun  7 19:12:08 2009	(r193640)
@@ -43,8 +43,14 @@
 #include <machine/bus.h>
 #include <sys/rman.h>
 #include <dev/ofw/ofw_bus.h>
+
+#ifdef HAVE_KERNEL_OPTION_HEADERS
+#include "opt_snd.h"
+#endif
+
 #include <dev/sound/pcm/sound.h>
 #include <dev/sound/macio/aoa.h>
+
 #include "mixer_if.h"
 
 struct aoa_dma {
@@ -138,7 +144,7 @@ aoa_dma_delete(struct aoa_dma *dma)
 	free(dma, M_DEVBUF);
 }
 
-static int
+static u_int32_t
 aoa_chan_setblocksize(kobj_t obj, void *data, u_int32_t blocksz)
 {
 	struct aoa_dma 		*dma = data;
@@ -186,13 +192,13 @@ aoa_chan_setformat(kobj_t obj, void *dat
 {
 	DPRINTF(("aoa_chan_setformat: format = %u\n", format));
 
-	if (format != (AFMT_STEREO | AFMT_S16_BE))
+	if (format != SND_FORMAT(AFMT_S16_BE, 2, 0))
 		return (EINVAL);
 
 	return (0);
 }
 
-static int
+static u_int32_t
 aoa_chan_setspeed(kobj_t obj, void *data, u_int32_t speed)
 {
 	DPRINTF(("aoa_chan_setspeed: speed = %u\n", speed));
@@ -200,7 +206,7 @@ aoa_chan_setspeed(kobj_t obj, void *data
 	return (44100);
 }
 
-static int
+static u_int32_t
 aoa_chan_getptr(kobj_t obj, void *data)
 {
 	struct aoa_dma 	 *dma = data;
@@ -332,7 +338,7 @@ aoa_interrupt(void *xsc)
 }
 
 static u_int32_t sc_fmt[] = {
-	AFMT_S16_BE | AFMT_STEREO,
+	SND_FORMAT(AFMT_S16_BE, 2, 0),
 	0
 };
 static struct pcmchan_caps aoa_caps = {44100, 44100, sc_fmt, 0};
@@ -352,7 +358,7 @@ static kobj_method_t aoa_chan_methods[] 
 	KOBJMETHOD(channel_trigger,	aoa_chan_trigger),
 	KOBJMETHOD(channel_getptr,	aoa_chan_getptr),
 	KOBJMETHOD(channel_getcaps,	aoa_chan_getcaps),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 CHANNEL_DECLARE(aoa_chan);
 

Modified: head/sys/dev/sound/macio/davbus.c
==============================================================================
--- head/sys/dev/sound/macio/davbus.c	Sun Jun  7 18:53:25 2009	(r193639)
+++ head/sys/dev/sound/macio/davbus.c	Sun Jun  7 19:12:08 2009	(r193640)
@@ -40,7 +40,13 @@
 #include <sys/rman.h>
 
 #include <dev/ofw/ofw_bus.h>
+
+#ifdef HAVE_KERNEL_OPTION_HEADERS
+#include "opt_snd.h"
+#endif
+
 #include <dev/sound/pcm/sound.h>
+
 #include <dev/sound/macio/aoa.h>
 #include <dev/sound/macio/davbusreg.h>
 
@@ -115,7 +121,7 @@ static void	burgundy_set_outputs(struct 
 static u_int	burgundy_read_status(struct davbus_softc *d, u_int status);
 static int	burgundy_set(struct snd_mixer *m, unsigned dev, unsigned left,
 		    unsigned right);
-static int	burgundy_setrecsrc(struct snd_mixer *m, u_int32_t src);
+static u_int32_t	burgundy_setrecsrc(struct snd_mixer *m, u_int32_t src);
 
 static kobj_method_t burgundy_mixer_methods[] = {
 	KOBJMETHOD(mixer_init, 		burgundy_init),
@@ -123,7 +129,7 @@ static kobj_method_t burgundy_mixer_meth
 	KOBJMETHOD(mixer_reinit, 	burgundy_reinit),
 	KOBJMETHOD(mixer_set, 		burgundy_set),
 	KOBJMETHOD(mixer_setrecsrc,	burgundy_setrecsrc),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 
 MIXER_DECLARE(burgundy_mixer);
@@ -293,7 +299,7 @@ burgundy_set(struct snd_mixer *m, unsign
 	return (0);
 }
 
-static int
+static u_int32_t
 burgundy_setrecsrc(struct snd_mixer *m, u_int32_t src)
 {
 	return (0);
@@ -311,7 +317,7 @@ static void	screamer_set_outputs(struct 
 static u_int	screamer_read_status(struct davbus_softc *d, u_int status);
 static int	screamer_set(struct snd_mixer *m, unsigned dev, unsigned left,
 		    unsigned right);
-static int	screamer_setrecsrc(struct snd_mixer *m, u_int32_t src);
+static u_int32_t	screamer_setrecsrc(struct snd_mixer *m, u_int32_t src);
 
 static kobj_method_t screamer_mixer_methods[] = {
 	KOBJMETHOD(mixer_init, 		screamer_init),
@@ -319,7 +325,7 @@ static kobj_method_t screamer_mixer_meth
 	KOBJMETHOD(mixer_reinit, 	screamer_reinit),
 	KOBJMETHOD(mixer_set, 		screamer_set),
 	KOBJMETHOD(mixer_setrecsrc,	screamer_setrecsrc),
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-all mailing list