Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.9.
  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);