[PATCH] Maestro 2 sound driver update.

2000-12-13 Thread Daniel Pittman

The attached patch, against 2.4.0-test12, makes some changes to the
Maestro 2 sound driver for Linux.

The main changes are:
* allow multiple opens of /dev/dsp
* support persistent DMA buffer allocation
* default number of channels at compile time
* support kernel command line arguments

The multiple open of /dev/dsp is the most interesting change. Now,
multiple processes can open the device at the same time. Previously the
driver would export one dsp device per channel.

This is an incompatible change so, if you use the patch, be aware of
that.

This needs more testing before being ready to submit for inclusion in
the kernel proper. If you do try it, could you please send me reports
(by private mail) about your success or failure?

Thanks,
Daniel



diff -u --recursive linux/Documentation/Configure.help linux.dp/Documentation/Configure.help
--- linux/Documentation/Configure.help	Tue Dec 12 15:17:13 2000
+++ linux.dp/Documentation/Configure.help	Tue Dec 12 14:42:08 2000
@@ -14464,6 +14464,22 @@
   of PCI sound chips.  These include the Maestro 1, Maestro 2, and
   Maestro 2E.  See Documentation/sound/Maestro for more details.
 
+The number of DSP device to create.
+CONFIG_MAESTRO_CHANNELS
+  The number of DSP devices to allocate. Each device functions as
+  a fully independent sound system. The more devices allocated,
+  however, the larger the memory requirement for the driver.
+  You can allocate up to four DSP devices, but only in multiples
+  of two. This allows one, two or four devices.
+
+Allocate memory for DSP devices persistently
+CONFIG_MAESTRO_PERSIST
+  If you say Y to this, the memory for the DSP devices provided
+  by the Maestro device will be retained even when the sound
+  system is not in use.
+  This is beneficial if you find that sound cannot be used after
+  doing other things on the machine for a while.
+
 Are you using a crosscompiler
 CONFIG_CROSSCOMPILE
   Say Y here if you are compiling the kernel on a different
Only in linux.dp/Documentation: Configure.help~
diff -u --recursive linux/Documentation/sound/Maestro linux.dp/Documentation/sound/Maestro
--- linux/Documentation/sound/Maestro	Sat Jul 29 05:50:52 2000
+++ linux.dp/Documentation/sound/Maestro	Tue Dec 12 14:42:08 2000
@@ -80,16 +80,32 @@
 an IRQ.  This operation is incredibly system specific, so you're on your
 own.  Sometimes the magic lies in 'PNP Capable Operating System' settings.
 
-There are very few options to the driver.  One is 'debug' which will 
-tell the driver to print minimal debugging information as it runs.  This
-can be collected with 'dmesg' or through the klogd daemon.
-
-The other, more interesting option, is 'dsps_order'.  Typically at
-install time the driver will only register one available /dev/dsp device
-for its use.  The 'dsps_order' module parameter allows for more devices
-to be allocated, as a power of two.  Up to 4 devices can be registered
-( dsps_order=2 ).  These devices act as fully distinct units and use
-separate channels in the maestro.
+There are very few options to the driver. Options can be specified as either
+module options or on the kernel command line. Command line arguments are in
+the form 'maestro=:,:'.
+
+One is 'debug' which will tell the driver to print minimal debugging
+information as it runs. This can be collected with 'dmesg' or through the
+klogd daemon. Setting this to one will cause debug information to be dumped.
+
+The other, more interesting option, is 'channels'. At install time the driver
+will register /dev/dsp and makes a number of channels available through this
+device. Multiple programs can open /dev/dsp, until all channels are used.
+
+The 'channels' parameter specifies the number of channels to be specified. Up
+to 4 channels can be allocated, but only in powers of two. Thus, you can have
+one, two or four devices. The default value is to allocate one channel.
+
+When multiple channels are open, they act as distinct sound devices. This
+allows multiple applications to generate sound simultaneously without blocking
+each other.
+
+At compile time you may also select to use persistent dsp buffers. Because of
+some oddities of the hardware, a large number of channels requires a large
+slab of contiguous memory. The persistent buffers option allocates this memory
+when the cards are detected and holds it all the time, preventing memory
+fragmentation from preventing the sound device from working.
+
 
 Power Management
 
diff -u --recursive linux/drivers/sound/Config.in linux.dp/drivers/sound/Config.in
--- linux/drivers/sound/Config.in	Tue Dec 12 15:17:43 2000
+++ linux.dp/drivers/sound/Config.in	Tue Dec 12 14:42:08 2000
@@ -21,6 +21,10 @@
 dep_tristate '  Creative Ensoniq AudioPCI 97 (ES1371)' CONFIG_SOUND_ES1371 $CONFIG_SOUND
 dep_tristate '  ESS Technology Solo1' CONFIG_SOUND_ESSSOLO1 $CONFIG_SOUND
 dep_tristate '  ESS Maestro, Maestro2, Maestro2E driver' CONFIG_SOUND_MAESTRO $CONFIG_SOUND
