Say hello to a sound system update from FreeBSD. This includes the long
authorSimon Schubert <corecode@dragonflybsd.org>
Thu, 4 Jan 2007 21:47:03 +0000 (21:47 +0000)
committerSimon Schubert <corecode@dragonflybsd.org>
Thu, 4 Jan 2007 21:47:03 +0000 (21:47 +0000)
awaited Intel High Definition Audio (HDA) a.k.a. Azalia support.

The generic sound support module has been renamed to sound.ko and the
"everything included" module is called snd_driver.ko now.  Apart from
that, everything should continue working as normal, just better.

167 files changed:
share/man/man4/Makefile
share/man/man4/pcm.4
share/man/man4/snd_ad1816.4 [new file with mode: 0644]
share/man/man4/snd_als4000.4 [new file with mode: 0644]
share/man/man4/snd_atiixp.4 [new file with mode: 0644]
share/man/man4/snd_cmi.4 [new file with mode: 0644]
share/man/man4/snd_cs4281.4 [new file with mode: 0644]
share/man/man4/snd_csa.4 [new file with mode: 0644]
share/man/man4/snd_ds1.4 [new file with mode: 0644]
share/man/man4/snd_emu10k1.4 [new file with mode: 0644]
share/man/man4/snd_emu10kx.4 [new file with mode: 0644]
share/man/man4/snd_envy24.4 [new file with mode: 0644]
share/man/man4/snd_envy24ht.4 [new file with mode: 0644]
share/man/man4/snd_es137x.4 [new file with mode: 0644]
share/man/man4/snd_ess.4 [new file with mode: 0644]
share/man/man4/snd_fm801.4 [new file with mode: 0644]
share/man/man4/snd_gusc.4 [new file with mode: 0644]
share/man/man4/snd_hda.4 [new file with mode: 0644]
share/man/man4/snd_ich.4 [new file with mode: 0644]
share/man/man4/snd_maestro.4 [new file with mode: 0644]
share/man/man4/snd_maestro3.4 [new file with mode: 0644]
share/man/man4/snd_mss.4 [new file with mode: 0644]
share/man/man4/snd_neomagic.4 [new file with mode: 0644]
share/man/man4/snd_sbc.4 [new file with mode: 0644]
share/man/man4/snd_solo.4 [new file with mode: 0644]
share/man/man4/snd_spicds.4 [new file with mode: 0644]
share/man/man4/snd_t4dwave.4 [new file with mode: 0644]
share/man/man4/snd_uaudio.4 [new file with mode: 0644]
share/man/man4/snd_via8233.4 [new file with mode: 0644]
share/man/man4/snd_via82c686.4 [new file with mode: 0644]
share/man/man4/snd_vibes.4 [new file with mode: 0644]
sys/conf/files
sys/config/LINT
sys/dev/sound/Makefile
sys/dev/sound/driver.c
sys/dev/sound/driver/Makefile
sys/dev/sound/driver/Makefile.inc
sys/dev/sound/driver/ad1816/Makefile
sys/dev/sound/driver/als4000/Makefile
sys/dev/sound/driver/atiixp/Makefile [new file with mode: 0644]
sys/dev/sound/driver/au88x0/Makefile [new file with mode: 0644]
sys/dev/sound/driver/audiocs/Makefile [new file with mode: 0644]
sys/dev/sound/driver/cmi/Makefile
sys/dev/sound/driver/cs4281/Makefile
sys/dev/sound/driver/csa/Makefile
sys/dev/sound/driver/driver/Makefile [new file with mode: 0644]
sys/dev/sound/driver/ds1/Makefile
sys/dev/sound/driver/emu10k1/Makefile
sys/dev/sound/driver/es137x/Makefile
sys/dev/sound/driver/ess/Makefile
sys/dev/sound/driver/fm801/Makefile
sys/dev/sound/driver/hda/Makefile [new file with mode: 0644]
sys/dev/sound/driver/ich/Makefile
sys/dev/sound/driver/maestro/Makefile
sys/dev/sound/driver/maestro3/Makefile
sys/dev/sound/driver/mss/Makefile
sys/dev/sound/driver/neomagic/Makefile
sys/dev/sound/driver/sb16/Makefile
sys/dev/sound/driver/sb8/Makefile
sys/dev/sound/driver/sbc/Makefile
sys/dev/sound/driver/solo/Makefile
sys/dev/sound/driver/t4dwave/Makefile
sys/dev/sound/driver/uaudio/Makefile
sys/dev/sound/driver/via8233/Makefile
sys/dev/sound/driver/via82c686/Makefile
sys/dev/sound/driver/vibes/Makefile
sys/dev/sound/isa/ad1816.c
sys/dev/sound/isa/ad1816.h
sys/dev/sound/isa/es1888.c [deleted file]
sys/dev/sound/isa/ess.c
sys/dev/sound/isa/gusc.c
sys/dev/sound/isa/mss.c
sys/dev/sound/isa/mss.h
sys/dev/sound/isa/sb.h
sys/dev/sound/isa/sb16.c
sys/dev/sound/isa/sb8.c
sys/dev/sound/isa/sbc.c
sys/dev/sound/isa/sndbuf_dma.c [new file with mode: 0644]
sys/dev/sound/pci/als4000.c
sys/dev/sound/pci/als4000.h
sys/dev/sound/pci/atiixp.c [new file with mode: 0644]
sys/dev/sound/pci/atiixp.h [new file with mode: 0644]
sys/dev/sound/pci/au88x0.c [new file with mode: 0644]
sys/dev/sound/pci/au88x0.h [new file with mode: 0644]
sys/dev/sound/pci/aureal.c
sys/dev/sound/pci/aureal.h
sys/dev/sound/pci/cmi.c
sys/dev/sound/pci/cmireg.h
sys/dev/sound/pci/cs4281.c
sys/dev/sound/pci/cs4281.h
sys/dev/sound/pci/csa.c
sys/dev/sound/pci/csapcm.c
sys/dev/sound/pci/csareg.h
sys/dev/sound/pci/csavar.h
sys/dev/sound/pci/ds1-fw.h
sys/dev/sound/pci/ds1.c
sys/dev/sound/pci/ds1.h
sys/dev/sound/pci/emu10k1.c
sys/dev/sound/pci/es137x.c
sys/dev/sound/pci/es137x.h
sys/dev/sound/pci/fm801.c
sys/dev/sound/pci/gnu/csaimg.h
sys/dev/sound/pci/gnu/emu10k1-ac97.h [new file with mode: 0644]
sys/dev/sound/pci/gnu/emu10k1-alsa.h [copied from sys/dev/sound/pci/gnu/emu10k1.h with 55% similarity]
sys/dev/sound/pci/gnu/emu10k1.h
sys/dev/sound/pci/gnu/maestro3_dsp.h
sys/dev/sound/pci/gnu/maestro3_reg.h
sys/dev/sound/pci/hda/hda_reg.h [new file with mode: 0644]
sys/dev/sound/pci/hda/hdac.c [new file with mode: 0644]
sys/dev/sound/pci/hda/hdac.h [new file with mode: 0644]
sys/dev/sound/pci/hda/hdac_private.h [new file with mode: 0644]
sys/dev/sound/pci/hda/hdac_reg.h [new file with mode: 0644]
sys/dev/sound/pci/ich.c
sys/dev/sound/pci/ich.h
sys/dev/sound/pci/maestro.c
sys/dev/sound/pci/maestro3.c
sys/dev/sound/pci/maestro_reg.h
sys/dev/sound/pci/neomagic-coeff.h
sys/dev/sound/pci/neomagic.c
sys/dev/sound/pci/neomagic.h
sys/dev/sound/pci/solo.c
sys/dev/sound/pci/t4dwave.c
sys/dev/sound/pci/t4dwave.h
sys/dev/sound/pci/via8233.c
sys/dev/sound/pci/via8233.h
sys/dev/sound/pci/via82c686.c
sys/dev/sound/pci/via82c686.h
sys/dev/sound/pci/vibes.c
sys/dev/sound/pci/vibes.h
sys/dev/sound/pcm/Makefile
sys/dev/sound/pcm/ac97.c
sys/dev/sound/pcm/ac97.h
sys/dev/sound/pcm/ac97_if.m
sys/dev/sound/pcm/ac97_patch.c
sys/dev/sound/pcm/ac97_patch.h
sys/dev/sound/pcm/buffer.c
sys/dev/sound/pcm/buffer.h
sys/dev/sound/pcm/channel.c
sys/dev/sound/pcm/channel.h
sys/dev/sound/pcm/channel_if.m
sys/dev/sound/pcm/dsp.c
sys/dev/sound/pcm/dsp.h
sys/dev/sound/pcm/fake.c
sys/dev/sound/pcm/feeder.c
sys/dev/sound/pcm/feeder.h
sys/dev/sound/pcm/feeder_fmt.c
sys/dev/sound/pcm/feeder_if.m
sys/dev/sound/pcm/feeder_rate.c
sys/dev/sound/pcm/feeder_volume.c [new file with mode: 0644]
sys/dev/sound/pcm/mixer.c
sys/dev/sound/pcm/mixer.h
sys/dev/sound/pcm/mixer_if.m
sys/dev/sound/pcm/sndstat.c
sys/dev/sound/pcm/sound.c
sys/dev/sound/pcm/sound.h
sys/dev/sound/pcm/vchan.c
sys/dev/sound/pcm/vchan.h
sys/dev/sound/snd/Makefile [deleted file]
sys/dev/sound/usb/Makefile [deleted file]
sys/dev/sound/usb/uaudio.c
sys/dev/sound/usb/uaudio.h
sys/dev/sound/usb/uaudio_pcm.c
sys/dev/sound/usb/uaudioreg.h
sys/sys/bus.h
sys/sys/selinfo.h
sys/sys/soundcard.h
sys/tools/emu10k1-mkalsa.sh [new file with mode: 0644]

index 9c9b670..eff1daf 100644 (file)
@@ -1,6 +1,6 @@
 #      @(#)Makefile    8.1 (Berkeley) 6/18/93
 # $FreeBSD: src/share/man/man4/Makefile,v 1.83.2.66 2003/06/04 17:10:30 sam Exp $
-# $DragonFly: src/share/man/man4/Makefile,v 1.49 2006/12/14 16:21:34 swildner Exp $
+# $DragonFly: src/share/man/man4/Makefile,v 1.50 2007/01/04 21:47:00 corecode Exp $
 
 MAN=   aac.4 \
        acpi.4 \
@@ -204,6 +204,35 @@ MAN=       aac.4 \
        smbus.4 \
        smp.4 \
        sn.4 \
+       snd_ad1816.4 \
+       snd_als4000.4 \
+       snd_atiixp.4 \
+       snd_cmi.4 \
+       snd_cs4281.4 \
+       snd_csa.4 \
+       snd_ds1.4 \
+       snd_emu10k1.4 \
+       snd_emu10kx.4 \
+       snd_envy24.4 \
+       snd_envy24ht.4 \
+       snd_es137x.4 \
+       snd_ess.4 \
+       snd_fm801.4 \
+       snd_gusc.4 \
+       snd_hda.4 \
+       snd_ich.4 \
+       snd_maestro.4 \
+       snd_maestro3.4 \
+       snd_mss.4 \
+       snd_neomagic.4 \
+       snd_sbc.4 \
+       snd_solo.4 \
+       snd_spicds.4 \
+       snd_t4dwave.4 \
+       snd_uaudio.4 \
+       snd_via8233.4 \
+       snd_via82c686.4 \
+       snd_vibes.4 \
        snp.4 \
        spic.4 \
        splash.4 \
@@ -284,7 +313,7 @@ MLINKS+=lp.4 plip.4
 MLINKS+=mem.4 kmem.4
 MLINKS+=netintro.4 networking.4
 MLINKS+=pccbb.4 cbb.4
-MLINKS+=pcm.4 snd.4
+MLINKS+=pcm.4 sound.4
 MLINKS+=scsi.4 CAM.4
 MLINKS+=scsi.4 SCSI.4
 MLINKS+=scsi.4 cam.4
index c266ef5..8303bbd 100644 (file)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/share/man/man4/pcm.4,v 1.12.2.11 2002/12/12 19:53:32 trhodes Exp $
-.\" $DragonFly: src/share/man/man4/pcm.4,v 1.5 2006/05/26 19:39:39 swildner Exp $
+.\" $FreeBSD: src/share/man/man4/pcm.4,v 1.50 2006/11/29 17:07:02 joel Exp $
+.\" $DragonFly: src/share/man/man4/pcm.4,v 1.6 2007/01/04 21:47:00 corecode Exp $
 .\"
-.Dd June 3, 1998
-.Dt PCM 4
+.Dd November 29, 2006
+.Dt SOUND 4
 .Os
 .Sh NAME
+.Nm sound ,
 .Nm pcm ,
 .Nm snd
-.Nd FreeBSD PCM audio device driver
+.Nd
+.Fx
+PCM audio device infrastructure
 .Sh SYNOPSIS
-For a card with bridge driver support, and a PnP card:
+To compile this driver into the kernel, place the following line in your
+kernel configuration file:
+.Bd -ragged -offset indent
 .Cd "device pcm"
+.Ed
 .Pp
-For a card without bridge driver support, and a non-PnP card:
+For non-PnP sound cards:
+.Bd -literal -offset indent
 .Cd "device pcm0 at isa? port? irq 5 drq 1 flags 0x15"
+.Ed
 .Sh DESCRIPTION
 The
 .Nm
-driver provides support for PCM audio play and capture.
-This driver
-also supports various PCI and WSS/MSS compatible ISA sound cards, and
-AC97 mixer.
-True full duplex operation is available on most cards.
+driver provides support for
+.Tn PCM
+audio play and capture.
+This driver also supports various
+.Tn PCI ,
+.Tn ISA ,
+.Tn WSS/MSS
+compatible
+sound cards, AC97 mixer and High Definition Audio.
+Once the
+.Nm
+driver attaches, supported devices provide audio record and
+playback channels.
+The
+.Dx
+sound system provides dynamic mixing
+.Dq VCHAN
+and rate conversion
+.Dq soft formats .
+True full duplex operation is available on most sound cards.
 .Pp
-If your sound card is supported by a bridge driver,
+If the sound card is supported by a bridge driver, the
 .Nm
-driver works
-in conjunction with the bridge driver.
+driver works in conjunction with the bridge driver.
 .Pp
 Apart from the usual parameters, the flags field is used to specify
-the secondary DMA channel (generally used for capture in full duplex
-cards). Flags are set to 0 for cards not using a secondary DMA
+the secondary
+.Tn DMA
+channel (generally used for capture in full duplex cards).
+Flags are set to 0 for cards not using a secondary
+.Tn DMA
 channel, or to 0x10 + C to specify channel C.
 .Pp
-The driver works best with WSS/MSS cards, which have a very clean
-architecture and an orthogonal set of features.
-They also happen to be
-among the cheapest audio cards on the market.
-.Pp
 The driver does its best to recognize the installed hardware and drive
-it correctly, so that you don't have to give too many details in the
-kernel config files.
-For PCI and ISA PnP cards this is actually easy
+it correctly so the user is not required to add specific settings to
+the kernel config file.
+For
+.Tn PCI
+and
+.Tn ISA
+.Tn PnP
+cards this is actually easy
 since they identify themselves.
-For legacy ISA cards, the driver looks
-for MSS cards at addresses 0x530 and 0x604 (obviously, unless overridden
-in the kernel config file by specifying an address).
-.Sh IOCTL
-The driver supports most of the Voxware ioctls(), and most
-applications work unmodified (including popular mpeg players and linux
-binaries). A few
-differences exist (the most important one is the ability to use
-memory-mapped access to the audio buffers). As a consequence, some
-applications may need to be recompiled with a slightly modified
-audio module.
+For legacy
+.Tn ISA
+cards, the driver looks for
+.Tn MSS
+cards at addresses 0x530 and 0x604 (unless overridden
+in the kernel config file ) .
+.Ss Boot Variables
+In general, the module
+.Pa snd_foo
+corresponds to
+.Cd "device snd_foo"
+and can be
+loaded by the boot
+.Xr loader 8
+via
+.Xr loader.conf 5
+or from the command line using the
+.Xr kldload 8
+utility.
+Options which can be specified in
+.Pa /boot/loader.conf
+include:
+.Bl -tag -width ".Va snd_emu10k1_load" -offset indent
+.It Va snd_driver_load
+.Pq Dq Li NO
+If set to
+.Dq Li YES ,
+this option loads all available drivers.
+.It Va snd_emu10k1_load
+.Pq Dq Li NO
+If set to
+.Dq Li YES ,
+only the SoundBlaster 5.1 driver and dependent modules will be loaded.
+.It Va snd_foo_load
+.Pq Dq Li NO
+If set to
+.Dq Li YES ,
+load driver for card/chipset foo.
+.El
+.Ss VCHANs
+Each device can optionally support more playback channels
+than physical hardware provides by using
+.Dq virtual channels
+or
+.Tn VCHANs .
+.Tn VCHAN
+options can be configured via the
+.Xr sysctl 8
+interface but can only be manipulated while the device is inactive.
+.Ss Runtime Configuration
+There are a number of
+.Xr sysctl 8
+variables available.
+.Va hw.snd.*
+tunables are global settings and
+.Va dev.pcm.*
+are device specific.
+.Bl -tag -width ".Va hw.snd.report_soft_formats" -offset indent
+.It Va hw.snd.latency_profile
+Define sets of buffering latency conversion tables for the
+.Va hw.snd.latency
+tunable.
+A value of 0 will use a low and aggressive latency profile which can result
+in possible underruns if the application cannot keep up with a rapid irq
+rate, especially during high workload.
+The default value is 1, which is considered a moderate/safe latency profile.
+.It Va hw.snd.latency
+Configure the buffering latency.
+Only affects applications that do not explicitly request
+blocksize / fragments.
+This tunable provides finer granularity than the
+.Va hw.snd.latency_profile
+tunable.
+Possible values range between 0 (lowest latency) and 10 (highest latency).
+.It Va hw.snd.report_soft_formats
+Controls the internal format conversion if it is
+available transparently to the application software.
+When disabled or not available, the application will
+only be able to select formats the device natively supports.
+.It Va hw.snd.feeder_rate_round
+Sample rate rounding threshold, to avoid large prime division at the
+cost of accuracy.
+All requested sample rates will be rounded to the nearest threshold value.
+Possible values range between 0 (disabled) and 500.
+Default is 25.
+.It Va hw.snd.feeder_rate_max
+Maximum allowable sample rate.
+.It Va hw.snd.feeder_rate_min
+Minimum allowable sample rate.
+.It Va hw.snd.verbose
+Level of verbosity for the
+.Pa /dev/sndstat
+device.
+Higher values include more output and the highest level,
+four, should be used when reporting problems.
+Other options include:
+.Bl -tag -width 2n
+.It 0
+Installed devices and their allocated bus resources.
+.It 1
+The number of playback, record, virtual channels, and
+flags per device.
+.It 2
+Channel information per device including the channel's
+current format, speed, and pseudo device statistics such as
+buffer overruns and buffer underruns.
+.It 3
+File names and versions of the currently loaded sound modules.
+.It 4
+Various messages intended for debugging.
+.El
+.It Va hw.snd.maxautovchans
+Global
+.Tn VCHAN
+setting that only affects devices with only one playback channel available.
+The sound system will dynamically create up this many
+.Tn VCHANs .
+Set to
+.Dq 0
+if no
+.Tn VCHANS
+are desired.
+Maximum value is 255.
+.It Va hw.snd.default_unit
+Default sound card for systems with multiple sound cards.
+When using
+.Xr devfs 5 ,
+the default device for
+.Pa /dev/dsp .
+Equivalent to a symlink from
+.Pa /dev/dsp
+to
+.Pa /dev/dsp Ns Va ${hw.snd.default_unit} .
+.It Va dev.pcm.%d.vchans
+The current number of
+.Tn VCHANs
+allocated per device.
+This can be set to preallocate a certain number of
+.Tn VCHANs .
+Setting this value to
+.Dq 0
+will disable
+.Tn VCHANs
+for this device.
+.It Va dev.pcm.%d.vchanrate
+Sample rate speed for
+.Tn VCHAN
+mixing.
+All playback paths will be converted to this sample rate before the mixing
+process begins.
+.It Va dev.pcm.%d.vchanformat
+Format for
+.Tn VCHAN
+mixing.
+All playback paths will be converted to this format before the mixing
+process begins.
+.It Va dev.pcm.%d.polling
+Experimental polling mode support where the driver operates by querying the
+device state on each tick using a
+.Xr callout 9
+mechanism.
+Disabled by default and currently only available for a few device drivers.
+.El
+.Ss Recording Channels
+On devices that have more than one recording source (ie: mic and line),
+there is a corresponding
+.Pa /dev/dsp%d.r%d
+device.
+.Ss Statistics
+Channel statistics are only kept while the device is open.
+So with situations involving overruns and underruns, consider the output
+while the errant application is open and running.
+.Ss IOCTL Support
+The driver supports most of the
+.Tn OSS
+.Fn ioctl
+functions, and most applications work unmodified.
+A few differences exist, while memory mapped playback is
+supported natively and in
+.Tn Linux
+emulation, memory mapped recording is
+not due to
+.Tn VM
+system design.
+As a consequence, some applications may need to be recompiled
+with a slightly modified audio module.
 See
 .In sys/soundcard.h
-for a complete list of the supported ioctls.
-.Sh SUPPORTED CARDS
-Below we include a list of supported codecs/cards.
-If your sound card
-is not listed here, it may be supported by a bridge driver.
-.Bl -tag -width 2m
-.It CS4237, CS4236, CS4232, CS4231 (ISA)
-All these cards work perfectly in full duplex using the MSS mode.
-This chipset is used, among others, on the A/Open AW35 and AW32, on
-some Intel motherboards, and (the CS4231) on some non-PnP cards.
-.Pp
-The CS4232 is reported as buggy in the Voxware documentation but
-I am not sure if this is true.
-On one of my Intel motherboards,
-capture does not work simply because the capture DMA channel is
-not wired to the ISA DMA controller.
-.It Yamaha OPL-SAx (ISA)
-Works perfectly in all modes.
-This chip is used in several PnP cards,
-but also (in non-PnP mode) on motherboards and laptops (e.g. the
-Toshiba Libretto).
-.It OPTi931 (ISA)
-The chip is buggy, but the driver has many workarounds to make it work
-in full duplex because for some time these were the only full duplex
-cards I could find. u-law formats uses U8 format internally because of
-a bug in the chip.
-.It Trident 4DWave DX/NX (PCI)
-.It ENSONIQ AudioPCI ES1370/1371 (PCI)
-Creative Labs SoundBlaster PCI is supported as well.
-.It ESS Solo-1/1E (PCI)
-.It NeoMagic 256AV/ZX (PCI)
-.El
+for a complete list of the supported
+.Fn ioctl
+functions.
 .Sh FILES
-The following commonly used symbolic links to real device nodes
-should be present:
+The
+.Nm
+drivers may create the following
+device nodes:
 .Pp
-.Bl -tag -width /dev/sequencer -compact
-.It Pa /dev/audio
-Sparc-compatible audio device
-.It Pa /dev/dsp
-Digitized voice device
-.It Pa /dev/dspW
+.Bl -tag -width ".Pa /dev/audio%d.%d" -compact
+.It Pa /dev/audio%d.%d
+Sparc-compatible audio device.
+.It Pa /dev/dsp%d.%d
+Digitized voice device.
+.It Pa /dev/dspW%d.%d
 Like
 .Pa /dev/dsp ,
-but 16 bits per sample
-.It Pa /dev/midi
-Raw midi access device
-.It Pa /dev/mixer
-Control port mixer device
-.It Pa /dev/music
-Level 2 sequencer interface
-.It Pa /dev/sequencer
-Sequencer device
-.It Pa /dev/pss
-Programmable device interface
+but 16 bits per sample.
+.It Pa /dev/dsp%d.p%d
+Playback channel.
+.It Pa /dev/dsp%d.r%d
+Record channel.
+.It Pa /dev/dsp%d.v%d
+Virtual channel.
+.It Pa /dev/sndstat
+Current
+.Nm
+status, including all channels and drivers.
 .El
 .Pp
-Each symbolic link refers to a device node of the same name,
-but with a unit number appended.
-The unit number for each device matches the unit number of the
-device probed at boot time.
-Device probe messages can be examined with the
+The first number in the device node
+represents the unit number of the
+.Nm
+device.
+All
+.Nm
+devices are listed
+in
+.Pa /dev/sndstat .
+Additional messages are sometimes recorded when the
+device is probed and attached, these messages can be viewed with the
 .Xr dmesg 8
 utility.
-.Pp
-All the appropriate device nodes and symbolic links
-for the
-.Ql pcm0
-device can be created with the following commands:
-.Bd -literal -offset indent
-cd /dev; sh MAKEDEV snd0
-.Ed
-.Pp
-Similarly, the device nodes and symbolic links for the
-.Ql pcm1
-device would be created as follows:
-.Bd -literal -offset indent
-cd /dev; sh MAKEDEV snd1
-.Ed
-.Pp
-Since the
-.Pa /dev/MAKEDEV
-utility creates symbolic links that will be used by
-many utilities by default,
-the device nodes and symbolic links for the
-preferred audio device in systems with multiple audio devices
-should be created last.
-.Sh DIAGNOSTICS AND TROUBLESHOOTING
-.Bl -tag -width 2m
-.It ac97: dac not ready
-AC97 codec is not likely to be accompanied with the sound card.
+.Sh DIAGNOSTICS
+.Bl -diag
+.It pcm%d:play:%d:dsp%d.p%d: play interrupt timeout, channel dead
+The hardware does not generate interrupts to serve incoming (play)
+or outgoing (record) data.
 .It unsupported subdevice XX
 A device node is not created properly.
 .El
 .Sh SEE ALSO
-.Xr csa 4 ,
-.Xr gusc 4 ,
-.Xr sbc 4
+.Xr snd_ad1816 4 ,
+.Xr snd_als4000 4 ,
+.Xr snd_atiixp 4 ,
+.Xr snd_audiocs 4 ,
+.Xr snd_cmi 4 ,
+.Xr snd_cs4281 4 ,
+.Xr snd_csa 4 ,
+.Xr snd_ds1 4 ,
+.Xr snd_emu10k1 4 ,
+.Xr snd_emu10kx 4 ,
+.Xr snd_envy24 4 ,
+.Xr snd_envy24ht 4 ,
+.Xr snd_es137x 4 ,
+.Xr snd_ess 4 ,
+.Xr snd_fm801 4 ,
+.Xr snd_gusc 4 ,
+.Xr snd_hda 4 ,
+.Xr snd_ich 4 ,
+.Xr snd_maestro 4 ,
+.Xr snd_maestro3 4 ,
+.Xr snd_mss 4 ,
+.Xr snd_neomagic 4 ,
+.Xr snd_sbc 4 ,
+.Xr snd_solo 4 ,
+.Xr snd_spicds 4 ,
+.Xr snd_t4dwave 4 ,
+.Xr snd_uaudio 4 ,
+.Xr snd_via8233 4 ,
+.Xr snd_via82c686 4 ,
+.Xr snd_vibes 4 ,
+.Xr devfs 5 ,
+.Xr loader.conf 5 ,
+.Xr dmesg 8 ,
+.Xr kldload 8 ,
+.Xr sysctl 8
+.Rs
+.%T "The OSS API"
+.%O "http://www.opensound.com/pguide/oss.pdf"
+.Re
 .Sh HISTORY
 The
 .Nm
 device driver first appeared in
-.Fx 2.2.6 ,
+.Fx 2.2.6
+as
+.Nm pcm ,
+written by
+.An Luigi Rizzo .
+It was later
 rewritten in
-.Fx 4.0 .
+.Fx 4.0
+by
+.An Cameron Grant .
+The API evolved from the VOXWARE
+standard which later became OSS standard.
 .Sh AUTHORS
+.An -nosplit
 .An Luigi Rizzo Aq luigi@iet.unipi.it
 initially wrote the
-.Nm
+.Nm pcm
 device driver and this manual page.
 .An Cameron Grant Aq gandalf@vilnya.demon.co.uk
-totally revised the device driver.
+later revised the device driver for
+.Fx 4.0 .
 .An Seigo Tanimura Aq tanimura@r.dl.itc.u-tokyo.ac.jp
 revised this manual page.
+It was then rewritten for
+.Fx 5.2 .
 .Sh BUGS
-Some features of your cards (e.g. global volume control) might not
+Some features of your sound card (e.g., global volume control) might not
 be supported on all devices.
