1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#ifndef __SOUND_ASOUND_H
24#define __SOUND_ASOUND_H
25
26#include <linux/types.h>
27
28#ifdef __KERNEL__
29#include <linux/ioctl.h>
30#include <linux/time.h>
31#include <asm/byteorder.h>
32
33#ifdef __LITTLE_ENDIAN
34#define SNDRV_LITTLE_ENDIAN
35#else
36#ifdef __BIG_ENDIAN
37#define SNDRV_BIG_ENDIAN
38#else
39#error "Unsupported endian..."
40#endif
41#endif
42
43#endif
44
45
46
47
48
49#define SNDRV_PROTOCOL_VERSION(major, minor, subminor) (((major)<<16)|((minor)<<8)|(subminor))
50#define SNDRV_PROTOCOL_MAJOR(version) (((version)>>16)&0xffff)
51#define SNDRV_PROTOCOL_MINOR(version) (((version)>>8)&0xff)
52#define SNDRV_PROTOCOL_MICRO(version) ((version)&0xff)
53#define SNDRV_PROTOCOL_INCOMPATIBLE(kversion, uversion) \
54 (SNDRV_PROTOCOL_MAJOR(kversion) != SNDRV_PROTOCOL_MAJOR(uversion) || \
55 (SNDRV_PROTOCOL_MAJOR(kversion) == SNDRV_PROTOCOL_MAJOR(uversion) && \
56 SNDRV_PROTOCOL_MINOR(kversion) != SNDRV_PROTOCOL_MINOR(uversion)))
57
58
59
60
61
62
63
64struct snd_aes_iec958 {
65 unsigned char status[24];
66 unsigned char subcode[147];
67 unsigned char pad;
68 unsigned char dig_subframe[4];
69};
70
71
72
73
74
75
76
77#define SNDRV_HWDEP_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1)
78
79enum {
80 SNDRV_HWDEP_IFACE_OPL2 = 0,
81 SNDRV_HWDEP_IFACE_OPL3,
82 SNDRV_HWDEP_IFACE_OPL4,
83 SNDRV_HWDEP_IFACE_SB16CSP,
84 SNDRV_HWDEP_IFACE_EMU10K1,
85 SNDRV_HWDEP_IFACE_YSS225,
86 SNDRV_HWDEP_IFACE_ICS2115,
87 SNDRV_HWDEP_IFACE_SSCAPE,
88 SNDRV_HWDEP_IFACE_VX,
89 SNDRV_HWDEP_IFACE_MIXART,
90 SNDRV_HWDEP_IFACE_USX2Y,
91 SNDRV_HWDEP_IFACE_EMUX_WAVETABLE,
92 SNDRV_HWDEP_IFACE_BLUETOOTH,
93 SNDRV_HWDEP_IFACE_USX2Y_PCM,
94 SNDRV_HWDEP_IFACE_PCXHR,
95 SNDRV_HWDEP_IFACE_SB_RC,
96 SNDRV_HWDEP_IFACE_HDA,
97 SNDRV_HWDEP_IFACE_USB_STREAM,
98
99
100 SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_USB_STREAM
101};
102
103struct snd_hwdep_info {
104 unsigned int device;
105 int card;
106 unsigned char id[64];
107 unsigned char name[80];
108 int iface;
109 unsigned char reserved[64];
110};
111
112
113struct snd_hwdep_dsp_status {
114 unsigned int version;
115 unsigned char id[32];
116 unsigned int num_dsps;
117 unsigned int dsp_loaded;
118 unsigned int chip_ready;
119 unsigned char reserved[16];
120};
121
122struct snd_hwdep_dsp_image {
123 unsigned int index;
124 unsigned char name[64];
125 unsigned char __user *image;
126 size_t length;
127 unsigned long driver_data;
128};
129
130#define SNDRV_HWDEP_IOCTL_PVERSION _IOR ('H', 0x00, int)
131#define SNDRV_HWDEP_IOCTL_INFO _IOR ('H', 0x01, struct snd_hwdep_info)
132#define SNDRV_HWDEP_IOCTL_DSP_STATUS _IOR('H', 0x02, struct snd_hwdep_dsp_status)
133#define SNDRV_HWDEP_IOCTL_DSP_LOAD _IOW('H', 0x03, struct snd_hwdep_dsp_image)
134
135
136
137
138
139
140
141#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 10)
142
143typedef unsigned long snd_pcm_uframes_t;
144typedef signed long snd_pcm_sframes_t;
145
146enum {
147 SNDRV_PCM_CLASS_GENERIC = 0,
148 SNDRV_PCM_CLASS_MULTI,
149 SNDRV_PCM_CLASS_MODEM,
150 SNDRV_PCM_CLASS_DIGITIZER,
151
152 SNDRV_PCM_CLASS_LAST = SNDRV_PCM_CLASS_DIGITIZER,
153};
154
155enum {
156 SNDRV_PCM_SUBCLASS_GENERIC_MIX = 0,
157 SNDRV_PCM_SUBCLASS_MULTI_MIX,
158
159 SNDRV_PCM_SUBCLASS_LAST = SNDRV_PCM_SUBCLASS_MULTI_MIX,
160};
161
162enum {
163 SNDRV_PCM_STREAM_PLAYBACK = 0,
164 SNDRV_PCM_STREAM_CAPTURE,
165 SNDRV_PCM_STREAM_LAST = SNDRV_PCM_STREAM_CAPTURE,
166};
167
168typedef int __bitwise snd_pcm_access_t;
169#define SNDRV_PCM_ACCESS_MMAP_INTERLEAVED ((__force snd_pcm_access_t) 0)
170#define SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED ((__force snd_pcm_access_t) 1)
171#define SNDRV_PCM_ACCESS_MMAP_COMPLEX ((__force snd_pcm_access_t) 2)
172#define SNDRV_PCM_ACCESS_RW_INTERLEAVED ((__force snd_pcm_access_t) 3)
173#define SNDRV_PCM_ACCESS_RW_NONINTERLEAVED ((__force snd_pcm_access_t) 4)
174#define SNDRV_PCM_ACCESS_LAST SNDRV_PCM_ACCESS_RW_NONINTERLEAVED
175
176typedef int __bitwise snd_pcm_format_t;
177#define SNDRV_PCM_FORMAT_S8 ((__force snd_pcm_format_t) 0)
178#define SNDRV_PCM_FORMAT_U8 ((__force snd_pcm_format_t) 1)
179#define SNDRV_PCM_FORMAT_S16_LE ((__force snd_pcm_format_t) 2)
180#define SNDRV_PCM_FORMAT_S16_BE ((__force snd_pcm_format_t) 3)
181#define SNDRV_PCM_FORMAT_U16_LE ((__force snd_pcm_format_t) 4)
182#define SNDRV_PCM_FORMAT_U16_BE ((__force snd_pcm_format_t) 5)
183#define SNDRV_PCM_FORMAT_S24_LE ((__force snd_pcm_format_t) 6)
184#define SNDRV_PCM_FORMAT_S24_BE ((__force snd_pcm_format_t) 7)
185#define SNDRV_PCM_FORMAT_U24_LE ((__force snd_pcm_format_t) 8)
186#define SNDRV_PCM_FORMAT_U24_BE ((__force snd_pcm_format_t) 9)
187#define SNDRV_PCM_FORMAT_S32_LE ((__force snd_pcm_format_t) 10)
188#define SNDRV_PCM_FORMAT_S32_BE ((__force snd_pcm_format_t) 11)
189#define SNDRV_PCM_FORMAT_U32_LE ((__force snd_pcm_format_t) 12)
190#define SNDRV_PCM_FORMAT_U32_BE ((__force snd_pcm_format_t) 13)
191#define SNDRV_PCM_FORMAT_FLOAT_LE ((__force snd_pcm_format_t) 14)
192#define SNDRV_PCM_FORMAT_FLOAT_BE ((__force snd_pcm_format_t) 15)
193#define SNDRV_PCM_FORMAT_FLOAT64_LE ((__force snd_pcm_format_t) 16)
194#define SNDRV_PCM_FORMAT_FLOAT64_BE ((__force snd_pcm_format_t) 17)
195#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE ((__force snd_pcm_format_t) 18)
196#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE ((__force snd_pcm_format_t) 19)
197#define SNDRV_PCM_FORMAT_MU_LAW ((__force snd_pcm_format_t) 20)
198#define SNDRV_PCM_FORMAT_A_LAW ((__force snd_pcm_format_t) 21)
199#define SNDRV_PCM_FORMAT_IMA_ADPCM ((__force snd_pcm_format_t) 22)
200#define SNDRV_PCM_FORMAT_MPEG ((__force snd_pcm_format_t) 23)
201#define SNDRV_PCM_FORMAT_GSM ((__force snd_pcm_format_t) 24)
202#define SNDRV_PCM_FORMAT_SPECIAL ((__force snd_pcm_format_t) 31)
203#define SNDRV_PCM_FORMAT_S24_3LE ((__force snd_pcm_format_t) 32)
204#define SNDRV_PCM_FORMAT_S24_3BE ((__force snd_pcm_format_t) 33)
205#define SNDRV_PCM_FORMAT_U24_3LE ((__force snd_pcm_format_t) 34)
206#define SNDRV_PCM_FORMAT_U24_3BE ((__force snd_pcm_format_t) 35)
207#define SNDRV_PCM_FORMAT_S20_3LE ((__force snd_pcm_format_t) 36)
208#define SNDRV_PCM_FORMAT_S20_3BE ((__force snd_pcm_format_t) 37)
209#define SNDRV_PCM_FORMAT_U20_3LE ((__force snd_pcm_format_t) 38)
210#define SNDRV_PCM_FORMAT_U20_3BE ((__force snd_pcm_format_t) 39)
211#define SNDRV_PCM_FORMAT_S18_3LE ((__force snd_pcm_format_t) 40)
212#define SNDRV_PCM_FORMAT_S18_3BE ((__force snd_pcm_format_t) 41)
213#define SNDRV_PCM_FORMAT_U18_3LE ((__force snd_pcm_format_t) 42)
214#define SNDRV_PCM_FORMAT_U18_3BE ((__force snd_pcm_format_t) 43)
215#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_U18_3BE
216
217#ifdef SNDRV_LITTLE_ENDIAN
218#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE
219#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_LE
220#define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_LE
221#define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_LE
222#define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_LE
223#define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_LE
224#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_LE
225#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_LE
226#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE
227#endif
228#ifdef SNDRV_BIG_ENDIAN
229#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_BE
230#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_BE
231#define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_BE
232#define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_BE
233#define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_BE
234#define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_BE
235#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_BE
236#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_BE
237#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE
238#endif
239
240typedef int __bitwise snd_pcm_subformat_t;
241#define SNDRV_PCM_SUBFORMAT_STD ((__force snd_pcm_subformat_t) 0)
242#define SNDRV_PCM_SUBFORMAT_LAST SNDRV_PCM_SUBFORMAT_STD
243
244#define SNDRV_PCM_INFO_MMAP 0x00000001
245#define SNDRV_PCM_INFO_MMAP_VALID 0x00000002
246#define SNDRV_PCM_INFO_DOUBLE 0x00000004
247#define SNDRV_PCM_INFO_BATCH 0x00000010
248#define SNDRV_PCM_INFO_INTERLEAVED 0x00000100
249#define SNDRV_PCM_INFO_NONINTERLEAVED 0x00000200
250#define SNDRV_PCM_INFO_COMPLEX 0x00000400
251#define SNDRV_PCM_INFO_BLOCK_TRANSFER 0x00010000
252#define SNDRV_PCM_INFO_OVERRANGE 0x00020000
253#define SNDRV_PCM_INFO_RESUME 0x00040000
254#define SNDRV_PCM_INFO_PAUSE 0x00080000
255#define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000
256#define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000
257#define SNDRV_PCM_INFO_SYNC_START 0x00400000
258#define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000
259
260typedef int __bitwise snd_pcm_state_t;
261#define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0)
262#define SNDRV_PCM_STATE_SETUP ((__force snd_pcm_state_t) 1)
263#define SNDRV_PCM_STATE_PREPARED ((__force snd_pcm_state_t) 2)
264#define SNDRV_PCM_STATE_RUNNING ((__force snd_pcm_state_t) 3)
265#define SNDRV_PCM_STATE_XRUN ((__force snd_pcm_state_t) 4)
266#define SNDRV_PCM_STATE_DRAINING ((__force snd_pcm_state_t) 5)
267#define SNDRV_PCM_STATE_PAUSED ((__force snd_pcm_state_t) 6)
268#define SNDRV_PCM_STATE_SUSPENDED ((__force snd_pcm_state_t) 7)
269#define SNDRV_PCM_STATE_DISCONNECTED ((__force snd_pcm_state_t) 8)
270#define SNDRV_PCM_STATE_LAST SNDRV_PCM_STATE_DISCONNECTED
271
272enum {
273 SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000,
274 SNDRV_PCM_MMAP_OFFSET_STATUS = 0x80000000,
275 SNDRV_PCM_MMAP_OFFSET_CONTROL = 0x81000000,
276};
277
278union snd_pcm_sync_id {
279 unsigned char id[16];
280 unsigned short id16[8];
281 unsigned int id32[4];
282};
283
284struct snd_pcm_info {
285 unsigned int device;
286 unsigned int subdevice;
287 int stream;
288 int card;
289 unsigned char id[64];
290 unsigned char name[80];
291 unsigned char subname[32];
292 int dev_class;
293 int dev_subclass;
294 unsigned int subdevices_count;
295 unsigned int subdevices_avail;
296 union snd_pcm_sync_id sync;
297 unsigned char reserved[64];
298};
299
300typedef int snd_pcm_hw_param_t;
301#define SNDRV_PCM_HW_PARAM_ACCESS 0
302#define SNDRV_PCM_HW_PARAM_FORMAT 1
303#define SNDRV_PCM_HW_PARAM_SUBFORMAT 2
304#define SNDRV_PCM_HW_PARAM_FIRST_MASK SNDRV_PCM_HW_PARAM_ACCESS
305#define SNDRV_PCM_HW_PARAM_LAST_MASK SNDRV_PCM_HW_PARAM_SUBFORMAT
306
307#define SNDRV_PCM_HW_PARAM_SAMPLE_BITS 8
308#define SNDRV_PCM_HW_PARAM_FRAME_BITS 9
309#define SNDRV_PCM_HW_PARAM_CHANNELS 10
310#define SNDRV_PCM_HW_PARAM_RATE 11
311#define SNDRV_PCM_HW_PARAM_PERIOD_TIME 12
312
313
314#define SNDRV_PCM_HW_PARAM_PERIOD_SIZE 13
315
316
317#define SNDRV_PCM_HW_PARAM_PERIOD_BYTES 14
318
319
320#define SNDRV_PCM_HW_PARAM_PERIODS 15
321
322
323#define SNDRV_PCM_HW_PARAM_BUFFER_TIME 16
324
325
326#define SNDRV_PCM_HW_PARAM_BUFFER_SIZE 17
327#define SNDRV_PCM_HW_PARAM_BUFFER_BYTES 18
328#define SNDRV_PCM_HW_PARAM_TICK_TIME 19
329#define SNDRV_PCM_HW_PARAM_FIRST_INTERVAL SNDRV_PCM_HW_PARAM_SAMPLE_BITS
330#define SNDRV_PCM_HW_PARAM_LAST_INTERVAL SNDRV_PCM_HW_PARAM_TICK_TIME
331
332#define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0)
333
334struct snd_interval {
335 unsigned int min, max;
336 unsigned int openmin:1,
337 openmax:1,
338 integer:1,
339 empty:1;
340};
341
342#define SNDRV_MASK_MAX 256
343
344struct snd_mask {
345 __u32 bits[(SNDRV_MASK_MAX+31)/32];
346};
347
348struct snd_pcm_hw_params {
349 unsigned int flags;
350 struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK -
351 SNDRV_PCM_HW_PARAM_FIRST_MASK + 1];
352 struct snd_mask mres[5];
353 struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL -
354 SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1];
355 struct snd_interval ires[9];
356 unsigned int rmask;
357 unsigned int cmask;
358 unsigned int info;
359 unsigned int msbits;
360 unsigned int rate_num;
361 unsigned int rate_den;
362 snd_pcm_uframes_t fifo_size;
363 unsigned char reserved[64];
364};
365
366enum {
367 SNDRV_PCM_TSTAMP_NONE = 0,
368 SNDRV_PCM_TSTAMP_ENABLE,
369 SNDRV_PCM_TSTAMP_LAST = SNDRV_PCM_TSTAMP_ENABLE,
370};
371
372struct snd_pcm_sw_params {
373 int tstamp_mode;
374 unsigned int period_step;
375 unsigned int sleep_min;
376 snd_pcm_uframes_t avail_min;
377 snd_pcm_uframes_t xfer_align;
378 snd_pcm_uframes_t start_threshold;
379 snd_pcm_uframes_t stop_threshold;
380 snd_pcm_uframes_t silence_threshold;
381 snd_pcm_uframes_t silence_size;
382 snd_pcm_uframes_t boundary;
383 unsigned char reserved[64];
384};
385
386struct snd_pcm_channel_info {
387 unsigned int channel;
388 __kernel_off_t offset;
389 unsigned int first;
390 unsigned int step;
391};
392
393struct snd_pcm_status {
394 snd_pcm_state_t state;
395 struct timespec trigger_tstamp;
396 struct timespec tstamp;
397 snd_pcm_uframes_t appl_ptr;
398 snd_pcm_uframes_t hw_ptr;
399 snd_pcm_sframes_t delay;
400 snd_pcm_uframes_t avail;
401 snd_pcm_uframes_t avail_max;
402 snd_pcm_uframes_t overrange;
403 snd_pcm_state_t suspended_state;
404 unsigned char reserved[60];
405};
406
407struct snd_pcm_mmap_status {
408 snd_pcm_state_t state;
409 int pad1;
410 snd_pcm_uframes_t hw_ptr;
411 struct timespec tstamp;
412 snd_pcm_state_t suspended_state;
413};
414
415struct snd_pcm_mmap_control {
416 snd_pcm_uframes_t appl_ptr;
417 snd_pcm_uframes_t avail_min;
418};
419
420#define SNDRV_PCM_SYNC_PTR_HWSYNC (1<<0)
421#define SNDRV_PCM_SYNC_PTR_APPL (1<<1)
422#define SNDRV_PCM_SYNC_PTR_AVAIL_MIN (1<<2)
423
424struct snd_pcm_sync_ptr {
425 unsigned int flags;
426 union {
427 struct snd_pcm_mmap_status status;
428 unsigned char reserved[64];
429 } s;
430 union {
431 struct snd_pcm_mmap_control control;
432 unsigned char reserved[64];
433 } c;
434};
435
436struct snd_xferi {
437 snd_pcm_sframes_t result;
438 void __user *buf;
439 snd_pcm_uframes_t frames;
440};
441
442struct snd_xfern {
443 snd_pcm_sframes_t result;
444 void __user * __user *bufs;
445 snd_pcm_uframes_t frames;
446};
447
448enum {
449 SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0,
450 SNDRV_PCM_TSTAMP_TYPE_MONOTONIC,
451 SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC,
452};
453
454#define SNDRV_PCM_IOCTL_PVERSION _IOR('A', 0x00, int)
455#define SNDRV_PCM_IOCTL_INFO _IOR('A', 0x01, struct snd_pcm_info)
456#define SNDRV_PCM_IOCTL_TSTAMP _IOW('A', 0x02, int)
457#define SNDRV_PCM_IOCTL_TTSTAMP _IOW('A', 0x03, int)
458#define SNDRV_PCM_IOCTL_HW_REFINE _IOWR('A', 0x10, struct snd_pcm_hw_params)
459#define SNDRV_PCM_IOCTL_HW_PARAMS _IOWR('A', 0x11, struct snd_pcm_hw_params)
460#define SNDRV_PCM_IOCTL_HW_FREE _IO('A', 0x12)
461#define SNDRV_PCM_IOCTL_SW_PARAMS _IOWR('A', 0x13, struct snd_pcm_sw_params)
462#define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status)
463#define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t)
464#define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22)
465#define SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct snd_pcm_sync_ptr)
466#define SNDRV_PCM_IOCTL_CHANNEL_INFO _IOR('A', 0x32, struct snd_pcm_channel_info)
467#define SNDRV_PCM_IOCTL_PREPARE _IO('A', 0x40)
468#define SNDRV_PCM_IOCTL_RESET _IO('A', 0x41)
469#define SNDRV_PCM_IOCTL_START _IO('A', 0x42)
470#define SNDRV_PCM_IOCTL_DROP _IO('A', 0x43)
471#define SNDRV_PCM_IOCTL_DRAIN _IO('A', 0x44)
472#define SNDRV_PCM_IOCTL_PAUSE _IOW('A', 0x45, int)
473#define SNDRV_PCM_IOCTL_REWIND _IOW('A', 0x46, snd_pcm_uframes_t)
474#define SNDRV_PCM_IOCTL_RESUME _IO('A', 0x47)
475#define SNDRV_PCM_IOCTL_XRUN _IO('A', 0x48)
476#define SNDRV_PCM_IOCTL_FORWARD _IOW('A', 0x49, snd_pcm_uframes_t)
477#define SNDRV_PCM_IOCTL_WRITEI_FRAMES _IOW('A', 0x50, struct snd_xferi)
478#define SNDRV_PCM_IOCTL_READI_FRAMES _IOR('A', 0x51, struct snd_xferi)
479#define SNDRV_PCM_IOCTL_WRITEN_FRAMES _IOW('A', 0x52, struct snd_xfern)
480#define SNDRV_PCM_IOCTL_READN_FRAMES _IOR('A', 0x53, struct snd_xfern)
481#define SNDRV_PCM_IOCTL_LINK _IOW('A', 0x60, int)
482#define SNDRV_PCM_IOCTL_UNLINK _IO('A', 0x61)
483
484
485
486
487
488
489
490
491
492
493
494#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 0)
495
496enum {
497 SNDRV_RAWMIDI_STREAM_OUTPUT = 0,
498 SNDRV_RAWMIDI_STREAM_INPUT,
499 SNDRV_RAWMIDI_STREAM_LAST = SNDRV_RAWMIDI_STREAM_INPUT,
500};
501
502#define SNDRV_RAWMIDI_INFO_OUTPUT 0x00000001
503#define SNDRV_RAWMIDI_INFO_INPUT 0x00000002
504#define SNDRV_RAWMIDI_INFO_DUPLEX 0x00000004
505
506struct snd_rawmidi_info {
507 unsigned int device;
508 unsigned int subdevice;
509 int stream;
510 int card;
511 unsigned int flags;
512 unsigned char id[64];
513 unsigned char name[80];
514 unsigned char subname[32];
515 unsigned int subdevices_count;
516 unsigned int subdevices_avail;
517 unsigned char reserved[64];
518};
519
520struct snd_rawmidi_params {
521 int stream;
522 size_t buffer_size;
523 size_t avail_min;
524 unsigned int no_active_sensing: 1;
525 unsigned char reserved[16];
526};
527
528struct snd_rawmidi_status {
529 int stream;
530 struct timespec tstamp;
531 size_t avail;
532 size_t xruns;
533 unsigned char reserved[16];
534};
535
536#define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int)
537#define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info)
538#define SNDRV_RAWMIDI_IOCTL_PARAMS _IOWR('W', 0x10, struct snd_rawmidi_params)
539#define SNDRV_RAWMIDI_IOCTL_STATUS _IOWR('W', 0x20, struct snd_rawmidi_status)
540#define SNDRV_RAWMIDI_IOCTL_DROP _IOW('W', 0x30, int)
541#define SNDRV_RAWMIDI_IOCTL_DRAIN _IOW('W', 0x31, int)
542
543
544
545
546
547#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 5)
548
549enum {
550 SNDRV_TIMER_CLASS_NONE = -1,
551 SNDRV_TIMER_CLASS_SLAVE = 0,
552 SNDRV_TIMER_CLASS_GLOBAL,
553 SNDRV_TIMER_CLASS_CARD,
554 SNDRV_TIMER_CLASS_PCM,
555 SNDRV_TIMER_CLASS_LAST = SNDRV_TIMER_CLASS_PCM,
556};
557
558
559enum {
560 SNDRV_TIMER_SCLASS_NONE = 0,
561 SNDRV_TIMER_SCLASS_APPLICATION,
562 SNDRV_TIMER_SCLASS_SEQUENCER,
563 SNDRV_TIMER_SCLASS_OSS_SEQUENCER,
564 SNDRV_TIMER_SCLASS_LAST = SNDRV_TIMER_SCLASS_OSS_SEQUENCER,
565};
566
567
568#define SNDRV_TIMER_GLOBAL_SYSTEM 0
569#define SNDRV_TIMER_GLOBAL_RTC 1
570#define SNDRV_TIMER_GLOBAL_HPET 2
571#define SNDRV_TIMER_GLOBAL_HRTIMER 3
572
573
574#define SNDRV_TIMER_FLG_SLAVE (1<<0)
575
576struct snd_timer_id {
577 int dev_class;
578 int dev_sclass;
579 int card;
580 int device;
581 int subdevice;
582};
583
584struct snd_timer_ginfo {
585 struct snd_timer_id tid;
586 unsigned int flags;
587 int card;
588 unsigned char id[64];
589 unsigned char name[80];
590 unsigned long reserved0;
591 unsigned long resolution;
592 unsigned long resolution_min;
593 unsigned long resolution_max;
594 unsigned int clients;
595 unsigned char reserved[32];
596};
597
598struct snd_timer_gparams {
599 struct snd_timer_id tid;
600 unsigned long period_num;
601 unsigned long period_den;
602 unsigned char reserved[32];
603};
604
605struct snd_timer_gstatus {
606 struct snd_timer_id tid;
607 unsigned long resolution;
608 unsigned long resolution_num;
609 unsigned long resolution_den;
610 unsigned char reserved[32];
611};
612
613struct snd_timer_select {
614 struct snd_timer_id id;
615 unsigned char reserved[32];
616};
617
618struct snd_timer_info {
619 unsigned int flags;
620 int card;
621 unsigned char id[64];
622 unsigned char name[80];
623 unsigned long reserved0;
624 unsigned long resolution;
625 unsigned char reserved[64];
626};
627
628#define SNDRV_TIMER_PSFLG_AUTO (1<<0)
629#define SNDRV_TIMER_PSFLG_EXCLUSIVE (1<<1)
630#define SNDRV_TIMER_PSFLG_EARLY_EVENT (1<<2)
631
632struct snd_timer_params {
633 unsigned int flags;
634 unsigned int ticks;
635 unsigned int queue_size;
636 unsigned int reserved0;
637 unsigned int filter;
638 unsigned char reserved[60];
639};
640
641struct snd_timer_status {
642 struct timespec tstamp;
643 unsigned int resolution;
644 unsigned int lost;
645 unsigned int overrun;
646 unsigned int queue;
647 unsigned char reserved[64];
648};
649
650#define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int)
651#define SNDRV_TIMER_IOCTL_NEXT_DEVICE _IOWR('T', 0x01, struct snd_timer_id)
652#define SNDRV_TIMER_IOCTL_TREAD _IOW('T', 0x02, int)
653#define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo)
654#define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams)
655#define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus)
656#define SNDRV_TIMER_IOCTL_SELECT _IOW('T', 0x10, struct snd_timer_select)
657#define SNDRV_TIMER_IOCTL_INFO _IOR('T', 0x11, struct snd_timer_info)
658#define SNDRV_TIMER_IOCTL_PARAMS _IOW('T', 0x12, struct snd_timer_params)
659#define SNDRV_TIMER_IOCTL_STATUS _IOR('T', 0x14, struct snd_timer_status)
660
661#define SNDRV_TIMER_IOCTL_START _IO('T', 0xa0)
662#define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1)
663#define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2)
664#define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3)
665
666struct snd_timer_read {
667 unsigned int resolution;
668 unsigned int ticks;
669};
670
671enum {
672 SNDRV_TIMER_EVENT_RESOLUTION = 0,
673 SNDRV_TIMER_EVENT_TICK,
674 SNDRV_TIMER_EVENT_START,
675 SNDRV_TIMER_EVENT_STOP,
676 SNDRV_TIMER_EVENT_CONTINUE,
677 SNDRV_TIMER_EVENT_PAUSE,
678 SNDRV_TIMER_EVENT_EARLY,
679 SNDRV_TIMER_EVENT_SUSPEND,
680 SNDRV_TIMER_EVENT_RESUME,
681
682 SNDRV_TIMER_EVENT_MSTART = SNDRV_TIMER_EVENT_START + 10,
683 SNDRV_TIMER_EVENT_MSTOP = SNDRV_TIMER_EVENT_STOP + 10,
684 SNDRV_TIMER_EVENT_MCONTINUE = SNDRV_TIMER_EVENT_CONTINUE + 10,
685 SNDRV_TIMER_EVENT_MPAUSE = SNDRV_TIMER_EVENT_PAUSE + 10,
686 SNDRV_TIMER_EVENT_MSUSPEND = SNDRV_TIMER_EVENT_SUSPEND + 10,
687 SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10,
688};
689
690struct snd_timer_tread {
691 int event;
692 struct timespec tstamp;
693 unsigned int val;
694};
695
696
697
698
699
700
701
702#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 6)
703
704struct snd_ctl_card_info {
705 int card;
706 int pad;
707 unsigned char id[16];
708 unsigned char driver[16];
709 unsigned char name[32];
710 unsigned char longname[80];
711 unsigned char reserved_[16];
712 unsigned char mixername[80];
713 unsigned char components[128];
714};
715
716typedef int __bitwise snd_ctl_elem_type_t;
717#define SNDRV_CTL_ELEM_TYPE_NONE ((__force snd_ctl_elem_type_t) 0)
718#define SNDRV_CTL_ELEM_TYPE_BOOLEAN ((__force snd_ctl_elem_type_t) 1)
719#define SNDRV_CTL_ELEM_TYPE_INTEGER ((__force snd_ctl_elem_type_t) 2)
720#define SNDRV_CTL_ELEM_TYPE_ENUMERATED ((__force snd_ctl_elem_type_t) 3)
721#define SNDRV_CTL_ELEM_TYPE_BYTES ((__force snd_ctl_elem_type_t) 4)
722#define SNDRV_CTL_ELEM_TYPE_IEC958 ((__force snd_ctl_elem_type_t) 5)
723#define SNDRV_CTL_ELEM_TYPE_INTEGER64 ((__force snd_ctl_elem_type_t) 6)
724#define SNDRV_CTL_ELEM_TYPE_LAST SNDRV_CTL_ELEM_TYPE_INTEGER64
725
726typedef int __bitwise snd_ctl_elem_iface_t;
727#define SNDRV_CTL_ELEM_IFACE_CARD ((__force snd_ctl_elem_iface_t) 0)
728#define SNDRV_CTL_ELEM_IFACE_HWDEP ((__force snd_ctl_elem_iface_t) 1)
729#define SNDRV_CTL_ELEM_IFACE_MIXER ((__force snd_ctl_elem_iface_t) 2)
730#define SNDRV_CTL_ELEM_IFACE_PCM ((__force snd_ctl_elem_iface_t) 3)
731#define SNDRV_CTL_ELEM_IFACE_RAWMIDI ((__force snd_ctl_elem_iface_t) 4)
732#define SNDRV_CTL_ELEM_IFACE_TIMER ((__force snd_ctl_elem_iface_t) 5)
733#define SNDRV_CTL_ELEM_IFACE_SEQUENCER ((__force snd_ctl_elem_iface_t) 6)
734#define SNDRV_CTL_ELEM_IFACE_LAST SNDRV_CTL_ELEM_IFACE_SEQUENCER
735
736#define SNDRV_CTL_ELEM_ACCESS_READ (1<<0)
737#define SNDRV_CTL_ELEM_ACCESS_WRITE (1<<1)
738#define SNDRV_CTL_ELEM_ACCESS_READWRITE (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE)
739#define SNDRV_CTL_ELEM_ACCESS_VOLATILE (1<<2)
740#define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP (1<<3)
741#define SNDRV_CTL_ELEM_ACCESS_TLV_READ (1<<4)
742#define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE (1<<5)
743#define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)
744#define SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND (1<<6)
745#define SNDRV_CTL_ELEM_ACCESS_INACTIVE (1<<8)
746#define SNDRV_CTL_ELEM_ACCESS_LOCK (1<<9)
747#define SNDRV_CTL_ELEM_ACCESS_OWNER (1<<10)
748#define SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK (1<<28)
749#define SNDRV_CTL_ELEM_ACCESS_USER (1<<29)
750
751
752
753#define SNDRV_CTL_POWER_D0 0x0000
754#define SNDRV_CTL_POWER_D1 0x0100
755#define SNDRV_CTL_POWER_D2 0x0200
756#define SNDRV_CTL_POWER_D3 0x0300
757#define SNDRV_CTL_POWER_D3hot (SNDRV_CTL_POWER_D3|0x0000)
758#define SNDRV_CTL_POWER_D3cold (SNDRV_CTL_POWER_D3|0x0001)
759
760struct snd_ctl_elem_id {
761 unsigned int numid;
762 snd_ctl_elem_iface_t iface;
763 unsigned int device;
764 unsigned int subdevice;
765 unsigned char name[44];
766 unsigned int index;
767};
768
769struct snd_ctl_elem_list {
770 unsigned int offset;
771 unsigned int space;
772 unsigned int used;
773 unsigned int count;
774 struct snd_ctl_elem_id __user *pids;
775 unsigned char reserved[50];
776};
777
778struct snd_ctl_elem_info {
779 struct snd_ctl_elem_id id;
780 snd_ctl_elem_type_t type;
781 unsigned int access;
782 unsigned int count;
783 __kernel_pid_t owner;
784 union {
785 struct {
786 long min;
787 long max;
788 long step;
789 } integer;
790 struct {
791 long long min;
792 long long max;
793 long long step;
794 } integer64;
795 struct {
796 unsigned int items;
797 unsigned int item;
798 char name[64];
799 } enumerated;
800 unsigned char reserved[128];
801 } value;
802 union {
803 unsigned short d[4];
804 unsigned short *d_ptr;
805 } dimen;
806 unsigned char reserved[64-4*sizeof(unsigned short)];
807};
808
809struct snd_ctl_elem_value {
810 struct snd_ctl_elem_id id;
811 unsigned int indirect: 1;
812 union {
813 union {
814 long value[128];
815 long *value_ptr;
816 } integer;
817 union {
818 long long value[64];
819 long long *value_ptr;
820 } integer64;
821 union {
822 unsigned int item[128];
823 unsigned int *item_ptr;
824 } enumerated;
825 union {
826 unsigned char data[512];
827 unsigned char *data_ptr;
828 } bytes;
829 struct snd_aes_iec958 iec958;
830 } value;
831 struct timespec tstamp;
832 unsigned char reserved[128-sizeof(struct timespec)];
833};
834
835struct snd_ctl_tlv {
836 unsigned int numid;
837 unsigned int length;
838 unsigned int tlv[0];
839};
840
841#define SNDRV_CTL_IOCTL_PVERSION _IOR('U', 0x00, int)
842#define SNDRV_CTL_IOCTL_CARD_INFO _IOR('U', 0x01, struct snd_ctl_card_info)
843#define SNDRV_CTL_IOCTL_ELEM_LIST _IOWR('U', 0x10, struct snd_ctl_elem_list)
844#define SNDRV_CTL_IOCTL_ELEM_INFO _IOWR('U', 0x11, struct snd_ctl_elem_info)
845#define SNDRV_CTL_IOCTL_ELEM_READ _IOWR('U', 0x12, struct snd_ctl_elem_value)
846#define SNDRV_CTL_IOCTL_ELEM_WRITE _IOWR('U', 0x13, struct snd_ctl_elem_value)
847#define SNDRV_CTL_IOCTL_ELEM_LOCK _IOW('U', 0x14, struct snd_ctl_elem_id)
848#define SNDRV_CTL_IOCTL_ELEM_UNLOCK _IOW('U', 0x15, struct snd_ctl_elem_id)
849#define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int)
850#define SNDRV_CTL_IOCTL_ELEM_ADD _IOWR('U', 0x17, struct snd_ctl_elem_info)
851#define SNDRV_CTL_IOCTL_ELEM_REPLACE _IOWR('U', 0x18, struct snd_ctl_elem_info)
852#define SNDRV_CTL_IOCTL_ELEM_REMOVE _IOWR('U', 0x19, struct snd_ctl_elem_id)
853#define SNDRV_CTL_IOCTL_TLV_READ _IOWR('U', 0x1a, struct snd_ctl_tlv)
854#define SNDRV_CTL_IOCTL_TLV_WRITE _IOWR('U', 0x1b, struct snd_ctl_tlv)
855#define SNDRV_CTL_IOCTL_TLV_COMMAND _IOWR('U', 0x1c, struct snd_ctl_tlv)
856#define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int)
857#define SNDRV_CTL_IOCTL_HWDEP_INFO _IOR('U', 0x21, struct snd_hwdep_info)
858#define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE _IOR('U', 0x30, int)
859#define SNDRV_CTL_IOCTL_PCM_INFO _IOWR('U', 0x31, struct snd_pcm_info)
860#define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int)
861#define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int)
862#define SNDRV_CTL_IOCTL_RAWMIDI_INFO _IOWR('U', 0x41, struct snd_rawmidi_info)
863#define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int)
864#define SNDRV_CTL_IOCTL_POWER _IOWR('U', 0xd0, int)
865#define SNDRV_CTL_IOCTL_POWER_STATE _IOR('U', 0xd1, int)
866
867
868
869
870
871enum sndrv_ctl_event_type {
872 SNDRV_CTL_EVENT_ELEM = 0,
873 SNDRV_CTL_EVENT_LAST = SNDRV_CTL_EVENT_ELEM,
874};
875
876#define SNDRV_CTL_EVENT_MASK_VALUE (1<<0)
877#define SNDRV_CTL_EVENT_MASK_INFO (1<<1)
878#define SNDRV_CTL_EVENT_MASK_ADD (1<<2)
879#define SNDRV_CTL_EVENT_MASK_TLV (1<<3)
880#define SNDRV_CTL_EVENT_MASK_REMOVE (~0U)
881
882struct snd_ctl_event {
883 int type;
884 union {
885 struct {
886 unsigned int mask;
887 struct snd_ctl_elem_id id;
888 } elem;
889 unsigned char data8[60];
890 } data;
891};
892
893
894
895
896
897#define SNDRV_CTL_NAME_NONE ""
898#define SNDRV_CTL_NAME_PLAYBACK "Playback "
899#define SNDRV_CTL_NAME_CAPTURE "Capture "
900
901#define SNDRV_CTL_NAME_IEC958_NONE ""
902#define SNDRV_CTL_NAME_IEC958_SWITCH "Switch"
903#define SNDRV_CTL_NAME_IEC958_VOLUME "Volume"
904#define SNDRV_CTL_NAME_IEC958_DEFAULT "Default"
905#define SNDRV_CTL_NAME_IEC958_MASK "Mask"
906#define SNDRV_CTL_NAME_IEC958_CON_MASK "Con Mask"
907#define SNDRV_CTL_NAME_IEC958_PRO_MASK "Pro Mask"
908#define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream"
909#define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what
910
911#endif
912