Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
PCM(4)		       FreeBSD Kernel Interfaces Manual			PCM(4)

     pcm, snd -- FreeBSD PCM audio device driver

     For a card	with bridge driver support, and	a PnP card:
     device pcm

     For a card	without	bridge driver support, and a non-PnP card:
     device pcm0 at isa? port? irq 5 drq 1 flags 0x15

     The pcm 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.

     If	your sound card	is supported by	a bridge driver, pcm driver works in
     conjunction with the bridge driver.

     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 channel, or	to
     0x10 + C to specify channel C.

     The driver	works best with	WSS/MSS	cards, which have a very clean archi-
     tecture and an orthogonal set of features.	 They also happen to be	among
     the cheapest audio	cards on the market.

     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 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).

     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 mem-
     ory-mapped	access to the audio buffers). As a consequence,	some applica-
     tions may need to be recompiled with a slightly modified audio module.
     See /usr/include/sys/soundcard.h for a complete list of the supported

     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.

     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.

	 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.

     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).

     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.

     Trident 4DWave DX/NX (PCI)

     ENSONIQ AudioPCI ES1370/1371 (PCI)
	 Creative Labs SoundBlaster PCI	is supported as	well.

     ESS Solo-1/1E (PCI)

     NeoMagic 256AV/ZX (PCI)

     The following commonly used symbolic links	to real	device nodes should be

     /dev/audio	     Sparc-compatible audio device
     /dev/dsp	     Digitized voice device
     /dev/dspW	     Like /dev/dsp, but	16 bits	per sample
     /dev/midi	     Raw midi access device
     /dev/mixer	     Control port mixer	device
     /dev/music	     Level 2 sequencer interface
     /dev/sequencer  Sequencer device
     /dev/pss	     Programmable device interface

     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 dmesg(8)	utility.

     All the appropriate device	nodes and symbolic links for the `pcm0'	device
     can be created with the following commands:

	   cd /dev; sh MAKEDEV snd0

     Similarly,	the device nodes and symbolic links for	the `pcm1' device
     would be created as follows:

	   cd /dev; sh MAKEDEV snd1

     Since the /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.

     ac97: dac not ready
	 AC97 codec is not likely to be	accompanied with the sound card.

     unsupported subdevice XX
	 A device node is not created properly.

     Some features of your cards (e.g. global volume control) might not	be
     supported on all devices.

     The pcm device driver first appeared in FreeBSD 2.2.6, rewritten in
     FreeBSD 4.0.

     csa(4), gusc(4), sbc(4)

     Luigi Rizzo <> initially	wrote the pcm device driver
     and this manual page.
     Cameron Grant <>	totally	revised	the device
     Seigo Tanimura <> revised this manual

FreeBSD	11.1			 June 3, 1998			  FreeBSD 11.1


Want to link to this manual page? Use this URL:

home | help