diff --git a/share/man/man4/snd_ad1816.4 b/share/man/man4/snd_ad1816.4
new file mode 100644 (file)
index 0000000..72802c2
--- /dev/null
@@ -0,0 +1,78 @@
+.\" Copyright (c) 2004 Atte Peltomaki
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_ad1816.4,v 1.6 2005/12/15 20:25:41 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_ad1816.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_AD1816 4
+.Os
+.Sh NAME
+.Nm snd_ad1816
+.Nd "Analog Devices AD1816 ISA bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_ad1816"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_ad1816_load="YES"
+.Ed
+.Pp
+Non-PnP cards require a setting in the kernel config file:
+.Bd -ragged -offset indent
+.Cd "device pcm0 at isa? port? irq 5 drq 1 flags 0x15"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to the AD1816 sound card.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+Analog Devices AD1816
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.0 .
+.Sh AUTHORS
+.An "Cameron Grant" Aq cg@FreeBSD.org
+.An "Luigi Rizzo" Aq luigi@FreeBSD.org
+.An "Hannu Savolainen"
diff --git a/share/man/man4/snd_als4000.4 b/share/man/man4/snd_als4000.4
new file mode 100644 (file)
index 0000000..4a36009
--- /dev/null
@@ -0,0 +1,71 @@
+.\" Copyright (c) 2004 Atte Peltomaki
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_als4000.4,v 1.7 2005/12/15 20:25:41 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_als4000.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_ALS4000 4
+.Os
+.Sh NAME
+.Nm snd_als4000
+.Nd "Avance Logic ALS4000 PCI bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_als4000"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_als4000_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to the ALS4000 sound card.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+Avance Logic ALS4000
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.4 .
+.Sh AUTHORS
+.An "Orion Hodson" Aq oho@acm.org
diff --git a/share/man/man4/snd_atiixp.4 b/share/man/man4/snd_atiixp.4
new file mode 100644 (file)
index 0000000..e424719
--- /dev/null
@@ -0,0 +1,100 @@
+.\" Copyright (c) 2005 Joel Dahl
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_atiixp.4,v 1.4 2006/11/29 17:07:02 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_atiixp.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd November 29, 2006
+.Dt SND_ATIIXP 4
+.Os
+.Sh NAME
+.Nm snd_atiixp
+.Nd "ATI IXP bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_atiixp"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_atiixp_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver,
+.Xr sound 4 ,
+to attach to ATI IXP audio devices.
+This driver supports 16bit playback and recording, and 32bit native playback
+and recording.
+.Ss Runtime Configuration
+The following
+.Xr sysctl 8
+variables are available in addition to those available to all
+.Xr sound 4
+devices:
+.Bl -tag -width ".Va dev.pcm.%d.polling" -offset indent
+.It Va dev.pcm.%d.polling
+Experimental polling mode, where the driver operates by querying the device
+state on each tick using
+.Xr callout 9 .
+Polling is disabled by default.
+Do not enable it unless you are facing weird interrupt problems or if the
+device cannot generate interrupts at all.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following audio chipsets:
+.Pp
+.Bl -bullet -compact
+.It
+ATI IXP 200
+.It
+ATI IXP 300
+.It
+ATI IXP 400
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 6.1 .
+.Sh AUTHORS
+This manual page was written by
+.An Joel Dahl Aq joel@FreeBSD.org .
+.Sh BUGS
+The
+.Nm
+driver
+does not support S/PDIF, but implementing it should be fairly easy if the
+right hardware is available.
+.Pp
+32bit native recording is broken on some hardware.
diff --git a/share/man/man4/snd_cmi.4 b/share/man/man4/snd_cmi.4
new file mode 100644 (file)
index 0000000..45264f0
--- /dev/null
@@ -0,0 +1,77 @@
+.\" Copyright (c) 2004 Atte Peltomaki
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_cmi.4,v 1.7 2005/12/15 20:25:41 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_cmi.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_CMI 4
+.Os
+.Sh NAME
+.Nm snd_cmi
+.Nd "CMedia CMI8338/CMI8738 PCI bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_cmi"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_cmi_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to the CMedia CMI8338/CMI8738 audio cards.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+CMedia CMI8338A
+.It
+CMedia CMI8338B
+.It
+CMedia CMI8738
+.It
+CMedia CMI8738B
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.3 .
+.Sh AUTHORS
+.An "Orion Hodson" Aq O.Hodson@cs.ucl.ac.uk
diff --git a/share/man/man4/snd_cs4281.4 b/share/man/man4/snd_cs4281.4
new file mode 100644 (file)
index 0000000..283184e
--- /dev/null
@@ -0,0 +1,71 @@
+.\" Copyright (c) 2004 Atte Peltomaki
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_cs4281.4,v 1.6 2005/12/15 20:25:41 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_cs4281.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_CS4281 4
+.Os
+.Sh NAME
+.Nm snd_cs4281
+.Nd "Crystal Semiconductor CS4281 PCI bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_cs4281"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_cs4281_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to the CS4281 sound card.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+Crystal Semiconductor CS4281
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.3 .
+.Sh AUTHORS
+.An "Orion Hodson" Aq O.Hodson@cs.ucl.ac.uk
diff --git a/share/man/man4/snd_csa.4 b/share/man/man4/snd_csa.4
new file mode 100644 (file)
index 0000000..dee25fd
--- /dev/null
@@ -0,0 +1,99 @@
+.\"
+.\" Copyright (c) 1999 Seigo Tanimura
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_csa.4,v 1.16 2006/06/18 17:53:04 brueffer Exp $
+.\" $DragonFly: src/share/man/man4/snd_csa.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_CSA 4
+.Os
+.Sh NAME
+.Nm snd_csa
+.Nd Crystal Semiconductor CS461x/462x/4280 PCI bridge device driver
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_csa"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_csa_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to Crystal Semiconductor CS461x/462x/4280 based sound cards.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+Crystal Semiconductor CS4280
+.It
+Crystal Semiconductor CS4610
+.It
+Crystal Semiconductor CS4611
+.It
+Crystal Semiconductor CS4614
+.It
+Crystal Semiconductor CS4615
+.It
+Crystal Semiconductor CS4622
+.It
+Crystal Semiconductor CS4624
+.It
+Crystal Semiconductor CS4630
+.It
+Genius Soundmaker 128 Value
+.It
+Hercules Game Theatre XP
+.It
+Turtle Beach Santa Cruz
+.El
+.Pp
+Some onboard CS4610 chips are accompanied by the CS423x ISA codec
+instead of the CS4297 AC97 codec.
+Such configurations are not
+supported by the
+.Nm
+driver yet.
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.0 .
+.Sh AUTHORS
+.An Seigo Tanimura Aq tanimura@r.dl.itc.u-tokyo.ac.jp
diff --git a/share/man/man4/snd_ds1.4 b/share/man/man4/snd_ds1.4
new file mode 100644 (file)
index 0000000..5dab181
--- /dev/null
@@ -0,0 +1,73 @@
+.\" Copyright (c) 2004 Atte Peltomaki
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_ds1.4,v 1.6 2005/12/15 20:25:41 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_ds1.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_DS1 4
+.Os
+.Sh NAME
+.Nm snd_ds1
+.Nd "Yamaha DS-1 PCI bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_ds1"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_ds1_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to the Yamaha DS-1 sound card.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+Yamaha DS-1
+.It
+Yamaha DS-1E
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.1 .
+.Sh AUTHORS
+.An "Cameron Grant" Aq cg@FreeBSD.org
diff --git a/share/man/man4/snd_emu10k1.4 b/share/man/man4/snd_emu10k1.4
new file mode 100644 (file)
index 0000000..0dc0be0
--- /dev/null
@@ -0,0 +1,83 @@
+.\" Copyright (c) 2004 Atte Peltomaki
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_emu10k1.4,v 1.8 2005/12/15 20:25:41 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_emu10k1.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_EMU10K1 4
+.Os
+.Sh NAME
+.Nm snd_emu10k1
+.Nd "SoundBlaster Live! and Audigy PCI bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_emu10k1"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_emu10k1_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to the SoundBlaster Live!\& and Audigy audio cards.
+.Pp
+Digital output is supported by default.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+Creative SoundBlaster Live!\& (EMU10K1 Chipset)
+.It
+Creative SoundBlaster Audigy (EMU10K2 Chipset)
+.It
+Creative SoundBlaster Audigy 2 (EMU10K2 Chipset)
+.It
+Creative SoundBlaster Audigy 2 (EMU10K3 Chipset)
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.1 .
+.Sh AUTHORS
+.An "David O'Brien" Aq obrien@FreeBSD.org
+.An "Orlando Bassotto" Aq orlando.bassotto@ieo-research.it
+.An "Cameron Grant" Aq cg@FreeBSD.org
+.Sh BUGS
+Fancy features like DD5.1 output are not supported.
diff --git a/share/man/man4/snd_emu10kx.4 b/share/man/man4/snd_emu10kx.4
new file mode 100644 (file)
index 0000000..71263fb
--- /dev/null
@@ -0,0 +1,218 @@
+.\"
+.\" Copyright (c) 2003,2006 Yuriy Tsibizov,
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $Id: snd_emu10kx.4,v 1.19 2006/06/07 11:18:57 chibis Exp $
+.\" $FreeBSD: src/share/man/man4/snd_emu10kx.4,v 1.4 2006/12/14 16:40:57 mpp Exp $
+.\" $DragonFly: src/share/man/man4/Attic/snd_emu10kx.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd July 15, 2006
+.Dt SND_EMU10KX 4
+.Os
+.Sh NAME
+.Nm snd_emu10kx
+.Nd Creative SoundBlaster Live! and Audigy sound cards device driver
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_emu10kx"
+.Pp
+For additional options:
+.Cd "options EMU10KX_MULTICHANNEL"
+.Cd "options EMU10KX_DEBUG"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_emu10kx_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to the Creative sound cards based on EMU10K1, CA0100, CA0101, CA0102
+and CA0108 DSPs.
+.Pp
+The
+.Nm
+sound cards have a PCM part, which is accessible through one to five
+.Xr pcm 4
+devices (see
+.Sx MULTICHANNEL PLAYBACK
+for details), and MPU401-compatible MIDI I/O controller, which is accessible
+through the midi device.
+Wave table synthesizer is not supported.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+Creative Sound Blaster Live!\& (EMU10K1 Chipset).
+Both PCM and MIDI interfaces are available.
+.It
+Creative Sound Blaster Audigy (CA0100 and CA0101 Chipset).
+PCM and two MIDI interfaces available.
+.It
+Creative Sound Blaster Audigy 2 and Creative Sound Blaster Audigy 4 (CA0102
+Chipset).
+PCM support is limited to 48kHz/16 bit stereo (192kHz/24 bit part
+of this chipset is not supported).
+.It
+Creative Sound Blaster Audigy 2 Value (CA0108 Chipset).
+PCM support is limited
+to 48kHz/16 bit stereo (192kHz/24 bit part of this chipset is not supported).
+There is no MIDI support for this card.
+.El
+.Pp
+The
+.Nm
+driver does
+.Em not
+support the following sound cards (although they are named
+similar to some supported ones):
+.Pp
+.Bl -bullet -compact
+.It
+Creative Sound Blaster Live!\& 24-Bit, identified by
+.Fx
+as
+.Qq Li "emu10k1x Soundblaster Live! 5.1" .
+.It
+Creative Sound Blaster Audigy LS / ES, identified by
+.Fx
+as
+.Qq Li "CA0106-DAT Audigy LS" .
+.It
+All other cards with -DAT chipsets.
+.El
+.Sh MULTICHANNEL PLAYBACK
+It is possible to build this driver with multichannel playback capabilities.
+If you enable the
+.Dv EMU10KX_MULTICHANNEL
+option in your kernel configuration (or
+build it as a module) you will get up to five DSP devices, one for each sound
+card output.
+Only
+.Dq FRONT
+output can play and record sound from external
+sources (like line or S/PDIF inputs).
+.Sh OSS MIXER CONTROLS
+These are controls available through the standard OSS programming interface.
+You can use
+.Xr mixer 8
+to change them.
+.Pp
+On EMU10K1-based cards the OSS mixer directly controls the AC97 codec on card.
+On newer cards the OSS mixer controls some parameters of the AC97 codec and
+some DSP-based mixer controls.
+.Bl -inset
+.It Qq vol
+mixer control is overall sound volume.
+.It Qq pcm
+mixer control is PCM playback volume.
+It controls only front output
+volume in multichannel mode and all output volume in single channel mode.
+.It Qq rec
+mixer control acts very different on EMU10K1 and other cards.
+On EMU10K1 cards it controls the AC97 codec recording level.
+On non-EMU10K1 cards
+it controls the amount of AC97 "stereo mix" entering the DSP.
+AC97 recording level and AC97 recording source are fixed
+on CA0100, CA0101, CA0102 and CA0108 cards.
+AC97 recording level are always set to
+maximum and recording source is always
+.Dq Li "stereo mix" .
+.El
+.Pp
+Other OSS mixer controls do not work.
+.Sh PRIVATE DEVICE CONTROLS
+You can control most of EMU10Kx operation and configuration parameters through
+.Va dev.emu10kx. Ns Aq Ar X
+sysctls.
+These
+.Xr sysctl 8
+values are temporary and should not be relied
+upon.
+.Sh DRIVER CONFIGURATION
+.Ss Kernel Configuration Options
+The following kernel configuration options control the
+.Nm
+driver.
+.Bl -tag -width ".Dv EMU10KX_MULTICHANNEL"
+.It Dv EMU10KX_MULTICHANNEL
+This option enables
+.Sx MULTICHANNEL PLAYBACK
+for all instances of the
+.Nm
+driver.
+.It Dv EMU10KX_DEBUG
+This option enables additional debug messages.
+.El
+.Sh FILES
+.Bl -tag -width ".Pa /dev/emu10kx?" -compact
+.It Pa /dev/emu10kx?
+.Nm
+management interface
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 7.0 .
+.Sh AUTHORS
+.An -nosplit
+The PCM part of the driver is based on the
+.Xr snd_emu10k1 4
+SB Live!\& driver by
+.An "Cameron Grant" .
+The MIDI interface is based on the
+.Xr snd_emu10k1 4
+MIDI interface code by
+.An "Mathew Kanner" .
+The
+.Nm
+device driver and this manual page were written by
+.An Yuriy Tsibizov .
+.Sh BUGS
+8kHz/8bit/mono recording does not work.
+8kHz recording was removed from the driver capabilities.
+.Pp
+The driver does not detect lost S/PDIF signal and produces noise when S/PDIF
+is not connected and S/PDIF volume is not zero.
+.Pp
+The PCM driver cannot detect the presence of Live!Drive or AudigyDrive
+breakout boxes
+and tries to use them (and list their connectors in the mixer).
+.Pp
+The MIDI driver cannot detect the presence of Live!Drive or AudigyDrive
+breakout boxes and tries to enable the IR receiver on them anyway.
diff --git a/share/man/man4/snd_envy24.4 b/share/man/man4/snd_envy24.4
new file mode 100644 (file)
index 0000000..88fdd75
--- /dev/null
@@ -0,0 +1,83 @@
+.\" Copyright (c) 2006 Alexander Leidinger
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_envy24.4,v 1.3 2006/09/30 17:19:22 netchild Exp $
+.\" $DragonFly: src/share/man/man4/snd_envy24.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd September 30, 2006
+.Dt SND_ENVY24 4
+.Os
+.Sh NAME
+.Nm snd_envy24
+.Nd "VIA Envy24 and compatible bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_envy24"
+.Cd "device snd_spicds"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_envy24_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to VIA Envy24 (ICE1724 or VT1724 chipset) and compatible audio
+devices.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following audio devices:
+.Pp
+.Bl -bullet -compact
+.It
+M-Audio Audiophile 2496
+.It
+M-Audio Delta Dio 2496
+.It
+Terratec DMX 6fire
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 7.0 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Katsurajima Naoto .
+This manual page was written by
+.An Alexander Leidinger Aq netchild@FreeBSD.org .
diff --git a/share/man/man4/snd_envy24ht.4 b/share/man/man4/snd_envy24ht.4
new file mode 100644 (file)
index 0000000..2687169
--- /dev/null
@@ -0,0 +1,100 @@
+.\" Copyright (c) 2006 Alexander Leidinger
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_envy24ht.4,v 1.1 2006/09/30 18:04:57 netchild Exp $
+.\" $DragonFly: src/share/man/man4/snd_envy24ht.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd September 30, 2006
+.Dt SND_ENVY24HT 4
+.Os
+.Sh NAME
+.Nm snd_envy24ht
+.Nd "VIA Envy24HT and compatible bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_envy24ht"
+.Cd "device snd_spicds"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_envy24ht_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to VIA Envy24HT (ICE1724 or VT1724 chipset) and compatible audio
+devices.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following audio devices:
+.Pp
+.Bl -bullet -compact
+.It
+Audiotrak Prodigy 7.1
+.It
+Audiotrak Prodigy 7.1 LT
+.It
+M-Audio Audiophile 192
+.It
+M-Audio Revolution 5.1
+.It
+M-Audio Revolution 7.1
+.It
+Terratec Aureon 5.1 Sky
+.It
+Terratec Aureon 7.1 Space
+.It
+Terratec Aureon 7.1 Universe
+.It
+Terratec PHASE 22
+.It
+Terratec PHASE 28
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 7.0 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Konstantin Dimitrov
+based upon the
+.Xr snd_envy24 4
+driver.
+This manual page was written by
+.An Alexander Leidinger Aq netchild@FreeBSD.org .
diff --git a/share/man/man4/snd_es137x.4 b/share/man/man4/snd_es137x.4
new file mode 100644 (file)
index 0000000..66d1b5f
--- /dev/null
@@ -0,0 +1,118 @@
+.\" Copyright (c) 2004 Atte Peltomaki
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_es137x.4,v 1.9 2006/11/29 17:07:02 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_es137x.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd November 29, 2006
+.Dt SND_ES137X 4
+.Os
+.Sh NAME
+.Nm snd_es137x
+.Nd "Ensoniq AudioPCI ES137x bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_es137x"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_es137x_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to the Ensoniq 137x audio cards.
+.Ss Runtime Configuration
+The following
+.Xr sysctl 8
+variables are available in addition to those available to all
+.Xr sound 4
+devices:
+.Bl -tag -width ".Va hw.snd.pcm%d.latency_timer" -offset indent
+.It Va hw.snd.pcm%d.latency_timer
+Controls the PCI latency timer setting.
+Increasing this value will solve most popping and crackling issues
+(especially on VIA motherboards).
+.It Va hw.snd.pcm%d.spdif_enabled
+Enables S/PDIF output on the primary playback channel.
+This
+.Xr sysctl 8
+variable is available only if the device is known to support S/PDIF output.
+.It Va dev.pcm.%d.polling
+Experimental polling mode, where the driver operates by querying the device
+state on each tick using
+.Xr callout 9 .
+Polling is disabled by default.
+Do not enable it unless you are facing weird interrupt problems or if the
+device cannot generate interrupts at all.
+.El
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+Creative CT5880-A
+.It
+Creative CT5880-C
+.It
+Creative CT5880-D
+.It
+Creative CT5880-E
+.It
+Creative SB AudioPCI CT4730
+.It
+Ensoniq AudioPCI ES1370
+.It
+Ensoniq AudioPCI ES1371-A
+.It
+Ensoniq AudioPCI ES1371-B
+.It
+Ensoniq AudioPCI ES1373-A
+.It
+Ensoniq AudioPCI ES1373-B
+.It
+Ensoniq AudioPCI ES1373-8
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.0 .
+.Sh AUTHORS
+.An "Russell Cattelan" Aq cattelan@thebarn.com
+.An "Cameron Grant" Aq cg@FreeBSD.org
+.An "Joachim Kuebart"
+.An "Jonathan Noack" Aq noackjr@alumni.rice.edu
diff --git a/share/man/man4/snd_ess.4 b/share/man/man4/snd_ess.4
new file mode 100644 (file)
index 0000000..3ecebd6
--- /dev/null
@@ -0,0 +1,73 @@
+.\" Copyright (c) 2004 Atte Peltomaki
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_ess.4,v 1.7 2005/12/15 20:25:41 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_ess.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_ESS 4
+.Os
+.Sh NAME
+.Nm snd_ess
+.Nd "Ensoniq ESS ISA PnP/non-PnP bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_ess"
+.Cd "device snd_sbc"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_ess_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to the ESS ISA sound cards.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+Ensoniq ESS ISA PnP/non-PnP
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.1 .
+.Sh AUTHORS
+.An "Cameron Grant" Aq cg@FreeBSD.org
+.An "Luigi Rizzo" Aq luigi@FreeBSD.org
diff --git a/share/man/man4/snd_fm801.4 b/share/man/man4/snd_fm801.4
new file mode 100644 (file)
index 0000000..19ad3d4
--- /dev/null
@@ -0,0 +1,79 @@
+.\" Copyright (c) 2005 Joel Dahl
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_fm801.4,v 1.3 2005/12/01 12:58:50 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_fm801.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 1, 2005
+.Dt SND_FM801 4
+.Os
+.Sh NAME
+.Nm snd_fm801
+.Nd "Forte Media FM801 bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_fm801"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_fm801_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver,
+.Xr sound 4 ,
+to attach audio devices based on the Forte Media FM801 chipset.
+This is a common chipset found in various parts used by OEM manufacturers.
+.Sh HARDWARE
+The
+.Nm
+driver supports audio devices based on the following chipset:
+.Pp
+.Bl -bullet -compact
+.It
+Forte Media FM801
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.2 .
+.Sh AUTHORS
+This manual page was written by
+.An Joel Dahl Aq joel@FreeBSD.org .
+.Sh BUGS
+The Forte Media FM801 chipset is a sort of PCI bridge, not an actual
+sound controller, making it possible to have soundless support.
+One problem is that both chipsets, with and without sound support, use the
+same PCI ID.
+This makes it impossible to determine which one is installed.
diff --git a/share/man/man4/snd_gusc.4 b/share/man/man4/snd_gusc.4
new file mode 100644 (file)
index 0000000..5304730
--- /dev/null
@@ -0,0 +1,86 @@
+.\"
+.\" Copyright (c) 1999 Seigo Tanimura
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_gusc.4,v 1.14 2006/06/18 17:53:04 brueffer Exp $
+.\" $DragonFly: src/share/man/man4/snd_gusc.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_GUSC 4
+.Os
+.Sh NAME
+.Nm snd_gusc
+.Nd Gravis UltraSound ISA bridge device driver
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_gusc"
+.Ed
+.Pp
+Non-PnP cards require a setting in the kernel config file:
+.Bd -literal -offset indent
+.Cd "device pcm0 at isa? port? irq 5 drq 1 flags 0x15"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to Gravis UltraSound sound cards.
+.Pp
+The value of flags specifies the secondary DMA channel.
+If the secondary
+DMA channel is C, set the flags to (C | 0x10).
+For a sound card without the
+secondary DMA channel, the flags should be set to zero.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+Gravis UltraSound MAX
+.It
+Gravis UltraSound PnP
+.El
+.Sh DIAGNOSTICS
+.Bl -diag
+.It xxx: gus pcm not attached, out of memory
+There are not enough memory to drive the device.
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.0 .
+.Sh AUTHORS
+.An Ville-Pertti Keinonen Aq will@iki.fi
+.An Seigo Tanimura Aq tanimura@r.dl.itc.u-tokyo.ac.jp
+.Sh BUGS
+Recording pcm sound data is not supported yet.
diff --git a/share/man/man4/snd_hda.4 b/share/man/man4/snd_hda.4
new file mode 100644 (file)
index 0000000..7b2de8c
--- /dev/null
@@ -0,0 +1,195 @@
+.\" Copyright (c) 2006 Joel Dahl <joel@FreeBSD.org>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_hda.4,v 1.5 2006/12/17 16:48:26 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_hda.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 17, 2006
+.Dt SND_HDA 4
+.Os
+.Sh NAME
+.Nm snd_hda
+.Nd "Intel High Definition Audio bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_hda"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_hda_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge device driver allows the generic audio driver,
+.Xr sound 4 ,
+to attach to Intel High Definition Audio devices.
+The
+.Nm
+driver supports hardware that conforms with revision 1.0 of the Intel High
+Definition Audio specification and tries to behave much like the Microsoft
+Universal Audio Architecture (UAA) draft (revision 0.7b) for handling audio
+devices.
+HDA acts like a primary bus, similar to
+.Xr miibus 4 ,
+for handling various child buses such as audio, modem and HDMI (High Definition
+Multimedia Interface).
+Only audio is implemented in the
+.Nm
+driver.
+.Pp
+The High Definition (HD) Audio specification was developed by Intel as the
+logical successor of the old AC'97 specification and has several advantages,
+such as higher bandwidth which allows more channels and more detailed formats,
+support for several logical audio devices, and general purpose DMA channels.
+.Pp
+The HDA specification defines the register-level interface, physical link
+characteristics, codec programming models, and codec architectural components.
+This specification is intended for both device driver developers and hardware
+component designers.
+.Ss Runtime Configuration
+The following
+.Xr sysctl 8
+variables are available in addition to those available to all
+.Xr sound 4
+devices:
+.Bl -tag -width ".Va dev.pcm.%d.polling" -offset indent
+.It Va dev.pcm.%d.polling
+Experimental polling mode, where the driver operates by querying the device
+state on each tick using
+.Xr callout 9 .
+Polling is disabled by default.
+Do not enable it unless you are facing weird interrupt problems or if the
+device cannot generate interrupts at all.
+.El
+.Sh HARDWARE
+The
+.Nm
+driver supports the following audio chipsets:
+.Pp
+.Bl -bullet -compact
+.It
+ATI SB450
+.It
+ATI SB600
+.It
+Intel 631x/632xESB
+.It
+Intel 82801F
+.It
+Intel 82801G
+.It
+Intel 82801H
+.It
+nVidia MCP51
+.It
+nVidia MCP55
+.It
+nVidia MCP61A
+.It
+nVidia MCP61B
+.It
+nVidia MCP65A
+.It
+nVidia MCP65B
+.It
+SiS 966
+.It
+VIA VT8251/8237A
+.El
+.Pp
+Generic Audio chipsets compatible with the Intel HDA specification should work,
+but have not been verified yet.
+The following codecs have been verified to work:
+.Pp
+.Bl -bullet -compact
+.It
+Analog Device AD1981HD
+.It
+Analog Device AD1983
+.It
+Analog Device AD1986A
+.It
+CMedia CMI9880
+.It
+Conexant Venice
+.It
+Conexant Waikiki
+.It
+Realtek ALC260
+.It
+Realtek ALC861
+.It
+Realtek ALC880
+.It
+Realtek ALC882
+.It
+Realtek ALC883
+.It
+Realtek ALC888
+.It
+Sigmatel STAC9220
+.It
+Sigmatel STAC9220D/9223D
+.It
+Sigmatel STAC9221
+.It
+Sigmatel STAC9221D
+.It
+Sigmatel STAC9227
+.El
+.Sh SEE ALSO
+.Xr sound 4 ,
+.Xr loader.conf 5
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 7.0 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Stephane E. Potvin Aq sepotvin@videotron.ca
+and
+.An Ariff Abdullah Aq ariff@FreeBSD.org .
+This manual page was written by
+.An Joel Dahl Aq joel@FreeBSD.org .
+.Sh BUGS
+There are a couple of missing features, such as support for Digital
+S/PDIF and multichannel output.
+.Pp
+A few Hardware/OEM vendors tend to screw up BIOS settings, thus
+rendering the
+.Nm
+driver useless, which usually results in a state where the
+.Nm
+driver seems to attach and work, but without any sound.
diff --git a/share/man/man4/snd_ich.4 b/share/man/man4/snd_ich.4
new file mode 100644 (file)
index 0000000..8362991
--- /dev/null
@@ -0,0 +1,106 @@
+.\" Copyright (c) 2004 Jorge Mario G. Mazo
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_ich.4,v 1.9 2006/06/18 17:53:04 brueffer Exp $
+.\" $DragonFly: src/share/man/man4/snd_ich.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_ICH 4
+.Os
+.Sh NAME
+.Nm snd_ich
+.Nd "Intel ICH PCI and compatible bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_ich"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_ich_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to Intel ICH and compatible audio devices.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following audio devices:
+.Pp
+.Bl -bullet -compact
+.It
+AMD 768
+.It
+AMD 8111
+.It
+Intel 443MX
+.It
+Intel ICH
+.It
+Intel ICH revision 1
+.It
+Intel ICH2
+.It
+Intel ICH3
+.It
+Intel ICH4
+.It
+Intel ICH5
+.It
+Intel ICH6
+.It
+Intel ICH7
+.It
+NVIDIA nForce
+.It
+NVIDIA nForce2
+.It
+NVIDIA nForce2 400
+.It
+NVIDIA nForce3
+.It
+NVIDIA nForce3 250
+.It
+NVIDIA nForce4
+.It
+SiS 7012
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.2 .
+.Sh AUTHORS
+This manual page was written by
+.An Jorge Mario G. Mazo Aq jgutie11@eafit.edu.co .
diff --git a/share/man/man4/snd_maestro.4 b/share/man/man4/snd_maestro.4
new file mode 100644 (file)
index 0000000..3f6ac2e
--- /dev/null
@@ -0,0 +1,79 @@
+.\" Copyright (c) 2004 Jorge Mario G. Mazo
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_maestro.4,v 1.3 2005/12/15 20:25:41 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_maestro.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_MAESTRO 4
+.Os
+.Sh NAME
+.Nm snd_maestro
+.Nd "ESS Maestro bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_maestro"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_maestro_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to ESS Maestro based sound chips.
+This chipset is very popular in notebook computers, but it is
+also very used in a wide selection of cheap OEM sound cards.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following PCI sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+ESS Technology Maestro-1
+.It
+ESS Technology Maestro-2
+.It
+ESS Technology Maestro-2E
+.El
+.Sh SEE ALSO
+.Xr snd_maestro3 4 ,
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.2 .
+.Sh AUTHORS
+This manual page was written by
+.An Jorge Mario G. Mazo Aq jgutie11@eafit.edu.co .
diff --git a/share/man/man4/snd_maestro3.4 b/share/man/man4/snd_maestro3.4
new file mode 100644 (file)
index 0000000..fb8729d
--- /dev/null
@@ -0,0 +1,89 @@
+.\" Copyright (c) 2001 Scott Long
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_maestro3.4,v 1.9 2006/01/09 12:51:45 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_maestro3.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_MAESTRO3 4
+.Os
+.Sh NAME
+.Nm snd_maestro3
+.Nd "ESS Maestro3/Allegro-1 bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_maestro3"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_maestro3_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for the ESS Maestro3 and Allegro-1 sound chips
+under the PCM framework.
+These chips are mostly found in laptop computers and feature an AC97 mixer,
+a multi-channel sample rate converter that can mix up to four digital audio
+streams in hardware, recording support, and external volume control buttons.
+.Pp
+The firmware for the sound processor is licensed under the GNU Public
+License, and thus this driver is not included in the default
+.Pa GENERIC
+kernel.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following audio devices:
+.Pp
+.Bl -bullet -compact
+.It
+ESS Technology Allegro-1
+.It
+ESS Technology Maestro3
+.El
+.Sh DIAGNOSTICS
+The hardware volume control buttons can be connected to two different pin
+sets (GPIO or GD) on the chip, depending on the manufacturer.
+The driver has no way of determining this configuration, so a hint may be
+used to override the default guess.
+The default setting for hardware volume control assumes that GD pins
+are wired to control the hardware volume.
+.Sh SEE ALSO
+.Xr sound 4 ,
+.Xr loader.conf 5
+.Sh HISTORY
+The
+.Nm
+driver first appeared in
+.Fx 4.3 .
+.Sh AUTHORS
+.An Scott Long Aq scottl@FreeBSD.org
+.An Darrel Anderson Aq anderson@cs.duke.edu
diff --git a/share/man/man4/snd_mss.4 b/share/man/man4/snd_mss.4
new file mode 100644 (file)
index 0000000..420a465
--- /dev/null
@@ -0,0 +1,113 @@
+.\" Copyright (c) 2005 Joel Dahl
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_mss.4,v 1.3 2005/12/01 12:58:50 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_mss.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 1, 2005
+.Dt SND_MSS 4
+.Os
+.Sh NAME
+.Nm snd_mss
+.Nd "Microsoft Sound System ISA PnP/non-PnP bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_mss"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_mss_load="YES"
+.Ed
+.Pp
+Non-PnP cards require a setting in the kernel config file:
+.Bd -literal -offset indent
+.Cd "device pcm0 at isa? port? irq 5 drq 1 flags 0x15"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver,
+.Xr sound 4 ,
+to attach to the supported audio devices.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following audio devices:
+.Pp
+.Bl -bullet -compact
+.It
+AD1845
+.It
+AD1848
+.It
+Aztech 2320
+.It
+CMedia CMI8330
+.It
+Crystal Semiconductor CS4231
+.It
+Crystal Semiconductor CS4232
+.It
+Crystal Semiconductor CS4234
+.It
+Crystal Semiconductor CS4235
+.It
+Crystal Semiconductor CS4236
+.It
+Crystal Semiconductor CS4237
+.It
+ENSONIQ SoundscapeVIVO ENS4081
+.It
+NeoMagic 256AV (non-AC97)
+.It
+OPTi 924
+.It
+OPTi 925
+.It
+OPTi 930
+.It
+OPTi 931
+.It
+OPTi 933
+.It
+Yamaha OPL-SA2
+.It
+Yamaha OPL-SA3
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 2.2.6 .
+.Sh AUTHORS
+This manual page was written by
+.An Joel Dahl Aq joel@FreeBSD.org .
diff --git a/share/man/man4/snd_neomagic.4 b/share/man/man4/snd_neomagic.4
new file mode 100644 (file)
index 0000000..06ed47b
--- /dev/null
@@ -0,0 +1,75 @@
+.\" Copyright (c) 2005 Joel Dahl
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_neomagic.4,v 1.5 2005/12/01 12:58:50 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_neomagic.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 1, 2005
+.Dt SND_NEOMAGIC 4
+.Os
+.Sh NAME
+.Nm snd_neomagic
+.Nd "NeoMagic 256AV/ZX bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_neomagic"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_neomagic_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver,
+.Xr sound 4 ,
+to attach to the NeoMagic 256AV/ZX audio devices.
+These chips are mostly found in laptop computers.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following audio devices:
+.Pp
+.Bl -bullet -compact
+.It
+NeoMagic 256AV
+.It
+NeoMagic 256ZX
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.0 .
+.Sh AUTHORS
+This manual page was written by
+.An Joel Dahl Aq joel@FreeBSD.org .
diff --git a/share/man/man4/snd_sbc.4 b/share/man/man4/snd_sbc.4
new file mode 100644 (file)
index 0000000..837f407
--- /dev/null
@@ -0,0 +1,121 @@
+.\"
+.\" Copyright (c) 1999 Seigo Tanimura
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_sbc.4,v 1.17 2006/06/18 17:53:04 brueffer Exp $
+.\" $DragonFly: src/share/man/man4/snd_sbc.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_SBC 4
+.Os
+.Sh NAME
+.Nm snd_sbc
+.Nd Creative Sound Blaster ISA and compatible bridge device driver
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_sbc"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_sbc_load="YES"
+.Ed
+.Pp
+Non-PnP cards require a setting in the kernel config file:
+.Bd -literal -offset indent
+.Cd "device pcm0 at isa? port? irq 5 drq 1 flags 0x15"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to Creative Sound Blaster ISA compatible audio cards.
+.Pp
+The value of flags specifies the secondary DMA channel.
+If the secondary
+DMA channel is C, set the flags to (C | 0x10).
+For a sound card without the
+secondary DMA channel, the flags should be set to zero.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+Avance Asound 110
+.It
+Avance Logic ALS100+
+.It
+Avance Logic ALS120
+.It
+Creative SB16
+.It
+Creative SB32
+.It
+Creative AWE64
+.It
+Creative AWE64 Gold
+.It
+Creative ViBRA16C
+.It
+Creative ViBRA16X
+.It
+ESS ES1681
+.It
+ESS ES1688
+.It
+ESS ES1868
+.It
+ESS ES1869
+.It
+ESS ES1878
+.It
+ESS ES1879
+.It
+ESS ES1888
+.El
+.Sh DIAGNOSTICS
+.Bl -diag
+.It sb_dspwr(XX) timed out.
+A command to the DSP has timed out.
+Check the I/O port configuration.
+.It bad irq XX (5/7/9/10 valid)
+The IRQ given to the driver is not valid.
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.0 .
+.Sh AUTHORS
+.An Seigo Tanimura Aq tanimura@r.dl.itc.u-tokyo.ac.jp
diff --git a/share/man/man4/snd_solo.4 b/share/man/man4/snd_solo.4
new file mode 100644 (file)
index 0000000..0640198
--- /dev/null
@@ -0,0 +1,67 @@
+.\" Copyright (c) 2004 Atte Peltomaki
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_solo.4,v 1.5 2005/11/28 18:47:00 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_solo.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd November 28, 2005
+.Dt SND_SOLO 4
+.Os
+.Sh NAME
+.Nm snd_solo
+.Nd "ESS Solo-1/1E PCI bridge device driver"
+.Sh SYNOPSIS
+.Cd "device pcm"
+.Cd "device snd_solo"
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver
+.Xr sound 4
+to attach to the ESS Solo-1x PCI cards.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following sound cards:
+.Pp
+.Bl -bullet -compact
+.It
+ESS Solo-1 (ES1938 Chipset)
+.It
+ESS Solo-1E (ES1946 Chipset)
+.El
+.Pp
+Note that older ESS ISA cards with ES18xx chipset are supported via
+.Xr snd_ess 4
+and/or
+.Xr snd_sbc 4 .
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.1 .
+.Sh AUTHORS
+.An "Cameron Grant" Aq cg@FreeBSD.org
diff --git a/share/man/man4/snd_spicds.4 b/share/man/man4/snd_spicds.4
new file mode 100644 (file)
index 0000000..eddcd56
--- /dev/null
@@ -0,0 +1,88 @@
+.\" Copyright (c) 2006 Alexander Leidinger
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_spicds.4,v 1.2 2006/11/13 08:56:42 ru Exp $
+.\" $DragonFly: src/share/man/man4/snd_spicds.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd September 30, 2006
+.Dt SND_SPICDS 4
+.Os
+.Sh NAME
+.Nm snd_spicds
+.Nd "I2S SPI audio codec driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device snd_spicds"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_spicds_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+I2S codec driver is used by several sound drivers for soundcards which use
+the supported codec chips.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following codecs:
+.Pp
+.Bl -bullet -compact
+.It
+AK4358
+.It
+AK4381
+.It
+AK4524
+.It
+AK4528
+.It
+WM8770
+.El
+.Sh SEE ALSO
+.Xr snd_envy24 4 ,
+.Xr snd_envy24ht 4 ,
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 7.0 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Konstantin Dimitrov
+based upon the
+.Xr snd_envy24 4
+driver.
+This manual page was written by
+.An Alexander Leidinger Aq netchild@FreeBSD.org .
diff --git a/share/man/man4/snd_t4dwave.4 b/share/man/man4/snd_t4dwave.4
new file mode 100644 (file)
index 0000000..51c5eb0
--- /dev/null
@@ -0,0 +1,78 @@
+.\" Copyright (c) 2005 Joel Dahl
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_t4dwave.4,v 1.3 2005/12/01 12:58:50 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_t4dwave.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 1, 2005
+.Dt SND_T4DWAVE 4
+.Os
+.Sh NAME
+.Nm snd_t4dwave
+.Nd "Trident 4DWave bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_t4dwave"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_t4dwave_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver,
+.Xr sound 4 ,
+to attach to Trident 4DWave audio devices.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following audio devices:
+.Pp
+.Bl -bullet -compact
+.It
+Acer Labs M5451
+.It
+SIS 7018
+.It
+Trident 4DWave DX
+.It
+Trident 4DWave NX
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.0 .
+.Sh AUTHORS
+This manual page was written by
+.An Joel Dahl Aq joel@FreeBSD.org .
diff --git a/share/man/man4/snd_uaudio.4 b/share/man/man4/snd_uaudio.4
new file mode 100644 (file)
index 0000000..15f2074
--- /dev/null
@@ -0,0 +1,109 @@
+.\" $NetBSD: uaudio.4,v 1.15 2002/02/12 19:53:57 jdolecek Exp $
+.\"
+.\" Copyright (c) 1999 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Lennart Augustsson.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\"        This product includes software developed by the NetBSD
+.\"        Foundation, Inc. and its contributors.
+.\" 4. Neither the name of The NetBSD Foundation nor the names of its
+.\"    contributors may be used to endorse or promote products derived
+.\"    from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_uaudio.4,v 1.6 2005/12/15 20:25:41 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_uaudio.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 15, 2005
+.Dt SND_UAUDIO 4
+.Os
+.Sh NAME
+.Nm snd_uaudio
+.Nd USB audio device driver
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device usb"
+.Cd "device snd_uaudio"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_uaudio_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for
+.Tn USB
+audio class devices.
+.Pp
+A
+.Tn USB
+audio device consists of a number of components:
+input terminals (e.g.\& USB digital input), output terminals (e.g.\&
+speakers), and a number of units in between (e.g.\& volume control).
+.Pp
+Refer to the
+.Ql USB Audio Class Specification
+for more information.
+.Sh SEE ALSO
+.Xr sound 4 ,
+.Xr usb 4
+.Rs
+.%T "USB Audio Class Specifications"
+.%O http://www.usb.org/developers/devclass_docs/
+.Re
+.Sh HISTORY
+The
+.Nm
+driver first appeared in
+.Fx 4.7 .
+.Sh AUTHORS
+This manual page was adopted from
+.Nx 1.6
+and modified for
+.Fx
+by
+.An Hiten Pandya Aq hmp@FreeBSD.org .
+.Sh BUGS
+The
+.Tn PCM
+framework in
+.Fx ,
+as of this writing, does not handle device un-registrations in a properly
+abstracted manner, i.e., a detach request is refused by the
+.Tn PCM
+framework if the device is in use.
+For
+.Tn USB
+and supposedly other detach-able busses, it is necessary to allow the
+device un-registration to complete successfully, otherwise the driver
+leaves wild pointers to invalid data structures and thus leading to a panic.
diff --git a/share/man/man4/snd_via8233.4 b/share/man/man4/snd_via8233.4
new file mode 100644 (file)
index 0000000..3fe1b2c
--- /dev/null
@@ -0,0 +1,105 @@
+.\" Copyright (c) 2005 Joel Dahl
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_via8233.4,v 1.6 2006/11/29 17:07:02 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_via8233.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd November 29, 2006
+.Dt SND_VIA8233 4
+.Os
+.Sh NAME
+.Nm snd_via8233
+.Nd "VIA Technologies VT8233 bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_via8233"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_via8233_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver,
+.Xr sound 4 ,
+to attach to the VIA VT8233 audio devices.
+These audio chipsets are integrated in the southbridge on many VIA based
+motherboards.
+.Ss Runtime Configuration
+The following
+.Xr sysctl 8
+variables are available in addition to those available to all
+.Xr sound 4
+devices:
+.Bl -tag -width ".Va dev.pcm.%d.polling" -offset indent
+.It Va dev.pcm.%d.polling
+Experimental polling mode, where the driver operates by querying the device
+state on each tick using
+.Xr callout 9 .
+Polling is disabled by default.
+Do not enable it unless you are facing weird interrupt problems or if the
+device cannot generate interrupts at all.
+.Sh HARDWARE
+The
+.Nm
+driver supports the following audio chipsets:
+.Pp
+.Bl -bullet -compact
+.It
+VIA VT8233
+.It
+VIA VT8233A
+.It
+VIA VT8233C
+.It
+VIA VT8235
+.It
+VIA VT8237
+.It
+VIA VT8251
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.7 .
+.Sh AUTHORS
+This manual page was written by
+.An Joel Dahl Aq joel@FreeBSD.org .
+.Sh BUGS
+The
+.Nm
+driver
+does not support S/PDIF.
+There is partial support in the code, so implementing it should be fairly
+easy if the right hardware is available.
diff --git a/share/man/man4/snd_via82c686.4 b/share/man/man4/snd_via82c686.4
new file mode 100644 (file)
index 0000000..e031470
--- /dev/null
@@ -0,0 +1,72 @@
+.\" Copyright (c) 2005 Joel Dahl
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_via82c686.4,v 1.3 2005/12/01 12:58:50 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_via82c686.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 1, 2005
+.Dt SND_VIA82C686 4
+.Os
+.Sh NAME
+.Nm snd_via82c686
+.Nd "VIA Technologies 82C686A bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_via82c686"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_via82c686_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver,
+.Xr sound 4 ,
+to attach audio devices based on the VIA 82C686A chipset.
+.Sh HARDWARE
+The
+.Nm
+driver supports audio devices based on the following chipset:
+.Pp
+.Bl -bullet -compact
+.It
+VIA 82C686A
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.2 .
+.Sh AUTHORS
+This manual page was written by
+.An Joel Dahl Aq joel@FreeBSD.org .
diff --git a/share/man/man4/snd_vibes.4 b/share/man/man4/snd_vibes.4
new file mode 100644 (file)
index 0000000..3443ef0
--- /dev/null
@@ -0,0 +1,72 @@
+.\" Copyright (c) 2005 Joel Dahl
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD: src/share/man/man4/snd_vibes.4,v 1.3 2005/12/01 12:58:51 joel Exp $
+.\" $DragonFly: src/share/man/man4/snd_vibes.4,v 1.1 2007/01/04 21:47:00 corecode Exp $
+.\"
+.Dd December 1, 2005
+.Dt SND_VIBES 4
+.Os
+.Sh NAME
+.Nm snd_vibes
+.Nd "S3 SonicVibes bridge device driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device pcm"
+.Cd "device snd_vibes"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+snd_vibes_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+bridge driver allows the generic audio driver,
+.Xr sound 4 ,
+to attach audio devices based on the S3 SonicVibes chipset.
+.Sh HARDWARE
+The
+.Nm
+driver supports audio devices based on the following chipset:
+.Pp
+.Bl -bullet -compact
+.It
+S3 SonicVibes
+.El
+.Sh SEE ALSO
+.Xr sound 4
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx 4.4 .
+.Sh AUTHORS
+This manual page was written by
+.An Joel Dahl Aq joel@FreeBSD.org .
index d54e8a9..fe3d07f 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/conf/files,v 1.340.2.137 2003/06/04 17:10:30 sam Exp $
-# $DragonFly: src/sys/conf/files,v 1.147 2006/12/17 20:07:27 dillon Exp $
+# $DragonFly: src/sys/conf/files,v 1.148 2007/01/04 21:47:00 corecode Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -31,6 +31,11 @@ aic79xx_{seq.h,reg.h,reg_print.c}    optional ahd pci                   \
 aic79xx_reg_print.o            optional ahd pci ahd_reg_pretty_print   \
        compile-with    "${NORMAL_C}"                                   \
        no-implicit-rule local
