Viewing file: sb.h (5.24 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#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; 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);
extern sb_devc *last_sb;
/* From sb_common.c */ void sb_dsp_disable_midi(int port); void sb_dsp_disable_recording(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);
|