+if [ "$CONFIG_SOUND_MAESTRO" = "y" -o 

[PATCH] Maestro 2 sound driver update.

2000-12-13 Thread Daniel Pittman

The attached patch, against 2.4.0-test12, makes some changes to the
Maestro 2 sound driver for Linux.

The main changes are:
* allow multiple opens of /dev/dsp
* support persistent DMA buffer allocation
* default number of channels at compile time
* support kernel command line arguments

The multiple open of /dev/dsp is the most interesting change. Now,
multiple processes can open the device at the same time. Previously the
driver would export one dsp device per channel.

This is an incompatible change so, if you use the patch, be aware of
that.

This needs more testing before being ready to submit for inclusion in
the kernel proper. If you do try it, could you please send me reports
(by private mail) about your success or failure?

Thanks,
Daniel



diff -u --recursive linux/Documentation/Configure.help linux.dp/Documentation/Configure.help
--- linux/Documentation/Configure.help	Tue Dec 12 15:17:13 2000
+++ linux.dp/Documentation/Configure.help	Tue Dec 12 14:42:08 2000
@@ -14464,6 +14464,22 @@
   of PCI sound chips.  These include the Maestro 1, Maestro 2, and
   Maestro 2E.  See Documentation/sound/Maestro for more details.
 
+The number of DSP device to create.
+CONFIG_MAESTRO_CHANNELS
+  The number of DSP devices to allocate. Each device functions as
+  a fully independent sound system. The more devices allocated,
+  however, the larger the memory requirement for the driver.
+  You can allocate up to four DSP devices, but only in multiples
+  of two. This allows one, two or four devices.
+
+Allocate memory for DSP devices persistently
+CONFIG_MAESTRO_PERSIST
+  If you say Y to this, the memory for the DSP devices provided
+  by the Maestro device will be retained even when the sound
+  system is not in use.
+  This is beneficial if you find that sound cannot be used after
+  doing other things on the machine for a while.
+
 Are you using a crosscompiler
 CONFIG_CROSSCOMPILE
   Say Y here if you are compiling the kernel on a different
Only in linux.dp/Documentation: Configure.help~
diff -u --recursive linux/Documentation/sound/Maestro linux.dp/Documentation/sound/Maestro
--- linux/Documentation/sound/Maestro	Sat Jul 29 05:50:52 2000
+++ linux.dp/Documentation/sound/Maestro	Tue Dec 12 14:42:08 2000
@@ -80,16 +80,32 @@
 an IRQ.  This operation is incredibly system specific, so you're on your
 own.  Sometimes the magic lies in 'PNP Capable Operating System' settings.
 
-There are very few options to the driver.  One is 'debug' which will 
-tell the driver to print minimal debugging information as it runs.  This
-can be collected with 'dmesg' or through the klogd daemon.
-
-The other, more interesting option, is 'dsps_order'.  Typically at
-install time the driver will only register one available /dev/dsp device
-for its use.  The 'dsps_order' module parameter allows for more devices
-to be allocated, as a power of two.  Up to 4 devices can be registered
-( dsps_order=2 ).  These devices act as fully distinct units and use
-separate channels in the maestro.
+There are very few options to the driver. Options can be specified as either
+module options or on the kernel command line. Command line arguments are in
+the form 'maestro=option:value,option:value'.
+
+One is 'debug' which will tell the driver to print minimal debugging
+information as it runs. This can be collected with 'dmesg' or through the
+klogd daemon. Setting this to one will cause debug information to be dumped.
+
+The other, more interesting option, is 'channels'. At install time the driver
+will register /dev/dsp and makes a number of channels available through this
+device. Multiple programs can open /dev/dsp, until all channels are used.
+
+The 'channels' parameter specifies the number of channels to be specified. Up
+to 4 channels can be allocated, but only in powers of two. Thus, you can have
+one, two or four devices. The default value is to allocate one channel.
+
+When multiple channels are open, they act as distinct sound devices. This
+allows multiple applications to generate sound simultaneously without blocking
+each other.
+
+At compile time you may also select to use persistent dsp buffers. Because of
+some oddities of the hardware, a large number of channels requires a large
+slab of contiguous memory. The persistent buffers option allocates this memory
+when the cards are detected and holds it all the time, preventing memory
+fragmentation from preventing the sound device from working.
+
 
 Power Management
 
diff -u --recursive linux/drivers/sound/Config.in linux.dp/drivers/sound/Config.in
--- linux/drivers/sound/Config.in	Tue Dec 12 15:17:43 2000
+++ linux.dp/drivers/sound/Config.in	Tue Dec 12 14:42:08 2000
@@ -21,6 +21,10 @@
 dep_tristate '  Creative Ensoniq AudioPCI 97 (ES1371)' CONFIG_SOUND_ES1371 $CONFIG_SOUND
 dep_tristate '  ESS Technology Solo1' CONFIG_SOUND_ESSSOLO1 $CONFIG_SOUND
 dep_tristate '  ESS Maestro, Maestro2, Maestro2E driver' CONFIG_SOUND_MAESTRO $CONFIG_SOUND
+if [