1Introduction	Notes on Modular Sound Drivers and Soundcore
2Wade Hampton
32/14/2001
4
5Purpose:
6========
7This document provides some general notes on the modular
8sound drivers and their configuration, along with the
9support modules sound.o and soundcore.o.
10
11Note, some of this probably should be added to the Sound-HOWTO!
12
13Note, soundlow.o was present with 2.2 kernels but is not
14required for 2.4.x kernels.  References have been removed
15to this.
16
17
18Copying:
19========
20none
21
22
23History:
24========
250.1.0  11/20/1998  First version, draft
261.0.0  11/1998     Alan Cox changes, incorporation in 2.2.0
27                   as /usr/src/linux/Documentation/sound/Introduction
281.1.0  6/30/1999   Second version, added notes on making the drivers,
29                   added info on multiple sound cards of similar types,]
30                   added more diagnostics info, added info about esd.
31                   added info on OSS and ALSA.
321.1.1  19991031	   Added notes on sound-slot- and sound-service.
33			(Alan Cox)
341.1.2  20000920    Modified for Kernel 2.4 (Christoph Hellwig)
351.1.3  20010214    Minor notes and corrections (Wade Hampton)
36                   Added examples of sound-slot-0, etc.
37
38
39Modular Sound Drivers:
40======================
41
42Thanks to the GREAT work by Alan Cox (alan@lxorguk.ukuu.org.uk),
43
44[And Oleg Drokin, Thomas Sailer, Andrew Veliath and more than a few
45 others - not to mention Hannu's original code being designed well
46 enough to cope with that kind of chopping up](Alan)
47
48the standard Linux kernels support a modular sound driver.  From
49Alan's comments in linux/drivers/sound/README.FIRST:
50
51  The modular sound driver patches were funded by Red Hat Software
52  (www.redhat.com). The sound driver here is thus a modified version of
53  Hannu's code. Please bear that in mind when considering the appropriate
54  forums for bug reporting.
55
56The modular sound drivers may be loaded via insmod or modprobe.
57To support all the various sound modules, there are two general
58support modules that must be loaded first:
59
60   soundcore.o:   Top level handler for the sound system, provides
61                  a set of functions for registration of devices
62                  by type.
63
64   sound.o:       Common sound functions required by all modules.
65
66For the specific sound modules (e.g., sb.o for the Soundblaster),
67read the documentation on that module to determine what options
68are available, for example IRQ, address, DMA.
69
70Warning, the options for different cards sometime use different names
71for the same or a similar feature (dma1= versus dma16=).  As a last
72resort, inspect the code (search for MODULE_PARM).
73
74Notes:
75
761.  There is a new OpenSource sound driver called ALSA which is
77    currently under development:  http://www.alsa-project.org/
78    The ALSA drivers support some newer hardware that may not
79    be supported by this sound driver and also provide some
80    additional features.
81
822.  The commercial OSS driver may be obtained from the site:
83    http://www.opensound.com.  This may be used for cards that
84    are unsupported by the kernel driver, or may be used
85    by other operating systems.
86
873.  The enlightenment sound daemon may be used for playing
88    multiple sounds at the same time via a single card, eliminating
89    some of the requirements for multiple sound card systems.  For
90    more information, see:  http://www.tux.org/~ricdude/EsounD.html
91    The "esd" program may be used with the real-player and mpeg
92    players like mpg123 and x11amp.  The newer real-player
93    and some games even include built-in support for ESD!
94
95
96Building the Modules:
97=====================
98
99This document does not provide full details on building the
100kernel, etc.  The notes below apply only to making the kernel
101sound modules.   If this conflicts with the kernel's README,
102the README takes precedence.
103
1041.  To make the kernel sound modules, cd to your /usr/src/linux
105    directory (typically) and type make config, make menuconfig,
106    or make xconfig (to start the command line, dialog, or x-based
107    configuration tool).
108
1092.  Select the Sound option and a dialog will be displayed.
110
1113.  Select M (module) for "Sound card support".
112
1134.  Select your sound driver(s) as a module.  For ProAudio, Sound
114    Blaster, etc., select M (module) for OSS sound modules.
115    [thanks to Marvin Stodolsky <stodolsk@erols.com>]A
116
1175.  Make the kernel (e.g., make dep ; make bzImage), and install
118    the kernel.
119
1206.  Make the modules and install them (make modules; make modules_install).
121
122Note, for 2.4.x kernels, make sure you have the newer modutils
123loaded or modules will not be loaded properly.  2.4.x changed the
124layout of /lib/modules/2.4.x and requires an updated modutils.
125
126
127Plug and Play (PnP:
128===================
129
130If the sound card is an ISA PnP card, isapnp may be used
131to configure the card.  See the file isapnp.txt in the
132directory one level up (e.g., /usr/src/linux/Documentation).
133
134Also the 2.4.x kernels provide PnP capabilities, see the
135file NEWS in this directory.
136
137PCI sound cards are highly recommended, as they are far
138easier to configure and from what I have read, they use
139less resources and are more CPU efficient.
140
141
142INSMOD:
143=======
144
145If loading via insmod, the common modules must be loaded in the
146order below BEFORE loading the other sound modules.  The card-specific
147modules may then be loaded (most require parameters).  For example,
148I use the following via a shell script to load my SoundBlaster:
149
150SB_BASE=0x240
151SB_IRQ=9
152SB_DMA=3
153SB_DMA2=5
154SB_MPU=0x300
155#
156echo Starting sound
157/sbin/insmod soundcore
158/sbin/insmod sound
159#
160echo Starting sound blaster....
161/sbin/insmod uart401
162/sbin/insmod sb io=$SB_BASE irq=$SB_IRQ dma=$SB_DMA dma16=$SB_DMA2 mpu_io=$SB_MP
163
164When using sound as a module, I typically put these commands
165in a file such as /root/soundon.sh.
166
167
168MODPROBE:
169=========
170
171If loading via modprobe, these common files are automatically loaded
172when requested by modprobe.  For example, my /etc/modules.conf contains:
173
174alias sound sb
175options sb io=0x240 irq=9 dma=3 dma16=5 mpu_io=0x300
176
177All you need to do to load the module is:
178
179	/sbin/modprobe sb
180
181
182Sound Status:
183=============
184
185The status of sound may be read/checked by:
186        cat (anyfile).au >/dev/audio
187
188[WWH:  This may not work properly for SoundBlaster PCI 128 cards
189such as the es1370/1 (see the es1370/1 files in this directory)
190as they do not automatically support uLaw on /dev/audio.]
191
192The status of the modules and which modules depend on
193which other modules may be checked by:
194	/sbin/lsmod
195
196/sbin/lsmod should show something like the following:
197	sb                     26280   0
198	uart401                 5640   0  [sb]
199	sound                  57112   0  [sb uart401]
200	soundcore               1968   8  [sb sound]
201
202
203Removing Sound:
204===============
205
206Sound may be removed by using /sbin/rmmod in the reverse order
207in which you load the modules.  Note, if a program has a sound device
208open (e.g., xmixer), that module (and the modules on which it
209depends) may not be unloaded.
210
211For example, I use the following to remove my Soundblaster (rmmod
212in the reverse order in which I loaded the modules):
213
214/sbin/rmmod sb
215/sbin/rmmod uart401
216/sbin/rmmod sound
217/sbin/rmmod soundcore
218
219When using sound as a module, I typically put these commands
220in a script such as /root/soundoff.sh.
221
222
223Removing Sound for use with OSS:
224================================
225
226If you get really stuck or have a card that the kernel modules
227will not support, you can get a commercial sound driver from
228http://www.opensound.com.  Before loading the commercial sound
229driver, you should do the following:
230
2311.  remove sound modules (detailed above)
2322.  remove the sound modules from /etc/modules.conf
2333.  move the sound modules from /lib/modules/<kernel>/misc
234    (for example, I make a /lib/modules/<kernel>/misc/tmp
235    directory and copy the sound module files to that
236    directory).
237
238
239Multiple Sound Cards:
240=====================
241
242The sound drivers will support multiple sound cards and there
243are some great applications like multitrack that support them.
244Typically, you need two sound cards of different types.  Note, this
245uses more precious interrupts and DMA channels and sometimes
246can be a configuration nightmare.  I have heard reports of 3-4
247sound cards (typically I only use 2).  You can sometimes use
248multiple PCI sound cards of the same type.
249
250On my machine I have two sound cards (cs4232 and Soundblaster Vibra
25116).  By loading sound as modules, I can control which is the first
252sound device (/dev/dsp, /dev/audio, /dev/mixer) and which is
253the second.  Normally, the cs4232 (Dell sound on the motherboard)
254would be the first sound device, but I prefer the Soundblaster.
255All you have to do is to load the one you want as /dev/dsp
256first (in my case "sb") and then load the other one
257(in my case "cs4232").
258
259If you have two cards of the same type that are jumpered
260cards or different PnP revisions, you may load the same
261module twice.  For example, I have a SoundBlaster vibra 16
262and an older SoundBlaster 16 (jumpers).  To load the module
263twice, you need to do the following:
264
2651.  Copy the sound modules to a new name.  For example
266    sb.o could be copied (or symlinked) to sb1.o for the
267    second SoundBlaster.
268
2692.  Make a second entry in /etc/modules.conf, for example,
270    sound1 or sb1.  This second entry should refer to the
271    new module names for example sb1, and should include
272    the I/O, etc. for the second sound card.
273
2743.  Update your soundon.sh script, etc.
275
276Warning:  I have never been able to get two PnP sound cards of the
277same type to load at the same time.  I have tried this several times
278with the Soundblaster Vibra 16 cards.  OSS has indicated that this
279is a PnP problem....  If anyone has any luck doing this, please
280send me an E-MAIL.  PCI sound cards should not have this problem.a
281Since this was originally release, I have received a couple of
282mails from people who have accomplished this!
283
284NOTE: In Linux 2.4 the Sound Blaster driver (and only this one yet)
285supports multiple cards with one module by default.
286Read the file 'Soundblaster' in this directory for details.
287
288
289Sound Problems:
290===============
291
292First RTFM (including the troubleshooting section
293in the Sound-HOWTO).
294
2951)  If you are having problems loading the modules (for
296    example, if you get device conflict errors) try the
297    following:
298
299  A)  If you have Win95 or NT on the same computer,
300      write down what addresses, IRQ, and DMA channels
301      those were using for the same hardware.  You probably
302      can use these addresses, IRQs, and DMA channels.
303      You should really do this BEFORE attempting to get
304      sound working!
305
306  B)  Check (cat) /proc/interrupts, /proc/ioports,
307      and /proc/dma.  Are you trying to use an address,
308      IRQ or DMA port that another device is using?
309
310  C)  Check (cat) /proc/isapnp
311
312  D)  Inspect your /var/log/messages file.  Often that will
313      indicate what IRQ or IO port could not be obtained.
314
315  E)  Try another port or IRQ.  Note this may involve
316      using the PnP tools to move the sound card to
317      another location.  Sometimes this is the only way
318      and it is more or less trial and error.
319
3202)  If you get motor-boating (the same sound or part of a
321    sound clip repeated), you probably have either an IRQ
322    or DMA conflict.  Move the card to another IRQ or DMA
323    port.  This has happened to me when playing long files
324    when I had an IRQ conflict.
325
3263.  If you get dropouts or pauses when playing high sample
327    rate files such as using mpg123 or x11amp/xmms, you may
328    have too slow of a CPU and may have to use the options to
329    play the files at 1/2 speed.  For example, you may use
330    the -2 or -4 option on mpg123.  You may also get this
331    when trying to play mpeg files stored on a CD-ROM
332    (my Toshiba T8000 PII/366 sometimes has this problem).
333
3344.  If you get "cannot access device" errors, your /dev/dsp
335    files, etc. may be set to owner root, mode 600.  You
336    may have to use the command:
337      chmod 666 /dev/dsp /dev/mixer /dev/audio
338
3395.  If you get "device busy" errors, another program has the
340    sound device open.  For example, if using the Enlightenment
341    sound daemon "esd", the "esd" program has the sound device.
342    If using "esd", please RTFM the docs on ESD.  For example,
343    esddsp <program> may be used to play files via a non-esd
344    aware program.
345
3466)  Ask for help on the sound list or send E-MAIL to the
347    sound driver author/maintainer.
348
3497)  Turn on debug in drivers/sound/sound_config.h (DEB, DDB, MDB).
350
3518)  If the system reports insufficient DMA memory then you may want to
352    load sound with the "dmabufs=1" option. Or in /etc/conf.modules add
353
354	preinstall sound dmabufs=1
355
356    This makes the sound system allocate its buffers and hang onto them.
357
358    You may also set persistent DMA when building a 2.4.x kernel.
359
360
361Configuring Sound:
362==================
363
364There are several ways of configuring your sound:
365
3661)  On the kernel command line (when using the sound driver(s)
367    compiled in the kernel). Check the driver source and
368    documentation for details.
369
3702)  On the command line when using insmod or in a bash script
371    using command line calls to load sound.
372
3733)  In /etc/modules.conf when using modprobe.
374
3754)  Via Red Hat's GPL'd /usr/sbin/sndconfig program (text based).
376
3775)  Via the OSS soundconf program (with the commercial version
378    of the OSS driver.
379
3806)  By just loading the module and let isapnp do everything relevant
381    for you. This works only with a few drivers yet and - of course -
382    only with isapnp hardware.
383
384And I am sure, several other ways.
385
386Anyone want to write a linuxconf module for configuring sound?
387
388
389Module Loading:
390===============
391
392When a sound card is first referenced and sound is modular, the sound system
393will ask for the sound devices to be loaded. Initially it requests that
394the driver for the sound system is loaded. It then will ask for
395sound-slot-0, where 0 is the first sound card. (sound-slot-1 the second and
396so on). Thus you can do
397
398alias sound-slot-0 sb
399
400To load a soundblaster at this point. If the slot loading does not provide
401the desired device - for example a soundblaster does not directly provide
402a midi synth in all cases then it will request "sound-service-0-n" where n
403is
404
405  0	Mixer
406
407  2  	MIDI
408
409  3, 4	DSP audio
410
411
412For example, I use the following to load my Soundblaster PCI 128
413(ES 1371) card first, followed by my SoundBlaster Vibra 16 card,
414then by my TV card:
415
416# Load the Soundblaster PCI 128 as /dev/dsp, /dev/dsp1, /dev/mixer
417alias sound-slot-0 es1371
418
419# Load the Soundblaster Vibra 16 as /dev/dsp2, /dev/mixer1
420alias sound-slot-1 sb
421options sb io=0x240 irq=5 dma=1 dma16=5 mpu_io=0x330
422
423# Load the BTTV (TV card) as /dev/mixer2
424alias sound-slot-2 bttv
425alias sound-service-2-0 tvmixer
426
427pre-install bttv  modprobe tuner ; modprobe tvmixer
428pre-install tvmixer modprobe msp3400; modprobe tvaudio
429options tuner debug=0 type=8
430options bttv  card=0 radio=0 pll=0
431
432
433For More Information (RTFM):
434============================
4351)  Information on kernel modules:  linux/Documentation/modules.txt
436    and manual pages for insmod and modprobe.
437
4382)  Information on PnP, RTFM manual pages for isapnp.
439
4403)  Sound-HOWTO and Sound-Playing-HOWTO.
441
4424)  OSS's WWW site at http://www.opensound.com.
443
4445)  All the files in linux/Documentation/sound.
445
4466)  The comments and code in linux/drivers/sound.
447
4487)  The sndconfig and rhsound documentation from Red Hat.
449
4508)  The Linux-sound mailing list:  sound-list@redhat.com.
451
4529)  Enlightenment documentation (for info on esd)
453    http://www.tux.org/~ricdude/EsounD.html.
454
45510) ALSA home page:  http://www.alsa-project.org/
456
457
458Contact Information:
459====================
460Wade Hampton:  (whampton@staffnet.com)
461
462