186 lines
		
	
	
	
		
			5.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			186 lines
		
	
	
	
		
			5.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#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);
							 |