linux/sound/oss/sb.h
<<
>>
Prefs
   1#define DSP_RESET       (devc->base + 0x6)
   2#define DSP_READ        (devc->base + 0xA)
   3#define DSP_WRITE       (devc->base + 0xC)
   4#define DSP_COMMAND     (devc->base + 0xC)
   5#define DSP_STATUS      (devc->base + 0xC)
   6#define DSP_DATA_AVAIL  (devc->base + 0xE)
   7#define DSP_DATA_AVL16  (devc->base + 0xF)
   8#define MIXER_ADDR      (devc->base + 0x4)
   9#define MIXER_DATA      (devc->base + 0x5)
  10#define OPL3_LEFT       (devc->base + 0x0)
  11#define OPL3_RIGHT      (devc->base + 0x2)
  12#define OPL3_BOTH       (devc->base + 0x8)
  13/* DSP Commands */
  14
  15#define DSP_CMD_SPKON           0xD1
  16#define DSP_CMD_SPKOFF          0xD3
  17#define DSP_CMD_DMAON           0xD0
  18#define DSP_CMD_DMAOFF          0xD4
  19
  20#define IMODE_NONE              0
  21#define IMODE_OUTPUT            PCM_ENABLE_OUTPUT
  22#define IMODE_INPUT             PCM_ENABLE_INPUT
  23#define IMODE_INIT              3
  24#define IMODE_MIDI              4
  25
  26#define NORMAL_MIDI     0
  27#define UART_MIDI       1
  28
  29
  30/*
  31 * Device models
  32 */
  33#define MDL_NONE        0
  34#define MDL_SB1         1       /* SB1.0 or 1.5 */
  35#define MDL_SB2         2       /* SB2.0 */
  36#define MDL_SB201       3       /* SB2.01 */
  37#define MDL_SBPRO       4       /* SB Pro */
  38#define MDL_SB16        5       /* SB16/32/AWE */
  39#define MDL_SBPNP       6       /* SB16/32/AWE PnP */
  40#define MDL_JAZZ        10      /* Media Vision Jazz16 */
  41#define MDL_SMW         11      /* Logitech SoundMan Wave (Jazz16) */
  42#define MDL_ESS         12      /* ESS ES688 and ES1688 */
  43#define MDL_AZTECH      13      /* Aztech Sound Galaxy family */
  44#define MDL_ES1868MIDI  14      /* MIDI port of ESS1868 */
  45#define MDL_AEDSP       15      /* Audio Excel DSP 16 */
  46#define MDL_ESSPCI      16      /* ESS PCI card */
  47#define MDL_YMPCI       17      /* Yamaha PCI sb in emulation */
  48
  49#define SUBMDL_ALS007   42      /* ALS-007 differs from SB16 only in mixer */
  50                                /* register assignment */
  51#define SUBMDL_ALS100   43      /* ALS-100 allows sampling rates of up */
  52                                /* to 48kHz */
  53                                
  54/*
  55 * Config flags
  56 */
  57#define SB_NO_MIDI      0x00000001
  58#define SB_NO_MIXER     0x00000002
  59#define SB_NO_AUDIO     0x00000004
  60#define SB_NO_RECORDING 0x00000008 /* No audio recording */
  61#define SB_MIDI_ONLY    (SB_NO_AUDIO|SB_NO_MIXER)
  62#define SB_PCI_IRQ      0x00000010 /* PCI shared IRQ */
  63
  64struct mixer_def {
  65        unsigned int regno: 8;
  66        unsigned int bitoffs:4;
  67        unsigned int nbits:4;
  68};
  69
  70typedef struct mixer_def mixer_tab[32][2];
  71typedef struct mixer_def mixer_ent;
  72
  73struct sb_module_options
  74{
  75        int  esstype;   /* ESS chip type */
  76        int  acer;      /* Do acer notebook init? */
  77        int  sm_games;  /* Logitech soundman games? */
  78};
  79
  80typedef struct sb_devc {
  81           int dev;
  82
  83        /* Hardware parameters */
  84           int *osp;
  85           int minor, major;
  86           int type;
  87           int model, submodel;
  88           int caps;
  89#       define SBCAP_STEREO     0x00000001
  90#       define SBCAP_16BITS     0x00000002
  91
  92        /* Hardware resources */
  93           int base;
  94           int irq;
  95           int dma8, dma16;
  96           
  97           int pcibase;         /* For ESS Maestro etc */
  98
  99        /* State variables */
 100           int opened;
 101        /* new audio fields for full duplex support */
 102           int fullduplex;
 103           int duplex;
 104           int speed, bits, channels;
 105           volatile int irq_ok;
 106           volatile int intr_active, irq_mode;
 107        /* duplicate audio fields for full duplex support */
 108           volatile int intr_active_16, irq_mode_16;
 109
 110        /* Mixer fields */
 111           int *levels;
 112           mixer_tab *iomap;
 113           size_t iomap_sz; /* number or records in the iomap table */
 114           int mixer_caps, recmask, outmask, supported_devices;
 115           int supported_rec_devices, supported_out_devices;
 116           int my_mixerdev;
 117           int sbmixnum;
 118
 119        /* Audio fields */
 120           unsigned long trg_buf;
 121           int      trigger_bits;
 122           int      trg_bytes;
 123           int      trg_intrflag;
 124           int      trg_restart;
 125        /* duplicate audio fields for full duplex support */
 126           unsigned long trg_buf_16;
 127           int      trigger_bits_16;
 128           int      trg_bytes_16;
 129           int      trg_intrflag_16;
 130           int      trg_restart_16;
 131
 132           unsigned char tconst;
 133        
 134        /* MIDI fields */
 135           int my_mididev;
 136           int input_opened;
 137           int midi_broken;
 138           void (*midi_input_intr) (int dev, unsigned char data);
 139           void *midi_irq_cookie;               /* IRQ cookie for the midi */
 140
 141           spinlock_t lock;
 142
 143           struct sb_module_options sbmo;       /* Module options */
 144
 145        } sb_devc;
 146        
 147/*
 148 *      PCI card types
 149 */
 150
 151#define SB_PCI_ESSMAESTRO       1       /* ESS Maestro Legacy */
 152#define SB_PCI_YAMAHA           2       /* Yamaha Legacy */
 153
 154/* 
 155 *      Functions
 156 */
 157 
 158int sb_dsp_command (sb_devc *devc, unsigned char val);
 159int sb_dsp_get_byte(sb_devc * devc);
 160int sb_dsp_reset (sb_devc *devc);
 161void sb_setmixer (sb_devc *devc, unsigned int port, unsigned int value);
 162unsigned int sb_getmixer (sb_devc *devc, unsigned int port);
 163int sb_dsp_detect (struct address_info *hw_config, int pci, int pciio, struct sb_module_options *sbmo);
 164int sb_dsp_init (struct address_info *hw_config, struct module *owner);
 165void sb_dsp_unload(struct address_info *hw_config, int sbmpu);
 166int sb_mixer_init(sb_devc *devc, struct module *owner);
 167void sb_mixer_unload(sb_devc *devc);
 168void sb_mixer_set_stereo (sb_devc *devc, int mode);
 169void smw_mixer_init(sb_devc *devc);
 170void sb_dsp_midi_init (sb_devc *devc, struct module *owner);
 171void sb_audio_init (sb_devc *devc, char *name, struct module *owner);
 172void sb_midi_interrupt (sb_devc *devc);
 173void sb_chgmixer (sb_devc * devc, unsigned int reg, unsigned int mask, unsigned int val);
 174int sb_common_mixer_set(sb_devc * devc, int dev, int left, int right);
 175
 176int sb_audio_open(int dev, int mode);
 177void sb_audio_close(int dev);
 178
 179/*      From sb_common.c */
 180void sb_dsp_disable_midi(int port);
 181int probe_sbmpu (struct address_info *hw_config, struct module *owner);
 182void unload_sbmpu (struct address_info *hw_config);
 183
 184void unload_sb16(struct address_info *hw_info);
 185void unload_sb16midi(struct address_info *hw_info);
 186