123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- /* SPDX-License-Identifier: GPL-2.0 */
- #define DSP_RESET (devc->base + 0x6)
- #define DSP_READ (devc->base + 0xA)
- #define DSP_WRITE (devc->base + 0xC)
- #define DSP_COMMAND (devc->base + 0xC)
- #define DSP_STATUS (devc->base + 0xC)
- #define DSP_DATA_AVAIL (devc->base + 0xE)
- #define DSP_DATA_AVL16 (devc->base + 0xF)
- #define MIXER_ADDR (devc->base + 0x4)
- #define MIXER_DATA (devc->base + 0x5)
- #define OPL3_LEFT (devc->base + 0x0)
- #define OPL3_RIGHT (devc->base + 0x2)
- #define OPL3_BOTH (devc->base + 0x8)
- /* DSP Commands */
- #define DSP_CMD_SPKON 0xD1
- #define DSP_CMD_SPKOFF 0xD3
- #define DSP_CMD_DMAON 0xD0
- #define DSP_CMD_DMAOFF 0xD4
- #define IMODE_NONE 0
- #define IMODE_OUTPUT PCM_ENABLE_OUTPUT
- #define IMODE_INPUT PCM_ENABLE_INPUT
- #define IMODE_INIT 3
- #define IMODE_MIDI 4
- #define NORMAL_MIDI 0
- #define UART_MIDI 1
- /*
- * Device models
- */
- #define MDL_NONE 0
- #define MDL_SB1 1 /* SB1.0 or 1.5 */
- #define MDL_SB2 2 /* SB2.0 */
- #define MDL_SB201 3 /* SB2.01 */
- #define MDL_SBPRO 4 /* SB Pro */
- #define MDL_SB16 5 /* SB16/32/AWE */
- #define MDL_SBPNP 6 /* SB16/32/AWE PnP */
- #define MDL_JAZZ 10 /* Media Vision Jazz16 */
- #define MDL_SMW 11 /* Logitech SoundMan Wave (Jazz16) */
- #define MDL_ESS 12 /* ESS ES688 and ES1688 */
- #define MDL_AZTECH 13 /* Aztech Sound Galaxy family */
- #define MDL_ES1868MIDI 14 /* MIDI port of ESS1868 */
- #define MDL_AEDSP 15 /* Audio Excel DSP 16 */
- #define MDL_ESSPCI 16 /* ESS PCI card */
- #define MDL_YMPCI 17 /* Yamaha PCI sb in emulation */
- #define SUBMDL_ALS007 42 /* ALS-007 differs from SB16 only in mixer */
- /* register assignment */
- #define SUBMDL_ALS100 43 /* ALS-100 allows sampling rates of up */
- /* to 48kHz */
-
- /*
- * Config flags
- */
- #define SB_NO_MIDI 0x00000001
- #define SB_NO_MIXER 0x00000002
- #define SB_NO_AUDIO 0x00000004
- #define SB_NO_RECORDING 0x00000008 /* No audio recording */
- #define SB_MIDI_ONLY (SB_NO_AUDIO|SB_NO_MIXER)
- #define SB_PCI_IRQ 0x00000010 /* PCI shared IRQ */
- struct mixer_def {
- unsigned int regno: 8;
- unsigned int bitoffs:4;
- unsigned int nbits:4;
- };
- typedef struct mixer_def mixer_tab[32][2];
- typedef struct mixer_def mixer_ent;
- struct sb_module_options
- {
- int esstype; /* ESS chip type */
- int acer; /* Do acer notebook init? */
- int sm_games; /* Logitech soundman games? */
- };
- typedef struct sb_devc {
- int dev;
- /* Hardware parameters */
- int *osp;
- int minor, major;
- int type;
- int model, submodel;
- int caps;
- # define SBCAP_STEREO 0x00000001
- # define SBCAP_16BITS 0x00000002
- /* Hardware resources */
- int base;
- int irq;
- int dma8, dma16;
-
- int pcibase; /* For ESS Maestro etc */
- /* State variables */
- int opened;
- /* new audio fields for full duplex support */
- int fullduplex;
- int duplex;
- int speed, bits, channels;
- volatile int irq_ok;
- volatile int intr_active, irq_mode;
- /* duplicate audio fields for full duplex support */
- volatile int intr_active_16, irq_mode_16;
- /* Mixer fields */
- int *levels;
- mixer_tab *iomap;
- size_t iomap_sz; /* number or records in the iomap table */
- int mixer_caps, recmask, outmask, supported_devices;
- int supported_rec_devices, supported_out_devices;
- int my_mixerdev;
- int sbmixnum;
- /* Audio fields */
- unsigned long trg_buf;
- int trigger_bits;
- int trg_bytes;
- int trg_intrflag;
- int trg_restart;
- /* duplicate audio fields for full duplex support */
- unsigned long trg_buf_16;
- int trigger_bits_16;
- int trg_bytes_16;
- int trg_intrflag_16;
- int trg_restart_16;
- unsigned char tconst;
-
- /* MIDI fields */
- int my_mididev;
- int input_opened;
- int midi_broken;
- void (*midi_input_intr) (int dev, unsigned char data);
- void *midi_irq_cookie; /* IRQ cookie for the midi */
- spinlock_t lock;
- struct sb_module_options sbmo; /* Module options */
- } sb_devc;
-
- /*
- * PCI card types
- */
- #define SB_PCI_ESSMAESTRO 1 /* ESS Maestro Legacy */
- #define SB_PCI_YAMAHA 2 /* Yamaha Legacy */
- /*
- * Functions
- */
-
- int sb_dsp_command (sb_devc *devc, unsigned char val);
- int sb_dsp_get_byte(sb_devc * devc);
- int sb_dsp_reset (sb_devc *devc);
- void sb_setmixer (sb_devc *devc, unsigned int port, unsigned int value);
- unsigned int sb_getmixer (sb_devc *devc, unsigned int port);
- int sb_dsp_detect (struct address_info *hw_config, int pci, int pciio, struct sb_module_options *sbmo);
- int sb_dsp_init (struct address_info *hw_config, struct module *owner);
- void sb_dsp_unload(struct address_info *hw_config, int sbmpu);
- int sb_mixer_init(sb_devc *devc, struct module *owner);
- void sb_mixer_unload(sb_devc *devc);
- void sb_mixer_set_stereo (sb_devc *devc, int mode);
- void smw_mixer_init(sb_devc *devc);
- void sb_dsp_midi_init (sb_devc *devc, struct module *owner);
- void sb_audio_init (sb_devc *devc, char *name, struct module *owner);
- void sb_midi_interrupt (sb_devc *devc);
- void sb_chgmixer (sb_devc * devc, unsigned int reg, unsigned int mask, unsigned int val);
- int sb_common_mixer_set(sb_devc * devc, int dev, int left, int right);
- int sb_audio_open(int dev, int mode);
- void sb_audio_close(int dev);
- /* From sb_common.c */
- void sb_dsp_disable_midi(int port);
- int probe_sbmpu (struct address_info *hw_config, struct module *owner);
- void unload_sbmpu (struct address_info *hw_config);
- void unload_sb16(struct address_info *hw_info);
- void unload_sb16midi(struct address_info *hw_info);
|