+emu10k1-alsa%diked.h           optional snd_emu10k1 pci                           \
+       dependency      "$S/tools/emu10k1-mkalsa.sh $S/dev/sound/pci/gnu/emu10k1-alsa.h" \
+       compile-with    "CC=${CC} AWK=${AWK} sh $S/tools/emu10k1-mkalsa.sh $S/dev/sound/pci/gnu/emu10k1-alsa.h emu10k1-alsa%diked.h" \
+       no-obj no-implicit-rule before-depend                              \
+       clean           "emu10k1-alsa%diked.h"
 kern/device_if.m                       standard
 kern/bus_if.m                          standard
 bus/cam/cam.c                          optional scbus
@@ -1198,82 +1203,57 @@ dev/misc/orm/orm.c              optional isa
 bus/isa/pnp.c                  optional isa
 bus/isa/pnpparse.c             optional isa
 #
-dev/sound/isa/ad1816.c         optional snd_ad1816
-dev/sound/isa/ad1816.c         optional snd isa
-dev/sound/isa/es1888.c         optional snd_ess
-dev/sound/isa/es1888.c         optional snd isa
-dev/sound/isa/ess.c            optional snd_ess
-dev/sound/isa/ess.c            optional snd isa
-dev/sound/isa/gusc.c           optional snd_mss
-dev/sound/isa/gusc.c           optional snd isa
-dev/sound/isa/mss.c            optional snd_mss
-dev/sound/isa/mss.c            optional snd isa
-dev/sound/isa/sb16.c           optional snd_sb16
-dev/sound/isa/sb16.c           optional snd isa
-dev/sound/isa/sb8.c            optional snd_sb8
-dev/sound/isa/sb8.c            optional snd isa
-dev/sound/isa/sbc.c            optional snd_sbc
-dev/sound/isa/sbc.c            optional snd isa
-#
-dev/sound/pci/als4000.c                optional snd_als4000
-dev/sound/pci/als4000.c                optional snd pci
-dev/sound/pci/cmi.c            optional snd_cmi
-dev/sound/pci/cmi.c            optional snd pci
-dev/sound/pci/cs4281.c         optional snd_cs4281
-dev/sound/pci/cs4281.c         optional snd pci
-dev/sound/pci/csa.c            optional snd_csa
-dev/sound/pci/csa.c            optional pcm pci
-dev/sound/pci/csapcm.c         optional snd_csa
-dev/sound/pci/csapcm.c         optional snd pci
-dev/sound/pci/ds1.c            optional snd_sa1
-dev/sound/pci/ds1.c            optional snd pci
-dev/sound/pci/emu10k1.c                optional snd_emu10k1
-dev/sound/pci/emu10k1.c                optional snd pci
-dev/sound/pci/es137x.c         optional snd_es137x
-dev/sound/pci/es137x.c         optional snd pci
-dev/sound/pci/fm801.c          optional snd_fm801
-dev/sound/pci/fm801.c          optional snd pci
-dev/sound/pci/ich.c            optional snd_ich
-dev/sound/pci/ich.c            optional snd pci
-dev/sound/pci/maestro.c                optional snd_maestro
-dev/sound/pci/maestro.c                optional snd pci
-dev/sound/pci/maestro3.c       optional snd_maestro3
-dev/sound/pci/maestro3.c       optional snd pci
-dev/sound/pci/neomagic.c       optional snd_neomagic
-dev/sound/pci/neomagic.c       optional snd pci
-dev/sound/pci/solo.c           optional snd_solo
-dev/sound/pci/solo.c           optional snd pci
-dev/sound/pci/t4dwave.c                optional snd_t4dwave
-dev/sound/pci/t4dwave.c                optional snd pci
-dev/sound/pci/via8233.c                optional snd_via8233
-dev/sound/pci/via8233.c                optional snd pci
-dev/sound/pci/via82c686.c      optional snd_via82c686
-dev/sound/pci/via82c686.c      optional snd pci
-dev/sound/pci/vibes.c          optional snd_vibes
-dev/sound/pci/vibes.c          optional snd pci
-dev/sound/usb/uaudio.c         optional snd_uaudio
-dev/sound/usb/uaudio.c         optional snd usb
-dev/sound/usb/uaudio_pcm.c     optional snd_uaudio
-dev/sound/usb/uaudio_pcm.c     optional snd usb
-#
+dev/sound/isa/ad1816.c         optional snd_ad1816 isa
+dev/sound/isa/es1888.c         optional snd_ess isa
+dev/sound/isa/ess.c            optional snd_ess isa
+dev/sound/isa/gusc.c           optional snd_gusc isa
+dev/sound/isa/mss.c            optional snd_mss isa
+dev/sound/isa/sb16.c           optional snd_sb16 isa
+dev/sound/isa/sb8.c            optional snd_sb8 isa
+dev/sound/isa/sbc.c            optional snd_sbc isa
+dev/sound/isa/sndbuf_dma.c     optional pcm isa
+dev/sound/pci/als4000.c                optional snd_als4000 pci
+dev/sound/pci/atiixp.c         optional snd_atiixp pci
+#dev/sound/pci/au88x0.c                optional snd_au88x0 pci
+dev/sound/pci/cmi.c            optional snd_cmi pci
+dev/sound/pci/cs4281.c         optional snd_cs4281 pci
+dev/sound/pci/csa.c            optional snd_csa pci
+dev/sound/pci/csapcm.c         optional snd_csa pci
+dev/sound/pci/ds1.c            optional snd_ds1 pci
+dev/sound/pci/emu10k1.c                optional snd_emu10k1 pci \
+       dependency "emu10k1-alsa%diked.h"
+dev/sound/pci/es137x.c         optional snd_es137x pci
+dev/sound/pci/fm801.c          optional snd_fm801 pci
+dev/sound/pci/ich.c            optional snd_ich pci
+dev/sound/pci/maestro.c        optional snd_maestro pci
+dev/sound/pci/maestro3.c       optional snd_maestro3 pci
+dev/sound/pci/neomagic.c       optional snd_neomagic pci
+dev/sound/pci/solo.c           optional snd_solo pci
+dev/sound/pci/t4dwave.c                optional snd_t4dwave pci
+dev/sound/pci/via8233.c                optional snd_via8233 pci
+dev/sound/pci/via82c686.c      optional snd_via82c686 pci
+dev/sound/pci/vibes.c          optional snd_vibes pci
+dev/sound/pcm/ac97.c           optional pcm
 dev/sound/pcm/ac97_if.m                optional pcm
+dev/sound/pcm/ac97_patch.c     optional pcm
+dev/sound/pcm/buffer.c         optional pcm
+dev/sound/pcm/channel.c                optional pcm
 dev/sound/pcm/channel_if.m     optional pcm
+dev/sound/pcm/dsp.c            optional pcm
+dev/sound/pcm/fake.c           optional pcm
+dev/sound/pcm/feeder.c         optional pcm
+dev/sound/pcm/feeder_fmt.c     optional pcm
 dev/sound/pcm/feeder_if.m      optional pcm
+dev/sound/pcm/feeder_rate.c    optional pcm
+dev/sound/pcm/feeder_volume.c  optional pcm
+dev/sound/pcm/mixer.c          optional pcm
 dev/sound/pcm/mixer_if.m       optional pcm
-#
-dev/sound/pcm/ac97.c                   optional pcm
-dev/sound/pcm/ac97_patch.c             optional pcm
-dev/sound/pcm/buffer.c                 optional pcm
-dev/sound/pcm/channel.c                        optional pcm
-dev/sound/pcm/dsp.c                    optional pcm
-dev/sound/pcm/fake.c                   optional pcm
-dev/sound/pcm/feeder.c                 optional pcm
-dev/sound/pcm/feeder_fmt.c             optional pcm
-dev/sound/pcm/feeder_rate.c            optional pcm
-dev/sound/pcm/mixer.c                  optional pcm
-dev/sound/pcm/sndstat.c                        optional pcm
-dev/sound/pcm/sound.c                  optional pcm
-dev/sound/pcm/vchan.c                  optional pcm
+dev/sound/pcm/sndstat.c                optional pcm
+dev/sound/pcm/sound.c          optional pcm
+dev/sound/pcm/vchan.c          optional pcm
+#dev/sound/usb/upcm.c          optional snd_upcm usb
+dev/sound/usb/uaudio.c         optional snd_uaudio usb
+dev/sound/usb/uaudio_pcm.c     optional snd_uaudio usb
 #
 # These files in libkern/ are those needed by all architectures.  Some
 # of the files in libkern/ are only needed on some architectures, e.g.,
index 588376e..6a0b457 100644 (file)
@@ -3,7 +3,7 @@
 #      as much of the source tree as it can.
 #
 # $FreeBSD: src/sys/i386/conf/LINT,v 1.749.2.144 2003/06/04 17:56:59 sam Exp $
-# $DragonFly: src/sys/config/LINT,v 1.99 2007/01/03 13:24:13 swildner Exp $
+# $DragonFly: src/sys/config/LINT,v 1.100 2007/01/04 21:47:00 corecode Exp $
 #
 # NB: You probably don't want to try running a kernel built from this
 # file.  Instead, you should start from GENERIC, and add options from
@@ -1471,12 +1471,31 @@ options         NATM                    #native ATM
 # flags to be the ``read dma channel''.
 #
 
-# Basic PCM support, needed for all sound card:
+# Basic sound card support:
 device         pcm
 # For PnP/PCI sound cards:
-device         snd
+device         "snd_als4000"
+device         "snd_atiixp"
+device         "snd_cmi"
+device         "snd_cs4281"
+device         "snd_csa"
+device         "snd_ds1"
+device         "snd_emu10k1"
+device         "snd_es137x"
+device         "snd_fm801"
+device         "snd_ich"
+device         "snd_maestro"
+device         "snd_maestro3"
+device         "snd_neomagic"
+device         "snd_solo"
+device         "snd_t4dwave"
+device         "snd_via8233"
+device         "snd_via82c686"
+device         "snd_vibes"
 # For non-pnp sound cards:
-device         snd0 at isa? irq 10 drq 1 flags 0x0
+device         pcm0 at isa? irq 10 drq 1 flags 0x0
+# Usb
+device         "snd_uaudio"
 
 #
 # Miscellaneous hardware:
index cd9be25..a903dc4 100644 (file)
@@ -1,8 +1,6 @@
 # $FreeBSD: src/sys/modules/sound/Makefile,v 1.1.2.2 2001/02/27 04:47:48 cg Exp $
-# $DragonFly: src/sys/dev/sound/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
+# $DragonFly: src/sys/dev/sound/Makefile,v 1.3 2007/01/04 21:47:00 corecode Exp $
 
-SUBDIR =
-SUBDIR += pcm
-SUBDIR += driver snd
+SUBDIR = pcm driver
 
 .include <bsd.subdir.mk>
index e470aad..c498585 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/*-
  * Copyright (c) 2000 Cameron Grant <cg@freebsd.org>
  * All rights reserved.
  *
@@ -23,8 +23,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/sound/driver.c,v 1.7.2.1 2001/02/27 04:47:47 cg Exp $
- * $DragonFly: src/sys/dev/sound/driver.c,v 1.2 2003/06/17 04:28:30 dillon Exp $
+ * $FreeBSD: src/sys/dev/sound/driver.c,v 1.13.2.2 2006/01/24 18:56:11 joel Exp $
+ * $DragonFly: src/sys/dev/sound/driver.c,v 1.3 2007/01/04 21:47:00 corecode Exp $
  */
 
 #include <dev/sound/pcm/sound.h>
@@ -39,6 +39,7 @@ snd_modevent(module_t mod, int type, void *data)
        case MOD_UNLOAD:
                break;
        default:
+               return (EOPNOTSUPP);
                break;
        }
        return 0;
@@ -49,5 +50,35 @@ static moduledata_t snd_mod = {
        snd_modevent,
        NULL
 };
-DECLARE_MODULE(snd, snd_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE);
+DECLARE_MODULE(snd_driver, snd_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE);
+MODULE_VERSION(snd_driver, 1);
 
+MODULE_DEPEND(snd_driver, snd_ad1816, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_als4000, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_atiixp, 1, 1, 1);
+/* MODULE_DEPEND(snd_driver, snd_aureal, 1, 1, 1); */
+MODULE_DEPEND(snd_driver, snd_cmi, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_cs4281, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_csa, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_csapcm, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_ds1, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_emu10k1, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_es137x, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_es1888, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_ess, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_fm801, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_gusc, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_hda, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_ich, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_maestro, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_maestro3, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_mss, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_neomagic, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_sb16, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_sb8, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_sbc, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_solo, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_t4dwave, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_via8233, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_via82c686, 1, 1, 1);
+MODULE_DEPEND(snd_driver, snd_vibes, 1, 1, 1);
index 7d945bb..af2333c 100644 (file)
@@ -1,8 +1,15 @@
-# $FreeBSD: src/sys/modules/sound/driver/Makefile,v 1.5.2.12 2002/08/24 08:34:20 nsayer Exp $
-# $DragonFly: src/sys/dev/sound/driver/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
+# $FreeBSD: src/sys/modules/sound/driver/Makefile,v 1.16.2.1 2005/12/30 19:55:54 netchild Exp $
+# $DragonFly: src/sys/dev/sound/driver/Makefile,v 1.3 2007/01/04 21:47:00 corecode Exp $
 
-SUBDIR = ad1816 als4000 cmi cs4281 csa ds1 emu10k1 es137x ess fm801 ich
-SUBDIR += maestro maestro3 mss neomagic sb16 sb8 sbc solo t4dwave
-SUBDIR += uaudio via8233 via82c686 vibes
+.if ${MACHINE_ARCH} == "sparc64"
+SUBDIR  = audiocs es137x
+.else
+SUBDIR  = als4000 ad1816 atiixp cmi cs4281 csa ds1 emu10k1 es137x ess
+SUBDIR += fm801 ich maestro maestro3 mss neomagic sb16 sb8 sbc solo
+SUBDIR += t4dwave via8233 via82c686 vibes
+SUBDIR += hda
+SUBDIR += driver
+SUBDIR += uaudio
+.endif
 
 .include <bsd.subdir.mk>
index d1f9528..b92aa03 100644 (file)
@@ -1,6 +1,6 @@
-# $FreeBSD: src/sys/modules/sound/driver/Makefile.inc,v 1.1.2.3 2001/02/24 21:49:05 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/Makefile.inc,v 1.4 2004/01/28 19:27:01 dillon Exp $
+# $FreeBSD: src/sys/modules/sound/driver/Makefile.inc,v 1.3 2001/04/08 21:50:41 obrien Exp $
+# $DragonFly: src/sys/dev/sound/driver/Makefile.inc,v 1.5 2007/01/04 21:47:00 corecode Exp $
 
-SRCS           += ac97_if.h channel_if.h feeder_if.h mixer_if.h
+SRCS+= ac97_if.h channel_if.h feeder_if.h mixer_if.h
 
 .include "../Makefile.inc"
index a82b283..31b6658 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/ad1816/Makefile,v 1.1.2.2 2001/04/07 16:48:50 peter Exp $
-# $DragonFly: src/sys/dev/sound/driver/ad1816/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/isa
-KMOD           = snd_ad1816
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += ad1816.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/ad1816/Makefile,v 1.2 2001/01/06 14:00:15 obrien Exp $
+# $DragonFly: src/sys/dev/sound/driver/ad1816/Makefile,v 1.3 2007/01/04 21:47:00 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/isa
+
+KMOD=  snd_ad1816
+SRCS=  device_if.h bus_if.h isa_if.h pci_if.h
+SRCS+= ad1816.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index 287bbda..2718231 100644 (file)
@@ -1,11 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/als4000/Makefile,v 1.1.2.2 2001/08/01 03:41:06 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/als4000/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
+# $FreeBSD: src/sys/modules/sound/driver/als4000/Makefile,v 1.2 2003/02/07 13:56:31 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/als4000/Makefile,v 1.3 2007/01/04 21:47:00 corecode Exp $
 
 .PATH: ${.CURDIR}/../../../../dev/sound/pci
 
-KMOD=          snd_als4000
-SRCS=          device_if.h bus_if.h isa_if.h pci_if.h
-SRCS+=         als4000.c
-KMODDEPS       = snd_pcm
+KMOD=  snd_als4000
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= als4000.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
diff --git a/sys/dev/sound/driver/atiixp/Makefile b/sys/dev/sound/driver/atiixp/Makefile
new file mode 100644 (file)
index 0000000..79d5efb
--- /dev/null
@@ -0,0 +1,12 @@
+# $FreeBSD: src/sys/modules/sound/driver/atiixp/Makefile,v 1.1.2.1 2005/12/30 19:55:55 netchild Exp $
+# $DragonFly: src/sys/dev/sound/driver/atiixp/Makefile,v 1.1 2007/01/04 21:47:00 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_atiixp
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= atiixp.c
+
+KMODDEPS=      sound
+
+.include <bsd.kmod.mk>
diff --git a/sys/dev/sound/driver/au88x0/Makefile b/sys/dev/sound/driver/au88x0/Makefile
new file mode 100644 (file)
index 0000000..273028d
--- /dev/null
@@ -0,0 +1,12 @@
+# $FreeBSD: src/sys/modules/sound/driver/au88x0/Makefile,v 1.1 2003/06/01 11:58:46 des Exp $
+# $DragonFly: src/sys/dev/sound/driver/au88x0/Makefile,v 1.1 2007/01/04 21:47:00 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_au88x0
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= au88x0.c
+
+KMODDEPS=sound
+
+.include <bsd.kmod.mk>
diff --git a/sys/dev/sound/driver/audiocs/Makefile b/sys/dev/sound/driver/audiocs/Makefile
new file mode 100644 (file)
index 0000000..c095812
--- /dev/null
@@ -0,0 +1,13 @@
+# $FreeBSD: src/sys/modules/sound/driver/audiocs/Makefile,v 1.1 2004/10/25 10:29:57 yongari Exp $
+# $DragonFly: src/sys/dev/sound/driver/audiocs/Makefile,v 1.1 2007/01/04 21:47:00 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/sbus
+
+KMOD=  snd_audiocs
+SRCS=  device_if.h bus_if.h ofw_bus_if.h
+SRCS+= channel_if.h feeder_if.h mixer_if.h
+SRCS+= cs4231.c
+
+KMODDEPS=sound
+
+.include <bsd.kmod.mk>
index 738fd35..fd58814 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/cmi/Makefile,v 1.1.2.1 2001/02/27 03:42:29 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/cmi/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_cmi
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += cmi.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/cmi/Makefile,v 1.3 2003/02/07 13:56:31 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/cmi/Makefile,v 1.3 2007/01/04 21:47:00 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_cmi
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= cmi.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index d322a8f..439794f 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/cs4281/Makefile,v 1.1.2.1 2001/02/27 03:57:52 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/cs4281/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_cs4281
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += cs4281.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/cs4281/Makefile,v 1.3 2003/02/07 13:56:31 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/cs4281/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_cs4281
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= cs4281.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index c82b1dc..0c8b742 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/csa/Makefile,v 1.1.2.2 2001/02/27 04:31:27 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/csa/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_csa
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += csa.c csapcm.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/csa/Makefile,v 1.4 2003/02/07 13:56:31 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/csa/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_csa
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= csa.c csapcm.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
diff --git a/sys/dev/sound/driver/driver/Makefile b/sys/dev/sound/driver/driver/Makefile
new file mode 100644 (file)
index 0000000..5d9bf50
--- /dev/null
@@ -0,0 +1,37 @@
+# $FreeBSD: src/sys/modules/sound/driver/driver/Makefile,v 1.4 2003/02/07 15:05:37 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/driver/Makefile,v 1.1 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound
+
+KMOD=  snd_driver
+SRCS=  device_if.h bus_if.h
+SRCS+= driver.c
+
+KMODDEPS=      snd_ad1816
+KMODDEPS+=     snd_als4000
+KMODDEPS+=     snd_atiixp
+#KMODDEPS+=    snd_aureal
+KMODDEPS+=     snd_cmi
+KMODDEPS+=     snd_cs4281
+KMODDEPS+=     snd_csa
+KMODDEPS+=     snd_ds1
+KMODDEPS+=     snd_emu10k1
+KMODDEPS+=     snd_es137x
+KMODDEPS+=     snd_ess
+KMODDEPS+=     snd_fm801
+KMODDEPS+=     snd_hda
+KMODDEPS+=     snd_ich
+KMODDEPS+=     snd_maestro
+KMODDEPS+=     snd_maestro3
+KMODDEPS+=     snd_mss
+KMODDEPS+=     snd_neomagic
+KMODDEPS+=     snd_sb16
+KMODDEPS+=     snd_sb8
+KMODDEPS+=     snd_sbc
+KMODDEPS+=     snd_solo
+KMODDEPS+=     snd_t4dwave
+KMODDEPS+=     snd_via8233
+KMODDEPS+=     snd_via82c686
+KMODDEPS+=     snd_vibes
+
+.include <bsd.kmod.mk>
index d374fca..74fbb05 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/ds1/Makefile,v 1.1.2.1 2000/09/23 19:15:02 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/ds1/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_ds1
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += ds1.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/ds1/Makefile,v 1.3 2003/02/07 13:56:31 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/ds1/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_ds1
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= ds1.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index ee4d739..71492ac 100644 (file)
@@ -1,10 +1,21 @@
-# $FreeBSD: src/sys/modules/sound/driver/emu10k1/Makefile,v 1.1.2.2 2001/04/07 16:48:51 peter Exp $
-# $DragonFly: src/sys/dev/sound/driver/emu10k1/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_emu10k1
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += emu10k1.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/emu10k1/Makefile,v 1.4 2004/01/11 10:30:56 obrien Exp $
+# $DragonFly: src/sys/dev/sound/driver/emu10k1/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../pci \
+       ${.CURDIR}/../../pci/gnu
+
+KMOD=  snd_emu10k1
+SRCS=  device_if.h bus_if.h pci_if.h emu10k1-alsa%diked.h
+SRCS+= emu10k1.c
+
+KMODDEPS=      sound
+
+CLEANFILES+= emu10k1-alsa%diked.h
+
+emu10k1-alsa%diked.h: emu10k1-alsa.h
+       grep -v '#include' ${.OODATE} | $(CC) -E -D__KERNEL__ -dM - \
+           | awk -F"[  (]" '/define/ \
+           { print "#ifndef " $$2 ; print ; print "#endif" }' \
+           >${.TARGET}
 
 .include <bsd.kmod.mk>
