Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/sound/oss/sb.h
10814 views
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
64
struct mixer_def {
65
unsigned int regno: 8;
66
unsigned int bitoffs:4;
67
unsigned int nbits:4;
68
};
69
70
typedef struct mixer_def mixer_tab[32][2];
71
typedef struct mixer_def mixer_ent;
72
73
struct 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
80
typedef 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
158
int sb_dsp_command (sb_devc *devc, unsigned char val);
159
int sb_dsp_get_byte(sb_devc * devc);
160
int sb_dsp_reset (sb_devc *devc);
161
void sb_setmixer (sb_devc *devc, unsigned int port, unsigned int value);
162
unsigned int sb_getmixer (sb_devc *devc, unsigned int port);
163
int sb_dsp_detect (struct address_info *hw_config, int pci, int pciio, struct sb_module_options *sbmo);
164
int sb_dsp_init (struct address_info *hw_config, struct module *owner);
165
void sb_dsp_unload(struct address_info *hw_config, int sbmpu);
166
int sb_mixer_init(sb_devc *devc, struct module *owner);
167
void sb_mixer_unload(sb_devc *devc);
168
void sb_mixer_set_stereo (sb_devc *devc, int mode);
169
void smw_mixer_init(sb_devc *devc);
170
void sb_dsp_midi_init (sb_devc *devc, struct module *owner);
171
void sb_audio_init (sb_devc *devc, char *name, struct module *owner);
172
void sb_midi_interrupt (sb_devc *devc);
173
void sb_chgmixer (sb_devc * devc, unsigned int reg, unsigned int mask, unsigned int val);
174
int sb_common_mixer_set(sb_devc * devc, int dev, int left, int right);
175
176
int sb_audio_open(int dev, int mode);
177
void sb_audio_close(int dev);
178
179
/* From sb_common.c */
180
void sb_dsp_disable_midi(int port);
181
int probe_sbmpu (struct address_info *hw_config, struct module *owner);
182
void unload_sbmpu (struct address_info *hw_config);
183
184
void unload_sb16(struct address_info *hw_info);
185
void unload_sb16midi(struct address_info *hw_info);
186
187