Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | /* 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); |