index ec473fe..ba6d25e 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/es137x/Makefile,v 1.1.2.1 2000/09/23 19:15:02 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/es137x/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_es137x
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += es137x.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/es137x/Makefile,v 1.3 2003/02/07 13:56:32 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/es137x/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_es137x
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= es137x.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index b80ed36..a706e90 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/ess/Makefile,v 1.1.2.2 2001/02/27 04:31:28 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/ess/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/isa
-KMOD           = snd_ess
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += ess.c es1888.c
-KMODDEPS       = snd_pcm snd_sbc
+# $FreeBSD: src/sys/modules/sound/driver/ess/Makefile,v 1.3 2002/01/23 03:32:36 cg Exp $
+# $DragonFly: src/sys/dev/sound/driver/ess/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/isa
+
+KMOD=  snd_ess
+SRCS=  device_if.h bus_if.h isa_if.h pci_if.h
+SRCS+= ess.c
+
+KMODDEPS=      sound snd_sbc
 
 .include <bsd.kmod.mk>
index 958c473..26443d5 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/fm801/Makefile,v 1.1.2.1 2000/10/05 05:41:40 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/fm801/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_fm801
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += fm801.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/fm801/Makefile,v 1.3 2003/02/07 13:56:32 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/fm801/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_fm801
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= fm801.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
diff --git a/sys/dev/sound/driver/hda/Makefile b/sys/dev/sound/driver/hda/Makefile
new file mode 100644 (file)
index 0000000..bf81141
--- /dev/null
@@ -0,0 +1,12 @@
+# $FreeBSD: src/sys/modules/sound/driver/hda/Makefile,v 1.1 2006/10/01 11:13:00 ariff Exp $
+# $DragonFly: src/sys/dev/sound/driver/hda/Makefile,v 1.1 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci/hda
+
+KMOD=  snd_hda
+SRCS=  device_if.h bus_if.h pci_if.h channel_if.h mixer_if.h isa_if.h
+SRCS+= hdac.c hdac_private.h hdac_reg.h hda_reg.h hdac.h
+
+KMODDEPS=      sound
+
+.include <bsd.kmod.mk>
index 79ed3f2..02d9bd4 100644 (file)
@@ -1,10 +1,11 @@
-# $FreeBSD: src/sys/modules/sound/driver/ich/Makefile,v 1.1.2.1 2001/08/01 05:37:30 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/ich/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
+# $FreeBSD: src/sys/modules/sound/driver/ich/Makefile,v 1.2 2003/02/07 13:56:32 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/ich/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
 
 .PATH:         ${.CURDIR}/../../../../dev/sound/pci
 KMOD           = snd_ich
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
+SRCS           = device_if.h bus_if.h pci_if.h
 SRCS           += ich.c
-KMODDEPS       = snd_pcm
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index 9b83c57..b8fdf7b 100644 (file)
@@ -1,10 +1,13 @@
-# $FreeBSD: src/sys/modules/sound/driver/maestro/Makefile,v 1.1.2.1 2000/10/05 05:44:06 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/maestro/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_maestro
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += maestro.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/maestro/Makefile,v 1.4 2005/01/26 16:29:07 imp Exp $
+# $DragonFly: src/sys/dev/sound/driver/maestro/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_maestro
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= maestro.c
+
+KMODDEPS=      sound
+WERROR=
 
 .include <bsd.kmod.mk>
index 042993c..fb9dd7d 100644 (file)
@@ -1,13 +1,14 @@
-# $FreeBSD: src/sys/modules/sound/driver/maestro3/Makefile,v 1.1.2.2 2001/03/04 08:19:02 scottl Exp $
-# $DragonFly: src/sys/dev/sound/driver/maestro3/Makefile,v 1.3 2003/08/15 08:32:31 dillon Exp $
-.PATH:         ${.CURDIR}/../../pci ${.CURDIR}/../../pci/gnu
-KMOD           = snd_maestro3
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += maestro3.c
-CFLAGS         += -Wall
+# $FreeBSD: src/sys/modules/sound/driver/maestro3/Makefile,v 1.3 2003/02/07 13:56:32 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/maestro3/Makefile,v 1.4 2007/01/04 21:47:01 corecode Exp $
 
-CFLAGS         += -DM3_DEBUG_LEVEL=-1
+.PATH: ${.CURDIR}/../../pci
 
-KMODDEPS       = snd_pcm
+KMOD=  snd_maestro3
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= maestro3.c
+
+KMODDEPS=      sound
+
+CFLAGS+= -Wall -DM3_DEBUG_LEVEL=-1
 
 .include <bsd.kmod.mk>
index 90e1f8f..da2dd8c 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/mss/Makefile,v 1.1.2.4 2002/12/01 09:01:08 nyan Exp $
-# $DragonFly: src/sys/dev/sound/driver/mss/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/isa
-KMOD           = snd_mss
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += mss.c gusc.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/mss/Makefile,v 1.5 2002/11/06 13:46:59 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/mss/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/isa
+
+KMOD=  snd_mss
+SRCS=  device_if.h bus_if.h isa_if.h pci_if.h
+SRCS+= mss.c gusc.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index e93615e..3618dab 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/neomagic/Makefile,v 1.1.2.1 2000/09/23 19:15:05 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/neomagic/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_neomagic
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += neomagic.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/neomagic/Makefile,v 1.3 2003/02/07 13:56:32 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/neomagic/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_neomagic
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= neomagic.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index 0b86ba7..a36ad50 100644 (file)
@@ -1,11 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/sb16/Makefile,v 1.2.2.1 2001/02/03 02:09:24 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/sb16/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
+# $FreeBSD: src/sys/modules/sound/driver/sb16/Makefile,v 1.2 2001/01/06 14:00:20 obrien Exp $
+# $DragonFly: src/sys/dev/sound/driver/sb16/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
 
 .PATH: ${.CURDIR}/../../../../dev/sound/isa
 
 KMOD=  snd_sb16
 SRCS=  device_if.h bus_if.h isa_if.h pci_if.h
 SRCS+= sb16.c
-KMODDEPS       = snd_pcm snd_sbc
+
+KMODDEPS=      sound snd_sbc
 
 .include <bsd.kmod.mk>
index 0371314..1382c3a 100644 (file)
@@ -1,11 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/sb8/Makefile,v 1.2.2.1 2001/02/03 02:09:24 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/sb8/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
+# $FreeBSD: src/sys/modules/sound/driver/sb8/Makefile,v 1.2 2001/01/06 14:00:20 obrien Exp $
+# $DragonFly: src/sys/dev/sound/driver/sb8/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
 
 .PATH: ${.CURDIR}/../../../../dev/sound/isa
 
 KMOD=  snd_sb8
 SRCS=  device_if.h bus_if.h isa_if.h pci_if.h
 SRCS+= sb8.c
-KMODDEPS       = snd_pcm snd_sbc
+
+KMODDEPS=      sound snd_sbc
 
 .include <bsd.kmod.mk>
index 0111f59..7e74133 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/sbc/Makefile,v 1.1.2.3 2002/12/01 09:01:08 nyan Exp $
-# $DragonFly: src/sys/dev/sound/driver/sbc/Makefile,v 1.3 2004/01/05 20:23:53 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/isa
-KMOD           = snd_sbc
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += sbc.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/sbc/Makefile,v 1.4 2002/11/06 13:46:59 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/sbc/Makefile,v 1.4 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/isa
+
+KMOD=  snd_sbc
+SRCS=  device_if.h bus_if.h isa_if.h pci_if.h
+SRCS+= sbc.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index ec8d28c..f8b7007 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/solo/Makefile,v 1.1.2.1 2000/09/23 19:15:08 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/solo/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_solo
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += solo.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/solo/Makefile,v 1.3 2003/02/07 13:56:32 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/solo/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_solo
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= solo.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index 8ccd158..4188145 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/t4dwave/Makefile,v 1.1.2.1 2000/09/23 19:15:08 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/t4dwave/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_t4dwave
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += t4dwave.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/t4dwave/Makefile,v 1.3 2003/02/07 13:56:33 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/t4dwave/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_t4dwave
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= t4dwave.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index e2f1a78..2b034bc 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/uaudio/Makefile,v 1.1.2.1 2002/08/24 08:06:13 nsayer Exp $
-# $DragonFly: src/sys/dev/sound/driver/uaudio/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/usb
-KMOD           = snd_uaudio
-SRCS           = device_if.h bus_if.h isa_if.h opt_usb.h
-SRCS           += uaudio.c uaudio_pcm.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/uaudio/Makefile,v 1.3 2004/12/29 08:50:35 imp Exp $
+# $DragonFly: src/sys/dev/sound/driver/uaudio/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/usb
+
+KMOD=  snd_uaudio
+SRCS=  device_if.h bus_if.h opt_usb.h
+SRCS+= uaudio.c uaudio_pcm.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index 9d9b298..48194e9 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/via8233/Makefile,v 1.1.2.1 2002/08/22 17:32:49 orion Exp $
-# $DragonFly: src/sys/dev/sound/driver/via8233/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_via8233
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += via8233.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/via8233/Makefile,v 1.2 2003/02/07 13:56:33 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/via8233/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_via8233
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= via8233.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index bbe9807..7c0d1a7 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/via82c686/Makefile,v 1.1.2.1 2000/10/05 05:45:55 cg Exp $
-# $DragonFly: src/sys/dev/sound/driver/via82c686/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_via82c686
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += via82c686.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/via82c686/Makefile,v 1.3 2003/02/07 13:56:33 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/via82c686/Makefile,v 1.3 2007/01/04 21:47:01 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_via82c686
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= via82c686.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index b56c5c9..fe1ffdb 100644 (file)
@@ -1,10 +1,12 @@
-# $FreeBSD: src/sys/modules/sound/driver/vibes/Makefile,v 1.3.2.1 2001/04/23 22:58:26 orion Exp $
-# $DragonFly: src/sys/dev/sound/driver/vibes/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
-
-.PATH:         ${.CURDIR}/../../../../dev/sound/pci
-KMOD           = snd_vibes
-SRCS           = device_if.h bus_if.h isa_if.h pci_if.h
-SRCS           += vibes.c
-KMODDEPS       = snd_pcm
+# $FreeBSD: src/sys/modules/sound/driver/vibes/Makefile,v 1.4 2003/02/07 13:56:33 nyan Exp $
+# $DragonFly: src/sys/dev/sound/driver/vibes/Makefile,v 1.3 2007/01/04 21:47:02 corecode Exp $
+
+.PATH: ${.CURDIR}/../../../../dev/sound/pci
+
+KMOD=  snd_vibes
+SRCS=  device_if.h bus_if.h pci_if.h
+SRCS+= vibes.c
+
+KMODDEPS=      sound
 
 .include <bsd.kmod.mk>
index 0a65f2b..ee0728f 100644 (file)
@@ -1,5 +1,5 @@
-/*
- * Copyright (c) 1999 Cameron Grant <gandalf@vilnya.demon.co.uk>
+/*-
+ * Copyright (c) 1999 Cameron Grant <cg@freebsd.org>
  * Copyright Luigi Rizzo, 1997,1998
  * Copyright by Hannu Savolainen 1994, 1995
  * All rights reserved.
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/sound/isa/ad1816.c,v 1.7.2.9 2002/12/24 21:17:41 semenu Exp $
- * $DragonFly: src/sys/dev/sound/isa/ad1816.c,v 1.6 2006/12/22 23:26:25 swildner Exp $
+ * $FreeBSD: src/sys/dev/sound/isa/ad1816.c,v 1.37.2.2 2006/04/04 17:23:24 ariff Exp $
+ * $DragonFly: src/sys/dev/sound/isa/ad1816.c,v 1.7 2007/01/04 21:47:02 corecode Exp $
  */
 
 #include <dev/sound/pcm/sound.h>
 #include <dev/sound/isa/ad1816.h>
 
+#include <bus/isa/isavar.h>
+
 #include "mixer_if.h"
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/ad1816.c,v 1.6 2006/12/22 23:26:25 swildner Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/ad1816.c,v 1.7 2007/01/04 21:47:02 corecode Exp $");
 
 struct ad1816_info;
 
@@ -56,7 +58,7 @@ struct ad1816_info {
        int drq2_rid;
        void *ih;
        bus_dma_tag_t parent_dmat;
-       void *lock;
+       struct spinlock *lock;
 
        unsigned int bufsize;
        struct ad1816_chinfo pch, rch;
@@ -139,12 +141,16 @@ ad1816_intr(void *arg)
        }
        /* check for capture interupt */
        if (sndbuf_runsz(ad1816->rch.buffer) && (c & AD1816_INTRCI)) {
+               ad1816_unlock(ad1816);
                chn_intr(ad1816->rch.channel);
+               ad1816_lock(ad1816);
                served |= AD1816_INTRCI;                /* cp served */
        }
        /* check for playback interupt */
        if (sndbuf_runsz(ad1816->pch.buffer) && (c & AD1816_INTRPI)) {
+               ad1816_unlock(ad1816);
                chn_intr(ad1816->pch.channel);
+               ad1816_lock(ad1816);
                served |= AD1816_INTRPI;                /* pb served */
        }
        if (served == 0) {
@@ -315,7 +321,8 @@ ad1816chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channe
        ch->parent = ad1816;
        ch->channel = c;
        ch->buffer = b;
-       if (sndbuf_alloc(ch->buffer, ad1816->parent_dmat, ad1816->bufsize) == -1) return NULL;
+       if (sndbuf_alloc(ch->buffer, ad1816->parent_dmat, ad1816->bufsize) != 0)
+               return NULL;
        return ch;
 }
 
@@ -325,7 +332,7 @@ ad1816chan_setdir(kobj_t obj, void *data, int dir)
        struct ad1816_chinfo *ch = data;
        struct ad1816_info *ad1816 = ch->parent;
 
-       sndbuf_isadmasetup(ch->buffer, (dir == PCMDIR_PLAY)? ad1816->drq1 : ad1816->drq2);
+       sndbuf_dmasetup(ch->buffer, (dir == PCMDIR_PLAY)? ad1816->drq1 : ad1816->drq2);
        ch->dir = dir;
        return 0;
 }
@@ -371,8 +378,11 @@ ad1816chan_setformat(kobj_t obj, void *data, u_int32_t format)
        if (format & AFMT_STEREO) fmt |= AD1816_STEREO;
        io_wr(ad1816, reg, fmt);
        ad1816_unlock(ad1816);
-
-       return (0);
+#if 0
+       return format;
+#else
+       return 0;
+#endif
 }
 
 static int
@@ -407,7 +417,7 @@ ad1816chan_trigger(kobj_t obj, void *data, int go)
        if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD)
                return 0;
 
-       sndbuf_isadma(ch->buffer, go);
+       sndbuf_dma(ch->buffer, go);
        wr = (ch->dir == PCMDIR_PLAY);
        reg = wr? AD1816_PLAY : AD1816_CAPT;
        ad1816_lock(ad1816);
@@ -453,7 +463,7 @@ static int
 ad1816chan_getptr(kobj_t obj, void *data)
 {
        struct ad1816_chinfo *ch = data;
-       return sndbuf_isadmaptr(ch->buffer);
+       return sndbuf_dmaptr(ch->buffer);
 }
 
 static struct pcmchan_caps *
@@ -516,17 +526,17 @@ ad1816_alloc_resources(struct ad1816_info *ad1816, device_t dev)
        int ok = 1, pdma, rdma;
 
        if (!ad1816->io_base)
-               ad1816->io_base = bus_alloc_resource(dev, SYS_RES_IOPORT, &ad1816->io_rid,
-                                                 0, ~0, 1, RF_ACTIVE);
+               ad1816->io_base = bus_alloc_resource_any(dev, 
+                       SYS_RES_IOPORT, &ad1816->io_rid, RF_ACTIVE);
        if (!ad1816->irq)
-               ad1816->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &ad1816->irq_rid,
-                                             0, ~0, 1, RF_ACTIVE);
+               ad1816->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ,
+                       &ad1816->irq_rid, RF_ACTIVE);
        if (!ad1816->drq1)
-               ad1816->drq1 = bus_alloc_resource(dev, SYS_RES_DRQ, &ad1816->drq1_rid,
-                                              0, ~0, 1, RF_ACTIVE);
+               ad1816->drq1 = bus_alloc_resource_any(dev, SYS_RES_DRQ,
+                       &ad1816->drq1_rid, RF_ACTIVE);
        if (!ad1816->drq2)
-               ad1816->drq2 = bus_alloc_resource(dev, SYS_RES_DRQ, &ad1816->drq2_rid,
-                                              0, ~0, 1, RF_ACTIVE);
+               ad1816->drq2 = bus_alloc_resource_any(dev, SYS_RES_DRQ, 
+                       &ad1816->drq2_rid, RF_ACTIVE);
 
        if (!ad1816->io_base || !ad1816->drq1 || !ad1816->irq) ok = 0;
 
@@ -573,11 +583,14 @@ ad1816_probe(device_t dev)
        case 0x80719304: /* ADS7180 */
                s = "AD1816";
                break;
+       case 0x50719304: /* ADS7150 */
+               s = "AD1815";
+               break;
        }
 
        if (s) {
                device_set_desc(dev, s);
-               return 0;
+               return BUS_PROBE_DEFAULT;
        }
        return ENXIO;
 }
@@ -602,15 +615,15 @@ ad1816_attach(device_t dev)
        ad1816_init(ad1816, dev);
        if (mixer_init(dev, &ad1816mixer_class, ad1816)) goto no;
 
-       snd_setup_intr(dev, ad1816->irq, INTR_MPSAFE, ad1816_intr, ad1816,
-                       &ad1816->ih, NULL);
+       snd_setup_intr(dev, ad1816->irq, 0, ad1816_intr, ad1816, &ad1816->ih);
        if (bus_dma_tag_create(/*parent*/NULL, /*alignment*/2, /*boundary*/0,
                        /*lowaddr*/BUS_SPACE_MAXADDR_24BIT,
                        /*highaddr*/BUS_SPACE_MAXADDR,
                        /*filter*/NULL, /*filterarg*/NULL,
                        /*maxsize*/ad1816->bufsize, /*nsegments*/1,
                        /*maxsegz*/0x3ffff,
-                       /*flags*/0, &ad1816->parent_dmat) != 0) {
+                       /*flags*/0,
+                       &ad1816->parent_dmat) != 0) {
                device_printf(dev, "unable to create dma tag\n");
                goto no;
        }
@@ -619,12 +632,13 @@ ad1816_attach(device_t dev)
        else
                status2[0] = '\0';
 
-       ksnprintf(status, SND_STATUSLEN, "at io 0x%lx irq %ld drq %ld%s bufsz %u",
+       ksnprintf(status, SND_STATUSLEN, "at io 0x%lx irq %ld drq %ld%s bufsz %u %s",
                rman_get_start(ad1816->io_base),
                rman_get_start(ad1816->irq),
                rman_get_start(ad1816->drq1),
                status2,
-               ad1816->bufsize);
+               ad1816->bufsize,
+               PCM_KLDSTRING(snd_ad1816));
 
        if (pcm_register(dev, ad1816, 1, 1)) goto no;
        pcm_addchan(dev, PCMDIR_REC, &ad1816chan_class, ad1816);
@@ -670,7 +684,8 @@ static driver_t ad1816_driver = {
 };
 
 DRIVER_MODULE(snd_ad1816, isa, ad1816_driver, pcm_devclass, 0, 0);
-MODULE_DEPEND(snd_ad1816, snd_pcm, PCM_MINVER, PCM_PREFVER, PCM_MAXVER);
+DRIVER_MODULE(snd_ad1816, acpi, ad1816_driver, pcm_devclass, 0, 0);
+MODULE_DEPEND(snd_ad1816, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
 MODULE_VERSION(snd_ad1816, 1);
 
 
index bdcfead..b1f8529 100644 (file)
@@ -1,11 +1,11 @@
-/*
+/*-
  * (C) 1997 Luigi Rizzo (luigi@iet.unipi.it)
  *
  * This file contains information and macro definitions for
  * the ad1816 chip
  *
- * $FreeBSD: src/sys/dev/sound/isa/ad1816.h,v 1.1.2.2 2002/04/22 15:49:30 cg Exp $
- * $DragonFly: src/sys/dev/sound/isa/ad1816.h,v 1.2 2003/06/17 04:28:30 dillon Exp $
+ * $FreeBSD: src/sys/dev/sound/isa/ad1816.h,v 1.2 2005/01/06 01:43:17 imp Exp $
+ * $DragonFly: src/sys/dev/sound/isa/ad1816.h,v 1.3 2007/01/04 21:47:02 corecode Exp $
  */
 
 /* AD1816 register macros */
diff --git a/sys/dev/sound/isa/es1888.c b/sys/dev/sound/isa/es1888.c
deleted file mode 100644 (file)
index ca90aef..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 1999 Doug Rabson
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/dev/sound/isa/es1888.c,v 1.5.2.5 2002/04/22 15:49:30 cg Exp $
- * $DragonFly: src/sys/dev/sound/isa/Attic/es1888.c,v 1.5 2006/08/25 22:37:08 swildner Exp $
- */
-
-#include <dev/sound/pcm/sound.h>
-#include <dev/sound/isa/sb.h>
-
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/Attic/es1888.c,v 1.5 2006/08/25 22:37:08 swildner Exp $");
-
-static int
-es1888_identify(driver_t *driver, device_t parent)
-{
-       /*
-        * We do not suppot rescans
-        */
-       if (device_get_state(parent) == DS_ATTACHED)
-               return (0);
-
-       return (ENXIO);
-}
-
-static device_method_t es1888_methods[] = {
-       /* Device interface */
-       DEVMETHOD(device_identify,      es1888_identify),
-
-       { 0, 0 }
-};
-
-static driver_t es1888_driver = {
-       "pcm",
-       es1888_methods,
-       1,                      /* no softc */
-};
-
-DRIVER_MODULE(snd_es1888, isa, es1888_driver, pcm_devclass, 0, 0);
-MODULE_DEPEND(snd_es1888, snd_pcm, PCM_MINVER, PCM_PREFVER, PCM_MAXVER);
-MODULE_VERSION(snd_es1888, 1);
-
-
index 8eb5162..f0a2fe5 100644 (file)
@@ -1,5 +1,5 @@
-/*
- * Copyright (c) 1999 Cameron Grant <gandalf@vilnya.demon.co.uk>
+/*-
+ * Copyright (c) 1999 Cameron Grant <cg@freebsd.org>
  * Copyright 1997,1998 Luigi Rizzo.
  *
  * Derived from files in the Voxware 3.5 distribution,
@@ -28,8 +28,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/sound/isa/ess.c,v 1.3.2.8 2002/12/24 21:17:41 semenu Exp $
- * $DragonFly: src/sys/dev/sound/isa/ess.c,v 1.6 2006/12/22 23:26:25 swildner Exp $
+ * $FreeBSD: src/sys/dev/sound/isa/ess.c,v 1.34.2.2 2006/01/19 01:17:00 ariff Exp $
+ * $DragonFly: src/sys/dev/sound/isa/ess.c,v 1.7 2007/01/04 21:47:02 corecode Exp $
  */
 
 #include <dev/sound/pcm/sound.h>
 #include  <dev/sound/isa/sb.h>
 #include  <dev/sound/chip.h>
 
+#include <bus/isa/isavar.h>
+
 #include "mixer_if.h"
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/ess.c,v 1.6 2006/12/22 23:26:25 swildner Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/ess.c,v 1.7 2007/01/04 21:47:02 corecode Exp $");
 
 #define ESS_BUFFSIZE (4096)
 #define ABS(x) (((x) < 0)? -(x) : (x))
@@ -62,7 +64,7 @@ static u_int32_t ess_pfmt[] = {
        0
 };
 
-static struct pcmchan_caps ess_playcaps = {5000, 49000, ess_pfmt, 0};
+static struct pcmchan_caps ess_playcaps = {6000, 48000, ess_pfmt, 0};
 
 static u_int32_t ess_rfmt[] = {
        AFMT_U8,
@@ -76,7 +78,7 @@ static u_int32_t ess_rfmt[] = {
        0
 };
 
-static struct pcmchan_caps ess_reccaps = {5000, 49000, ess_rfmt, 0};
+static struct pcmchan_caps ess_reccaps = {6000, 48000, ess_rfmt, 0};
 
 struct ess_info;
 
@@ -317,24 +319,20 @@ ess_alloc_resources(struct ess_info *sc, device_t dev)
 
        rid = 0;
        if (!sc->io_base)
-               sc->io_base = bus_alloc_resource(dev, SYS_RES_IOPORT,
-                                                &rid, 0, ~0, 1,
-                                                RF_ACTIVE);
+               sc->io_base = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
+                                                    &rid, RF_ACTIVE);
        rid = 0;
        if (!sc->irq)
-               sc->irq = bus_alloc_resource(dev, SYS_RES_IRQ,
-                                            &rid, 0, ~0, 1,
-                                            RF_ACTIVE);
+               sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ,
+                                                &rid, RF_ACTIVE);
        rid = 0;
        if (!sc->drq1)
-               sc->drq1 = bus_alloc_resource(dev, SYS_RES_DRQ,
-                                             &rid, 0, ~0, 1,
-                                             RF_ACTIVE);
+               sc->drq1 = bus_alloc_resource_any(dev, SYS_RES_DRQ,
+                                                 &rid, RF_ACTIVE);
        rid = 1;
        if (!sc->drq2)
-               sc->drq2 = bus_alloc_resource(dev, SYS_RES_DRQ,
-                                             &rid, 0, ~0, 1,
-                                             RF_ACTIVE);
+               sc->drq2 = bus_alloc_resource_any(dev, SYS_RES_DRQ,
+                                                 &rid, RF_ACTIVE);
 
        if (sc->io_base && sc->drq1 && sc->irq) {
                isa_dma_acquire(rman_get_start(sc->drq1));
@@ -366,11 +364,14 @@ ess_intr(void *arg)
        rirq = (src & sc->rch.hwch)? 1 : 0;
 
        if (pirq) {
-               if (sc->pch.run)
+               if (sc->pch.run) {
+                       ess_unlock(sc);
                        chn_intr(sc->pch.channel);
+                       ess_lock(sc);
+               }
                if (sc->pch.stopping) {
                        sc->pch.run = 0;
-                       sndbuf_isadma(sc->pch.buffer, PCMTRIG_STOP);
+                       sndbuf_dma(sc->pch.buffer, PCMTRIG_STOP);
                        sc->pch.stopping = 0;
                        if (sc->pch.hwch == 1)
                                ess_write(sc, 0xb8, ess_read(sc, 0xb8) & ~0x01);
@@ -380,11 +381,14 @@ ess_intr(void *arg)
        }
 
        if (rirq) {
-               if (sc->rch.run)
+               if (sc->rch.run) {
+                       ess_unlock(sc);
                        chn_intr(sc->rch.channel);
+                       ess_lock(sc);
+               }
                if (sc->rch.stopping) {
                        sc->rch.run = 0;
-                       sndbuf_isadma(sc->rch.buffer, PCMTRIG_STOP);
+                       sndbuf_dma(sc->rch.buffer, PCMTRIG_STOP);
                        sc->rch.stopping = 0;
                        /* XXX: will this stop audio2? */
                        ess_write(sc, 0xb8, ess_read(sc, 0xb8) & ~0x01);
@@ -562,13 +566,13 @@ esschan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *
        ch->parent = sc;
        ch->channel = c;
        ch->buffer = b;
-       if (sndbuf_alloc(ch->buffer, sc->parent_dmat, sc->bufsize) == -1)
+       if (sndbuf_alloc(ch->buffer, sc->parent_dmat, sc->bufsize) != 0)
                return NULL;
        ch->dir = dir;
        ch->hwch = 1;
        if ((dir == PCMDIR_PLAY) && (sc->duplex))
                ch->hwch = 2;
-       sndbuf_isadmasetup(ch->buffer, (ch->hwch == 1)? sc->drq1 : sc->drq2);
+       sndbuf_dmasetup(ch->buffer, (ch->hwch == 1)? sc->drq1 : sc->drq2);
        return ch;
 }
 
@@ -615,7 +619,7 @@ esschan_trigger(kobj_t obj, void *data, int go)
        switch (go) {
        case PCMTRIG_START:
                ch->run = 1;
-               sndbuf_isadma(ch->buffer, go);
+               sndbuf_dma(ch->buffer, go);
                ess_start(ch);
                break;
 
@@ -633,7 +637,7 @@ esschan_getptr(kobj_t obj, void *data)
 {
        struct ess_chinfo *ch = data;
 
-       return sndbuf_isadmaptr(ch->buffer);
+       return sndbuf_dmaptr(ch->buffer);
 }
 
 static struct pcmchan_caps *
@@ -846,7 +850,7 @@ ess_attach(device_t dev)
        if (sc->newspeed)
                ess_setmixer(sc, 0x71, 0x22);
 
-       snd_setup_intr(dev, sc->irq, INTR_MPSAFE, ess_intr, sc, &sc->ih, NULL);
+       snd_setup_intr(dev, sc->irq, 0, ess_intr, sc, &sc->ih);
        if (!sc->duplex)
                pcm_setflags(dev, pcm_getflags(dev) | SD_F_SIMPLEX);
 
@@ -856,7 +860,8 @@ ess_attach(device_t dev)
                        /*filter*/NULL, /*filterarg*/NULL,
                        /*maxsize*/sc->bufsize, /*nsegments*/1,
                        /*maxsegz*/0x3ffff,
-                       /*flags*/0, &sc->parent_dmat) != 0) {
+                       /*flags*/0,
+                       &sc->parent_dmat) != 0) {
                device_printf(dev, "unable to create dma tag\n");
                goto no;
        }
@@ -866,9 +871,10 @@ ess_attach(device_t dev)
        else
                buf[0] = '\0';
 
-       ksnprintf(status, SND_STATUSLEN, "at io 0x%lx irq %ld drq %ld%s bufsz %u",
+       ksnprintf(status, SND_STATUSLEN, "at io 0x%lx irq %ld drq %ld%s bufsz %u %s",
                rman_get_start(sc->io_base), rman_get_start(sc->irq),
-               rman_get_start(sc->drq1), buf, sc->bufsize);
+               rman_get_start(sc->drq1), buf, sc->bufsize,
+               PCM_KLDSTRING(snd_ess));
 
        if (pcm_register(dev, sc, 1, 1))
                goto no;
@@ -935,7 +941,7 @@ static driver_t ess_driver = {
 };
 
 DRIVER_MODULE(snd_ess, sbc, ess_driver, pcm_devclass, 0, 0);
-MODULE_DEPEND(snd_ess, snd_pcm, PCM_MINVER, PCM_PREFVER, PCM_MAXVER);
+MODULE_DEPEND(snd_ess, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
 MODULE_DEPEND(snd_ess, snd_sbc, 1, 1, 1);
 MODULE_VERSION(snd_ess, 1);
 
@@ -967,7 +973,7 @@ esscontrol_attach(device_t dev)
        int rid, i, x;
 
        rid = 0;
-       io = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0, ~0, 1, RF_ACTIVE);
+       io = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
        x = 0;
        for (i = 0; i < 0x100; i++) {
                port_wr(io, 0, i);
@@ -1007,4 +1013,4 @@ static driver_t esscontrol_driver = {
 };
 
 DRIVER_MODULE(esscontrol, isa, esscontrol_driver, esscontrol_devclass, 0, 0);
-
+DRIVER_MODULE(esscontrol, acpi, esscontrol_driver, esscontrol_devclass, 0, 0);
index 05fda48..b8f121f 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/*-
  * Copyright (c) 1999 Seigo Tanimura
  * Copyright (c) 1999 Ville-Pertti Keinonen
  * All rights reserved.
@@ -24,8 +24,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/sound/isa/gusc.c,v 1.5.2.6 2002/04/22 15:49:30 cg Exp $
- * $DragonFly: src/sys/dev/sound/isa/gusc.c,v 1.10 2006/12/22 23:26:25 swildner Exp $
+ * $FreeBSD: src/sys/dev/sound/isa/gusc.c,v 1.16 2005/01/06 01:43:17 imp Exp $
+ * $DragonFly: src/sys/dev/sound/isa/gusc.c,v 1.11 2007/01/04 21:47:02 corecode Exp $
  */
 
 #include <sys/param.h>
@@ -44,7 +44,7 @@
 #include <bus/isa/isavar.h>
 #include <bus/isa/isa_common.h>
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/gusc.c,v 1.10 2006/12/22 23:26:25 swildner Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/gusc.c,v 1.11 2007/01/04 21:47:02 corecode Exp $");
 
 #define LOGICALID_NOPNP 0
 #define LOGICALID_PCM   0x0000561e
@@ -317,9 +317,8 @@ gusc_attach(device_t dev)
                return (ENXIO);
        }
 
-       if (scp->irq != NULL) {
-               bus_setup_intr(dev, scp->irq, 0, gusc_intr, scp, &ih, NULL);
-       }
+       if (scp->irq != NULL)
+               bus_setup_intr(dev, scp->irq, INTR_TYPE_AV, gusc_intr, scp, &ih, NULL);
        bus_generic_attach(dev);
 
        return (0);
@@ -422,8 +421,7 @@ gusc_release_resource(device_t bus, device_t child, int type, int rid,
 
 static int
 gusc_setup_intr(device_t dev, device_t child, struct resource *irq,
-               int flags, driver_intr_t *intr, void *arg, 
-               void **cookiep, lwkt_serialize_t serializer)
+               int flags, driver_intr_t *intr, void *arg, void **cookiep)
 {
        sc_p scp = (sc_p)device_get_softc(dev);
        devclass_t devclass;
@@ -439,7 +437,7 @@ gusc_setup_intr(device_t dev, device_t child, struct resource *irq,
                return 0;
        }
        return bus_generic_setup_intr(dev, child, irq, flags, intr,
-                                     arg, cookiep, serializer);
+                                     arg, cookiep, NULL);
 }
 
 static device_t
