patch-2.1.67 linux/drivers/sound/sb_card.c
Next file: linux/drivers/sound/sb_common.c
Previous file: linux/drivers/sound/sb_audio.c
Back to the patch index
Back to the overall index
- Lines: 163
- Date:
Sat Nov 29 10:33:21 1997
- Orig file:
v2.1.66/linux/drivers/sound/sb_card.c
- Orig date:
Wed Nov 12 13:34:27 1997
diff -u --recursive --new-file v2.1.66/linux/drivers/sound/sb_card.c linux/drivers/sound/sb_card.c
@@ -11,39 +11,150 @@
* for more info.
*/
#include <linux/config.h>
+#include <linux/module.h>
#include "sound_config.h"
+#include "soundmodule.h"
-#ifdef CONFIG_SBDSP
+#if defined(CONFIG_SBDSP) || defined (MODULE)
#include "sb_mixer.h"
#include "sb.h"
void
-attach_sb_card (struct address_info *hw_config)
+attach_sb_card(struct address_info *hw_config)
{
#if defined(CONFIG_AUDIO) || defined(CONFIG_MIDI)
- sb_dsp_init (hw_config);
+ sb_dsp_init(hw_config);
#endif
}
int
-probe_sb (struct address_info *hw_config)
+probe_sb(struct address_info *hw_config)
{
- if (check_region (hw_config->io_base, 16))
- {
- printk ("\n\nsb_dsp.c: I/O port %x already in use\n\n", hw_config->io_base);
- return 0;
- }
+ if (check_region(hw_config->io_base, 16))
+ {
+ printk("\n\nsb_dsp.c: I/O port %x already in use\n\n", hw_config->io_base);
+ return 0;
+ }
+ return sb_dsp_detect(hw_config);
+}
+
+void
+unload_sb(struct address_info *hw_config)
+{
+ sb_dsp_unload(hw_config);
+}
+
+#ifdef MODULE
+
+static struct address_info config;
+static struct address_info config_mpu;
+
+/*
+ * Note DMA2 of -1 has the right meaning in the SB16 driver as well
+ * as here. It will cause either an error if it is needed or a fallback
+ * to the 8bit channel.
+ */
+
+int mpu_io = 0;
+int io = -1;
+int irq = -1;
+int dma = -1;
+int dma16 = -1; /* Set this for modules that need it */
+int type = 0; /* Can set this to a specific card type */
+int mad16 = 0; /* Set mad16=1 to load this as support for mad16 */
+int trix = 0; /* Set trix=1 to load this as support for trix */
+int pas2 = 0; /* Set pas2=1 to load this as support for pas2 */
+int sm_games = 0; /* Mixer - see sb_mixer.c */
+int acer = 0; /* Do acer notebook init */
+
+MODULE_PARM(io, "i");
+MODULE_PARM(irq, "i");
+MODULE_PARM(dma, "i");
+MODULE_PARM(dma16, "i");
+MODULE_PARM(mpu_io, "i");
+MODULE_PARM(type, "i");
+MODULE_PARM(mad16, "i");
+MODULE_PARM(trix, "i");
+MODULE_PARM(pas2, "i");
+MODULE_PARM(sm_games, "i");
+
+static int sbmpu = 0;
+
+void *smw_free = NULL;
+
+int
+init_module(void)
+{
+ printk("Soundblaster audio driver Copyright (C) by Hannu Savolainen 1993-1996\n");
- return sb_dsp_detect (hw_config);
+ if (mad16 == 0 && trix == 0 && pas2 == 0)
+ {
+ if (io == -1 || dma == -1 || irq == -1)
+ {
+ printk("I/O, IRQ, DMA and type are mandatory\n");
+ return -EINVAL;
+ }
+ config.io_base = io;
+ config.irq = irq;
+ config.dma = dma;
+ config.dma2 = dma16;
+ config.card_subtype = type;
+
+ if (!probe_sb(&config))
+ return -ENODEV;
+ attach_sb_card(&config);
+#ifdef CONFIG_MIDI
+ config_mpu.io_base = mpu_io;
+ if (mpu_io && probe_sbmpu(&config_mpu))
+ sbmpu = 1;
+#endif
+#ifdef CONFIG_MIDI
+ if (sbmpu)
+ attach_sbmpu(&config_mpu);
+#endif
+ }
+ SOUND_LOCK;
+ return 0;
}
void
-unload_sb (struct address_info *hw_config)
+cleanup_module(void)
{
- sb_dsp_unload (hw_config);
+ if (smw_free)
+ kfree(smw_free);
+ if (!mad16 && !trix && !pas2)
+ unload_sb(&config);
+ if (sbmpu)
+ unload_sbmpu(&config_mpu);
+ SOUND_LOCK_END;
}
+#else
+
+#ifdef SM_GAMES
+int sm_games = 1;
+
+#else
+int sm_games = 0;
+
#endif
+#ifdef SB_ACER
+int acer = 1;
+
+#else
+int acer = 0;
+
+#endif
+#endif
+#endif
+
+EXPORT_SYMBOL(sb_dsp_init);
+EXPORT_SYMBOL(sb_dsp_detect);
+EXPORT_SYMBOL(sb_dsp_unload);
+EXPORT_SYMBOL(sb_dsp_disable_midi);
+EXPORT_SYMBOL(attach_sb_card);
+EXPORT_SYMBOL(probe_sb);
+EXPORT_SYMBOL(unload_sb);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov