Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/sound/oss/dev_table.h
10814 views
1
/*
2
* dev_table.h
3
*
4
* Global definitions for device call tables
5
*
6
*
7
* Copyright (C) by Hannu Savolainen 1993-1997
8
*
9
* OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
10
* Version 2 (June 1991). See the "COPYING" file distributed with this software
11
* for more info.
12
*/
13
14
15
#ifndef _DEV_TABLE_H_
16
#define _DEV_TABLE_H_
17
18
#include <linux/spinlock.h>
19
/*
20
* Sound card numbers 27 to 999. (1 to 26 are defined in soundcard.h)
21
* Numbers 1000 to N are reserved for driver's internal use.
22
*/
23
24
#define SNDCARD_DESKPROXL 27 /* Compaq Deskpro XL */
25
#define SNDCARD_VIDC 28 /* ARMs VIDC */
26
#define SNDCARD_SBPNP 29
27
#define SNDCARD_SOFTOSS 36
28
#define SNDCARD_VMIDI 37
29
#define SNDCARD_OPL3SA1 38 /* Note: clash in msnd.h */
30
#define SNDCARD_OPL3SA1_SB 39
31
#define SNDCARD_OPL3SA1_MPU 40
32
#define SNDCARD_WAVEFRONT 41
33
#define SNDCARD_OPL3SA2 42
34
#define SNDCARD_OPL3SA2_MPU 43
35
#define SNDCARD_WAVEARTIST 44 /* Waveartist */
36
#define SNDCARD_OPL3SA2_MSS 45 /* Originally missed */
37
#define SNDCARD_AD1816 88
38
39
/*
40
* NOTE! NOTE! NOTE! NOTE!
41
*
42
* If you modify this file, please check the dev_table.c also.
43
*
44
* NOTE! NOTE! NOTE! NOTE!
45
*/
46
47
struct driver_info
48
{
49
char *driver_id;
50
int card_subtype; /* Driver specific. Usually 0 */
51
int card_type; /* From soundcard.h */
52
char *name;
53
void (*attach) (struct address_info *hw_config);
54
int (*probe) (struct address_info *hw_config);
55
void (*unload) (struct address_info *hw_config);
56
};
57
58
struct card_info
59
{
60
int card_type; /* Link (search key) to the driver list */
61
struct address_info config;
62
int enabled;
63
void *for_driver_use;
64
};
65
66
67
/*
68
* Device specific parameters (used only by dmabuf.c)
69
*/
70
#define MAX_SUB_BUFFERS (32*MAX_REALTIME_FACTOR)
71
72
#define DMODE_NONE 0
73
#define DMODE_OUTPUT PCM_ENABLE_OUTPUT
74
#define DMODE_INPUT PCM_ENABLE_INPUT
75
76
struct dma_buffparms
77
{
78
int dma_mode; /* DMODE_INPUT, DMODE_OUTPUT or DMODE_NONE */
79
int closing;
80
81
/*
82
* Pointers to raw buffers
83
*/
84
85
char *raw_buf;
86
unsigned long raw_buf_phys;
87
int buffsize;
88
89
/*
90
* Device state tables
91
*/
92
93
unsigned long flags;
94
#define DMA_BUSY 0x00000001
95
#define DMA_RESTART 0x00000002
96
#define DMA_ACTIVE 0x00000004
97
#define DMA_STARTED 0x00000008
98
#define DMA_EMPTY 0x00000010
99
#define DMA_ALLOC_DONE 0x00000020
100
#define DMA_SYNCING 0x00000040
101
#define DMA_DIRTY 0x00000080
102
#define DMA_POST 0x00000100
103
#define DMA_NODMA 0x00000200
104
#define DMA_NOTIMEOUT 0x00000400
105
106
int open_mode;
107
108
/*
109
* Queue parameters.
110
*/
111
int qlen;
112
int qhead;
113
int qtail;
114
spinlock_t lock;
115
116
int cfrag; /* Current incomplete fragment (write) */
117
118
int nbufs;
119
int counts[MAX_SUB_BUFFERS];
120
int subdivision;
121
122
int fragment_size;
123
int needs_reorg;
124
int max_fragments;
125
126
int bytes_in_use;
127
128
int underrun_count;
129
unsigned long byte_counter;
130
unsigned long user_counter;
131
unsigned long max_byte_counter;
132
int data_rate; /* Bytes/second */
133
134
int mapping_flags;
135
#define DMA_MAP_MAPPED 0x00000001
136
char neutral_byte;
137
int dma; /* DMA channel */
138
139
int applic_profile; /* Application profile (APF_*) */
140
/* Interrupt callback stuff */
141
void (*audio_callback) (int dev, int parm);
142
int callback_parm;
143
144
int buf_flags[MAX_SUB_BUFFERS];
145
#define BUFF_EOF 0x00000001 /* Increment eof count */
146
#define BUFF_DIRTY 0x00000002 /* Buffer written */
147
};
148
149
/*
150
* Structure for use with various microcontrollers and DSP processors
151
* in the recent sound cards.
152
*/
153
typedef struct coproc_operations
154
{
155
char name[64];
156
struct module *owner;
157
int (*open) (void *devc, int sub_device);
158
void (*close) (void *devc, int sub_device);
159
int (*ioctl) (void *devc, unsigned int cmd, void __user * arg, int local);
160
void (*reset) (void *devc);
161
162
void *devc; /* Driver specific info */
163
} coproc_operations;
164
165
struct audio_driver
166
{
167
struct module *owner;
168
int (*open) (int dev, int mode);
169
void (*close) (int dev);
170
void (*output_block) (int dev, unsigned long buf,
171
int count, int intrflag);
172
void (*start_input) (int dev, unsigned long buf,
173
int count, int intrflag);
174
int (*ioctl) (int dev, unsigned int cmd, void __user * arg);
175
int (*prepare_for_input) (int dev, int bufsize, int nbufs);
176
int (*prepare_for_output) (int dev, int bufsize, int nbufs);
177
void (*halt_io) (int dev);
178
int (*local_qlen)(int dev);
179
void (*copy_user) (int dev,
180
char *localbuf, int localoffs,
181
const char __user *userbuf, int useroffs,
182
int max_in, int max_out,
183
int *used, int *returned,
184
int len);
185
void (*halt_input) (int dev);
186
void (*halt_output) (int dev);
187
void (*trigger) (int dev, int bits);
188
int (*set_speed)(int dev, int speed);
189
unsigned int (*set_bits)(int dev, unsigned int bits);
190
short (*set_channels)(int dev, short channels);
191
void (*postprocess_write)(int dev); /* Device spesific postprocessing for written data */
192
void (*preprocess_read)(int dev); /* Device spesific preprocessing for read data */
193
void (*mmap)(int dev);
194
};
195
196
struct audio_operations
197
{
198
char name[128];
199
int flags;
200
#define NOTHING_SPECIAL 0x00
201
#define NEEDS_RESTART 0x01
202
#define DMA_AUTOMODE 0x02
203
#define DMA_DUPLEX 0x04
204
#define DMA_PSEUDO_AUTOMODE 0x08
205
#define DMA_HARDSTOP 0x10
206
#define DMA_EXACT 0x40
207
#define DMA_NORESET 0x80
208
int format_mask; /* Bitmask for supported audio formats */
209
void *devc; /* Driver specific info */
210
struct audio_driver *d;
211
void *portc; /* Driver specific info */
212
struct dma_buffparms *dmap_in, *dmap_out;
213
struct coproc_operations *coproc;
214
int mixer_dev;
215
int enable_bits;
216
int open_mode;
217
int go;
218
int min_fragment; /* 0 == unlimited */
219
int max_fragment; /* 0 == unlimited */
220
int parent_dev; /* 0 -> no parent, 1 to n -> parent=parent_dev+1 */
221
222
/* fields formerly in dmabuf.c */
223
wait_queue_head_t in_sleeper;
224
wait_queue_head_t out_sleeper;
225
wait_queue_head_t poll_sleeper;
226
227
/* fields formerly in audio.c */
228
int audio_mode;
229
230
#define AM_NONE 0
231
#define AM_WRITE OPEN_WRITE
232
#define AM_READ OPEN_READ
233
234
int local_format;
235
int audio_format;
236
int local_conversion;
237
#define CNV_MU_LAW 0x00000001
238
239
/* large structures at the end to keep offsets small */
240
struct dma_buffparms dmaps[2];
241
};
242
243
int *load_mixer_volumes(char *name, int *levels, int present);
244
245
struct mixer_operations
246
{
247
struct module *owner;
248
char id[16];
249
char name[64];
250
int (*ioctl) (int dev, unsigned int cmd, void __user * arg);
251
252
void *devc;
253
int modify_counter;
254
};
255
256
struct synth_operations
257
{
258
struct module *owner;
259
char *id; /* Unique identifier (ASCII) max 29 char */
260
struct synth_info *info;
261
int midi_dev;
262
int synth_type;
263
int synth_subtype;
264
265
int (*open) (int dev, int mode);
266
void (*close) (int dev);
267
int (*ioctl) (int dev, unsigned int cmd, void __user * arg);
268
int (*kill_note) (int dev, int voice, int note, int velocity);
269
int (*start_note) (int dev, int voice, int note, int velocity);
270
int (*set_instr) (int dev, int voice, int instr);
271
void (*reset) (int dev);
272
void (*hw_control) (int dev, unsigned char *event);
273
int (*load_patch) (int dev, int format, const char __user *addr,
274
int count, int pmgr_flag);
275
void (*aftertouch) (int dev, int voice, int pressure);
276
void (*controller) (int dev, int voice, int ctrl_num, int value);
277
void (*panning) (int dev, int voice, int value);
278
void (*volume_method) (int dev, int mode);
279
void (*bender) (int dev, int chn, int value);
280
int (*alloc_voice) (int dev, int chn, int note, struct voice_alloc_info *alloc);
281
void (*setup_voice) (int dev, int voice, int chn);
282
int (*send_sysex)(int dev, unsigned char *bytes, int len);
283
284
struct voice_alloc_info alloc;
285
struct channel_info chn_info[16];
286
int emulation;
287
#define EMU_GM 1 /* General MIDI */
288
#define EMU_XG 2 /* Yamaha XG */
289
#define MAX_SYSEX_BUF 64
290
unsigned char sysex_buf[MAX_SYSEX_BUF];
291
int sysex_ptr;
292
};
293
294
struct midi_input_info
295
{
296
/* MIDI input scanner variables */
297
#define MI_MAX 10
298
volatile int m_busy;
299
unsigned char m_buf[MI_MAX];
300
unsigned char m_prev_status; /* For running status */
301
int m_ptr;
302
#define MST_INIT 0
303
#define MST_DATA 1
304
#define MST_SYSEX 2
305
int m_state;
306
int m_left;
307
};
308
309
struct midi_operations
310
{
311
struct module *owner;
312
struct midi_info info;
313
struct synth_operations *converter;
314
struct midi_input_info in_info;
315
int (*open) (int dev, int mode,
316
void (*inputintr)(int dev, unsigned char data),
317
void (*outputintr)(int dev)
318
);
319
void (*close) (int dev);
320
int (*ioctl) (int dev, unsigned int cmd, void __user * arg);
321
int (*outputc) (int dev, unsigned char data);
322
int (*start_read) (int dev);
323
int (*end_read) (int dev);
324
void (*kick)(int dev);
325
int (*command) (int dev, unsigned char *data);
326
int (*buffer_status) (int dev);
327
int (*prefix_cmd) (int dev, unsigned char status);
328
struct coproc_operations *coproc;
329
void *devc;
330
};
331
332
struct sound_lowlev_timer
333
{
334
int dev;
335
int priority;
336
unsigned int (*tmr_start)(int dev, unsigned int usecs);
337
void (*tmr_disable)(int dev);
338
void (*tmr_restart)(int dev);
339
};
340
341
struct sound_timer_operations
342
{
343
struct module *owner;
344
struct sound_timer_info info;
345
int priority;
346
int devlink;
347
int (*open)(int dev, int mode);
348
void (*close)(int dev);
349
int (*event)(int dev, unsigned char *ev);
350
unsigned long (*get_time)(int dev);
351
int (*ioctl) (int dev, unsigned int cmd, void __user * arg);
352
void (*arm_timer)(int dev, long time);
353
};
354
355
extern struct sound_timer_operations default_sound_timer;
356
357
extern struct audio_operations *audio_devs[MAX_AUDIO_DEV];
358
extern int num_audiodevs;
359
extern struct mixer_operations *mixer_devs[MAX_MIXER_DEV];
360
extern int num_mixers;
361
extern struct synth_operations *synth_devs[MAX_SYNTH_DEV+MAX_MIDI_DEV];
362
extern int num_synths;
363
extern struct midi_operations *midi_devs[MAX_MIDI_DEV];
364
extern int num_midis;
365
extern struct sound_timer_operations * sound_timer_devs[MAX_TIMER_DEV];
366
extern int num_sound_timers;
367
368
extern int sound_map_buffer (int dev, struct dma_buffparms *dmap, buffmem_desc *info);
369
void sound_timer_init (struct sound_lowlev_timer *t, char *name);
370
void sound_dma_intr (int dev, struct dma_buffparms *dmap, int chan);
371
372
#define AUDIO_DRIVER_VERSION 2
373
#define MIXER_DRIVER_VERSION 2
374
int sound_install_audiodrv(int vers, char *name, struct audio_driver *driver,
375
int driver_size, int flags, unsigned int format_mask,
376
void *devc, int dma1, int dma2);
377
int sound_install_mixer(int vers, char *name, struct mixer_operations *driver,
378
int driver_size, void *devc);
379
380
void sound_unload_audiodev(int dev);
381
void sound_unload_mixerdev(int dev);
382
void sound_unload_mididev(int dev);
383
void sound_unload_synthdev(int dev);
384
void sound_unload_timerdev(int dev);
385
int sound_alloc_mixerdev(void);
386
int sound_alloc_timerdev(void);
387
int sound_alloc_synthdev(void);
388
int sound_alloc_mididev(void);
389
#endif /* _DEV_TABLE_H_ */
390
391
392