@@ -505,8 +503,10 @@ alloc_resource(sc_p scp)
                }
                if (scp->irq == NULL) {
                        scp->irq_rid = 0;
-                       scp->irq = bus_alloc_resource(scp->dev, SYS_RES_IRQ, &scp->irq_rid,
-                                                     0, ~0, 1, RF_ACTIVE | RF_SHAREABLE);
+                       scp->irq = 
+                               bus_alloc_resource_any(scp->dev, SYS_RES_IRQ, 
+                                                      &scp->irq_rid,
+                                                      RF_ACTIVE|RF_SHAREABLE);
                        if (scp->irq == NULL)
                                return (1);
                        scp->irq_alloced = 0;
@@ -515,8 +515,11 @@ alloc_resource(sc_p scp)
                        if (scp->drq[i] == NULL) {
                                scp->drq_rid[i] = i;
                                if (base == 0 || i == 0)
-                                       scp->drq[i] = bus_alloc_resource(scp->dev, SYS_RES_DRQ, &scp->drq_rid[i],
-                                                                        0, ~0, 1, RF_ACTIVE);
+                                       scp->drq[i] = 
+                                               bus_alloc_resource_any(
+                                                       scp->dev, SYS_RES_DRQ,
+                                                       &scp->drq_rid[i],
+                                                       RF_ACTIVE);
                                else if ((flags & DV_F_DUAL_DMA) != 0)
                                        /* XXX The secondary drq is specified in the flag. */
                                        scp->drq[i] = bus_alloc_resource(scp->dev, SYS_RES_DRQ, &scp->drq_rid[i],
@@ -652,7 +655,8 @@ static driver_t gusc_driver = {
  * gusc can be attached to an isa bus.
  */
 DRIVER_MODULE(snd_gusc, isa, gusc_driver, gusc_devclass, 0, 0);
-MODULE_DEPEND(snd_gusc, snd_pcm, PCM_MINVER, PCM_PREFVER, PCM_MAXVER);
+DRIVER_MODULE(snd_gusc, acpi, gusc_driver, gusc_devclass, 0, 0);
+MODULE_DEPEND(snd_gusc, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
 MODULE_VERSION(snd_gusc, 1);
 
 
index fcf49f6..b35e2bb 100644 (file)
@@ -1,6 +1,6 @@
-/*
+/*-
  * Copyright (c) 2001 George Reid <greid@ukug.uk.freebsd.org>
- * Copyright (c) 1999 Cameron Grant <gandalf@vilnya.demon.co.uk>
+ * Copyright (c) 1999 Cameron Grant <cg@freebsd.org>
  * Copyright Luigi Rizzo, 1997,1998
  * Copyright by Hannu Savolainen 1994, 1995
  * All rights reserved.
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/sound/isa/mss.c,v 1.48.2.11 2002/12/24 21:17:41 semenu Exp $
- * $DragonFly: src/sys/dev/sound/isa/mss.c,v 1.9 2006/12/22 23:26:25 swildner Exp $
+ * $FreeBSD: src/sys/dev/sound/isa/mss.c,v 1.95.2.3 2006/04/04 17:30:59 ariff Exp $
+ * $DragonFly: src/sys/dev/sound/isa/mss.c,v 1.10 2007/01/04 21:47:02 corecode Exp $
  */
 
 #include <dev/sound/pcm/sound.h>
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/mss.c,v 1.9 2006/12/22 23:26:25 swildner Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/mss.c,v 1.10 2007/01/04 21:47:02 corecode Exp $");
 
 /* board-specific include files */
 #include <dev/sound/isa/mss.h>
 #include <dev/sound/isa/sb.h>
 #include <dev/sound/chip.h>
 
+#include <bus/isa/isavar.h>
+
 #include "mixer_if.h"
 
 #define MSS_DEFAULT_BUFSZ (4096)
-#define        abs(x)  (((x) < 0) ? -(x) : (x))
 #define MSS_INDEXED_REGS 0x20
 #define OPL_INDEXED_REGS 0x19
 
@@ -69,7 +70,7 @@ struct mss_info {
     int                     drq2_rid;
     void           *ih;
     bus_dma_tag_t    parent_dmat;
-    void           *lock;
+    struct spinlock *lock;
 
     char mss_indexed_regs[MSS_INDEXED_REGS];
     char opl_indexed_regs[OPL_INDEXED_REGS];
@@ -94,7 +95,9 @@ static driver_intr_t  mss_intr;
 
 /* prototypes for local functions */
 static int             mss_detect(device_t dev, struct mss_info *mss);
+#ifndef PC98
 static int             opti_detect(device_t dev, struct mss_info *mss);
+#endif
 static char            *ymf_test(device_t dev, struct mss_info *mss);
 static void            ad_unmute(struct mss_info *mss);
 
@@ -113,7 +116,9 @@ static void             ad_leave_MCE(struct mss_info *mss);
 /* OPTi-specific functions */
 static void            opti_write(struct mss_info *mss, u_char reg,
                                   u_char data);
+#ifndef PC98
 static u_char          opti_read(struct mss_info *mss, u_char reg);
+#endif
 static int             opti_init(device_t dev, struct mss_info *mss);
 
 /* io primitives */
@@ -161,6 +166,7 @@ static struct pcmchan_caps opti931_caps = {4000, 48000, opti931_fmt, 0};
 #define MD_AD1848      0x91
 #define MD_AD1845      0x92
 #define MD_CS42XX      0xA1
+#define MD_CS423X      0xA2
 #define MD_OPTI930     0xB0
 #define        MD_OPTI931      0xB1
 #define MD_OPTI925     0xB2
@@ -315,20 +321,23 @@ mss_alloc_resources(struct mss_info *mss, device_t dev)
 {
        int pdma, rdma, ok = 1;
        if (!mss->io_base)
-               mss->io_base = bus_alloc_resource(dev, SYS_RES_IOPORT, &mss->io_rid,
-                                                 0, ~0, 1, RF_ACTIVE);
+               mss->io_base = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
+                                                     &mss->io_rid, RF_ACTIVE);
        if (!mss->irq)
-               mss->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &mss->irq_rid,
-                                             0, ~0, 1, RF_ACTIVE);
+               mss->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ,
+                                                 &mss->irq_rid, RF_ACTIVE);
        if (!mss->drq1)
-               mss->drq1 = bus_alloc_resource(dev, SYS_RES_DRQ, &mss->drq1_rid,
-                                              0, ~0, 1, RF_ACTIVE);
+               mss->drq1 = bus_alloc_resource_any(dev, SYS_RES_DRQ,
+                                                  &mss->drq1_rid,
+                                                  RF_ACTIVE);
        if (mss->conf_rid >= 0 && !mss->conf_base)
-               mss->conf_base = bus_alloc_resource(dev, SYS_RES_IOPORT, &mss->conf_rid,
-                                                   0, ~0, 1, RF_ACTIVE);
+               mss->conf_base = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
+                                                       &mss->conf_rid,
+                                                       RF_ACTIVE);
        if (mss->drq2_rid >= 0 && !mss->drq2)
-               mss->drq2 = bus_alloc_resource(dev, SYS_RES_DRQ, &mss->drq2_rid,
-                                              0, ~0, 1, RF_ACTIVE);
+               mss->drq2 = bus_alloc_resource_any(dev, SYS_RES_DRQ,
+                                                  &mss->drq2_rid,
+                                                  RF_ACTIVE);
 
        if (!mss->io_base || !mss->drq1 || !mss->irq) ok = 0;
        if (mss->conf_rid >= 0 && !mss->conf_base) ok = 0;
@@ -705,8 +714,8 @@ mss_init(struct mss_info *mss, device_t dev)
                /* end of reset */
 
                rid = 0;
-               alt = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid,
-                                    0, ~0, 1, RF_ACTIVE);
+               alt = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid,
+                                            RF_ACTIVE);
                if (alt == NULL) {
                        kprintf("XXX couldn't init GUS PnP/MAX\n");
                        break;
@@ -792,11 +801,15 @@ mss_intr(void *arg)
                c &= ~served;
                if (sndbuf_runsz(mss->pch.buffer) && (c & 0x10)) {
                        served |= 0x10;
+                       mss_unlock(mss);
                        chn_intr(mss->pch.channel);
+                       mss_lock(mss);
                }
                if (sndbuf_runsz(mss->rch.buffer) && (c & 0x20)) {
                        served |= 0x20;
+                       mss_unlock(mss);
                        chn_intr(mss->rch.channel);
+                       mss_lock(mss);
                }
                /* now ack the interrupt */
                if (FULL_DUPLEX(mss)) ad_write(mss, 24, ~c); /* ack selectively */
@@ -962,11 +975,14 @@ mss_speed(struct mss_chinfo *ch, int speed)
                {8000, 5512, 16000, 11025, 27429, 18900, 32000, 22050,
                -1, 37800, -1, 44100, 48000, 33075, 9600, 6615};
 
+#define abs(i) (i < 0 ? -i : i)
                for (i = 1; i < 16; i++)
                        if (speeds[i] > 0 &&
                            abs(speed-speeds[i]) < abs(speed-speeds[sel])) sel = i;
+#undef abs
                speed = speeds[sel];
                ad_write(mss, 8, (ad_read(mss, 8) & 0xf0) | sel);
+               ad_wait_init(mss, 10000);
        }
        ad_leave_MCE(mss);
 
@@ -1006,7 +1022,11 @@ mss_format(struct mss_chinfo *ch, u_int32_t format)
        arg <<= 4;
        ad_enter_MCE(mss);
        ad_write(mss, 8, (ad_read(mss, 8) & 0x0f) | arg);
-       if (FULL_DUPLEX(mss)) ad_write(mss, 28, arg); /* capture mode */
+       ad_wait_init(mss, 10000);
+       if (ad_read(mss, 12) & 0x40) {  /* mode2? */
+               ad_write(mss, 28, arg); /* capture mode */
+               ad_wait_init(mss, 10000);
+       }
        ad_leave_MCE(mss);
        return format;
 }
@@ -1101,15 +1121,23 @@ opti931_intr(void *arg)
                if (reason & 1) {
                        DEB(kprintf("one more try...\n");)
                        if (--loops) goto again;
-                       else DDB(kprintf("intr, but mc11 not set\n");)
+                       else BVDDB(kprintf("intr, but mc11 not set\n");)
                }
                if (loops == 0) BVDDB(kprintf("intr, nothing in mcir11 0x%02x\n", mc11));
                mss_unlock(mss);
                return;
        }
 
-       if (sndbuf_runsz(mss->rch.buffer) && (mc11 & 8)) chn_intr(mss->rch.channel);
-       if (sndbuf_runsz(mss->pch.buffer) && (mc11 & 4)) chn_intr(mss->pch.channel);
+       if (sndbuf_runsz(mss->rch.buffer) && (mc11 & 8)) {
+               mss_unlock(mss);
+               chn_intr(mss->rch.channel);
+               mss_lock(mss);
+       }
+       if (sndbuf_runsz(mss->pch.buffer) && (mc11 & 4)) {
+               mss_unlock(mss);
+               chn_intr(mss->pch.channel);
+               mss_lock(mss);
+       }
        opti_wr(mss, 11, ~mc11); /* ack */
        if (--loops) goto again;
        mss_unlock(mss);
@@ -1128,8 +1156,9 @@ msschan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *
        ch->channel = c;
        ch->buffer = b;
        ch->dir = dir;
-       if (sndbuf_alloc(ch->buffer, mss->parent_dmat, mss->bufsize) == -1) return NULL;
-       sndbuf_isadmasetup(ch->buffer, (dir == PCMDIR_PLAY)? mss->drq1 : mss->drq2);
+       if (sndbuf_alloc(ch->buffer, mss->parent_dmat, mss->bufsize) != 0)
+               return NULL;
+       sndbuf_dmasetup(ch->buffer, (dir == PCMDIR_PLAY)? mss->drq1 : mss->drq2);
        return ch;
 }
 
@@ -1179,7 +1208,7 @@ msschan_trigger(kobj_t obj, void *data, int go)
        if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD)
                return 0;
 
-       sndbuf_isadma(ch->buffer, go);
+       sndbuf_dma(ch->buffer, go);
        mss_lock(mss);
        mss_trigger(ch, go);
        mss_unlock(mss);
@@ -1190,7 +1219,7 @@ static int
 msschan_getptr(kobj_t obj, void *data)
 {
        struct mss_chinfo *ch = data;
-       return sndbuf_isadmaptr(ch->buffer);
+       return sndbuf_dmaptr(ch->buffer);
 }
 
 static struct pcmchan_caps *
@@ -1347,6 +1376,7 @@ mss_detect(device_t dev, struct mss_info *mss)
        name = "AD1848";
        mss->bd_id = MD_AD1848; /* AD1848 or CS4248 */
 
+#ifndef PC98
        if (opti_detect(dev, mss)) {
                switch (mss->bd_id) {
                        case MD_OPTI924:
@@ -1359,6 +1389,7 @@ mss_detect(device_t dev, struct mss_info *mss)
                kprintf("Found OPTi device %s\n", name);
                if (opti_init(dev, mss) == 0) goto gotit;
        }
+#endif
 
        /*
        * Check that the I/O address is in use.
@@ -1374,7 +1405,7 @@ mss_detect(device_t dev, struct mss_info *mss)
                if ((tmp = io_rd(mss, MSS_INDEX)) & MSS_IDXBUSY) DELAY(10000);
                else break;
 
-       if (i >= 10) {  /* Not a AD1848 */
+       if (i >= 10) {  /* Not an AD1848 */
                BVDDB(kprintf("mss_detect, busy still set (0x%02x)\n", tmp));
                goto no;
        }
@@ -1565,6 +1596,7 @@ no:
        return ENXIO;
 }
 
+#ifndef PC98
 static int
 opti_detect(device_t dev, struct mss_info *mss)
 {
@@ -1610,6 +1642,7 @@ opti_detect(device_t dev, struct mss_info *mss)
        }
        return 0;
 }
+#endif
 
 static char *
 ymf_test(device_t dev, struct mss_info *mss)
@@ -1644,6 +1677,10 @@ ymf_test(device_t dev, struct mss_info *mss)
                if (!j) {
                        bus_release_resource(dev, SYS_RES_IOPORT,
                                             mss->conf_rid, mss->conf_base);
+#ifdef PC98
+                       /* PC98 need this. I don't know reason why. */
+                       bus_delete_resource(dev, SYS_RES_IOPORT, mss->conf_rid);
+#endif
                        mss->conf_base = 0;
                        continue;
                }
@@ -1667,16 +1704,23 @@ mss_doattach(device_t dev, struct mss_info *mss)
        rdma = rman_get_start(mss->drq2);
        if (flags & DV_F_TRUE_MSS) {
                /* has IRQ/DMA registers, set IRQ and DMA addr */
+#ifdef PC98 /* CS423[12] in PC98 can use IRQ3,5,10,12 */
+               static char     interrupt_bits[13] =
+               {-1, -1, -1, 0x08, -1, 0x10, -1, -1, -1, -1, 0x18, -1, 0x20};
+#else
                static char     interrupt_bits[12] =
                {-1, -1, -1, -1, -1, 0x28, -1, 0x08, -1, 0x10, 0x18, 0x20};
+#endif
                static char     pdma_bits[4] =  {1, 2, -1, 3};
                static char     valid_rdma[4] = {1, 0, -1, 0};
                char            bits;
 
                if (!mss->irq || (bits = interrupt_bits[rman_get_start(mss->irq)]) == -1)
                        goto no;
+#ifndef PC98 /* CS423[12] in PC98 don't support this. */
                io_wr(mss, 0, bits | 0x40);     /* config port */
                if ((io_rd(mss, 3) & 0x40) == 0) device_printf(dev, "IRQ Conflict?\n");
+#endif
                /* Write IRQ+DMA setup */
                if (pdma_bits[pdma] == -1) goto no;
                bits |= pdma_bits[pdma];
@@ -1693,10 +1737,10 @@ mss_doattach(device_t dev, struct mss_info *mss)
        mixer_init(dev, (mss->bd_id == MD_YM0020)? &ymmix_mixer_class : &mssmix_mixer_class, mss);
        switch (mss->bd_id) {
        case MD_OPTI931:
-               snd_setup_intr(dev, mss->irq, INTR_MPSAFE, opti931_intr, mss, &mss->ih, NULL);
+               snd_setup_intr(dev, mss->irq, 0, opti931_intr, mss, &mss->ih);
                break;
        default:
-               snd_setup_intr(dev, mss->irq, INTR_MPSAFE, mss_intr, mss, &mss->ih, NULL);
+               snd_setup_intr(dev, mss->irq, 0, mss_intr, mss, &mss->ih);
        }
        if (pdma == rdma)
                pcm_setflags(dev, pcm_getflags(dev) | SD_F_SIMPLEX);
@@ -1705,8 +1749,8 @@ mss_doattach(device_t dev, struct mss_info *mss)
                        /*highaddr*/BUS_SPACE_MAXADDR,
                        /*filter*/NULL, /*filterarg*/NULL,
                        /*maxsize*/mss->bufsize, /*nsegments*/1,
-                       /*maxsegz*/0x3ffff,
-                       /*flags*/0, &mss->parent_dmat) != 0) {
+                       /*maxsegz*/0x3ffff, /*flags*/0,
+                       &mss->parent_dmat) != 0) {
                device_printf(dev, "unable to create dma tag\n");
                goto no;
        }
@@ -1794,8 +1838,7 @@ mss_resume(device_t dev)
 
        mss = pcm_getdevinfo(dev);
 
-       if (mss->bd_id == MD_YM0020)
-       {
+       if(mss->bd_id == MD_YM0020 || mss->bd_id == MD_CS423X) {
                /* This works on a Toshiba Libretto 100CT. */
                for (i = 0; i < MSS_INDEXED_REGS; i++)
                        ad_write(mss, i, mss->mss_indexed_regs[i]);
@@ -1803,6 +1846,15 @@ mss_resume(device_t dev)
                        conf_wr(mss, i, mss->opl_indexed_regs[i]);
                mss_intr(mss);
        }
+
+       if (mss->bd_id == MD_CS423X) {
+               /* Needed on IBM Thinkpad 600E */
+               mss_lock(mss);
+               mss_format(&mss->pch, mss->pch.channel->format);
+               mss_speed(&mss->pch, mss->pch.channel->speed);
+               mss_unlock(mss);
+       }
+
        return 0;
 
 }
@@ -1824,7 +1876,7 @@ mss_suspend(device_t dev)
 
        mss = pcm_getdevinfo(dev);
 
-       if(mss->bd_id == MD_YM0020)
+       if(mss->bd_id == MD_YM0020 || mss->bd_id == MD_CS423X)
        {
                /* this stops playback. */
                conf_wr(mss, 0x12, 0x0c);
@@ -1855,7 +1907,7 @@ static driver_t mss_driver = {
 };
 
 DRIVER_MODULE(snd_mss, isa, mss_driver, pcm_devclass, 0, 0);
-MODULE_DEPEND(snd_mss, snd_pcm, PCM_MINVER, PCM_PREFVER, PCM_MAXVER);
+MODULE_DEPEND(snd_mss, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
 MODULE_VERSION(snd_mss, 1);
 
 static int
@@ -1866,8 +1918,7 @@ azt2320_mss_mode(struct mss_info *mss, device_t dev)
 
        rid = 0;
        ret = -1;
-       sbport = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid,
-                                   0, ~0, 1, RF_ACTIVE);
+       sbport = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
        if (sbport) {
                for (i = 0; i < 1000; i++) {
                        if ((port_rd(sbport, SBDSP_STATUS) & 0x80))
@@ -1941,6 +1992,7 @@ pnpmss_attach(device_t dev)
        case 0x0000630e:                        /* CSC0000 */
        case 0x0001630e:                        /* CSC0100 */
            mss->bd_flags |= BD_F_MSS_OFFSET;
+           mss->bd_id = MD_CS423X;
            break;
 
        case 0x2100a865:                        /* YHM0021 */
@@ -1974,8 +2026,10 @@ pnpmss_attach(device_t dev)
            mss->conf_rid = 3;
            mss->bd_id = MD_OPTI924;
            mss->bd_flags |= BD_F_924PNP;
-           if(opti_init(dev, mss) != 0)
+           if(opti_init(dev, mss) != 0) {
+                   kfree(mss, M_DEVBUF);
                    return ENXIO;
+           }
            break;
 
        case 0x1022b839:                        /* NMX2210 */
@@ -1984,8 +2038,10 @@ pnpmss_attach(device_t dev)
 
        case 0x01005407:                        /* AZT0001 */
            /* put into MSS mode first (snatched from NetBSD) */
-           if (azt2320_mss_mode(mss, dev) == -1)
+           if (azt2320_mss_mode(mss, dev) == -1) {
+                   kfree(mss, M_DEVBUF);
                    return ENXIO;
+           }
 
            mss->bd_flags |= BD_F_MSS_OFFSET;
            mss->io_rid = 2;
@@ -2124,6 +2180,7 @@ opti_write(struct mss_info *mss, u_char reg, u_char val)
        }
 }
 
+#ifndef PC98
 u_char
 opti_read(struct mss_info *mss, u_char reg)
 {
@@ -2147,6 +2204,7 @@ opti_read(struct mss_info *mss, u_char reg)
        }
        return -1;
 }
+#endif
 
 static device_method_t pnpmss_methods[] = {
        /* Device interface */
@@ -2166,7 +2224,8 @@ static driver_t pnpmss_driver = {
 };
 
 DRIVER_MODULE(snd_pnpmss, isa, pnpmss_driver, pcm_devclass, 0, 0);
-MODULE_DEPEND(snd_pnpmss, snd_pcm, PCM_MINVER, PCM_PREFVER, PCM_MAXVER);
+DRIVER_MODULE(snd_pnpmss, acpi, pnpmss_driver, pcm_devclass, 0, 0);
+MODULE_DEPEND(snd_pnpmss, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
 MODULE_VERSION(snd_pnpmss, 1);
 
 static int
@@ -2250,7 +2309,7 @@ static driver_t guspcm_driver = {
 };
 
 DRIVER_MODULE(snd_guspcm, gusc, guspcm_driver, pcm_devclass, 0, 0);
-MODULE_DEPEND(snd_guspcm, snd_pcm, PCM_MINVER, PCM_PREFVER, PCM_MAXVER);
+MODULE_DEPEND(snd_guspcm, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
 MODULE_VERSION(snd_guspcm, 1);
 
 
index de91131..ca586c3 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/*-
  * file: mss.h
  *
  * (C) 1997 Luigi Rizzo (luigi@iet.unipi.it)
@@ -8,6 +8,35 @@
  *
  */
 
+/*-
+ * Copyright (c) 1999 Doug Rabson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: src/sys/dev/sound/isa/mss.h,v 1.12 2005/01/06 01:43:17 imp Exp $
+ * $DragonFly: src/sys/dev/sound/isa/mss.h,v 1.4 2007/01/04 21:47:02 corecode Exp $
+ */
+
 /*
  *
 
@@ -191,12 +220,20 @@ mixer_ent mix_devices[32][2] = {
 MIX_NONE(SOUND_MIXER_VOLUME),
 MIX_NONE(SOUND_MIXER_BASS),
 MIX_NONE(SOUND_MIXER_TREBLE),
+#ifdef PC98    /* PC98's synth is assigned to AUX#2 */
+MIX_ENT(SOUND_MIXER_SYNTH,      4, 1, 0, 5,     5, 1, 0, 5),
+#else          /* AT386's synth is assigned to AUX#1 */
 MIX_ENT(SOUND_MIXER_SYNTH,      2, 1, 0, 5,     3, 1, 0, 5),
+#endif
 MIX_ENT(SOUND_MIXER_PCM,        6, 1, 0, 6,     7, 1, 0, 6),
 MIX_ENT(SOUND_MIXER_SPEAKER,   26, 1, 0, 4,     0, 0, 0, 0),
 MIX_ENT(SOUND_MIXER_LINE,      18, 1, 0, 5,    19, 1, 0, 5),
 MIX_ENT(SOUND_MIXER_MIC,        0, 0, 5, 1,     1, 0, 5, 1),
+#ifdef PC98    /* PC98's cd-audio is assigned to AUX#1 */
+MIX_ENT(SOUND_MIXER_CD,                 2, 1, 0, 5,     3, 1, 0, 5),
+#else          /* AT386's cd-audio is assigned to AUX#2 */
 MIX_ENT(SOUND_MIXER_CD,                 4, 1, 0, 5,     5, 1, 0, 5),
+#endif
 MIX_ENT(SOUND_MIXER_IMIX,      13, 1, 2, 6,     0, 0, 0, 0),
 MIX_NONE(SOUND_MIXER_ALTPCM),
 MIX_NONE(SOUND_MIXER_RECLEV),
@@ -270,35 +307,6 @@ MIX_NONE(SOUND_MIXER_LINE3),
      SOUND_MASK_LINE   | SOUND_MASK_MIC   | SOUND_MASK_CD  | \
      SOUND_MASK_IGAIN  | SOUND_MASK_LINE1                    )
 
-/*-
- * Copyright (c) 1999 Doug Rabson
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/dev/sound/isa/mss.h,v 1.7.2.6 2002/04/22 15:49:31 cg Exp $
- * $DragonFly: src/sys/dev/sound/isa/mss.h,v 1.3 2005/09/01 00:18:24 swildner Exp $
- */
-
 /*
  * Register definitions for the Yamaha OPL3-SA[23x].
  */
index 0cb7069..35c29f8 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * file: sbcard.h
- * $FreeBSD: src/sys/dev/sound/isa/sb.h,v 1.12.2.3 2002/04/22 15:49:31 cg Exp $
- * $DragonFly: src/sys/dev/sound/isa/sb.h,v 1.2 2003/06/17 04:28:30 dillon Exp $
+ * $FreeBSD: src/sys/dev/sound/isa/sb.h,v 1.15 2004/05/13 11:32:54 truckman Exp $
+ * $DragonFly: src/sys/dev/sound/isa/sb.h,v 1.3 2007/01/04 21:47:02 corecode Exp $
  */
 
 #ifndef SB_H
@@ -9,6 +9,7 @@
 
 struct sbc_softc;
 void sbc_lock(struct sbc_softc *);
+void sbc_lockassert(struct sbc_softc *);
 void sbc_unlock(struct sbc_softc *);
 
 /*
index 73031a2..1858a7e 100644 (file)
@@ -1,5 +1,5 @@
-/*
- * Copyright (c) 1999 Cameron Grant <gandalf@vilnya.demon.co.uk>
+/*-
+ * Copyright (c) 1999 Cameron Grant <cg@freebsd.org>
  * Copyright 1997,1998 Luigi Rizzo.
  *
  * Derived from files in the Voxware 3.5 distribution,
@@ -28,8 +28,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/sound/isa/sb16.c,v 1.64.2.7 2002/12/24 21:17:42 semenu Exp $
- * $DragonFly: src/sys/dev/sound/isa/sb16.c,v 1.7 2006/12/22 23:26:25 swildner Exp $
+ * $FreeBSD: src/sys/dev/sound/isa/sb16.c,v 1.90.2.1 2005/12/30 19:55:53 netchild Exp $
+ * $DragonFly: src/sys/dev/sound/isa/sb16.c,v 1.8 2007/01/04 21:47:02 corecode Exp $
  */
 
 #include <dev/sound/pcm/sound.h>
 #include  <dev/sound/isa/sb.h>
 #include  <dev/sound/chip.h>
 
+#include <bus/isa/isavar.h>
+
 #include "mixer_if.h"
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/sb16.c,v 1.7 2006/12/22 23:26:25 swildner Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/sb16.c,v 1.8 2007/01/04 21:47:02 corecode Exp $");
 
 #define SB16_BUFFSIZE  4096
 #define PLAIN_SB16(x) ((((x)->bd_flags) & (BD_F_SB16|BD_F_SB16X)) == BD_F_SB16)
@@ -124,6 +126,12 @@ sb_lock(struct sb_info *sb) {
        sbc_lock(device_get_softc(sb->parent_dev));
 }
 
+static void
+sb_lockassert(struct sb_info *sb) {
+
+       sbc_lockassert(device_get_softc(sb->parent_dev));
+}
+
 static void
 sb_unlock(struct sb_info *sb) {
 
@@ -167,7 +175,7 @@ sb_dspwr(struct sb_info *sb, u_char val)
                        return 1;
                }
        }
-#if defined(__FreeBSD__) && __FreeBSD_version > 500000
+#if __FreeBSD_version > 500000
        if (curthread->td_intr_nesting_level == 0)
                kprintf("sb_dspwr(0x%02x) timed out.\n", val);
 #endif
@@ -204,7 +212,7 @@ sb_cmd2(struct sb_info *sb, u_char cmd, int val)
 #if 0
        kprintf("sb_cmd2: %x, %x\n", cmd, val);
 #endif
-       sb_lock(sb);
+       sb_lockassert(sb);
        r = 0;
        if (sb_dspwr(sb, cmd)) {
                if (sb_dspwr(sb, val & 0xff)) {
@@ -213,7 +221,6 @@ sb_cmd2(struct sb_info *sb, u_char cmd, int val)
                        }
                }
        }
-       sb_unlock(sb);
 
        return r;
 }
@@ -238,12 +245,11 @@ sb_getmixer(struct sb_info *sb, u_int port)
 {
        int val;
 
-       sb_lock(sb);
+       sb_lockassert(sb);
        sb_wr(sb, SB_MIX_ADDR, (u_char) (port & 0xff)); /* Select register */
        DELAY(10);
        val = sb_rd(sb, SB_MIX_DATA);
        DELAY(10);
-       sb_unlock(sb);
 
        return val;
 }
@@ -267,12 +273,11 @@ sb_reset_dsp(struct sb_info *sb)
 {
        u_char b;
 
-       sb_lock(sb);
+       sb_lockassert(sb);
        sb_wr(sb, SBDSP_RST, 3);
        DELAY(100);
        sb_wr(sb, SBDSP_RST, 0);
        b = sb_get_byte(sb);
-       sb_unlock(sb);
        if (b != 0xAA) {
                DEB(kprintf("sb_reset_dsp 0x%lx failed\n",
                           rman_get_start(sb->io_base)));
@@ -326,6 +331,19 @@ sb16mix_init(struct snd_mixer *m)
        return 0;
 }
 
+static int
+rel2abs_volume(int x, int max)
+{
+       int temp;
+       
+       temp = ((x * max) + 50) / 100;
+       if (temp > max)
+               temp = max;
+       else if (temp < 0)
+               temp = 0;
+       return (temp);
+}
+
 static int
 sb16mix_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right)
 {
@@ -336,8 +354,8 @@ sb16mix_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right)
        e = &sb16_mixtab[dev];
        max = (1 << e->bits) - 1;
 
-       left = (left * max) / 100;
-       right = (right * max) / 100;
+       left = rel2abs_volume(left, max);
+       right = rel2abs_volume(right, max);
 
        sb_setmixer(sb, e->reg, left << e->ofs);
        if (e->stereo)
@@ -355,23 +373,32 @@ static int
 sb16mix_setrecsrc(struct snd_mixer *m, u_int32_t src)
 {
        struct sb_info *sb = mix_getdevinfo(m);
-       u_char recdev;
+       u_char recdev_l, recdev_r;
 
-       recdev = 0;
-       if (src & SOUND_MASK_MIC)
-               recdev |= 0x01; /* mono mic */
+       recdev_l = 0;
+       recdev_r = 0;
+       if (src & SOUND_MASK_MIC) {
+               recdev_l |= 0x01; /* mono mic */
+               recdev_r |= 0x01;
+       }
 
-       if (src & SOUND_MASK_CD)
-               recdev |= 0x06; /* l+r cd */
+       if (src & SOUND_MASK_CD) {
+               recdev_l |= 0x04; /* l cd */
+               recdev_r |= 0x02; /* r cd */
+       }
 
-       if (src & SOUND_MASK_LINE)
-               recdev |= 0x18; /* l+r line */
+       if (src & SOUND_MASK_LINE) {
+               recdev_l |= 0x10; /* l line */
+               recdev_r |= 0x08; /* r line */
+       }
 
-       if (src & SOUND_MASK_SYNTH)
-               recdev |= 0x60; /* l+r midi */
+       if (src & SOUND_MASK_SYNTH) {
+               recdev_l |= 0x40; /* l midi */
+               recdev_r |= 0x20; /* r midi */
+       }
 
-       sb_setmixer(sb, SB16_IMASK_L, recdev);
-       sb_setmixer(sb, SB16_IMASK_R, recdev);
+       sb_setmixer(sb, SB16_IMASK_L, recdev_l);
+       sb_setmixer(sb, SB16_IMASK_R, recdev_r);
 
        /* Switch on/off FM tuner source */
        if (src & SOUND_MASK_LINE1)
@@ -441,19 +468,23 @@ sb16_alloc_resources(struct sb_info *sb, device_t dev)
 
        rid = 0;
        if (!sb->io_base)
-               sb->io_base = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0, ~0, 1, RF_ACTIVE);
+               sb->io_base = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
+                       &rid, RF_ACTIVE);
 
        rid = 0;
        if (!sb->irq)
-               sb->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0, 1, RF_ACTIVE);
+               sb->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
+                       RF_ACTIVE);
 
        rid = 0;
        if (!sb->drq1)
-               sb->drq1 = bus_alloc_resource(dev, SYS_RES_DRQ, &rid, 0, ~0, 1, RF_ACTIVE);
+               sb->drq1 = bus_alloc_resource_any(dev, SYS_RES_DRQ, &rid,
+                       RF_ACTIVE);
 
        rid = 1;
        if (!sb->drq2)
-               sb->drq2 = bus_alloc_resource(dev, SYS_RES_DRQ, &rid, 0, ~0, 1, RF_ACTIVE);
+               sb->drq2 = bus_alloc_resource_any(dev, SYS_RES_DRQ, &rid,
+                       RF_ACTIVE);
 
        if (sb->io_base && sb->drq1 && sb->irq) {
                isa_dma_acquire(rman_get_start(sb->drq1));
@@ -475,7 +506,7 @@ static void
 sb_intr(void *arg)
 {
        struct sb_info *sb = (struct sb_info *)arg;
-       int reason = 3, c;
+       int reason, c;
 
        /*
         * The Vibra16X has separate flags for 8 and 16 bit transfers, but
@@ -543,43 +574,44 @@ sb_setup(struct sb_info *sb)
 
        sb_lock(sb);
        if (sb->bd_flags & BD_F_DMARUN)
-               sndbuf_isadma(sb->pch.buffer, PCMTRIG_STOP);
+               sndbuf_dma(sb->pch.buffer, PCMTRIG_STOP);
        if (sb->bd_flags & BD_F_DMARUN2)
-               sndbuf_isadma(sb->rch.buffer, PCMTRIG_STOP);
+               sndbuf_dma(sb->rch.buffer, PCMTRIG_STOP);
        sb->bd_flags &= ~(BD_F_DMARUN | BD_F_DMARUN2);
 
        sb_reset_dsp(sb);
 
        if (sb->bd_flags & BD_F_SB16X) {
+               /* full-duplex doesn't work! */
                pprio = sb->pch.run? 1 : 0;
-               sndbuf_isadmasetup(sb->pch.buffer, pprio? sb->drq1 : NULL);
+               sndbuf_dmasetup(sb->pch.buffer, pprio? sb->drq1 : sb->drq2);
                sb->pch.dch = pprio? 1 : 0;
-               sndbuf_isadmasetup(sb->rch.buffer, pprio? sb->drq2 : sb->drq1);
+               sndbuf_dmasetup(sb->rch.buffer, pprio? sb->drq2 : sb->drq1);
                sb->rch.dch = pprio? 2 : 1;
        } else {
                if (sb->pch.run && sb->rch.run) {
                        pprio = (sb->rch.fmt & AFMT_16BIT)? 0 : 1;
-                       sndbuf_isadmasetup(sb->pch.buffer, pprio? sb->drq2 : sb->drq1);
+                       sndbuf_dmasetup(sb->pch.buffer, pprio? sb->drq2 : sb->drq1);
                        sb->pch.dch = pprio? 2 : 1;
-                       sndbuf_isadmasetup(sb->rch.buffer, pprio? sb->drq1 : sb->drq2);
+                       sndbuf_dmasetup(sb->rch.buffer, pprio? sb->drq1 : sb->drq2);
                        sb->rch.dch = pprio? 1 : 2;
                } else {
                        if (sb->pch.run) {
-                               sndbuf_isadmasetup(sb->pch.buffer, (sb->pch.fmt & AFMT_16BIT)? sb->drq2 : sb->drq1);
+                               sndbuf_dmasetup(sb->pch.buffer, (sb->pch.fmt & AFMT_16BIT)? sb->drq2 : sb->drq1);
                                sb->pch.dch = (sb->pch.fmt & AFMT_16BIT)? 2 : 1;
-                               sndbuf_isadmasetup(sb->rch.buffer, (sb->pch.fmt & AFMT_16BIT)? sb->drq1 : sb->drq2);
+                               sndbuf_dmasetup(sb->rch.buffer, (sb->pch.fmt & AFMT_16BIT)? sb->drq1 : sb->drq2);
                                sb->rch.dch = (sb->pch.fmt & AFMT_16BIT)? 1 : 2;
                        } else if (sb->rch.run) {
-                               sndbuf_isadmasetup(sb->pch.buffer, (sb->rch.fmt & AFMT_16BIT)? sb->drq1 : sb->drq2);
+                               sndbuf_dmasetup(sb->pch.buffer, (sb->rch.fmt & AFMT_16BIT)? sb->drq1 : sb->drq2);
                                sb->pch.dch = (sb->rch.fmt & AFMT_16BIT)? 1 : 2;
-                               sndbuf_isadmasetup(sb->rch.buffer, (sb->rch.fmt & AFMT_16BIT)? sb->drq2 : sb->drq1);
+                               sndbuf_dmasetup(sb->rch.buffer, (sb->rch.fmt & AFMT_16BIT)? sb->drq2 : sb->drq1);
                                sb->rch.dch = (sb->rch.fmt & AFMT_16BIT)? 2 : 1;
                        }
                }
        }
 
-       sndbuf_isadmasetdir(sb->pch.buffer, PCMDIR_PLAY);
-       sndbuf_isadmasetdir(sb->rch.buffer, PCMDIR_REC);
+       sndbuf_dmasetdir(sb->pch.buffer, PCMDIR_PLAY);
+       sndbuf_dmasetdir(sb->rch.buffer, PCMDIR_REC);
 
        /*
        kprintf("setup: [pch = %d, pfmt = %d, pgo = %d] [rch = %d, rfmt = %d, rgo = %d]\n",
@@ -607,7 +639,7 @@ sb_setup(struct sb_info *sb)
                v = (ch->fmt & AFMT_STEREO)? DSP_F16_STEREO : 0;
                v |= (ch->fmt & AFMT_SIGNED)? DSP_F16_SIGNED : 0;
                sb_cmd2(sb, v, l);
-               sndbuf_isadma(ch->buffer, PCMTRIG_START);
+               sndbuf_dma(ch->buffer, PCMTRIG_START);
                sb->bd_flags |= BD_F_DMARUN;
        }
 
@@ -632,7 +664,7 @@ sb_setup(struct sb_info *sb)
                v = (ch->fmt & AFMT_STEREO)? DSP_F16_STEREO : 0;
                v |= (ch->fmt & AFMT_SIGNED)? DSP_F16_SIGNED : 0;
                sb_cmd2(sb, v, l);
-               sndbuf_isadma(ch->buffer, PCMTRIG_START);
+               sndbuf_dma(ch->buffer, PCMTRIG_START);
                sb->bd_flags |= BD_F_DMARUN2;
        }
        sb_unlock(sb);
@@ -652,7 +684,7 @@ sb16chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
        ch->buffer = b;
        ch->dir = dir;
 
-       if (sndbuf_alloc(ch->buffer, sb->parent_dmat, sb->bufsize) == -1)
+       if (sndbuf_alloc(ch->buffer, sb->parent_dmat, sb->bufsize) != 0)
                return NULL;
 
        return ch;
@@ -713,7 +745,7 @@ sb16chan_getptr(kobj_t obj, void *data)
 {
        struct sb_chinfo *ch = data;
 
-       return sndbuf_isadmaptr(ch->buffer);
+       return sndbuf_dmaptr(ch->buffer);
 }
 
 static struct pcmchan_caps *
@@ -794,13 +826,17 @@ sb16_attach(device_t dev)
        sb->bd_flags = (ver & 0xffff0000) >> 16;
        sb->bufsize = pcm_getbuffersize(dev, 4096, SB16_BUFFSIZE, 65536);
 
-       if (sb16_alloc_resources(sb, dev))
+       if (sb16_alloc_resources(sb, dev))
                goto no;
-       if (sb_reset_dsp(sb))
+       sb_lock(sb);
+       if (sb_reset_dsp(sb)) {
+               sb_unlock(sb);
                goto no;
+       }
+       sb_unlock(sb);
        if (mixer_init(dev, &sb16mix_mixer_class, sb))
                goto no;
-       if (snd_setup_intr(dev, sb->irq, INTR_MPSAFE, sb_intr, sb, &sb->ih, NULL))
+       if (snd_setup_intr(dev, sb->irq, 0, sb_intr, sb, &sb->ih))
                goto no;
 
        if (sb->bd_flags & BD_F_SB16X)
@@ -813,8 +849,8 @@ sb16_attach(device_t dev)
                        /*highaddr*/BUS_SPACE_MAXADDR,
                        /*filter*/NULL, /*filterarg*/NULL,
                        /*maxsize*/sb->bufsize, /*nsegments*/1,
-                       /*maxsegz*/0x3ffff,
-                       /*flags*/0, &sb->parent_dmat) != 0) {
+                       /*maxsegz*/0x3ffff, /*flags*/0,
+                       &sb->parent_dmat) != 0) {
                device_printf(dev, "unable to create dma tag\n");
                goto no;
        }
@@ -824,9 +860,10 @@ sb16_attach(device_t dev)
        else
                status2[0] = '\0';
 
-       ksnprintf(status, SND_STATUSLEN, "at io 0x%lx irq %ld drq %ld%s bufsz %ud",
+       ksnprintf(status, SND_STATUSLEN, "at io 0x%lx irq %ld drq %ld%s bufsz %u %s",
                rman_get_start(sb->io_base), rman_get_start(sb->irq),
-               rman_get_start(sb->drq1), status2, sb->bufsize);
+               rman_get_start(sb->drq1), status2, sb->bufsize,
+               PCM_KLDSTRING(snd_sb16));
 
        if (pcm_register(dev, sb, 1, 1))
                goto no;
@@ -873,6 +910,6 @@ static driver_t sb16_driver = {
 };
 
 DRIVER_MODULE(snd_sb16, sbc, sb16_driver, pcm_devclass, 0, 0);
-MODULE_DEPEND(snd_sb16, snd_pcm, PCM_MINVER, PCM_PREFVER, PCM_MAXVER);
+MODULE_DEPEND(snd_sb16, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
 MODULE_DEPEND(snd_sb16, snd_sbc, 1, 1, 1);
 MODULE_VERSION(snd_sb16, 1);
index 62ddeb2..ff319f9 100644 (file)
@@ -1,5 +1,5 @@
-/*
- * Copyright (c) 1999 Cameron Grant <gandalf@vilnya.demon.co.uk>
+/*-
+ * Copyright (c) 1999 Cameron Grant <cg@freebsd.org>
  * Copyright 1997,1998 Luigi Rizzo.
  *
  * Derived from files in the Voxware 3.5 distribution,
@@ -28,8 +28,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/sound/isa/sb8.c,v 1.62.2.5 2002/12/24 21:17:42 semenu Exp $
- * $DragonFly: src/sys/dev/sound/isa/sb8.c,v 1.6 2006/12/22 23:26:25 swildner Exp $
+ * $FreeBSD: src/sys/dev/sound/isa/sb8.c,v 1.79.2.1 2005/12/30 19:55:53 netchild Exp $
+ * $DragonFly: src/sys/dev/sound/isa/sb8.c,v 1.7 2007/01/04 21:47:02 corecode Exp $
  */
 
 #include <dev/sound/pcm/sound.h>
 #include  <dev/sound/isa/sb.h>
 #include  <dev/sound/chip.h>
 
+#include <bus/isa/isavar.h>
+
 #include "mixer_if.h"
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/sb8.c,v 1.6 2006/12/22 23:26:25 swildner Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/sb8.c,v 1.7 2007/01/04 21:47:02 corecode Exp $");
 
 #define SB_DEFAULT_BUFSZ       4096
 
@@ -287,13 +289,16 @@ sb_alloc_resources(struct sb_info *sb, device_t dev)
 
        rid = 0;
        if (!sb->io_base)
-               sb->io_base = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0, ~0, 1, RF_ACTIVE);
+               sb->io_base = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
+                       &rid, RF_ACTIVE);
        rid = 0;
        if (!sb->irq)
-               sb->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0, 1, RF_ACTIVE);
+               sb->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ,
+                       &rid, RF_ACTIVE);
        rid = 0;
        if (!sb->drq)
-               sb->drq = bus_alloc_resource(dev, SYS_RES_DRQ, &rid, 0, ~0, 1, RF_ACTIVE);
+               sb->drq = bus_alloc_resource_any(dev, SYS_RES_DRQ,
+                       &rid, RF_ACTIVE);
 
        if (sb->io_base && sb->drq && sb->irq) {
                isa_dma_acquire(rman_get_start(sb->drq));
@@ -473,11 +478,17 @@ sb_intr(void *arg)
        struct sb_info *sb = (struct sb_info *)arg;
 
        sb_lock(sb);
-       if (sndbuf_runsz(sb->pch.buffer) > 0)
+       if (sndbuf_runsz(sb->pch.buffer) > 0) {
+               sb_unlock(sb);
                chn_intr(sb->pch.channel);
+               sb_lock(sb);
+       }
 
-       if (sndbuf_runsz(sb->rch.buffer) > 0)
+       if (sndbuf_runsz(sb->rch.buffer) > 0) {
+               sb_unlock(sb);
                chn_intr(sb->rch.channel);
+               sb_lock(sb);
+       }
 
        sb_rd(sb, DSP_DATA_AVAIL); /* int ack */
        sb_unlock(sb);
@@ -562,8 +573,16 @@ sb_stop(struct sb_chinfo *ch)
        sb_lock(sb);
        if (sb->bd_flags & BD_F_HISPEED)
                sb_reset_dsp(sb);
-       else
+       else {
+#if 0
+               /*
+                * NOTE: DSP_CMD_DMAEXIT_8 does not work with old
+                * soundblaster.
+                */
                sb_cmd(sb, DSP_CMD_DMAEXIT_8);
+#endif
+               sb_reset_dsp(sb);
+       }
 
        if (play)
                sb_cmd(sb, DSP_CMD_SPKOFF); /* speaker off */
@@ -583,9 +602,9 @@ sbchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *c
        ch->channel = c;
        ch->dir = dir;
        ch->buffer = b;
-       if (sndbuf_alloc(ch->buffer, sb->parent_dmat, sb->bufsize) == -1)
+       if (sndbuf_alloc(ch->buffer, sb->parent_dmat, sb->bufsize) != 0)
                return NULL;
-       sndbuf_isadmasetup(ch->buffer, sb->drq);
+       sndbuf_dmasetup(ch->buffer, sb->drq);
        return ch;
 }
 
@@ -624,7 +643,7 @@ sbchan_trigger(kobj_t obj, void *data, int go)
        if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD)
                return 0;
 
-       sndbuf_isadma(ch->buffer, go);
+       sndbuf_dma(ch->buffer, go);
        if (go == PCMTRIG_START)
                sb_start(ch);
        else
@@ -637,7 +656,7 @@ sbchan_getptr(kobj_t obj, void *data)
 {
        struct sb_chinfo *ch = data;
 
-       return sndbuf_isadmaptr(ch->buffer);
+       return sndbuf_dmaptr(ch->buffer);
 }
 
 static struct pcmchan_caps *
@@ -714,7 +733,7 @@ sb_attach(device_t dev)
                goto no;
        if (mixer_init(dev, (sb->bd_id < 0x300)? &sbmix_mixer_class : &sbpromix_mixer_class, sb))
                goto no;
-       if (snd_setup_intr(dev, sb->irq, INTR_MPSAFE, sb_intr, sb, &sb->ih, NULL))
+       if (snd_setup_intr(dev, sb->irq, 0, sb_intr, sb, &sb->ih))
                goto no;
 
        pcm_setflags(dev, pcm_getflags(dev) | SD_F_SIMPLEX);
@@ -724,14 +743,15 @@ sb_attach(device_t dev)
                        /*highaddr*/BUS_SPACE_MAXADDR,
                        /*filter*/NULL, /*filterarg*/NULL,
                        /*maxsize*/sb->bufsize, /*nsegments*/1,
-                       /*maxsegz*/0x3ffff,
-                       /*flags*/0, &sb->parent_dmat) != 0) {
+                       /*maxsegz*/0x3ffff, /*flags*/0,
+                       &sb->parent_dmat) != 0) {
                device_printf(dev, "unable to create dma tag\n");
                goto no;
        }
 
-       ksnprintf(status, SND_STATUSLEN, "at io 0x%lx irq %ld drq %ld bufsz %u",
-               rman_get_start(sb->io_base), rman_get_start(sb->irq), rman_get_start(sb->drq), sb->bufsize);
+       ksnprintf(status, SND_STATUSLEN, "at io 0x%lx irq %ld drq %ld bufsz %u %s",
+               rman_get_start(sb->io_base), rman_get_start(sb->irq),
+               rman_get_start(sb->drq), sb->bufsize, PCM_KLDSTRING(snd_sb8));
 
        if (pcm_register(dev, sb, 1, 1))
                goto no;
@@ -778,7 +798,7 @@ static driver_t sb_driver = {
 };
 
 DRIVER_MODULE(snd_sb8, sbc, sb_driver, pcm_devclass, 0, 0);
-MODULE_DEPEND(snd_sb8, snd_pcm, PCM_MINVER, PCM_PREFVER, PCM_MAXVER);
+MODULE_DEPEND(snd_sb8, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
 MODULE_DEPEND(snd_sb8, snd_sbc, 1, 1, 1);
 MODULE_VERSION(snd_sb8, 1);
 
index e853dbc..6b7057a 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/*-
  * Copyright (c) 1999 Seigo Tanimura
  * All rights reserved.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/sound/isa/sbc.c,v 1.19.2.12 2002/12/24 21:17:42 semenu Exp $
- * $DragonFly: src/sys/dev/sound/isa/sbc.c,v 1.8 2006/12/22 23:26:25 swildner Exp $
+ * $FreeBSD: src/sys/dev/sound/isa/sbc.c,v 1.44.2.1 2005/12/30 19:55:53 netchild Exp $
+ * $DragonFly: src/sys/dev/sound/isa/sbc.c,v 1.9 2007/01/04 21:47:02 corecode Exp $
  */
 
 #include <dev/sound/chip.h>
 #include <dev/sound/pcm/sound.h>
 #include <dev/sound/isa/sb.h>
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/sbc.c,v 1.8 2006/12/22 23:26:25 swildner Exp $");
+#include <bus/isa/isavar.h>
+
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/sbc.c,v 1.9 2007/01/04 21:47:02 corecode Exp $");
 
 #define IO_MAX 3
 #define IRQ_MAX        1
@@ -67,7 +69,7 @@ struct sbc_softc {
 
        void *ih[IRQ_MAX];
 
-       void *lock;
+       struct spinlock *lock;
 
        u_int32_t bd_ver;
 };
@@ -82,7 +84,7 @@ static int sbc_release_resource(device_t bus, device_t child, int type, int rid,
                                struct resource *r);
 static int sbc_setup_intr(device_t dev, device_t child, struct resource *irq,
               int flags, driver_intr_t *intr, void *arg,
-              void **cookiep, lwkt_serialize_t serializer);
+              void **cookiep);
 static int sbc_teardown_intr(device_t dev, device_t child, struct resource *irq,
                  void *cookie);
 
@@ -93,6 +95,20 @@ static devclass_t sbc_devclass;
 
 static int io_range[3] = {0x10, 0x2, 0x4};
 
+#ifdef PC98 /* I/O address table for PC98 */
+static bus_addr_t pcm_iat[] = {
+       0x000, 0x100, 0x200, 0x300, 0x400, 0x500, 0x600, 0x700,
+       0x800, 0x900, 0xa00, 0xb00, 0xc00, 0xd00, 0xe00, 0xf00
+};
+static bus_addr_t midi_iat[] = {
+       0x000, 0x100
+};
+static bus_addr_t opl_iat[] = {
+       0x000, 0x100, 0x200, 0x300
+};
+static bus_addr_t *sb_iat[] = { pcm_iat, midi_iat, opl_iat };
+#endif
+
 static int sb_rd(struct resource *io, int reg);
 static void sb_wr(struct resource *io, int reg, u_int8_t val);
 static int sb_dspready(struct resource *io);
@@ -118,6 +134,12 @@ sbc_lock(struct sbc_softc *scp)
        snd_mtxlock(scp->lock);
 }
 
+void
+sbc_lockassert(struct sbc_softc *scp)
+{
+       snd_mtxassert(scp->lock);
+}
+
 void
 sbc_unlock(struct sbc_softc *scp)
 {
@@ -171,12 +193,12 @@ sb_cmd(struct resource *io, u_char val)
 static void
 sb_setmixer(struct resource *io, u_int port, u_int value)
 {
-       crit_enter();
+       crit_enter();
        sb_wr(io, SB_MIX_ADDR, (u_char) (port & 0xff)); /* Select register */
        DELAY(10);
        sb_wr(io, SB_MIX_DATA, (u_char) (value & 0xff));
        DELAY(10);
-       crit_exit();
+       crit_exit();
 }
 
 static u_int
@@ -238,6 +260,7 @@ static struct isa_pnp_id sbc_ids[] = {
 
        {0x81167316, "ESS ES1681"},                     /* ESS1681 */
        {0x02017316, "ESS ES1688"},                     /* ESS1688 */
+       {0x68097316, "ESS ES1688"},                     /* ESS1688 */
        {0x68187316, "ESS ES1868"},                     /* ESS1868 */
        {0x03007316, "ESS ES1869"},                     /* ESS1869 */
        {0x69187316, "ESS ES1869"},                     /* ESS1869 */
@@ -268,9 +291,17 @@ sbc_probe(device_t dev)
                int rid = 0, ver;
                struct resource *io;
 
+#ifdef PC98
+               io = isa_alloc_resourcev(dev, SYS_RES_IOPORT, &rid,
+                                        pcm_iat, 16, RF_ACTIVE);
+#else
                io = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid,
                                        0, ~0, 16, RF_ACTIVE);
+#endif
                if (!io) goto bad;
+#ifdef PC98
+               isa_load_resourcev(io, pcm_iat, 16);
+#endif
                if (sb_reset_dsp(io)) goto bad2;
                ver = sb_identify_board(io);
                if (ver == 0) goto bad2;
@@ -362,6 +393,20 @@ sbc_attach(device_t dev)
                /* soft irq/dma configuration */
                x = -1;
                irq = rman_get_start(scp->irq[0]);
+#ifdef PC98
+               /* SB16 in PC98 use different IRQ table */
+               if      (irq == 3) x = 1;
+               else if (irq == 5) x = 8;
+               else if (irq == 10) x = 2;
+               else if (irq == 12) x = 4;
+               if (x == -1) {
+                       err = "bad irq (3/5/10/12 valid)";
+                       goto bad;
+               }
+               else sb_setmixer(scp->io[0], IRQ_NR, x);
+               /* SB16 in PC98 use different dma setting */
+               sb_setmixer(scp->io[0], DMA_NR, dh == 0 ? 1 : 2);
+#else
                if      (irq == 5) x = 2;
                else if (irq == 7) x = 4;
                else if (irq == 9) x = 1;
@@ -372,6 +417,7 @@ sbc_attach(device_t dev)
                }
                else sb_setmixer(scp->io[0], IRQ_NR, x);
                sb_setmixer(scp->io[0], DMA_NR, (1 << dh) | (1 << dl));
+#endif
                if (bootverbose) {
                        device_printf(dev, "setting card to irq %d, drq %d", irq, dl);
                        if (dl != dh) kprintf(", %d", dh);
@@ -392,7 +438,7 @@ sbc_attach(device_t dev)
        err = "setup_intr";
        for (i = 0; i < IRQ_MAX; i++) {
                scp->ihl[i].parent = scp;
-               if (snd_setup_intr(dev, scp->irq[i], INTR_MPSAFE, sbc_intr, &scp->ihl[i], &scp->ih[i], NULL))
+               if (snd_setup_intr(dev, scp->irq[i], 0, sbc_intr, &scp->ihl[i], &scp->ih[i]))
                        goto bad;
        }
 
@@ -459,14 +505,12 @@ sbc_intr(void *p)
 static int
 sbc_setup_intr(device_t dev, device_t child, struct resource *irq,
               int flags, driver_intr_t *intr, void *arg,
-              void **cookiep, lwkt_serialize_t serializer)
+              void **cookiep)
 {
        struct sbc_softc *scp = device_get_softc(dev);
        struct sbc_ihl *ihl = NULL;
        int i, ret;
 
-       KKASSERT(serializer == NULL);   /* not yet supported */
-
        sbc_lock(scp);
        i = 0;
        while (i < IRQ_MAX) {
@@ -523,13 +567,22 @@ sbc_alloc_resource(device_t bus, device_t child, int type, int *rid,
        struct sbc_softc *scp;
        int *alloced, rid_max, alloced_max;
        struct resource **res;
+#ifdef PC98
+       int i;
+#endif
 
        scp = device_get_softc(bus);
        switch (type) {
        case SYS_RES_IOPORT:
                alloced = scp->io_alloced;
                res = scp->io;
+#ifdef PC98
+               rid_max = 0;
+               for (i = 0; i < IO_MAX; i++)
+                       rid_max += io_range[i];
+#else
                rid_max = IO_MAX - 1;
+#endif
                alloced_max = 1;
                break;
        case SYS_RES_DRQ:
@@ -630,9 +683,23 @@ alloc_resource(struct sbc_softc *scp)
 
        for (i = 0 ; i < IO_MAX ; i++) {
                if (scp->io[i] == NULL) {
+#ifdef PC98
+                       scp->io_rid[i] = i > 0 ?
+                               scp->io_rid[i - 1] + io_range[i - 1] : 0;
+                       scp->io[i] = isa_alloc_resourcev(scp->dev,
+                                                        SYS_RES_IOPORT,
+                                                        &scp->io_rid[i],
+                                                        sb_iat[i],
+                                                        io_range[i],
+                                                        RF_ACTIVE);
+                       if (scp->io[i] != NULL)
+                               isa_load_resourcev(scp->io[i], sb_iat[i],
+                                                  io_range[i]);
+#else
                        scp->io_rid[i] = i;
                        scp->io[i] = bus_alloc_resource(scp->dev, SYS_RES_IOPORT, &scp->io_rid[i],
                                                        0, ~0, io_range[i], RF_ACTIVE);
+#endif
                        if (i == 0 && scp->io[i] == NULL)
                                return (1);
                        scp->io_alloced[i] = 0;
@@ -641,8 +708,10 @@ alloc_resource(struct sbc_softc *scp)
        for (i = 0 ; i < DRQ_MAX ; i++) {
                if (scp->drq[i] == NULL) {
                        scp->drq_rid[i] = i;
-                       scp->drq[i] = bus_alloc_resource(scp->dev, SYS_RES_DRQ, &scp->drq_rid[i],
-                                                        0, ~0, 1, RF_ACTIVE);
+                       scp->drq[i] = bus_alloc_resource_any(scp->dev,
+                                                            SYS_RES_DRQ,
+                                                            &scp->drq_rid[i],
+                                                            RF_ACTIVE);
                        if (i == 0 && scp->drq[i] == NULL)
                                return (1);
                        scp->drq_alloced[i] = 0;
@@ -651,8 +720,10 @@ alloc_resource(struct sbc_softc *scp)
        for (i = 0 ; i < IRQ_MAX ; i++) {
                if (scp->irq[i] == NULL) {
                        scp->irq_rid[i] = i;
-                       scp->irq[i] = bus_alloc_resource(scp->dev, SYS_RES_IRQ, &scp->irq_rid[i],
-                                                        0, ~0, 1, RF_ACTIVE);
+                       scp->irq[i] = bus_alloc_resource_any(scp->dev,
+                                                            SYS_RES_IRQ,
+                                                            &scp->irq_rid[i],
+                                                            RF_ACTIVE);
                        if (i == 0 && scp->irq[i] == NULL)
                                return (1);
                        scp->irq_alloced[i] = 0;
@@ -721,5 +792,6 @@ static driver_t sbc_driver = {
 
 /* sbc can be attached to an isa bus. */
 DRIVER_MODULE(snd_sbc, isa, sbc_driver, sbc_devclass, 0, 0);
-MODULE_DEPEND(snd_sbc, snd_pcm, PCM_MINVER, PCM_PREFVER, PCM_MAXVER);
+DRIVER_MODULE(snd_sbc, acpi, sbc_driver, sbc_devclass, 0, 0);
+MODULE_DEPEND(snd_sbc, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
 MODULE_VERSION(snd_sbc, 1);
diff --git a/sys/dev/sound/isa/sndbuf_dma.c b/sys/dev/sound/isa/sndbuf_dma.c
new file mode 100644 (file)
index 0000000..5eae8f0
--- /dev/null
@@ -0,0 +1,106 @@
+/*-
+ * Copyright (c) 1999 Cameron Grant <cg@freebsd.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: src/sys/dev/sound/isa/sndbuf_dma.c,v 1.3 2005/01/06 01:43:17 imp Exp $
+ * $DragonFly: src/sys/dev/sound/isa/sndbuf_dma.c,v 1.1 2007/01/04 21:47:02 corecode Exp $
+ */
+
+#include <dev/sound/pcm/sound.h>
+
+#include <bus/isa/isavar.h>
+
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/sndbuf_dma.c,v 1.1 2007/01/04 21:47:02 corecode Exp $");
+
+int
+sndbuf_dmasetup(struct snd_dbuf *b, struct resource *drq)
+{
+       /* should do isa_dma_acquire/isa_dma_release here */
+       if (drq == NULL) {
+               b->dmachan = -1;
+       } else {
+               sndbuf_setflags(b, SNDBUF_F_DMA, 1);
+               b->dmachan = rman_get_start(drq);
+       }
+       return 0;
+}
+
+int
+sndbuf_dmasetdir(struct snd_dbuf *b, int dir)
+{
+       KASSERT(b, ("sndbuf_dmasetdir called with b == NULL"));
+       KASSERT(sndbuf_getflags(b) & SNDBUF_F_DMA, ("sndbuf_dmasetdir called on non-ISA buffer"));
+
+       b->dir = (dir == PCMDIR_PLAY)? ISADMA_WRITE : ISADMA_READ;
+       return 0;
+}
+
+void
+sndbuf_dma(struct snd_dbuf *b, int go)
+{
+       KASSERT(b, ("sndbuf_dma called with b == NULL"));
+       KASSERT(sndbuf_getflags(b) & SNDBUF_F_DMA, ("sndbuf_dma called on non-ISA buffer"));
+
+       switch (go) {
+       case PCMTRIG_START:
+               /* isa_dmainit(b->chan, size); */
+               isa_dmastart(b->dir | ISADMA_RAW, b->buf, b->bufsize, b->dmachan);
+               break;
+
+       case PCMTRIG_STOP:
+       case PCMTRIG_ABORT:
+               isa_dmastop(b->dmachan);
+               isa_dmadone(b->dir | ISADMA_RAW, b->buf, b->bufsize, b->dmachan);
+               break;
+       }
+
+       DEB(printf("buf 0x%p ISA DMA %s, channel %d\n",
+               b,
+               (go == PCMTRIG_START)? "started" : "stopped",
+               b->dmachan));
+}
+
+int
+sndbuf_dmaptr(struct snd_dbuf *b)
+{
+       int i;
+
+       KASSERT(b, ("sndbuf_dmaptr called with b == NULL"));
+       KASSERT(sndbuf_getflags(b) & SNDBUF_F_DMA, ("sndbuf_dmaptr called on non-ISA buffer"));
+
+       if (!sndbuf_runsz(b))
+               return 0;
+       i = isa_dmastatus(b->dmachan);
+       KASSERT(i >= 0, ("isa_dmastatus returned %d", i));
+       return b->bufsize - i;
+}
+
+void
+sndbuf_dmabounce(struct snd_dbuf *b)
+{
+       KASSERT(b, ("sndbuf_dmabounce called with b == NULL"));
+       KASSERT(sndbuf_getflags(b) & SNDBUF_F_DMA, ("sndbuf_dmabounce called on non-ISA buffer"));
+
+       /* tell isa_dma to bounce data in/out */
+}
index 76bc874..4283bd7 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/*-
  * Copyright (c) 2001 Orion Hodson <oho@acm.org>
  * All rights reserved.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/sound/pci/als4000.c,v 1.2.2.5 2002/04/22 15:49:31 cg Exp $
- * $DragonFly: src/sys/dev/sound/pci/als4000.c,v 1.9 2006/12/22 23:26:25 swildner Exp $
+ * $FreeBSD: src/sys/dev/sound/pci/als4000.c,v 1.18.2.1 2005/12/30 19:55:53 netchild Exp $
+ * $DragonFly: src/sys/dev/sound/pci/als4000.c,v 1.10 2007/01/04 21:47:02 corecode Exp $
  */
 
 /*
  * als4000.c - driver for the Avance Logic ALS 4000 chipset.
  *
- * The ALS4000 is effectively an SB16 with a PCI interface.
+ * The ALS4000 is effectively an SB16 with a PCI interface.
  *
  * This driver derives from ALS4000a.PDF, Bart Hartgers alsa driver, and
  * SB16 register descriptions.
@@ -45,7 +45,7 @@
 
 #include "mixer_if.h"
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pci/als4000.c,v 1.9 2006/12/22 23:26:25 swildner Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pci/als4000.c,v 1.10 2007/01/04 21:47:02 corecode Exp $");
 
 /* Debugging macro's */
 #undef DEB
@@ -78,6 +78,7 @@ struct sc_info {
        struct resource         *reg, *irq;
        int                     regid, irqid;
        void                    *ih;
+       struct spinlock         *lock;
 
        unsigned int            bufsz;
        struct sc_chinfo        pch, rch;
@@ -93,7 +94,11 @@ static u_int32_t als_format[] = {
         0
 };
 
-static struct pcmchan_caps als_caps = { 4000, 48000, als_format, 0 };
+/*
+ * I don't believe this rotten soundcard can do 48k, really,
+ * trust me.
+ */
+static struct pcmchan_caps als_caps = { 4000, 44100, als_format, 0 };
 
 /* ------------------------------------------------------------------------- */
 /* Register Utilities */
@@ -202,6 +207,7 @@ alschan_init(kobj_t obj, void *devinfo,
        struct  sc_info *sc = devinfo;
        struct  sc_chinfo *ch;
 
+       snd_mtxlock(sc->lock);
        if (dir == PCMDIR_PLAY) {
                ch = &sc->pch;
                ch->gcr_fifo_status = ALS_GCR_FIFO0_STATUS;
@@ -216,9 +222,11 @@ alschan_init(kobj_t obj, void *devinfo,
        ch->format = AFMT_U8;
        ch->speed = DSP_DEFAULT_SPEED;
        ch->buffer = b;
-       if (sndbuf_alloc(ch->buffer, sc->parent_dmat, sc->bufsz) != 0) {
+       snd_mtxunlock(sc->lock);
+
+       if (sndbuf_alloc(ch->buffer, sc->parent_dmat, sc->bufsz) != 0)
                return NULL;
-       }
+
        return ch;
 }
 
@@ -266,9 +274,12 @@ static int
 alschan_getptr(kobj_t obj, void *data)
 {
        struct sc_chinfo *ch = data;
+       struct sc_info *sc = ch->parent;
        int32_t pos, sz;
 
+       snd_mtxlock(sc->lock);
        pos = als_gcr_rd(ch->parent, ch->gcr_fifo_status) & 0xffff;
+       snd_mtxunlock(sc->lock);
        sz  = sndbuf_getsize(ch->buffer);
        return (2 * sz - pos - 1) % sz;
 }
@@ -337,7 +348,7 @@ als_playback_start(struct sc_chinfo *ch)
        struct  sc_info *sc = ch->parent;
        u_int32_t       buf, bufsz, count, dma_prog;
 
-       buf = vtophys(sndbuf_getbuf(ch->buffer));
+       buf = sndbuf_getbufaddr(ch->buffer);
        bufsz = sndbuf_getsize(ch->buffer);
        count = bufsz / 2;
        if (ch->format & AFMT_16BIT)
@@ -381,7 +392,9 @@ static int
 alspchan_trigger(kobj_t obj, void *data, int go)
 {
        struct  sc_chinfo *ch = data;
+       struct sc_info *sc = ch->parent;
 
+       snd_mtxlock(sc->lock);
        switch(go) {
        case PCMTRIG_START:
                als_playback_start(ch);
@@ -390,6 +403,7 @@ alspchan_trigger(kobj_t obj, void *data, int go)
                als_playback_stop(ch);
                break;
        }
+       snd_mtxunlock(sc->lock);
        return 0;
 }
 
@@ -431,7 +445,7 @@ als_capture_start(struct sc_chinfo *ch)
        struct  sc_info *sc = ch->parent;
        u_int32_t       buf, bufsz, count, dma_prog;
 
-       buf = vtophys(sndbuf_getbuf(ch->buffer));
+       buf = sndbuf_getbufaddr(ch->buffer);
        bufsz = sndbuf_getsize(ch->buffer);
        count = bufsz / 2;
        if (ch->format & AFMT_16BIT)
@@ -471,7 +485,9 @@ static int
 alsrchan_trigger(kobj_t obj, void *data, int go)
 {
        struct  sc_chinfo *ch = data;
+       struct sc_info *sc = ch->parent;
 
+       snd_mtxlock(sc->lock);
        switch(go) {
        case PCMTRIG_START:
                als_capture_start(ch);
@@ -480,6 +496,7 @@ alsrchan_trigger(kobj_t obj, void *data, int go)
                als_capture_stop(ch);
                break;
        }
+       snd_mtxunlock(sc->lock);
        return 0;
 }
 
@@ -581,8 +598,13 @@ alsmix_setrecsrc(struct snd_mixer *m, u_int32_t src)
 
        for (i = l = r = 0; i < SOUND_MIXER_NRDEVICES; i++) {
                if (src & (1 << i)) {
-                       l |= amt[i].iselect;
-                       r |= amt[i].iselect << 1;
+                       if (amt[i].iselect == 1) {      /* microphone */
+                               l |= amt[i].iselect;
+                               r |= amt[i].iselect;
+                       } else {
+                               l |= amt[i].iselect;
+                               r |= amt[i].iselect >> 1;
+                       }
                }
        }
 
@@ -608,13 +630,20 @@ als_intr(void *p)
        struct sc_info *sc = (struct sc_info *)p;
        u_int8_t intr, sb_status;
 
+       snd_mtxlock(sc->lock);
        intr = als_intr_rd(sc);
 
-       if (intr & 0x80)
+       if (intr & 0x80) {
+               snd_mtxunlock(sc->lock);
                chn_intr(sc->pch.channel);
+               snd_mtxlock(sc->lock);
+       }
 
-       if (intr & 0x40)
+       if (intr & 0x40) {
+               snd_mtxunlock(sc->lock);
                chn_intr(sc->rch.channel);
+               snd_mtxlock(sc->lock);
+       }
 
        /* ACK interrupt in PCI core */
        als_intr_wr(sc, intr);
@@ -630,6 +659,8 @@ als_intr(void *p)
                als_ack_read(sc, ALS_MIDI_DATA);
        if (sb_status & ALS_IRQ_CR1E)
                als_ack_read(sc, ALS_CR1E_ACK_PORT);
+
+       snd_mtxunlock(sc->lock);
        return;
 }
 
@@ -687,7 +718,7 @@ als_pci_probe(device_t dev)
 {
        if (pci_get_devid(dev) == ALS_PCI_ID0) {
                device_set_desc(dev, "Avance Logic ALS4000");
-               return 0;
+               return BUS_PROBE_DEFAULT;
        }
        return ENXIO;
 }
@@ -711,12 +742,16 @@ als_resource_free(device_t dev, struct sc_info *sc)
                bus_dma_tag_destroy(sc->parent_dmat);
                sc->parent_dmat = 0;
        }
+       if (sc->lock) {
+               snd_mtxfree(sc->lock);
+               sc->lock = NULL;
+       }
 }
 
 static int
 als_resource_grab(device_t dev, struct sc_info *sc)
 {
-       sc->regid = PCIR_MAPS;
+       sc->regid = PCIR_BAR(0);
        sc->reg = bus_alloc_resource(dev, SYS_RES_IOPORT, &sc->regid, 0, ~0,
                                     ALS_CONFIG_SPACE_BYTES, RF_ACTIVE);
        if (sc->reg == 0) {
@@ -726,14 +761,15 @@ als_resource_grab(device_t dev, struct sc_info *sc)
        sc->st = rman_get_bustag(sc->reg);
        sc->sh = rman_get_bushandle(sc->reg);
 
-       sc->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &sc->irqid, 0, ~0, 1,
-                                    RF_ACTIVE | RF_SHAREABLE);
+       sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->irqid,
+                                        RF_ACTIVE | RF_SHAREABLE);
        if (sc->irq == 0) {
                device_printf(dev, "unable to allocate interrupt\n");
                goto bad;
        }
 
-       if (bus_setup_intr(dev, sc->irq, 0, als_intr, sc, &sc->ih, NULL)) {
+       if (snd_setup_intr(dev, sc->irq, INTR_MPSAFE, als_intr,
+                          sc, &sc->ih)) {
                device_printf(dev, "unable to setup interrupt\n");
                goto bad;
        }
@@ -747,7 +783,8 @@ als_resource_grab(device_t dev, struct sc_info *sc)
                               /*filter*/NULL, /*filterarg*/NULL,
                               /*maxsize*/sc->bufsz,
                               /*nsegments*/1, /*maxsegz*/0x3ffff,
-                              /*flags*/0, &sc->parent_dmat) != 0) {
+                              /*flags*/0,
+                              &sc->parent_dmat) != 0) {
                device_printf(dev, "unable to create dma tag\n");
                goto bad;
        }
@@ -769,6 +806,7 @@ als_pci_attach(device_t dev)
                return ENXIO;
        }
 
+       sc->lock = snd_mtxcreate(device_get_nameunit(dev), "sound softc");
        sc->dev = dev;
 
        data = pci_read_config(dev, PCIR_COMMAND, 2);
@@ -779,7 +817,7 @@ als_pci_attach(device_t dev)
          * ALS4000 is entirely controlled by the pci powerstate.  We
          * could attempt finer grained control by setting GCR6.31.
         */
-#if defined(__FreeBSD__) && __FreeBSD_version > 500000
+#if __FreeBSD_version > 500000
        if (pci_get_powerstate(dev) != PCI_POWERSTATE_D0) {
                /* Reset the power state. */
                device_printf(dev, "chip is in D%d power mode "
@@ -819,8 +857,8 @@ als_pci_attach(device_t dev)
        pcm_addchan(dev, PCMDIR_PLAY, &alspchan_class, sc);
        pcm_addchan(dev, PCMDIR_REC,  &alsrchan_class, sc);
 
-       ksnprintf(status, SND_STATUSLEN, "at io 0x%lx irq %ld",
-                rman_get_start(sc->reg), rman_get_start(sc->irq));
+       ksnprintf(status, SND_STATUSLEN, "at io 0x%lx irq %ld %s",
+                rman_get_start(sc->reg), rman_get_start(sc->irq),PCM_KLDSTRING(snd_als4000));
        pcm_setstatus(dev, status);
        return 0;
 
@@ -852,9 +890,11 @@ als_pci_suspend(device_t dev)
 {
        struct sc_info *sc = pcm_getdevinfo(dev);
 
+       snd_mtxlock(sc->lock);
        sc->pch.dma_was_active = als_playback_stop(&sc->pch);
        sc->rch.dma_was_active = als_capture_stop(&sc->rch);
        als_uninit(sc);
+       snd_mtxunlock(sc->lock);
        return 0;
 }
 
@@ -863,13 +903,17 @@ als_pci_resume(device_t dev)
 {
        struct sc_info *sc = pcm_getdevinfo(dev);
 
+
+       snd_mtxlock(sc->lock);
        if (als_init(sc) != 0) {
                device_printf(dev, "unable to reinitialize the card\n");
+               snd_mtxunlock(sc->lock);
                return ENXIO;
        }
 
        if (mixer_reinit(dev) != 0) {
                device_printf(dev, "unable to reinitialize the mixer\n");
+               snd_mtxunlock(sc->lock);
                return ENXIO;
        }
 
@@ -880,6 +924,8 @@ als_pci_resume(device_t dev)
        if (sc->rch.dma_was_active) {
                als_capture_start(&sc->rch);
        }
+       snd_mtxunlock(sc->lock);
+
        return 0;
 }
 
@@ -900,5 +946,5 @@ static driver_t als_driver = {
 };
 
 DRIVER_MODULE(snd_als4000, pci, als_driver, pcm_devclass, 0, 0);
-MODULE_DEPEND(snd_als4000, snd_pcm, PCM_MINVER, PCM_PREFVER, PCM_MAXVER);
+MODULE_DEPEND(snd_als4000, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
 MODULE_VERSION(snd_als4000, 1);
index d79428e..c2f474d 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/*-
  * Copyright (c) 2001 Orion Hodson <O.Hodson@cs.ucl.ac.uk>
  * All rights reserved.
  *
@@ -23,8 +23,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/sound/pci/als4000.h,v 1.1.2.3 2002/04/22 15:49:31 cg Exp $
- * $DragonFly: src/sys/dev/sound/pci/als4000.h,v 1.2 2003/06/17 04:28:30 dillon Exp $
+ * $FreeBSD: src/sys/dev/sound/pci/als4000.h,v 1.3 2005/01/06 01:43:18 imp Exp $
+ * $DragonFly: src/sys/dev/sound/pci/als4000.h,v 1.3 2007/01/04 21:47:02 corecode Exp $
  */
 
 #define ALS_PCI_ID0            0x40004005
diff --git a/sys/dev/sound/pci/atiixp.c b/sys/dev/sound/pci/atiixp.c
new file mode 100644 (file)
index 0000000..5d134aa
--- /dev/null
@@ -0,0 +1,1133 @@
+/*-
+ * Copyright (c) 2005 Ariff Abdullah <ariff@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHERIN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: src/sys/dev/sound/pci/atiixp.c,v 1.2.2.4 2006/04/04 17:24:33 ariff Exp $
+ * $DragonFly: src/sys/dev/sound/pci/atiixp.c,v 1.1 2007/01/04 21:47:02 corecode Exp $
+ */
+
+/*
+ * FreeBSD pcm driver for ATI IXP 150/200/250/300 AC97 controllers
+ *
+ * Features
+ *     * 16bit playback / recording
+ *     * 32bit native playback - yay!
+ *     * 32bit native recording (seems broken on few hardwares)
+ *
+ * Issues / TODO:
+ *     * SPDIF
+ *     * Support for more than 2 channels.
+ *     * VRA ? VRM ? DRA ?
+ *     * 32bit native recording seems broken on few hardwares, most
+ *       probably because of incomplete VRA/DRA cleanup.
+ *
+ *
+ * Thanks goes to:
+ *
+ *   Shaharil @ SCAN Associates whom relentlessly providing me the
+ *   mind blowing Acer Ferrari 4002 WLMi with this ATI IXP hardware.
+ *
+ *   Reinoud Zandijk <reinoud@NetBSD.org> (auixp), which this driver is
+ *   largely based upon although large part of it has been reworked. His
+ *   driver is the primary reference and pretty much well documented.
+ *
+ *   Takashi Iwai (ALSA snd-atiixp), for register definitions and some
+ *   random ninja hackery.
+ */
+
+#include <dev/sound/pcm/sound.h>
+#include <dev/sound/pcm/ac97.h>
+
+#include <bus/pci/pcireg.h>
+#include <bus/pci/pcivar.h>
+#include <sys/sysctl.h>
+#include <sys/endian.h>
+
+#include <dev/sound/pci/atiixp.h>
+
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pci/atiixp.c,v 1.1 2007/01/04 21:47:02 corecode Exp $");
+
+struct atiixp_dma_op {
+       volatile uint32_t addr;
+       volatile uint16_t status;
+       volatile uint16_t size;
+       volatile uint32_t next;
+};
+
+struct atiixp_info;
+
+struct atiixp_chinfo {
+       struct snd_dbuf *buffer;
+       struct pcm_channel *channel;
+       struct atiixp_info *parent;
+       struct atiixp_dma_op *sgd_table;
+       bus_addr_t sgd_addr;
+       uint32_t enable_bit, flush_bit, linkptr_bit, dma_dt_cur_bit;
+       uint32_t dma_segs;
+       uint32_t fmt;
+       int caps_32bit, dir, active;
+};
+
+struct atiixp_info {
+       device_t dev;
+
+       bus_space_tag_t st;
+       bus_space_handle_t sh;
+       bus_dma_tag_t parent_dmat;
+       bus_dma_tag_t sgd_dmat;
+       bus_dmamap_t sgd_dmamap;
+       bus_addr_t sgd_addr;
+
+       struct resource *reg, *irq;
+       int regtype, regid, irqid;
+       void *ih;
+       struct ac97_info *codec;
+
+       struct atiixp_chinfo pch;
+       struct atiixp_chinfo rch;
+       struct atiixp_dma_op *sgd_table;
+       struct intr_config_hook delayed_attach;
+
+       uint32_t bufsz;
+       uint32_t codec_not_ready_bits, codec_idx, codec_found;
+       uint32_t dma_segs;
+       int registered_channels;
+
+       struct spinlock *lock;
+};
+
+#define atiixp_rd(_sc, _reg)   \
+               bus_space_read_4((_sc)->st, (_sc)->sh, _reg)
+#define atiixp_wr(_sc, _reg, _val)     \
+               bus_space_write_4((_sc)->st, (_sc)->sh, _reg, _val)
+
+#define atiixp_lock(_sc)       snd_mtxlock((_sc)->lock)
+#define atiixp_unlock(_sc)     snd_mtxunlock((_sc)->lock)
+#define atiixp_assert(_sc)     snd_mtxassert((_sc)->lock)
+
+static uint32_t atiixp_fmt_32bit[] = {
+       AFMT_STEREO | AFMT_S16_LE,
+       AFMT_STEREO | AFMT_S32_LE,
+       0
+};
+
+static uint32_t atiixp_fmt[] = {
+       AFMT_STEREO | AFMT_S16_LE,
+       0
+};
+
+static struct pcmchan_caps atiixp_caps_32bit = {
+       ATI_IXP_BASE_RATE,
+       ATI_IXP_BASE_RATE,
+       atiixp_fmt_32bit, 0
+};
+
+static struct pcmchan_caps atiixp_caps = {
+       ATI_IXP_BASE_RATE, 
+       ATI_IXP_BASE_RATE,
+       atiixp_fmt, 0
+};
+
+static const struct {
+       uint16_t vendor;
+       uint16_t devid;
+       char     *desc;
+} atiixp_hw[] = {
+       { ATI_VENDOR_ID, ATI_IXP_200_ID, "ATI IXP 200" },
+       { ATI_VENDOR_ID, ATI_IXP_300_ID, "ATI IXP 300" },
+       { ATI_VENDOR_ID, ATI_IXP_400_ID, "ATI IXP 400" },
+};
+
+static void atiixp_enable_interrupts(struct atiixp_info *);
+static void atiixp_disable_interrupts(struct atiixp_info *);
+static void atiixp_reset_aclink(struct atiixp_info *);
+static void atiixp_flush_dma(struct atiixp_info *, struct atiixp_chinfo *);
+static void atiixp_enable_dma(struct atiixp_info *, struct atiixp_chinfo *);
+static void atiixp_disable_dma(struct atiixp_info *, struct atiixp_chinfo *);
+
+static int atiixp_waitready_codec(struct atiixp_info *);
+static int atiixp_rdcd(kobj_t, void *, int);
+static int atiixp_wrcd(kobj_t, void *, int, uint32_t);
+
+static void  *atiixp_chan_init(kobj_t, void *, struct snd_dbuf *,
+                                               struct pcm_channel *, int);
+static int    atiixp_chan_setformat(kobj_t, void *, uint32_t);
+static int    atiixp_chan_setspeed(kobj_t, void *, uint32_t);
+static int    atiixp_chan_setblocksize(kobj_t, void *, uint32_t);
+static void   atiixp_buildsgdt(struct atiixp_chinfo *);
+static int    atiixp_chan_trigger(kobj_t, void *, int);
+static int    atiixp_chan_getptr(kobj_t, void *);
+static struct pcmchan_caps *atiixp_chan_getcaps(kobj_t, void *);
+
+static void atiixp_intr(void *);
+static void atiixp_dma_cb(void *, bus_dma_segment_t *, int, int);
+static void atiixp_chip_pre_init(struct atiixp_info *);
+static void atiixp_chip_post_init(void *);
+static void atiixp_release_resource(struct atiixp_info *);
+static int  atiixp_pci_probe(device_t);
+static int  atiixp_pci_attach(device_t);
+static int  atiixp_pci_detach(device_t);
+static int  atiixp_pci_suspend(device_t);
+static int  atiixp_pci_resume(device_t);
+
+/*
+ * ATI IXP helper functions
+ */
+static void
+atiixp_enable_interrupts(struct atiixp_info *sc)
+{
+       uint32_t value;
+
+       /* clear all pending */
+       atiixp_wr(sc, ATI_REG_ISR, 0xffffffff);
+
+       /* enable all relevant interrupt sources we can handle */
+       value = atiixp_rd(sc, ATI_REG_IER);
+
+       value |= ATI_REG_IER_IO_STATUS_EN;
+
+       /*
+        * Disable / ignore internal xrun/spdf interrupt flags
+        * since it doesn't interest us (for now).
+        */
+#if 0
+       value |= ATI_REG_IER_IN_XRUN_EN;
+       value |= ATI_REG_IER_OUT_XRUN_EN;
+
+       value |= ATI_REG_IER_SPDF_XRUN_EN;
+       value |= ATI_REG_IER_SPDF_STATUS_EN;
+#endif
+
+       atiixp_wr(sc, ATI_REG_IER, value);
+}
+
+static void
+atiixp_disable_interrupts(struct atiixp_info *sc)
+{
+       /* disable all interrupt sources */
+       atiixp_wr(sc, ATI_REG_IER, 0);
+
+       /* clear all pending */
+       atiixp_wr(sc, ATI_REG_ISR, 0xffffffff);
+}
+
+static void
+atiixp_reset_aclink(struct atiixp_info *sc)
+{
+       uint32_t value, timeout;
+
+       /* if power is down, power it up */
+       value = atiixp_rd(sc, ATI_REG_CMD);
+       if (value & ATI_REG_CMD_POWERDOWN) {
+               /* explicitly enable power */
+               value &= ~ATI_REG_CMD_POWERDOWN;
+               atiixp_wr(sc, ATI_REG_CMD, value);
+
+               /* have to wait at least 10 usec for it to initialise */
+               DELAY(20);
+       };
+
+       /* perform a soft reset */
+       value  = atiixp_rd(sc, ATI_REG_CMD);
+       value |= ATI_REG_CMD_AC_SOFT_RESET;
+       atiixp_wr(sc, ATI_REG_CMD, value);
+
+       /* need to read the CMD reg and wait aprox. 10 usec to init */
+       value  = atiixp_rd(sc, ATI_REG_CMD);
+       DELAY(20);
+
+       /* clear soft reset flag again */
+       value  = atiixp_rd(sc, ATI_REG_CMD);
+       value &= ~ATI_REG_CMD_AC_SOFT_RESET;
+       atiixp_wr(sc, ATI_REG_CMD, value);
+
+       /* check if the ac-link is working; reset device otherwise */
+       timeout = 10;
+       value = atiixp_rd(sc, ATI_REG_CMD);
+       while (!(value & ATI_REG_CMD_ACLINK_ACTIVE)
+                                               && --timeout) {
+#if 0
+               device_printf(sc->dev, "not up; resetting aclink hardware\n");
+#endif
+
+               /* dip aclink reset but keep the acsync */
+               value &= ~ATI_REG_CMD_AC_RESET;
+               value |=  ATI_REG_CMD_AC_SYNC;
+               atiixp_wr(sc, ATI_REG_CMD, value);
+
+               /* need to read CMD again and wait again (clocking in issue?) */
+               value = atiixp_rd(sc, ATI_REG_CMD);
+               DELAY(20);
+
+               /* assert aclink reset again */
+               value = atiixp_rd(sc, ATI_REG_CMD);
+               value |=  ATI_REG_CMD_AC_RESET;
+               atiixp_wr(sc, ATI_REG_CMD, value);
+
+               /* check if its active now */
+               value = atiixp_rd(sc, ATI_REG_CMD);
+       };
+
+       if (timeout == 0)
+               device_printf(sc->dev, "giving up aclink reset\n");
+#if 0
+       if (timeout != 10)
+               device_printf(sc->dev, "aclink hardware reset successful\n");
+#endif
+
+       /* assert reset and sync for safety */
+       value  = atiixp_rd(sc, ATI_REG_CMD);
+       value |= ATI_REG_CMD_AC_SYNC | ATI_REG_CMD_AC_RESET;
+       atiixp_wr(sc, ATI_REG_CMD, value);
+}
+
+static void
+atiixp_flush_dma(struct atiixp_info *sc, struct atiixp_chinfo *ch)
+{
+       atiixp_wr(sc, ATI_REG_FIFO_FLUSH, ch->flush_bit);
+}
+
+static void
+atiixp_enable_dma(struct atiixp_info *sc, struct atiixp_chinfo *ch)
+{
+       uint32_t value;
+
+       value = atiixp_rd(sc, ATI_REG_CMD);
+       if (!(value & ch->enable_bit)) {
+               value |= ch->enable_bit;
+               atiixp_wr(sc, ATI_REG_CMD, value);
+       }
+}
+
+static void 
+atiixp_disable_dma(struct atiixp_info *sc, struct atiixp_chinfo *ch)
+{
+       uint32_t value;
+
+       value = atiixp_rd(sc, ATI_REG_CMD);
+       if (value & ch->enable_bit) {
+               value &= ~ch->enable_bit;
+               atiixp_wr(sc, ATI_REG_CMD, value);
+       }
+}
+
+/*
+ * AC97 interface
+ */
+static int
+atiixp_waitready_codec(struct atiixp_info *sc)
+{
+       int timeout = 500;
+
+       do {
+               if ((atiixp_rd(sc, ATI_REG_PHYS_OUT_ADDR) &
+                               ATI_REG_PHYS_OUT_ADDR_EN) == 0)
+                       return 0;
+               DELAY(1);
+       } while (timeout--);
+
+       return -1;
+}
+
+static int
+atiixp_rdcd(kobj_t obj, void *devinfo, int reg)
+{
+       struct atiixp_info *sc = devinfo;
+       uint32_t data;
+       int timeout;
+
+       if (atiixp_waitready_codec(sc))
+               return -1;
+
+       data = (reg << ATI_REG_PHYS_OUT_ADDR_SHIFT) |
+                       ATI_REG_PHYS_OUT_ADDR_EN |
+                       ATI_REG_PHYS_OUT_RW | sc->codec_idx;
+
+       atiixp_wr(sc, ATI_REG_PHYS_OUT_ADDR, data);
+
+       if (atiixp_waitready_codec(sc))
+               return -1;
+
+       timeout = 500;
+       do {
+               data = atiixp_rd(sc, ATI_REG_PHYS_IN_ADDR);
+               if (data & ATI_REG_PHYS_IN_READ_FLAG)
+                       return data >> ATI_REG_PHYS_IN_DATA_SHIFT;
+               DELAY(1);
+       } while (timeout--);
+
+       if (reg < 0x7c)
+               device_printf(sc->dev, "codec read timeout! (reg 0x%x)\n", reg);
+
+       return -1;
+}
+
+static int
+atiixp_wrcd(kobj_t obj, void *devinfo, int reg, uint32_t data)
+{
+       struct atiixp_info *sc = devinfo;
+
+       if (atiixp_waitready_codec(sc))
+               return -1;
+
+       data = (data << ATI_REG_PHYS_OUT_DATA_SHIFT) |
+                       (((uint32_t)reg) << ATI_REG_PHYS_OUT_ADDR_SHIFT) |
+                       ATI_REG_PHYS_OUT_ADDR_EN | sc->codec_idx;
+
+       atiixp_wr(sc, ATI_REG_PHYS_OUT_ADDR, data);
+
+       return 0;
+}
+
+static kobj_method_t atiixp_ac97_methods[] = {
+       KOBJMETHOD(ac97_read,           atiixp_rdcd),
+       KOBJMETHOD(ac97_write,          atiixp_wrcd),
+       { 0, 0 }
+};
+AC97_DECLARE(atiixp_ac97);
+
+/*
+ * Playback / Record channel interface
+ */
+static void *
+atiixp_chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
+                                       struct pcm_channel *c, int dir)
+{
+       struct atiixp_info *sc = devinfo;
+       struct atiixp_chinfo *ch;
+       int num;
+
+       atiixp_lock(sc);
+
+       if (dir == PCMDIR_PLAY) {
+               ch = &sc->pch;
+               ch->linkptr_bit = ATI_REG_OUT_DMA_LINKPTR;
+               ch->enable_bit = ATI_REG_CMD_OUT_DMA_EN | ATI_REG_CMD_SEND_EN;
+               ch->flush_bit = ATI_REG_FIFO_OUT_FLUSH;
+               ch->dma_dt_cur_bit = ATI_REG_OUT_DMA_DT_CUR;
+               /* Native 32bit playback working properly */
+               ch->caps_32bit = 1;
+       } else {
+               ch = &sc->rch;
+               ch->linkptr_bit = ATI_REG_IN_DMA_LINKPTR;
+               ch->enable_bit = ATI_REG_CMD_IN_DMA_EN  | ATI_REG_CMD_RECEIVE_EN;
+               ch->flush_bit = ATI_REG_FIFO_IN_FLUSH;
+               ch->dma_dt_cur_bit = ATI_REG_IN_DMA_DT_CUR;
+               /* XXX Native 32bit recording appear to be broken */
+               ch->caps_32bit = 1;
+       }
+
+       ch->buffer = b;
+       ch->parent = sc;
+       ch->channel = c;
+       ch->dir = dir;
+       ch->dma_segs = sc->dma_segs;
+
+       atiixp_unlock(sc);
+
+       if (sndbuf_alloc(ch->buffer, sc->parent_dmat, sc->bufsz) == -1)
+               return NULL;
+
+       atiixp_lock(sc);
+       num = sc->registered_channels++;
+       ch->sgd_table = &sc->sgd_table[num * ch->dma_segs];
+       ch->sgd_addr = sc->sgd_addr +
+                       (num * ch->dma_segs * sizeof(struct atiixp_dma_op));
+       atiixp_disable_dma(sc, ch);
+       atiixp_unlock(sc);
+
+       return ch;
+}
+
+static int
+atiixp_chan_setformat(kobj_t obj, void *data, uint32_t format)
+{
+       struct atiixp_chinfo *ch = data;
+       struct atiixp_info *sc = ch->parent;
+       uint32_t value;
+
+       atiixp_lock(sc);
+       if (ch->dir == PCMDIR_REC) {
+               value = atiixp_rd(sc, ATI_REG_CMD);
+               value &= ~ATI_REG_CMD_INTERLEAVE_IN;
+               if ((format & AFMT_32BIT) == 0)
+                       value |= ATI_REG_CMD_INTERLEAVE_IN;
+               atiixp_wr(sc, ATI_REG_CMD, value);
+       } else {
+               value = atiixp_rd(sc, ATI_REG_OUT_DMA_SLOT);
+               value &= ~ATI_REG_OUT_DMA_SLOT_MASK;
+               /* We do not have support for more than 2 channels, _yet_. */
+               value |= ATI_REG_OUT_DMA_SLOT_BIT(3) |
+                               ATI_REG_OUT_DMA_SLOT_BIT(4);
+               value |= 0x04 << ATI_REG_OUT_DMA_THRESHOLD_SHIFT;
+               atiixp_wr(sc, ATI_REG_OUT_DMA_SLOT, value);
+               value = atiixp_rd(sc, ATI_REG_CMD);
+               value &= ~ATI_REG_CMD_INTERLEAVE_OUT;
+               if ((format & AFMT_32BIT) == 0)
+                       value |= ATI_REG_CMD_INTERLEAVE_OUT;
+               atiixp_wr(sc, ATI_REG_CMD, value);
+               value = atiixp_rd(sc, ATI_REG_6CH_REORDER);
+               value &= ~ATI_REG_6CH_REORDER_EN;
+               atiixp_wr(sc, ATI_REG_6CH_REORDER, value);
+       }
+       ch->fmt = format;
+       atiixp_unlock(sc);
+
+       return 0;
+}
+
+static int
+atiixp_chan_setspeed(kobj_t obj, void *data, uint32_t spd)
+{
+       /* XXX We're supposed to do VRA/DRA processing right here */
+       return ATI_IXP_BASE_RATE;
+}
+
+static int
+atiixp_chan_setblocksize(kobj_t obj, void *data, uint32_t blksz)
+{
+       struct atiixp_chinfo *ch = data;
+       struct atiixp_info *sc = ch->parent;
+
+       if (blksz > (sc->bufsz / ch->dma_segs))
+               blksz = sc->bufsz / ch->dma_segs;
+
+       sndbuf_resize(ch->buffer, ch->dma_segs, blksz);
+
+       return sndbuf_getblksz(ch->buffer);
+}
+
+static void
+atiixp_buildsgdt(struct atiixp_chinfo *ch)
+{
+       uint32_t addr, blksz;
+       int i;
+
+       addr = sndbuf_getbufaddr(ch->buffer);
+       blksz = sndbuf_getblksz(ch->buffer);
+
+       for (i = 0; i < ch->dma_segs; i++) {
+               ch->sgd_table[i].addr = htole32(addr + (i * blksz));
+               ch->sgd_table[i].status = htole16(0);
+               ch->sgd_table[i].size = htole16(blksz >> 2);
+               ch->sgd_table[i].next = htole32((uint32_t)ch->sgd_addr + 
+                                               (((i + 1) % ch->dma_segs) *
+                                               sizeof(struct atiixp_dma_op)));
+       }
+}
+
+static int
+atiixp_chan_trigger(kobj_t obj, void *data, int go)
+{
+       struct atiixp_chinfo *ch = data;
+       struct atiixp_info *sc = ch->parent;
+       uint32_t value;
+
+       atiixp_lock(sc);
+
+       switch (go) {
+               case PCMTRIG_START:
+                       atiixp_flush_dma(sc, ch);
+                       atiixp_buildsgdt(ch);
+                       atiixp_wr(sc, ch->linkptr_bit, 0);
+                       atiixp_enable_dma(sc, ch);
+                       atiixp_wr(sc, ch->linkptr_bit,
+                               (uint32_t)ch->sgd_addr | ATI_REG_LINKPTR_EN);
+                       break;
+               case PCMTRIG_STOP:
+               case PCMTRIG_ABORT:
+                       atiixp_disable_dma(sc, ch);
+                       atiixp_flush_dma(sc, ch);
+                       break;
+               default:
+                       atiixp_unlock(sc);
+                       return 0;
+                       break;
+       }
+
+       /* Update bus busy status */
+       value = atiixp_rd(sc, ATI_REG_IER);
+       if (atiixp_rd(sc, ATI_REG_CMD) & (
+                       ATI_REG_CMD_SEND_EN | ATI_REG_CMD_RECEIVE_EN |
+                       ATI_REG_CMD_SPDF_OUT_EN))
+               value |= ATI_REG_IER_SET_BUS_BUSY;
+       else
+               value &= ~ATI_REG_IER_SET_BUS_BUSY;
+       atiixp_wr(sc, ATI_REG_IER, value);
+
+       atiixp_unlock(sc);
+
+       return 0;
+}
+
+static int
+atiixp_chan_getptr(kobj_t obj, void *data)
+{
+       struct atiixp_chinfo *ch = data;
+       struct atiixp_info *sc = ch->parent;
+       uint32_t addr, align, retry, sz;
+       volatile uint32_t ptr;
+
+       addr = sndbuf_getbufaddr(ch->buffer);
+       align = (ch->fmt & AFMT_32BIT) ? 7 : 3;
+       retry = 100;
+       sz = sndbuf_getblksz(ch->buffer) * ch->dma_segs;
+
+       atiixp_lock(sc);
+       do {
+               ptr = atiixp_rd(sc, ch->dma_dt_cur_bit);
+               if (ptr < addr)
+                       continue;
+               ptr -= addr;
+               if (ptr < sz && !(ptr & align))
+                       break;
+       } while (--retry);
+       atiixp_unlock(sc);
+
+#if 0
+       if (retry != 100) {
+               device_printf(sc->dev,
+                   "%saligned hwptr: dir=PCMDIR_%s ptr=%u fmt=0x%08x retry=%d\n",
+                   (ptr & align) ? "un" : "",
+                   (ch->dir == PCMDIR_PLAY) ? "PLAY" : "REC", ptr,
+                   ch->fmt, 100 - retry);
+       }
+#endif
+
+       return (retry > 0) ? ptr : 0;
+}
+
+static struct pcmchan_caps *
+atiixp_chan_getcaps(kobj_t obj, void *data)
+{
+       struct atiixp_chinfo *ch = data;
+
+       if (ch->caps_32bit)
+               return &atiixp_caps_32bit;
+       return &atiixp_caps;
+}
+
+static kobj_method_t atiixp_chan_methods[] = {
+       KOBJMETHOD(channel_init,                atiixp_chan_init),
+       KOBJMETHOD(channel_setformat,           atiixp_chan_setformat),
+       KOBJMETHOD(channel_setspeed,            atiixp_chan_setspeed),
+       KOBJMETHOD(channel_setblocksize,        atiixp_chan_setblocksize),
+       KOBJMETHOD(channel_trigger,             atiixp_chan_trigger),
+       KOBJMETHOD(channel_getptr,              atiixp_chan_getptr),
+       KOBJMETHOD(channel_getcaps,             atiixp_chan_getcaps),
+       { 0, 0 }
+};
+CHANNEL_DECLARE(atiixp_chan);
+
+/*
+ * PCI driver interface
+ */
+static void
+atiixp_intr(void *p)
+{
+       struct atiixp_info *sc = p;
+       uint32_t status, enable, detected_codecs;
+
+       atiixp_lock(sc);
+       status = atiixp_rd(sc, ATI_REG_ISR);
+
+       if (status == 0) {
+               atiixp_unlock(sc);
+               return;
+       }
+
+       if ((status & ATI_REG_ISR_IN_STATUS) && sc->rch.channel) {
+               atiixp_unlock(sc);
+               chn_intr(sc->rch.channel);
+               atiixp_lock(sc);
+       }
+       if ((status & ATI_REG_ISR_OUT_STATUS) && sc->pch.channel) {
+               atiixp_unlock(sc);
+               chn_intr(sc->pch.channel);
+               atiixp_lock(sc);
+       }
+
+#if 0
+       if (status & ATI_REG_ISR_IN_XRUN) {
+               device_printf(sc->dev,
+                       "Recieve IN XRUN interrupt\n");
+       }
+       if (status & ATI_REG_ISR_OUT_XRUN) {
+               device_printf(sc->dev,
+                       "Recieve OUT XRUN interrupt\n");
+       }
+#endif
+
+       if (status & CODEC_CHECK_BITS) {
+               /* mark missing codecs as not ready */
+               detected_codecs = status & CODEC_CHECK_BITS;
+               sc->codec_not_ready_bits |= detected_codecs;
+
+               /* disable detected interupt sources */
+               enable  = atiixp_rd(sc, ATI_REG_IER);
+               enable &= ~detected_codecs;
+               atiixp_wr(sc, ATI_REG_IER, enable);
+       }
+
+       /* acknowledge */
+       atiixp_wr(sc, ATI_REG_ISR, status);
+       atiixp_unlock(sc);
+}
+
+static void
+atiixp_dma_cb(void *p, bus_dma_segment_t *bds, int a, int b)
+{
+       struct atiixp_info *sc = (struct atiixp_info *)p;
+       sc->sgd_addr = bds->ds_addr;
+}
+
+static void
+atiixp_chip_pre_init(struct atiixp_info *sc)
+{
+       uint32_t value;
+
+       atiixp_lock(sc);
+
+       /* disable interrupts */
+       atiixp_disable_interrupts(sc);
+
+       /* clear all DMA enables (preserving rest of settings) */
+       value = atiixp_rd(sc, ATI_REG_CMD);
+       value &= ~(ATI_REG_CMD_IN_DMA_EN | ATI_REG_CMD_OUT_DMA_EN |
+                                               ATI_REG_CMD_SPDF_OUT_EN );
+       atiixp_wr(sc, ATI_REG_CMD, value);
+
+       /* reset aclink */
+       atiixp_reset_aclink(sc);
+
+       sc->codec_not_ready_bits = 0;
+
+       /* enable all codecs to interrupt as well as the new frame interrupt */
+       atiixp_wr(sc, ATI_REG_IER, CODEC_CHECK_BITS);
+
+       atiixp_unlock(sc);
+}
+
+static void
+atiixp_chip_post_init(void *arg)
+{
+       struct atiixp_info *sc = (struct atiixp_info *)arg;
+       uint32_t subdev;
+       int i, timeout, found;
+       char status[SND_STATUSLEN];
+
+       atiixp_lock(sc);
+
+       if (sc->delayed_attach.ich_func) {
+               config_intrhook_disestablish(&sc->delayed_attach);
+               sc->delayed_attach.ich_func = NULL;
+       }
+
+       /* wait for the interrupts to happen */
+       timeout = 100;
+       while (--timeout) {
+               msleep(sc, sc->lock, 0, "ixpslp", 1);
+               if (sc->codec_not_ready_bits)
+                       break;
+       }
+
+       atiixp_disable_interrupts(sc);
+
+       if (timeout == 0) {
+               device_printf(sc->dev,
+                       "WARNING: timeout during codec detection; "
+                       "codecs might be present but haven't interrupted\n");
+               atiixp_unlock(sc);
+               goto postinitbad;
+       }
+
+       found = 0;
+
+       /*
+        * ATI IXP can have upto 3 codecs, but single codec should be
+        * suffice for now.
+        */
+       if (!(sc->codec_not_ready_bits &
+                               ATI_REG_ISR_CODEC0_NOT_READY)) {
+               /* codec 0 present */
+               sc->codec_found++;
+               sc->codec_idx = 0;
+               found++;
+       }
+
+       if (!(sc->codec_not_ready_bits &
+                               ATI_REG_ISR_CODEC1_NOT_READY)) {
+               /* codec 1 present */
+               sc->codec_found++;
+       }
+
+       if (!(sc->codec_not_ready_bits &
+                               ATI_REG_ISR_CODEC2_NOT_READY)) {
+               /* codec 2 present */
+               sc->codec_found++;
+       }
+
+       atiixp_unlock(sc);
+
+       if (found == 0)
+               goto postinitbad;
+
+       /* create/init mixer */
+       sc->codec = AC97_CREATE(sc->dev, sc, atiixp_ac97);
+       if (sc->codec == NULL)
+               goto postinitbad;
+
+       subdev = (pci_get_subdevice(sc->dev) << 16) | pci_get_subvendor(sc->dev);
+       switch (subdev) {
+       case 0x2043161f:        /* Maxselect x710s - http://maxselect.ru/ */
+               ac97_setflags(sc->codec, ac97_getflags(sc->codec) | AC97_F_EAPD_INV);
+               break;
+       default:
+               break;
+       }
+
+       mixer_init(sc->dev, ac97_getmixerclass(), sc->codec);
+
+       if (pcm_register(sc->dev, sc, ATI_IXP_NPCHAN, ATI_IXP_NRCHAN))
+               goto postinitbad;
+
+       for (i = 0; i < ATI_IXP_NPCHAN; i++)
+               pcm_addchan(sc->dev, PCMDIR_PLAY, &atiixp_chan_class, sc);
+       for (i = 0; i < ATI_IXP_NRCHAN; i++)
+               pcm_addchan(sc->dev, PCMDIR_REC, &atiixp_chan_class, sc);
+
+       ksnprintf(status, SND_STATUSLEN, "at memory 0x%lx irq %ld %s", 
+                       rman_get_start(sc->reg), rman_get_start(sc->irq),
+                       PCM_KLDSTRING(snd_atiixp));
+
+       pcm_setstatus(sc->dev, status);
+
+       atiixp_lock(sc);
+       atiixp_enable_interrupts(sc);
+       atiixp_unlock(sc);
+
+       return;
+
+postinitbad:
+       atiixp_release_resource(sc);
+}
+
+static void
+atiixp_release_resource(struct atiixp_info *sc)
+{
+       if (sc == NULL)
+               return;
+       if (sc->codec) {
+               ac97_destroy(sc->codec);
+               sc->codec = NULL;
+       }
+       if (sc->ih) {
+               bus_teardown_intr(sc->dev, sc->irq, sc->ih);
+               sc->ih = 0;
+       }
+       if (sc->reg) {
+               bus_release_resource(sc->dev, sc->regtype, sc->regid, sc->reg);
+               sc->reg = 0;
+       }
+       if (sc->irq) {
+               bus_release_resource(sc->dev, SYS_RES_IRQ, sc->irqid, sc->irq);
+               sc->irq = 0;
+       }
+       if (sc->parent_dmat) {
+               bus_dma_tag_destroy(sc->parent_dmat);
+               sc->parent_dmat = 0;
+       }
+       if (sc->sgd_dmamap) {
+               bus_dmamap_unload(sc->sgd_dmat, sc->sgd_dmamap);
+               sc->sgd_dmamap = 0;
+       }
+       if (sc->sgd_dmat) {
+               bus_dma_tag_destroy(sc->sgd_dmat);
+               sc->sgd_dmat = 0;
+       }
+       if (sc->lock) {
+               snd_mtxfree(sc->lock);
+               sc->lock = NULL;
+       }
+}
+
+static int
+atiixp_pci_probe(device_t dev)
+{
+       int i;
+       uint16_t devid, vendor;
+
+       vendor = pci_get_vendor(dev);
+       devid = pci_get_device(dev);
+       for (i = 0; i < sizeof(atiixp_hw)/sizeof(atiixp_hw[0]); i++) {
+               if (vendor == atiixp_hw[i].vendor &&
+                                       devid == atiixp_hw[i].devid) {
+                       device_set_desc(dev, atiixp_hw[i].desc);
+                       return BUS_PROBE_DEFAULT;
+               }
+       }
+
+       return ENXIO;
+}
+
+static int
+atiixp_pci_attach(device_t dev)
+{
+       struct atiixp_info *sc;
+       int i;
+
+       if ((sc = kmalloc(sizeof(*sc), M_DEVBUF, M_NOWAIT | M_ZERO)) == NULL) {
+               device_printf(dev, "cannot allocate softc\n");
+               return ENXIO;
+       }
+
+       sc->lock = snd_mtxcreate(device_get_nameunit(dev), "sound softc");
+       sc->dev = dev;
+       /*
+        * Default DMA segments per playback / recording channel
+        */
+       sc->dma_segs = ATI_IXP_DMA_CHSEGS;
+
+       pci_set_powerstate(dev, PCI_POWERSTATE_D0);
+       pci_enable_busmaster(dev);
+
+       sc->regid = PCIR_BAR(0);
+       sc->regtype = SYS_RES_MEMORY;
+       sc->reg = bus_alloc_resource_any(dev, sc->regtype, &sc->regid,
+                                                               RF_ACTIVE);
+
+       if (!sc->reg) {
+               device_printf(dev, "unable to allocate register space\n");
+               goto bad;
+       }
+
+       sc->st = rman_get_bustag(sc->reg);
+       sc->sh = rman_get_bushandle(sc->reg);
+
+       sc->bufsz = pcm_getbuffersize(dev, 4096, ATI_IXP_DEFAULT_BUFSZ, 65536);
+
+       sc->irqid = 0;
+       sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->irqid,
+                                               RF_ACTIVE | RF_SHAREABLE);
+       if (!sc->irq || 
+                       snd_setup_intr(dev, sc->irq, INTR_MPSAFE,
+                                               atiixp_intr, sc, &sc->ih)) {
+               device_printf(dev, "unable to map interrupt\n");
+               goto bad;
+       }
+
+       /*
+        * Let the user choose the best DMA segments.
+        */
+        if (resource_int_value(device_get_name(dev),
+                       device_get_unit(dev), "dma_segs",
+                       &i) == 0) {
+               if (i < ATI_IXP_DMA_CHSEGS_MIN)
+                       i = ATI_IXP_DMA_CHSEGS_MIN;
+               if (i > ATI_IXP_DMA_CHSEGS_MAX)
+                       i = ATI_IXP_DMA_CHSEGS_MAX;
+               sc->dma_segs = i;
+       }
+
+       /*
+        * round the value to the nearest ^2
+        */
+       i = 0;
+       while (sc->dma_segs >> i)
+               i++;
+       sc->dma_segs = 1 << (i - 1);
+       if (sc->dma_segs < ATI_IXP_DMA_CHSEGS_MIN)
+               sc->dma_segs = ATI_IXP_DMA_CHSEGS_MIN;
+       else if (sc->dma_segs > ATI_IXP_DMA_CHSEGS_MAX)
+               sc->dma_segs = ATI_IXP_DMA_CHSEGS_MAX;
+
+       /*
+        * DMA tag for scatter-gather buffers and link pointers
+        */
+       if (bus_dma_tag_create(/*parent*/NULL, /*alignment*/sc->bufsz, /*boundary*/0,
+               /*lowaddr*/BUS_SPACE_MAXADDR_32BIT,
+               /*highaddr*/BUS_SPACE_MAXADDR,
+               /*filter*/NULL, /*filterarg*/NULL,
+               /*maxsize*/sc->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff,
+               /*flags*/0,
+               &sc->parent_dmat) != 0) {
+               device_printf(dev, "unable to create dma tag\n");
+               goto bad;
+       }
+
+       if (bus_dma_tag_create(/*parent*/NULL, /*alignment*/2, /*boundary*/0,
+               /*lowaddr*/BUS_SPACE_MAXADDR_32BIT,
+               /*highaddr*/BUS_SPACE_MAXADDR,
+               /*filter*/NULL, /*filterarg*/NULL,
+               /*maxsize*/sc->dma_segs * ATI_IXP_NCHANS *
+                                               sizeof(struct atiixp_dma_op),
+               /*nsegments*/1, /*maxsegz*/0x3ffff,
+               /*flags*/0,
+               &sc->sgd_dmat) != 0) {
+               device_printf(dev, "unable to create dma tag\n");
+               goto bad;
+       }
+
+       if (bus_dmamem_alloc(sc->sgd_dmat, (void **)&sc->sgd_table, 
+                               BUS_DMA_NOWAIT, &sc->sgd_dmamap) == -1)
+               goto bad;
+
+       if (bus_dmamap_load(sc->sgd_dmat, sc->sgd_dmamap, sc->sgd_table, 
+                               sc->dma_segs * ATI_IXP_NCHANS *
+                                               sizeof(struct atiixp_dma_op),
+                               atiixp_dma_cb, sc, 0))
+               goto bad;
+
+
+       atiixp_chip_pre_init(sc);
+
+       sc->delayed_attach.ich_func = atiixp_chip_post_init;
+       sc->delayed_attach.ich_arg = sc;
+       if (cold == 0 ||
+                       config_intrhook_establish(&sc->delayed_attach) != 0) {
+               sc->delayed_attach.ich_func = NULL;
+               atiixp_chip_post_init(sc);
+       }
+
+       return 0;
+
+bad:
+       atiixp_release_resource(sc);
+       return ENXIO;
+}
+
+static int
+atiixp_pci_detach(device_t dev)
+{
+       int r;
+       struct atiixp_info *sc;
+
+       sc = pcm_getdevinfo(dev);
+       if (sc != NULL) {
+               if (sc->codec != NULL) {
+                       r = pcm_unregister(dev);
+                       if (r)
+                               return r;
+               }
+               sc->codec = NULL;
+               atiixp_disable_interrupts(sc);
+               atiixp_release_resource(sc);
+               kfree(sc, M_DEVBUF);
+       }
+       return 0;
+}
+
+static int
+atiixp_pci_suspend(device_t dev)
+{
+       struct atiixp_info *sc = pcm_getdevinfo(dev);
+       uint32_t value;
+
+       /* quickly disable interrupts and save channels active state */
+       atiixp_lock(sc);
+       atiixp_disable_interrupts(sc);
+       value = atiixp_rd(sc, ATI_REG_CMD);
+       sc->pch.active = (value & ATI_REG_CMD_SEND_EN) ? 1 : 0;
+       sc->rch.active = (value & ATI_REG_CMD_RECEIVE_EN) ? 1 : 0;
+       atiixp_unlock(sc);
+
+       /* stop everything */
+       if (sc->pch.channel && sc->pch.active)
+               atiixp_chan_trigger(NULL, &sc->pch, PCMTRIG_STOP);
+       if (sc->rch.channel && sc->rch.active)
+               atiixp_chan_trigger(NULL, &sc->rch, PCMTRIG_STOP);
+
+       /* power down aclink and pci bus */
+       atiixp_lock(sc);
+       value = atiixp_rd(sc, ATI_REG_CMD);
+       value |= ATI_REG_CMD_POWERDOWN | ATI_REG_CMD_AC_RESET;
+       atiixp_wr(sc, ATI_REG_CMD, ATI_REG_CMD_POWERDOWN);
+       pci_set_powerstate(dev, PCI_POWERSTATE_D3);
+       atiixp_unlock(sc);
+
+       return 0;
+}
+
+static int
+atiixp_pci_resume(device_t dev)
+{
+       struct atiixp_info *sc = pcm_getdevinfo(dev);
+
+       atiixp_lock(sc);
+       /* power up pci bus */
+       pci_set_powerstate(dev, PCI_POWERSTATE_D0);
+       pci_enable_io(dev, SYS_RES_MEMORY);
+       pci_enable_busmaster(dev);
+       /* reset / power up aclink */
+       atiixp_reset_aclink(sc);
+       atiixp_unlock(sc);
+
+       if (mixer_reinit(dev) == -1) {
+               device_printf(dev, "unable to reinitialize the mixer\n");
+               return ENXIO;
+       }
+
+       /*
+        * Resume channel activities. Reset channel format regardless
+        * of its previous state.
+        */
+       if (sc->pch.channel) {
+               if (sc->pch.fmt)
+                       atiixp_chan_setformat(NULL, &sc->pch, sc->pch.fmt);
+               if (sc->pch.active)
+                       atiixp_chan_trigger(NULL, &sc->pch, PCMTRIG_START);
+       }
+       if (sc->rch.channel) {
+               if (sc->rch.fmt)
+                       atiixp_chan_setformat(NULL, &sc->rch, sc->rch.fmt);
+               if (sc->rch.active)
+                       atiixp_chan_trigger(NULL, &sc->rch, PCMTRIG_START);
+       }
+
+       /* enable interrupts */
+       atiixp_lock(sc);
+       atiixp_enable_interrupts(sc);
+       atiixp_unlock(sc);
+
+       return 0;
+}
+
+static device_method_t atiixp_methods[] = {
+       DEVMETHOD(device_probe,         atiixp_pci_probe),
+       DEVMETHOD(device_attach,        atiixp_pci_attach),
+       DEVMETHOD(device_detach,        atiixp_pci_detach),
+       DEVMETHOD(device_suspend,       atiixp_pci_suspend),
+       DEVMETHOD(device_resume,        atiixp_pci_resume),
+       { 0, 0 }
+};
+
+static driver_t atiixp_driver = {
+       "pcm",
+       atiixp_methods,
+       PCM_SOFTC_SIZE,
+};
+
+DRIVER_MODULE(snd_atiixp, pci, atiixp_driver, pcm_devclass, 0, 0);
+MODULE_DEPEND(snd_atiixp, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
+MODULE_VERSION(snd_atiixp, 1);
diff --git a/sys/dev/sound/pci/atiixp.h b/sys/dev/sound/pci/atiixp.h
new file mode 100644 (file)
index 0000000..7d75c87
--- /dev/null
@@ -0,0 +1,204 @@
+/*-
+ * Copyright (c) 2005 Ariff Abdullah <ariff@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: src/sys/dev/sound/pci/atiixp.h,v 1.1.2.2 2006/03/02 00:09:30 ariff Exp $
+ * $DragonFly: src/sys/dev/sound/pci/atiixp.h,v 1.1 2007/01/04 21:47:02 corecode Exp $
+ */
+
+#ifndef _ATIIXP_H_
+#define _ATIIXP_H_
+
+/*
+ * Constants, pretty much FreeBSD specific.
+ */
+/* Number of playback / recording channel */
+#define ATI_IXP_NPCHAN         1
+#define ATI_IXP_NRCHAN         1
+#define ATI_IXP_NCHANS         (ATI_IXP_NPCHAN + ATI_IXP_NRCHAN)
+
+/*
+ * Maximum segments/descriptors is 256, but 2 for
+ * each channel should be more than enough for us.
+ */
+#define ATI_IXP_DMA_CHSEGS     2
+#define ATI_IXP_DMA_CHSEGS_MIN 2
+#define ATI_IXP_DMA_CHSEGS_MAX 256
+
+#define ATI_IXP_DEFAULT_BUFSZ  (1 << 13)       /* 8192 */
+
+#define ATI_VENDOR_ID          0x1002  /* ATI Technologies */
+#define ATI_IXP_200_ID         0x4341
+#define ATI_IXP_300_ID         0x4361
+#define ATI_IXP_400_ID         0x4370
+
+#define ATI_IXP_BASE_RATE      48000
+
+/* 
+ * Register definitions for ATI IXP
+ *
+ * References: ALSA snd-atiixp.c , OpenBSD/NetBSD auixp-*.h
+ */
+
+#define ATI_IXP_CODECS 3
+
+#define ATI_REG_ISR                    0x00            /* interrupt source */
+#define  ATI_REG_ISR_IN_XRUN           (1U<<0)
+#define  ATI_REG_ISR_IN_STATUS         (1U<<1)
+#define  ATI_REG_ISR_OUT_XRUN          (1U<<2)
+#define  ATI_REG_ISR_OUT_STATUS                (1U<<3)
+#define  ATI_REG_ISR_SPDF_XRUN         (1U<<4)
+#define  ATI_REG_ISR_SPDF_STATUS       (1U<<5)
+#define  ATI_REG_ISR_PHYS_INTR         (1U<<8)
+#define  ATI_REG_ISR_PHYS_MISMATCH     (1U<<9)
+#define  ATI_REG_ISR_CODEC0_NOT_READY  (1U<<10)
+#define  ATI_REG_ISR_CODEC1_NOT_READY  (1U<<11)
+#define  ATI_REG_ISR_CODEC2_NOT_READY  (1U<<12)
+#define  ATI_REG_ISR_NEW_FRAME         (1U<<13)
+
+#define ATI_REG_IER                    0x04            /* interrupt enable */
+#define  ATI_REG_IER_IN_XRUN_EN             &nb