Blame view

include/sound/asound.h 39.6 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
  /*
   *  Advanced Linux Sound Architecture - ALSA - Driver
c1017a4cd   Jaroslav Kysela   [ALSA] Changed Ja...
3
   *  Copyright (c) 1994-2003 by Jaroslav Kysela <perex@perex.cz>,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
   *                             Abramo Bagnara <abramo@alsa-project.org>
   *
   *
   *   This program is free software; you can redistribute it and/or modify
   *   it under the terms of the GNU General Public License as published by
   *   the Free Software Foundation; either version 2 of the License, or
   *   (at your option) any later version.
   *
   *   This program is distributed in the hope that it will be useful,
   *   but WITHOUT ANY WARRANTY; without even the implied warranty of
   *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *   GNU General Public License for more details.
   *
   *   You should have received a copy of the GNU General Public License
   *   along with this program; if not, write to the Free Software
   *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
   *
   */
  
  #ifndef __SOUND_ASOUND_H
  #define __SOUND_ASOUND_H
9adfbfb61   Arnd Bergmann   make most exporte...
25
  #include <linux/types.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
  #ifdef __KERNEL__
6560c349c   Takashi Iwai   [ALSA] Clean up i...
27
  #include <linux/ioctl.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
28
29
30
31
32
33
34
35
36
37
38
39
  #include <linux/time.h>
  #include <asm/byteorder.h>
  
  #ifdef  __LITTLE_ENDIAN
  #define SNDRV_LITTLE_ENDIAN
  #else
  #ifdef __BIG_ENDIAN
  #define SNDRV_BIG_ENDIAN
  #else
  #error "Unsupported endian..."
  #endif
  #endif
6560c349c   Takashi Iwai   [ALSA] Clean up i...
40
  #endif /* __KERNEL__ **/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  
  /*
   *  protocol version
   */
  
  #define SNDRV_PROTOCOL_VERSION(major, minor, subminor) (((major)<<16)|((minor)<<8)|(subminor))
  #define SNDRV_PROTOCOL_MAJOR(version) (((version)>>16)&0xffff)
  #define SNDRV_PROTOCOL_MINOR(version) (((version)>>8)&0xff)
  #define SNDRV_PROTOCOL_MICRO(version) ((version)&0xff)
  #define SNDRV_PROTOCOL_INCOMPATIBLE(kversion, uversion) \
  	(SNDRV_PROTOCOL_MAJOR(kversion) != SNDRV_PROTOCOL_MAJOR(uversion) || \
  	 (SNDRV_PROTOCOL_MAJOR(kversion) == SNDRV_PROTOCOL_MAJOR(uversion) && \
  	   SNDRV_PROTOCOL_MINOR(kversion) != SNDRV_PROTOCOL_MINOR(uversion)))
  
  /****************************************************************************
   *                                                                          *
   *        Digital audio interface					    *
   *                                                                          *
   ****************************************************************************/
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
60
  struct snd_aes_iec958 {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
61
62
63
64
65
66
67
68
69
70
71
72
73
  	unsigned char status[24];	/* AES/IEC958 channel status bits */
  	unsigned char subcode[147];	/* AES/IEC958 subcode bits */
  	unsigned char pad;		/* nothing */
  	unsigned char dig_subframe[4];	/* AES/IEC958 subframe bits */
  };
  
  /****************************************************************************
   *                                                                          *
   *      Section for driver hardware dependent interface - /dev/snd/hw?      *
   *                                                                          *
   ****************************************************************************/
  
  #define SNDRV_HWDEP_VERSION		SNDRV_PROTOCOL_VERSION(1, 0, 1)
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
74
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
  	SNDRV_HWDEP_IFACE_OPL2 = 0,
  	SNDRV_HWDEP_IFACE_OPL3,
  	SNDRV_HWDEP_IFACE_OPL4,
  	SNDRV_HWDEP_IFACE_SB16CSP,	/* Creative Signal Processor */
  	SNDRV_HWDEP_IFACE_EMU10K1,	/* FX8010 processor in EMU10K1 chip */
  	SNDRV_HWDEP_IFACE_YSS225,	/* Yamaha FX processor */
  	SNDRV_HWDEP_IFACE_ICS2115,	/* Wavetable synth */
  	SNDRV_HWDEP_IFACE_SSCAPE,	/* Ensoniq SoundScape ISA card (MC68EC000) */
  	SNDRV_HWDEP_IFACE_VX,		/* Digigram VX cards */
  	SNDRV_HWDEP_IFACE_MIXART,	/* Digigram miXart cards */
  	SNDRV_HWDEP_IFACE_USX2Y,	/* Tascam US122, US224 & US428 usb */
  	SNDRV_HWDEP_IFACE_EMUX_WAVETABLE, /* EmuX wavetable */	
  	SNDRV_HWDEP_IFACE_BLUETOOTH,	/* Bluetooth audio */
  	SNDRV_HWDEP_IFACE_USX2Y_PCM,	/* Tascam US122, US224 & US428 rawusb pcm */
  	SNDRV_HWDEP_IFACE_PCXHR,	/* Digigram PCXHR */
b259b10c4   Clemens Ladisch   [ALSA] usb-audio ...
90
  	SNDRV_HWDEP_IFACE_SB_RC,	/* SB Extigy/Audigy2NX remote control */
2807314d4   Takashi Iwai   [ALSA] hda-intel ...
91
  	SNDRV_HWDEP_IFACE_HDA,		/* HD-audio */
030a07e44   Karsten Wiese   ALSA: Add USB US1...
92
  	SNDRV_HWDEP_IFACE_USB_STREAM,	/* direct access to usb stream */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
93
94
  
  	/* Don't forget to change the following: */
030a07e44   Karsten Wiese   ALSA: Add USB US1...
95
  	SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_USB_STREAM
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
96
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
97
  struct snd_hwdep_info {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
98
99
100
101
  	unsigned int device;		/* WR: device number */
  	int card;			/* R: card number */
  	unsigned char id[64];		/* ID (user selectable) */
  	unsigned char name[80];		/* hwdep name */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
102
  	int iface;			/* hwdep interface */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
103
104
105
106
  	unsigned char reserved[64];	/* reserved for future */
  };
  
  /* generic DSP loader */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
107
  struct snd_hwdep_dsp_status {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
108
109
110
111
112
113
114
  	unsigned int version;		/* R: driver-specific version */
  	unsigned char id[32];		/* R: driver-specific ID string */
  	unsigned int num_dsps;		/* R: number of DSP images to transfer */
  	unsigned int dsp_loaded;	/* R: bit flags indicating the loaded DSPs */
  	unsigned int chip_ready;	/* R: 1 = initialization finished */
  	unsigned char reserved[16];	/* reserved for future use */
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
115
  struct snd_hwdep_dsp_image {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
116
117
118
119
120
121
  	unsigned int index;		/* W: DSP index */
  	unsigned char name[64];		/* W: ID (e.g. file name) */
  	unsigned char __user *image;	/* W: binary image */
  	size_t length;			/* W: size of image in bytes */
  	unsigned long driver_data;	/* W: driver-specific data */
  };
78a05b522   Takashi Iwai   ALSA: Use define ...
122
123
124
125
  #define SNDRV_HWDEP_IOCTL_PVERSION	_IOR ('H', 0x00, int)
  #define SNDRV_HWDEP_IOCTL_INFO		_IOR ('H', 0x01, struct snd_hwdep_info)
  #define SNDRV_HWDEP_IOCTL_DSP_STATUS	_IOR('H', 0x02, struct snd_hwdep_dsp_status)
  #define SNDRV_HWDEP_IOCTL_DSP_LOAD	_IOW('H', 0x03, struct snd_hwdep_dsp_image)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
126
127
128
129
130
131
  
  /*****************************************************************************
   *                                                                           *
   *             Digital Audio (PCM) interface - /dev/snd/pcm??                *
   *                                                                           *
   *****************************************************************************/
5a53a7640   Takashi Iwai   ALSA: pcm - Incre...
132
  #define SNDRV_PCM_VERSION		SNDRV_PROTOCOL_VERSION(2, 0, 10)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
133

512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
134
135
  typedef unsigned long snd_pcm_uframes_t;
  typedef signed long snd_pcm_sframes_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
136

512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
137
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
138
139
140
141
142
143
144
  	SNDRV_PCM_CLASS_GENERIC = 0,	/* standard mono or stereo device */
  	SNDRV_PCM_CLASS_MULTI,		/* multichannel device */
  	SNDRV_PCM_CLASS_MODEM,		/* software modem class */
  	SNDRV_PCM_CLASS_DIGITIZER,	/* digitizer class */
  	/* Don't forget to change the following: */
  	SNDRV_PCM_CLASS_LAST = SNDRV_PCM_CLASS_DIGITIZER,
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
145
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
146
147
148
149
150
  	SNDRV_PCM_SUBCLASS_GENERIC_MIX = 0, /* mono or stereo subdevices are mixed together */
  	SNDRV_PCM_SUBCLASS_MULTI_MIX,	/* multichannel subdevices are mixed together */
  	/* Don't forget to change the following: */
  	SNDRV_PCM_SUBCLASS_LAST = SNDRV_PCM_SUBCLASS_MULTI_MIX,
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
151
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
152
153
154
155
  	SNDRV_PCM_STREAM_PLAYBACK = 0,
  	SNDRV_PCM_STREAM_CAPTURE,
  	SNDRV_PCM_STREAM_LAST = SNDRV_PCM_STREAM_CAPTURE,
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
  typedef int __bitwise snd_pcm_access_t;
  #define	SNDRV_PCM_ACCESS_MMAP_INTERLEAVED	((__force snd_pcm_access_t) 0) /* interleaved mmap */
  #define	SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED	((__force snd_pcm_access_t) 1) /* noninterleaved mmap */
  #define	SNDRV_PCM_ACCESS_MMAP_COMPLEX		((__force snd_pcm_access_t) 2) /* complex mmap */
  #define	SNDRV_PCM_ACCESS_RW_INTERLEAVED		((__force snd_pcm_access_t) 3) /* readi/writei */
  #define	SNDRV_PCM_ACCESS_RW_NONINTERLEAVED	((__force snd_pcm_access_t) 4) /* readn/writen */
  #define	SNDRV_PCM_ACCESS_LAST		SNDRV_PCM_ACCESS_RW_NONINTERLEAVED
  
  typedef int __bitwise snd_pcm_format_t;
  #define	SNDRV_PCM_FORMAT_S8	((__force snd_pcm_format_t) 0)
  #define	SNDRV_PCM_FORMAT_U8	((__force snd_pcm_format_t) 1)
  #define	SNDRV_PCM_FORMAT_S16_LE	((__force snd_pcm_format_t) 2)
  #define	SNDRV_PCM_FORMAT_S16_BE	((__force snd_pcm_format_t) 3)
  #define	SNDRV_PCM_FORMAT_U16_LE	((__force snd_pcm_format_t) 4)
  #define	SNDRV_PCM_FORMAT_U16_BE	((__force snd_pcm_format_t) 5)
  #define	SNDRV_PCM_FORMAT_S24_LE	((__force snd_pcm_format_t) 6) /* low three bytes */
  #define	SNDRV_PCM_FORMAT_S24_BE	((__force snd_pcm_format_t) 7) /* low three bytes */
  #define	SNDRV_PCM_FORMAT_U24_LE	((__force snd_pcm_format_t) 8) /* low three bytes */
  #define	SNDRV_PCM_FORMAT_U24_BE	((__force snd_pcm_format_t) 9) /* low three bytes */
  #define	SNDRV_PCM_FORMAT_S32_LE	((__force snd_pcm_format_t) 10)
  #define	SNDRV_PCM_FORMAT_S32_BE	((__force snd_pcm_format_t) 11)
  #define	SNDRV_PCM_FORMAT_U32_LE	((__force snd_pcm_format_t) 12)
  #define	SNDRV_PCM_FORMAT_U32_BE	((__force snd_pcm_format_t) 13)
  #define	SNDRV_PCM_FORMAT_FLOAT_LE	((__force snd_pcm_format_t) 14) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
  #define	SNDRV_PCM_FORMAT_FLOAT_BE	((__force snd_pcm_format_t) 15) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
  #define	SNDRV_PCM_FORMAT_FLOAT64_LE	((__force snd_pcm_format_t) 16) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
  #define	SNDRV_PCM_FORMAT_FLOAT64_BE	((__force snd_pcm_format_t) 17) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
  #define	SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE ((__force snd_pcm_format_t) 18) /* IEC-958 subframe, Little Endian */
  #define	SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE ((__force snd_pcm_format_t) 19) /* IEC-958 subframe, Big Endian */
  #define	SNDRV_PCM_FORMAT_MU_LAW		((__force snd_pcm_format_t) 20)
  #define	SNDRV_PCM_FORMAT_A_LAW		((__force snd_pcm_format_t) 21)
  #define	SNDRV_PCM_FORMAT_IMA_ADPCM	((__force snd_pcm_format_t) 22)
  #define	SNDRV_PCM_FORMAT_MPEG		((__force snd_pcm_format_t) 23)
  #define	SNDRV_PCM_FORMAT_GSM		((__force snd_pcm_format_t) 24)
  #define	SNDRV_PCM_FORMAT_SPECIAL	((__force snd_pcm_format_t) 31)
  #define	SNDRV_PCM_FORMAT_S24_3LE	((__force snd_pcm_format_t) 32)	/* in three bytes */
  #define	SNDRV_PCM_FORMAT_S24_3BE	((__force snd_pcm_format_t) 33)	/* in three bytes */
  #define	SNDRV_PCM_FORMAT_U24_3LE	((__force snd_pcm_format_t) 34)	/* in three bytes */
  #define	SNDRV_PCM_FORMAT_U24_3BE	((__force snd_pcm_format_t) 35)	/* in three bytes */
  #define	SNDRV_PCM_FORMAT_S20_3LE	((__force snd_pcm_format_t) 36)	/* in three bytes */
  #define	SNDRV_PCM_FORMAT_S20_3BE	((__force snd_pcm_format_t) 37)	/* in three bytes */
  #define	SNDRV_PCM_FORMAT_U20_3LE	((__force snd_pcm_format_t) 38)	/* in three bytes */
  #define	SNDRV_PCM_FORMAT_U20_3BE	((__force snd_pcm_format_t) 39)	/* in three bytes */
  #define	SNDRV_PCM_FORMAT_S18_3LE	((__force snd_pcm_format_t) 40)	/* in three bytes */
  #define	SNDRV_PCM_FORMAT_S18_3BE	((__force snd_pcm_format_t) 41)	/* in three bytes */
  #define	SNDRV_PCM_FORMAT_U18_3LE	((__force snd_pcm_format_t) 42)	/* in three bytes */
  #define	SNDRV_PCM_FORMAT_U18_3BE	((__force snd_pcm_format_t) 43)	/* in three bytes */
15c0cee6c   Ben Collins   ALSA: pcm: Define...
203
204
205
206
207
  #define	SNDRV_PCM_FORMAT_G723_24	((__force snd_pcm_format_t) 44) /* 8 samples in 3 bytes */
  #define	SNDRV_PCM_FORMAT_G723_24_1B	((__force snd_pcm_format_t) 45) /* 1 sample in 1 byte */
  #define	SNDRV_PCM_FORMAT_G723_40	((__force snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */
  #define	SNDRV_PCM_FORMAT_G723_40_1B	((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */
  #define	SNDRV_PCM_FORMAT_LAST		SNDRV_PCM_FORMAT_G723_40_1B
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
208
209
  
  #ifdef SNDRV_LITTLE_ENDIAN
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
210
211
212
213
214
215
216
217
218
  #define	SNDRV_PCM_FORMAT_S16		SNDRV_PCM_FORMAT_S16_LE
  #define	SNDRV_PCM_FORMAT_U16		SNDRV_PCM_FORMAT_U16_LE
  #define	SNDRV_PCM_FORMAT_S24		SNDRV_PCM_FORMAT_S24_LE
  #define	SNDRV_PCM_FORMAT_U24		SNDRV_PCM_FORMAT_U24_LE
  #define	SNDRV_PCM_FORMAT_S32		SNDRV_PCM_FORMAT_S32_LE
  #define	SNDRV_PCM_FORMAT_U32		SNDRV_PCM_FORMAT_U32_LE
  #define	SNDRV_PCM_FORMAT_FLOAT		SNDRV_PCM_FORMAT_FLOAT_LE
  #define	SNDRV_PCM_FORMAT_FLOAT64	SNDRV_PCM_FORMAT_FLOAT64_LE
  #define	SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
219
220
  #endif
  #ifdef SNDRV_BIG_ENDIAN
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
221
222
223
224
225
226
227
228
229
  #define	SNDRV_PCM_FORMAT_S16		SNDRV_PCM_FORMAT_S16_BE
  #define	SNDRV_PCM_FORMAT_U16		SNDRV_PCM_FORMAT_U16_BE
  #define	SNDRV_PCM_FORMAT_S24		SNDRV_PCM_FORMAT_S24_BE
  #define	SNDRV_PCM_FORMAT_U24		SNDRV_PCM_FORMAT_U24_BE
  #define	SNDRV_PCM_FORMAT_S32		SNDRV_PCM_FORMAT_S32_BE
  #define	SNDRV_PCM_FORMAT_U32		SNDRV_PCM_FORMAT_U32_BE
  #define	SNDRV_PCM_FORMAT_FLOAT		SNDRV_PCM_FORMAT_FLOAT_BE
  #define	SNDRV_PCM_FORMAT_FLOAT64	SNDRV_PCM_FORMAT_FLOAT64_BE
  #define	SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
230
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
231

512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
232
233
234
  typedef int __bitwise snd_pcm_subformat_t;
  #define	SNDRV_PCM_SUBFORMAT_STD		((__force snd_pcm_subformat_t) 0)
  #define	SNDRV_PCM_SUBFORMAT_LAST	SNDRV_PCM_SUBFORMAT_STD
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
  
  #define SNDRV_PCM_INFO_MMAP		0x00000001	/* hardware supports mmap */
  #define SNDRV_PCM_INFO_MMAP_VALID	0x00000002	/* period data are valid during transfer */
  #define SNDRV_PCM_INFO_DOUBLE		0x00000004	/* Double buffering needed for PCM start/stop */
  #define SNDRV_PCM_INFO_BATCH		0x00000010	/* double buffering */
  #define SNDRV_PCM_INFO_INTERLEAVED	0x00000100	/* channels are interleaved */
  #define SNDRV_PCM_INFO_NONINTERLEAVED	0x00000200	/* channels are not interleaved */
  #define SNDRV_PCM_INFO_COMPLEX		0x00000400	/* complex frame organization (mmap only) */
  #define SNDRV_PCM_INFO_BLOCK_TRANSFER	0x00010000	/* hardware transfer block of samples */
  #define SNDRV_PCM_INFO_OVERRANGE	0x00020000	/* hardware supports ADC (capture) overrange detection */
  #define SNDRV_PCM_INFO_RESUME		0x00040000	/* hardware supports stream resume after suspend */
  #define SNDRV_PCM_INFO_PAUSE		0x00080000	/* pause ioctl is supported */
  #define SNDRV_PCM_INFO_HALF_DUPLEX	0x00100000	/* only half duplex */
  #define SNDRV_PCM_INFO_JOINT_DUPLEX	0x00200000	/* playback and capture stream are somewhat correlated */
  #define SNDRV_PCM_INFO_SYNC_START	0x00400000	/* pcm support some kind of sync go */
ab69a4904   Clemens Ladisch   ALSA: pcm: suppor...
250
  #define SNDRV_PCM_INFO_NO_PERIOD_WAKEUP	0x00800000	/* period wakeup can be disabled */
8bea869c5   Jaroslav Kysela   ALSA: PCM midleve...
251
  #define SNDRV_PCM_INFO_FIFO_IN_FRAMES	0x80000000	/* internal kernel flag - FIFO size is in frames */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
252

512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
253
254
255
256
257
258
259
260
261
262
263
  typedef int __bitwise snd_pcm_state_t;
  #define	SNDRV_PCM_STATE_OPEN		((__force snd_pcm_state_t) 0) /* stream is open */
  #define	SNDRV_PCM_STATE_SETUP		((__force snd_pcm_state_t) 1) /* stream has a setup */
  #define	SNDRV_PCM_STATE_PREPARED	((__force snd_pcm_state_t) 2) /* stream is ready to start */
  #define	SNDRV_PCM_STATE_RUNNING		((__force snd_pcm_state_t) 3) /* stream is running */
  #define	SNDRV_PCM_STATE_XRUN		((__force snd_pcm_state_t) 4) /* stream reached an xrun */
  #define	SNDRV_PCM_STATE_DRAINING	((__force snd_pcm_state_t) 5) /* stream is draining */
  #define	SNDRV_PCM_STATE_PAUSED		((__force snd_pcm_state_t) 6) /* stream is paused */
  #define	SNDRV_PCM_STATE_SUSPENDED	((__force snd_pcm_state_t) 7) /* hardware is suspended */
  #define	SNDRV_PCM_STATE_DISCONNECTED	((__force snd_pcm_state_t) 8) /* hardware is disconnected */
  #define	SNDRV_PCM_STATE_LAST		SNDRV_PCM_STATE_DISCONNECTED
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
264
265
266
267
268
269
  
  enum {
  	SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000,
  	SNDRV_PCM_MMAP_OFFSET_STATUS = 0x80000000,
  	SNDRV_PCM_MMAP_OFFSET_CONTROL = 0x81000000,
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
270
  union snd_pcm_sync_id {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
271
272
273
274
  	unsigned char id[16];
  	unsigned short id16[8];
  	unsigned int id32[4];
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
275
  struct snd_pcm_info {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
276
277
  	unsigned int device;		/* RO/WR (control): device number */
  	unsigned int subdevice;		/* RO/WR (control): subdevice number */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
278
  	int stream;			/* RO/WR (control): stream direction */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
279
280
281
282
  	int card;			/* R: card number */
  	unsigned char id[64];		/* ID (user selectable) */
  	unsigned char name[80];		/* name of this device */
  	unsigned char subname[32];	/* subdevice name */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
283
284
  	int dev_class;			/* SNDRV_PCM_CLASS_* */
  	int dev_subclass;		/* SNDRV_PCM_SUBCLASS_* */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
285
286
  	unsigned int subdevices_count;
  	unsigned int subdevices_avail;
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
287
  	union snd_pcm_sync_id sync;	/* hardware synchronization ID */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
288
289
  	unsigned char reserved[64];	/* reserved for future... */
  };
a99606d25   Takashi Iwai   ALSA: Remove bitw...
290
291
292
293
  typedef int snd_pcm_hw_param_t;
  #define	SNDRV_PCM_HW_PARAM_ACCESS	0	/* Access type */
  #define	SNDRV_PCM_HW_PARAM_FORMAT	1	/* Format */
  #define	SNDRV_PCM_HW_PARAM_SUBFORMAT	2	/* Subformat */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
294
295
  #define	SNDRV_PCM_HW_PARAM_FIRST_MASK	SNDRV_PCM_HW_PARAM_ACCESS
  #define	SNDRV_PCM_HW_PARAM_LAST_MASK	SNDRV_PCM_HW_PARAM_SUBFORMAT
a99606d25   Takashi Iwai   ALSA: Remove bitw...
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
  #define	SNDRV_PCM_HW_PARAM_SAMPLE_BITS	8	/* Bits per sample */
  #define	SNDRV_PCM_HW_PARAM_FRAME_BITS	9	/* Bits per frame */
  #define	SNDRV_PCM_HW_PARAM_CHANNELS	10	/* Channels */
  #define	SNDRV_PCM_HW_PARAM_RATE		11	/* Approx rate */
  #define	SNDRV_PCM_HW_PARAM_PERIOD_TIME	12	/* Approx distance between
  						 * interrupts in us
  						 */
  #define	SNDRV_PCM_HW_PARAM_PERIOD_SIZE	13	/* Approx frames between
  						 * interrupts
  						 */
  #define	SNDRV_PCM_HW_PARAM_PERIOD_BYTES	14	/* Approx bytes between
  						 * interrupts
  						 */
  #define	SNDRV_PCM_HW_PARAM_PERIODS	15	/* Approx interrupts per
  						 * buffer
  						 */
  #define	SNDRV_PCM_HW_PARAM_BUFFER_TIME	16	/* Approx duration of buffer
  						 * in us
  						 */
  #define	SNDRV_PCM_HW_PARAM_BUFFER_SIZE	17	/* Size of buffer in frames */
  #define	SNDRV_PCM_HW_PARAM_BUFFER_BYTES	18	/* Size of buffer in bytes */
  #define	SNDRV_PCM_HW_PARAM_TICK_TIME	19	/* Approx tick duration in us */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
318
319
  #define	SNDRV_PCM_HW_PARAM_FIRST_INTERVAL	SNDRV_PCM_HW_PARAM_SAMPLE_BITS
  #define	SNDRV_PCM_HW_PARAM_LAST_INTERVAL	SNDRV_PCM_HW_PARAM_TICK_TIME
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
320

a99606d25   Takashi Iwai   ALSA: Remove bitw...
321
  #define SNDRV_PCM_HW_PARAMS_NORESAMPLE	(1<<0)	/* avoid rate resampling */
ab69a4904   Clemens Ladisch   ALSA: pcm: suppor...
322
323
  #define SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER	(1<<1)	/* export buffer */
  #define SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP	(1<<2)	/* disable period wakeups */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
324

512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
325
  struct snd_interval {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
326
327
328
329
330
331
332
333
  	unsigned int min, max;
  	unsigned int openmin:1,
  		     openmax:1,
  		     integer:1,
  		     empty:1;
  };
  
  #define SNDRV_MASK_MAX	256
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
334
  struct snd_mask {
9adfbfb61   Arnd Bergmann   make most exporte...
335
  	__u32 bits[(SNDRV_MASK_MAX+31)/32];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
336
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
337
  struct snd_pcm_hw_params {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
338
  	unsigned int flags;
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
339
  	struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK - 
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
340
  			       SNDRV_PCM_HW_PARAM_FIRST_MASK + 1];
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
341
342
  	struct snd_mask mres[5];	/* reserved masks */
  	struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL -
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
343
  				        SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1];
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
344
  	struct snd_interval ires[9];	/* reserved intervals */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
345
346
347
348
349
350
  	unsigned int rmask;		/* W: requested masks */
  	unsigned int cmask;		/* R: changed masks */
  	unsigned int info;		/* R: Info flags for returned setup */
  	unsigned int msbits;		/* R: used most significant bits */
  	unsigned int rate_num;		/* R: rate numerator */
  	unsigned int rate_den;		/* R: rate denominator */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
351
  	snd_pcm_uframes_t fifo_size;	/* R: chip FIFO size in frames */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
352
353
  	unsigned char reserved[64];	/* reserved for future */
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
354
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
355
  	SNDRV_PCM_TSTAMP_NONE = 0,
8c1215868   Jaroslav Kysela   [ALSA] PCM interf...
356
357
  	SNDRV_PCM_TSTAMP_ENABLE,
  	SNDRV_PCM_TSTAMP_LAST = SNDRV_PCM_TSTAMP_ENABLE,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
358
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
359
360
  struct snd_pcm_sw_params {
  	int tstamp_mode;			/* timestamp mode */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
361
362
  	unsigned int period_step;
  	unsigned int sleep_min;			/* min ticks to sleep */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
363
  	snd_pcm_uframes_t avail_min;		/* min avail frames for wakeup */
d948035a9   Takashi Iwai   [ALSA] Remove PCM...
364
  	snd_pcm_uframes_t xfer_align;		/* obsolete: xfer size need to be a multiple */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
365
366
367
368
369
  	snd_pcm_uframes_t start_threshold;	/* min hw_avail frames for automatic start */
  	snd_pcm_uframes_t stop_threshold;	/* min avail frames for automatic stop */
  	snd_pcm_uframes_t silence_threshold;	/* min distance from noise for silence filling */
  	snd_pcm_uframes_t silence_size;		/* silence block size */
  	snd_pcm_uframes_t boundary;		/* pointers wrap point */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
370
371
  	unsigned char reserved[64];		/* reserved for future */
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
372
  struct snd_pcm_channel_info {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
373
  	unsigned int channel;
85efde6f4   Arnd Bergmann   make exported hea...
374
  	__kernel_off_t offset;		/* mmap offset */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
375
376
377
  	unsigned int first;		/* offset to first sample in bits */
  	unsigned int step;		/* samples distance in bits */
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
378
379
  struct snd_pcm_status {
  	snd_pcm_state_t state;		/* stream state */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
380
381
  	struct timespec trigger_tstamp;	/* time when stream was started/stopped/paused */
  	struct timespec tstamp;		/* reference timestamp */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
382
383
384
385
386
387
388
  	snd_pcm_uframes_t appl_ptr;	/* appl ptr */
  	snd_pcm_uframes_t hw_ptr;	/* hw ptr */
  	snd_pcm_sframes_t delay;	/* current delay in frames */
  	snd_pcm_uframes_t avail;	/* number of frames available */
  	snd_pcm_uframes_t avail_max;	/* max frames available on hw since last status */
  	snd_pcm_uframes_t overrange;	/* count of ADC (capture) overrange detections from last status */
  	snd_pcm_state_t suspended_state; /* suspended stream state */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
389
390
  	unsigned char reserved[60];	/* must be filled with zero */
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
391
392
  struct snd_pcm_mmap_status {
  	snd_pcm_state_t state;		/* RO: state - SNDRV_PCM_STATE_XXXX */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
393
  	int pad1;			/* Needed for 64 bit alignment */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
394
  	snd_pcm_uframes_t hw_ptr;	/* RO: hw ptr (0...boundary-1) */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
395
  	struct timespec tstamp;		/* Timestamp */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
396
  	snd_pcm_state_t suspended_state; /* RO: suspended stream state */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
397
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
398
399
400
  struct snd_pcm_mmap_control {
  	snd_pcm_uframes_t appl_ptr;	/* RW: appl ptr (0...boundary-1) */
  	snd_pcm_uframes_t avail_min;	/* RW: min available frames for wakeup */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
401
402
403
404
405
  };
  
  #define SNDRV_PCM_SYNC_PTR_HWSYNC	(1<<0)	/* execute hwsync */
  #define SNDRV_PCM_SYNC_PTR_APPL		(1<<1)	/* get appl_ptr from driver (r/w op) */
  #define SNDRV_PCM_SYNC_PTR_AVAIL_MIN	(1<<2)	/* get avail_min from driver */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
406
  struct snd_pcm_sync_ptr {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
407
408
  	unsigned int flags;
  	union {
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
409
  		struct snd_pcm_mmap_status status;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
410
411
412
  		unsigned char reserved[64];
  	} s;
  	union {
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
413
  		struct snd_pcm_mmap_control control;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
414
415
416
  		unsigned char reserved[64];
  	} c;
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
417
418
  struct snd_xferi {
  	snd_pcm_sframes_t result;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
419
  	void __user *buf;
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
420
  	snd_pcm_uframes_t frames;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
421
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
422
423
  struct snd_xfern {
  	snd_pcm_sframes_t result;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
424
  	void __user * __user *bufs;
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
425
  	snd_pcm_uframes_t frames;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
426
427
428
  };
  
  enum {
b751eef1f   Jaroslav Kysela   [ALSA] Use posix ...
429
430
431
432
  	SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0,	/* gettimeofday equivalent */
  	SNDRV_PCM_TSTAMP_TYPE_MONOTONIC,	/* posix_clock_monotonic equivalent */
  	SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC,
  };
78a05b522   Takashi Iwai   ALSA: Use define ...
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
  #define SNDRV_PCM_IOCTL_PVERSION	_IOR('A', 0x00, int)
  #define SNDRV_PCM_IOCTL_INFO		_IOR('A', 0x01, struct snd_pcm_info)
  #define SNDRV_PCM_IOCTL_TSTAMP		_IOW('A', 0x02, int)
  #define SNDRV_PCM_IOCTL_TTSTAMP		_IOW('A', 0x03, int)
  #define SNDRV_PCM_IOCTL_HW_REFINE	_IOWR('A', 0x10, struct snd_pcm_hw_params)
  #define SNDRV_PCM_IOCTL_HW_PARAMS	_IOWR('A', 0x11, struct snd_pcm_hw_params)
  #define SNDRV_PCM_IOCTL_HW_FREE		_IO('A', 0x12)
  #define SNDRV_PCM_IOCTL_SW_PARAMS	_IOWR('A', 0x13, struct snd_pcm_sw_params)
  #define SNDRV_PCM_IOCTL_STATUS		_IOR('A', 0x20, struct snd_pcm_status)
  #define SNDRV_PCM_IOCTL_DELAY		_IOR('A', 0x21, snd_pcm_sframes_t)
  #define SNDRV_PCM_IOCTL_HWSYNC		_IO('A', 0x22)
  #define SNDRV_PCM_IOCTL_SYNC_PTR	_IOWR('A', 0x23, struct snd_pcm_sync_ptr)
  #define SNDRV_PCM_IOCTL_CHANNEL_INFO	_IOR('A', 0x32, struct snd_pcm_channel_info)
  #define SNDRV_PCM_IOCTL_PREPARE		_IO('A', 0x40)
  #define SNDRV_PCM_IOCTL_RESET		_IO('A', 0x41)
  #define SNDRV_PCM_IOCTL_START		_IO('A', 0x42)
  #define SNDRV_PCM_IOCTL_DROP		_IO('A', 0x43)
  #define SNDRV_PCM_IOCTL_DRAIN		_IO('A', 0x44)
  #define SNDRV_PCM_IOCTL_PAUSE		_IOW('A', 0x45, int)
  #define SNDRV_PCM_IOCTL_REWIND		_IOW('A', 0x46, snd_pcm_uframes_t)
  #define SNDRV_PCM_IOCTL_RESUME		_IO('A', 0x47)
  #define SNDRV_PCM_IOCTL_XRUN		_IO('A', 0x48)
  #define SNDRV_PCM_IOCTL_FORWARD		_IOW('A', 0x49, snd_pcm_uframes_t)
  #define SNDRV_PCM_IOCTL_WRITEI_FRAMES	_IOW('A', 0x50, struct snd_xferi)
  #define SNDRV_PCM_IOCTL_READI_FRAMES	_IOR('A', 0x51, struct snd_xferi)
  #define SNDRV_PCM_IOCTL_WRITEN_FRAMES	_IOW('A', 0x52, struct snd_xfern)
  #define SNDRV_PCM_IOCTL_READN_FRAMES	_IOR('A', 0x53, struct snd_xfern)
  #define SNDRV_PCM_IOCTL_LINK		_IOW('A', 0x60, int)
  #define SNDRV_PCM_IOCTL_UNLINK		_IO('A', 0x61)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
462
463
464
465
466
467
468
469
470
471
472
473
  
  /*****************************************************************************
   *                                                                           *
   *                            MIDI v1.0 interface                            *
   *                                                                           *
   *****************************************************************************/
  
  /*
   *  Raw MIDI section - /dev/snd/midi??
   */
  
  #define SNDRV_RAWMIDI_VERSION		SNDRV_PROTOCOL_VERSION(2, 0, 0)
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
474
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
475
476
477
478
479
480
481
482
  	SNDRV_RAWMIDI_STREAM_OUTPUT = 0,
  	SNDRV_RAWMIDI_STREAM_INPUT,
  	SNDRV_RAWMIDI_STREAM_LAST = SNDRV_RAWMIDI_STREAM_INPUT,
  };
  
  #define SNDRV_RAWMIDI_INFO_OUTPUT		0x00000001
  #define SNDRV_RAWMIDI_INFO_INPUT		0x00000002
  #define SNDRV_RAWMIDI_INFO_DUPLEX		0x00000004
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
483
  struct snd_rawmidi_info {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
484
485
  	unsigned int device;		/* RO/WR (control): device number */
  	unsigned int subdevice;		/* RO/WR (control): subdevice number */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
486
  	int stream;			/* WR: stream */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
487
488
489
490
491
492
493
494
495
  	int card;			/* R: card number */
  	unsigned int flags;		/* SNDRV_RAWMIDI_INFO_XXXX */
  	unsigned char id[64];		/* ID (user selectable) */
  	unsigned char name[80];		/* name of device */
  	unsigned char subname[32];	/* name of active or selected subdevice */
  	unsigned int subdevices_count;
  	unsigned int subdevices_avail;
  	unsigned char reserved[64];	/* reserved for future use */
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
496
497
  struct snd_rawmidi_params {
  	int stream;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
498
499
500
501
502
  	size_t buffer_size;		/* queue size in bytes */
  	size_t avail_min;		/* minimum avail bytes for wakeup */
  	unsigned int no_active_sensing: 1; /* do not send active sensing byte in close() */
  	unsigned char reserved[16];	/* reserved for future use */
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
503
504
  struct snd_rawmidi_status {
  	int stream;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
505
506
507
508
509
  	struct timespec tstamp;		/* Timestamp */
  	size_t avail;			/* available bytes */
  	size_t xruns;			/* count of overruns since last status (in bytes) */
  	unsigned char reserved[16];	/* reserved for future use */
  };
78a05b522   Takashi Iwai   ALSA: Use define ...
510
511
512
513
514
515
  #define SNDRV_RAWMIDI_IOCTL_PVERSION	_IOR('W', 0x00, int)
  #define SNDRV_RAWMIDI_IOCTL_INFO	_IOR('W', 0x01, struct snd_rawmidi_info)
  #define SNDRV_RAWMIDI_IOCTL_PARAMS	_IOWR('W', 0x10, struct snd_rawmidi_params)
  #define SNDRV_RAWMIDI_IOCTL_STATUS	_IOWR('W', 0x20, struct snd_rawmidi_status)
  #define SNDRV_RAWMIDI_IOCTL_DROP	_IOW('W', 0x30, int)
  #define SNDRV_RAWMIDI_IOCTL_DRAIN	_IOW('W', 0x31, int)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
516
517
518
519
  
  /*
   *  Timer section - /dev/snd/timer
   */
b30477d5e   Jaroslav Kysela   ALSA: timer - pas...
520
  #define SNDRV_TIMER_VERSION		SNDRV_PROTOCOL_VERSION(2, 0, 6)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
521

512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
522
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
523
524
525
526
527
528
529
530
531
  	SNDRV_TIMER_CLASS_NONE = -1,
  	SNDRV_TIMER_CLASS_SLAVE = 0,
  	SNDRV_TIMER_CLASS_GLOBAL,
  	SNDRV_TIMER_CLASS_CARD,
  	SNDRV_TIMER_CLASS_PCM,
  	SNDRV_TIMER_CLASS_LAST = SNDRV_TIMER_CLASS_PCM,
  };
  
  /* slave timer classes */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
532
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
533
534
535
536
537
538
539
540
541
542
543
  	SNDRV_TIMER_SCLASS_NONE = 0,
  	SNDRV_TIMER_SCLASS_APPLICATION,
  	SNDRV_TIMER_SCLASS_SEQUENCER,		/* alias */
  	SNDRV_TIMER_SCLASS_OSS_SEQUENCER,	/* alias */
  	SNDRV_TIMER_SCLASS_LAST = SNDRV_TIMER_SCLASS_OSS_SEQUENCER,
  };
  
  /* global timers (device member) */
  #define SNDRV_TIMER_GLOBAL_SYSTEM	0
  #define SNDRV_TIMER_GLOBAL_RTC		1
  #define SNDRV_TIMER_GLOBAL_HPET		2
bbaf5e973   Takashi Iwai   ALSA: Add hrtimer...
544
  #define SNDRV_TIMER_GLOBAL_HRTIMER	3
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
545
546
547
  
  /* info flags */
  #define SNDRV_TIMER_FLG_SLAVE		(1<<0)	/* cannot be controlled */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
548
  struct snd_timer_id {
89485d493   Daniel Mack   ALSA: include/sou...
549
  	int dev_class;
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
550
  	int dev_sclass;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
551
552
553
554
  	int card;
  	int device;
  	int subdevice;
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
555
556
  struct snd_timer_ginfo {
  	struct snd_timer_id tid;	/* requested timer ID */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
557
558
559
560
561
562
563
564
565
566
567
  	unsigned int flags;		/* timer flags - SNDRV_TIMER_FLG_* */
  	int card;			/* card number */
  	unsigned char id[64];		/* timer identification */
  	unsigned char name[80];		/* timer name */
  	unsigned long reserved0;	/* reserved for future use */
  	unsigned long resolution;	/* average period resolution in ns */
  	unsigned long resolution_min;	/* minimal period resolution in ns */
  	unsigned long resolution_max;	/* maximal period resolution in ns */
  	unsigned int clients;		/* active timer clients */
  	unsigned char reserved[32];
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
568
569
  struct snd_timer_gparams {
  	struct snd_timer_id tid;	/* requested timer ID */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
570
571
572
573
  	unsigned long period_num;	/* requested precise period duration (in seconds) - numerator */
  	unsigned long period_den;	/* requested precise period duration (in seconds) - denominator */
  	unsigned char reserved[32];
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
574
575
  struct snd_timer_gstatus {
  	struct snd_timer_id tid;	/* requested timer ID */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
576
577
578
579
580
  	unsigned long resolution;	/* current period resolution in ns */
  	unsigned long resolution_num;	/* precise current period resolution (in seconds) - numerator */
  	unsigned long resolution_den;	/* precise current period resolution (in seconds) - denominator */
  	unsigned char reserved[32];
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
581
582
  struct snd_timer_select {
  	struct snd_timer_id id;	/* bind to timer ID */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
583
584
  	unsigned char reserved[32];	/* reserved */
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
585
  struct snd_timer_info {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
586
587
588
589
590
591
592
593
594
595
596
597
  	unsigned int flags;		/* timer flags - SNDRV_TIMER_FLG_* */
  	int card;			/* card number */
  	unsigned char id[64];		/* timer identificator */
  	unsigned char name[80];		/* timer name */
  	unsigned long reserved0;	/* reserved for future use */
  	unsigned long resolution;	/* average period resolution in ns */
  	unsigned char reserved[64];	/* reserved */
  };
  
  #define SNDRV_TIMER_PSFLG_AUTO		(1<<0)	/* auto start, otherwise one-shot */
  #define SNDRV_TIMER_PSFLG_EXCLUSIVE	(1<<1)	/* exclusive use, precise start/stop/pause/continue */
  #define SNDRV_TIMER_PSFLG_EARLY_EVENT	(1<<2)	/* write early event to the poll queue */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
598
  struct snd_timer_params {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
599
600
601
602
603
604
605
  	unsigned int flags;		/* flags - SNDRV_MIXER_PSFLG_* */
  	unsigned int ticks;		/* requested resolution in ticks */
  	unsigned int queue_size;	/* total size of queue (32-1024) */
  	unsigned int reserved0;		/* reserved, was: failure locations */
  	unsigned int filter;		/* event filter (bitmask of SNDRV_TIMER_EVENT_*) */
  	unsigned char reserved[60];	/* reserved */
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
606
  struct snd_timer_status {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
607
608
609
610
611
612
613
  	struct timespec tstamp;		/* Timestamp - last update */
  	unsigned int resolution;	/* current period resolution in ns */
  	unsigned int lost;		/* counter of master tick lost */
  	unsigned int overrun;		/* count of read queue overruns */
  	unsigned int queue;		/* used queue size */
  	unsigned char reserved[64];	/* reserved */
  };
78a05b522   Takashi Iwai   ALSA: Use define ...
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
  #define SNDRV_TIMER_IOCTL_PVERSION	_IOR('T', 0x00, int)
  #define SNDRV_TIMER_IOCTL_NEXT_DEVICE	_IOWR('T', 0x01, struct snd_timer_id)
  #define SNDRV_TIMER_IOCTL_TREAD		_IOW('T', 0x02, int)
  #define SNDRV_TIMER_IOCTL_GINFO		_IOWR('T', 0x03, struct snd_timer_ginfo)
  #define SNDRV_TIMER_IOCTL_GPARAMS	_IOW('T', 0x04, struct snd_timer_gparams)
  #define SNDRV_TIMER_IOCTL_GSTATUS	_IOWR('T', 0x05, struct snd_timer_gstatus)
  #define SNDRV_TIMER_IOCTL_SELECT	_IOW('T', 0x10, struct snd_timer_select)
  #define SNDRV_TIMER_IOCTL_INFO		_IOR('T', 0x11, struct snd_timer_info)
  #define SNDRV_TIMER_IOCTL_PARAMS	_IOW('T', 0x12, struct snd_timer_params)
  #define SNDRV_TIMER_IOCTL_STATUS	_IOR('T', 0x14, struct snd_timer_status)
  /* The following four ioctls are changed since 1.0.9 due to confliction */
  #define SNDRV_TIMER_IOCTL_START		_IO('T', 0xa0)
  #define SNDRV_TIMER_IOCTL_STOP		_IO('T', 0xa1)
  #define SNDRV_TIMER_IOCTL_CONTINUE	_IO('T', 0xa2)
  #define SNDRV_TIMER_IOCTL_PAUSE		_IO('T', 0xa3)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
629

512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
630
  struct snd_timer_read {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
631
632
633
  	unsigned int resolution;
  	unsigned int ticks;
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
634
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
635
636
637
638
639
640
641
  	SNDRV_TIMER_EVENT_RESOLUTION = 0,	/* val = resolution in ns */
  	SNDRV_TIMER_EVENT_TICK,			/* val = ticks */
  	SNDRV_TIMER_EVENT_START,		/* val = resolution in ns */
  	SNDRV_TIMER_EVENT_STOP,			/* val = 0 */
  	SNDRV_TIMER_EVENT_CONTINUE,		/* val = resolution in ns */
  	SNDRV_TIMER_EVENT_PAUSE,		/* val = 0 */
  	SNDRV_TIMER_EVENT_EARLY,		/* val = 0, early event */
a501dfa3a   Jaroslav Kysela   [ALSA] Timer API ...
642
  	SNDRV_TIMER_EVENT_SUSPEND,		/* val = 0 */
5ca307b28   Jaroslav Kysela   [ALSA] Timer API ...
643
  	SNDRV_TIMER_EVENT_RESUME,		/* val = resolution in ns */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
644
645
646
647
648
  	/* master timer events for slave timer instances */
  	SNDRV_TIMER_EVENT_MSTART = SNDRV_TIMER_EVENT_START + 10,
  	SNDRV_TIMER_EVENT_MSTOP = SNDRV_TIMER_EVENT_STOP + 10,
  	SNDRV_TIMER_EVENT_MCONTINUE = SNDRV_TIMER_EVENT_CONTINUE + 10,
  	SNDRV_TIMER_EVENT_MPAUSE = SNDRV_TIMER_EVENT_PAUSE + 10,
a501dfa3a   Jaroslav Kysela   [ALSA] Timer API ...
649
650
  	SNDRV_TIMER_EVENT_MSUSPEND = SNDRV_TIMER_EVENT_SUSPEND + 10,
  	SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
651
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
652
653
  struct snd_timer_tread {
  	int event;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
654
655
656
657
658
659
660
661
662
  	struct timespec tstamp;
  	unsigned int val;
  };
  
  /****************************************************************************
   *                                                                          *
   *        Section for driver control interface - /dev/snd/control?          *
   *                                                                          *
   ****************************************************************************/
8d448162b   Clemens Ladisch   ALSA: control: ad...
663
  #define SNDRV_CTL_VERSION		SNDRV_PROTOCOL_VERSION(2, 0, 7)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
664

512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
665
  struct snd_ctl_card_info {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
666
667
668
669
670
671
672
673
  	int card;			/* card number */
  	int pad;			/* reserved for future (was type) */
  	unsigned char id[16];		/* ID of card (user selectable) */
  	unsigned char driver[16];	/* Driver name */
  	unsigned char name[32];		/* Short name of soundcard */
  	unsigned char longname[80];	/* name + info text about soundcard */
  	unsigned char reserved_[16];	/* reserved for future (was ID of mixer) */
  	unsigned char mixername[80];	/* visual mixer identification */
ff33f2303   Takashi Iwai   ALSA: Increase co...
674
  	unsigned char components[128];	/* card components / fine identification, delimited with one space (AC97 etc..) */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
675
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
  typedef int __bitwise snd_ctl_elem_type_t;
  #define	SNDRV_CTL_ELEM_TYPE_NONE	((__force snd_ctl_elem_type_t) 0) /* invalid */
  #define	SNDRV_CTL_ELEM_TYPE_BOOLEAN	((__force snd_ctl_elem_type_t) 1) /* boolean type */
  #define	SNDRV_CTL_ELEM_TYPE_INTEGER	((__force snd_ctl_elem_type_t) 2) /* integer type */
  #define	SNDRV_CTL_ELEM_TYPE_ENUMERATED	((__force snd_ctl_elem_type_t) 3) /* enumerated type */
  #define	SNDRV_CTL_ELEM_TYPE_BYTES	((__force snd_ctl_elem_type_t) 4) /* byte array */
  #define	SNDRV_CTL_ELEM_TYPE_IEC958	((__force snd_ctl_elem_type_t) 5) /* IEC958 (S/PDIF) setup */
  #define	SNDRV_CTL_ELEM_TYPE_INTEGER64	((__force snd_ctl_elem_type_t) 6) /* 64-bit integer type */
  #define	SNDRV_CTL_ELEM_TYPE_LAST	SNDRV_CTL_ELEM_TYPE_INTEGER64
  
  typedef int __bitwise snd_ctl_elem_iface_t;
  #define	SNDRV_CTL_ELEM_IFACE_CARD	((__force snd_ctl_elem_iface_t) 0) /* global control */
  #define	SNDRV_CTL_ELEM_IFACE_HWDEP	((__force snd_ctl_elem_iface_t) 1) /* hardware dependent device */
  #define	SNDRV_CTL_ELEM_IFACE_MIXER	((__force snd_ctl_elem_iface_t) 2) /* virtual mixer device */
  #define	SNDRV_CTL_ELEM_IFACE_PCM	((__force snd_ctl_elem_iface_t) 3) /* PCM device */
  #define	SNDRV_CTL_ELEM_IFACE_RAWMIDI	((__force snd_ctl_elem_iface_t) 4) /* RawMidi device */
  #define	SNDRV_CTL_ELEM_IFACE_TIMER	((__force snd_ctl_elem_iface_t) 5) /* timer device */
  #define	SNDRV_CTL_ELEM_IFACE_SEQUENCER	((__force snd_ctl_elem_iface_t) 6) /* sequencer client */
  #define	SNDRV_CTL_ELEM_IFACE_LAST	SNDRV_CTL_ELEM_IFACE_SEQUENCER
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
695
696
697
698
699
  
  #define SNDRV_CTL_ELEM_ACCESS_READ		(1<<0)
  #define SNDRV_CTL_ELEM_ACCESS_WRITE		(1<<1)
  #define SNDRV_CTL_ELEM_ACCESS_READWRITE		(SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE)
  #define SNDRV_CTL_ELEM_ACCESS_VOLATILE		(1<<2)	/* control value may be changed without a notification */
8aa9b586e   Jaroslav Kysela   [ALSA] Control AP...
700
701
702
703
704
  #define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP		(1<<3)	/* when was control changed */
  #define SNDRV_CTL_ELEM_ACCESS_TLV_READ		(1<<4)	/* TLV read is possible */
  #define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE		(1<<5)	/* TLV write is possible */
  #define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE	(SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)
  #define SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND	(1<<6)	/* TLV command is possible */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
705
706
707
  #define SNDRV_CTL_ELEM_ACCESS_INACTIVE		(1<<8)	/* control does actually nothing, but may be updated */
  #define SNDRV_CTL_ELEM_ACCESS_LOCK		(1<<9)	/* write lock */
  #define SNDRV_CTL_ELEM_ACCESS_OWNER		(1<<10)	/* write lock owner */
8aa9b586e   Jaroslav Kysela   [ALSA] Control AP...
708
  #define SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK	(1<<28)	/* kernel use a TLV callback */ 
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
709
  #define SNDRV_CTL_ELEM_ACCESS_USER		(1<<29) /* user space element */
8ace4f3c9   Takashi Iwai   [ALSA] Remove ind...
710
  /* bits 30 and 31 are obsoleted (for indirect access) */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
711
712
713
714
715
716
717
718
  
  /* for further details see the ACPI and PCI power management specification */
  #define SNDRV_CTL_POWER_D0		0x0000	/* full On */
  #define SNDRV_CTL_POWER_D1		0x0100	/* partial On */
  #define SNDRV_CTL_POWER_D2		0x0200	/* partial On */
  #define SNDRV_CTL_POWER_D3		0x0300	/* Off */
  #define SNDRV_CTL_POWER_D3hot		(SNDRV_CTL_POWER_D3|0x0000)	/* Off, with power */
  #define SNDRV_CTL_POWER_D3cold		(SNDRV_CTL_POWER_D3|0x0001)	/* Off, without power */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
719
  struct snd_ctl_elem_id {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
720
  	unsigned int numid;		/* numeric identifier, zero = invalid */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
721
  	snd_ctl_elem_iface_t iface;	/* interface identifier */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
722
723
  	unsigned int device;		/* device/client number */
  	unsigned int subdevice;		/* subdevice (substream) number */
89485d493   Daniel Mack   ALSA: include/sou...
724
  	unsigned char name[44];		/* ASCII name of item */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
725
726
  	unsigned int index;		/* index of item */
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
727
  struct snd_ctl_elem_list {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
728
729
730
731
  	unsigned int offset;		/* W: first element ID to get */
  	unsigned int space;		/* W: count of element IDs to get */
  	unsigned int used;		/* R: count of element IDs set */
  	unsigned int count;		/* R: count of all elements */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
732
  	struct snd_ctl_elem_id __user *pids; /* R: IDs */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
733
734
  	unsigned char reserved[50];
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
735
736
737
  struct snd_ctl_elem_info {
  	struct snd_ctl_elem_id id;	/* W: element ID */
  	snd_ctl_elem_type_t type;	/* R: value type - SNDRV_CTL_ELEM_TYPE_* */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
738
739
  	unsigned int access;		/* R: value access (bitmask) - SNDRV_CTL_ELEM_ACCESS_* */
  	unsigned int count;		/* count of values */
85efde6f4   Arnd Bergmann   make exported hea...
740
  	__kernel_pid_t owner;		/* owner's PID of this control */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
  	union {
  		struct {
  			long min;		/* R: minimum value */
  			long max;		/* R: maximum value */
  			long step;		/* R: step (0 variable) */
  		} integer;
  		struct {
  			long long min;		/* R: minimum value */
  			long long max;		/* R: maximum value */
  			long long step;		/* R: step (0 variable) */
  		} integer64;
  		struct {
  			unsigned int items;	/* R: number of items */
  			unsigned int item;	/* W: item number */
  			char name[64];		/* R: value name */
8d448162b   Clemens Ladisch   ALSA: control: ad...
756
757
  			__u64 names_ptr;	/* W: names list (ELEM_ADD only) */
  			unsigned int names_length;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
758
759
760
761
762
  		} enumerated;
  		unsigned char reserved[128];
  	} value;
  	union {
  		unsigned short d[4];		/* dimensions */
8ace4f3c9   Takashi Iwai   [ALSA] Remove ind...
763
  		unsigned short *d_ptr;		/* indirect - obsoleted */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
764
765
766
  	} dimen;
  	unsigned char reserved[64-4*sizeof(unsigned short)];
  };
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
767
768
  struct snd_ctl_elem_value {
  	struct snd_ctl_elem_id id;	/* W: element ID */
8ace4f3c9   Takashi Iwai   [ALSA] Remove ind...
769
  	unsigned int indirect: 1;	/* W: indirect access - obsoleted */
89485d493   Daniel Mack   ALSA: include/sou...
770
  	union {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
771
772
  		union {
  			long value[128];
8ace4f3c9   Takashi Iwai   [ALSA] Remove ind...
773
  			long *value_ptr;	/* obsoleted */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
774
775
776
  		} integer;
  		union {
  			long long value[64];
8ace4f3c9   Takashi Iwai   [ALSA] Remove ind...
777
  			long long *value_ptr;	/* obsoleted */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
778
779
780
  		} integer64;
  		union {
  			unsigned int item[128];
8ace4f3c9   Takashi Iwai   [ALSA] Remove ind...
781
  			unsigned int *item_ptr;	/* obsoleted */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
782
783
784
  		} enumerated;
  		union {
  			unsigned char data[512];
8ace4f3c9   Takashi Iwai   [ALSA] Remove ind...
785
  			unsigned char *data_ptr;	/* obsoleted */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
786
  		} bytes;
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
787
  		struct snd_aes_iec958 iec958;
89485d493   Daniel Mack   ALSA: include/sou...
788
  	} value;		/* RO */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
789
  	struct timespec tstamp;
89485d493   Daniel Mack   ALSA: include/sou...
790
  	unsigned char reserved[128-sizeof(struct timespec)];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
791
  };
42750b04c   Jaroslav Kysela   [ALSA] Control AP...
792
  struct snd_ctl_tlv {
89485d493   Daniel Mack   ALSA: include/sou...
793
794
795
  	unsigned int numid;	/* control element numeric identification */
  	unsigned int length;	/* in bytes aligned to 4 */
  	unsigned int tlv[0];	/* first TLV */
42750b04c   Jaroslav Kysela   [ALSA] Control AP...
796
  };
78a05b522   Takashi Iwai   ALSA: Use define ...
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
  #define SNDRV_CTL_IOCTL_PVERSION	_IOR('U', 0x00, int)
  #define SNDRV_CTL_IOCTL_CARD_INFO	_IOR('U', 0x01, struct snd_ctl_card_info)
  #define SNDRV_CTL_IOCTL_ELEM_LIST	_IOWR('U', 0x10, struct snd_ctl_elem_list)
  #define SNDRV_CTL_IOCTL_ELEM_INFO	_IOWR('U', 0x11, struct snd_ctl_elem_info)
  #define SNDRV_CTL_IOCTL_ELEM_READ	_IOWR('U', 0x12, struct snd_ctl_elem_value)
  #define SNDRV_CTL_IOCTL_ELEM_WRITE	_IOWR('U', 0x13, struct snd_ctl_elem_value)
  #define SNDRV_CTL_IOCTL_ELEM_LOCK	_IOW('U', 0x14, struct snd_ctl_elem_id)
  #define SNDRV_CTL_IOCTL_ELEM_UNLOCK	_IOW('U', 0x15, struct snd_ctl_elem_id)
  #define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int)
  #define SNDRV_CTL_IOCTL_ELEM_ADD	_IOWR('U', 0x17, struct snd_ctl_elem_info)
  #define SNDRV_CTL_IOCTL_ELEM_REPLACE	_IOWR('U', 0x18, struct snd_ctl_elem_info)
  #define SNDRV_CTL_IOCTL_ELEM_REMOVE	_IOWR('U', 0x19, struct snd_ctl_elem_id)
  #define SNDRV_CTL_IOCTL_TLV_READ	_IOWR('U', 0x1a, struct snd_ctl_tlv)
  #define SNDRV_CTL_IOCTL_TLV_WRITE	_IOWR('U', 0x1b, struct snd_ctl_tlv)
  #define SNDRV_CTL_IOCTL_TLV_COMMAND	_IOWR('U', 0x1c, struct snd_ctl_tlv)
  #define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int)
  #define SNDRV_CTL_IOCTL_HWDEP_INFO	_IOR('U', 0x21, struct snd_hwdep_info)
  #define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE	_IOR('U', 0x30, int)
  #define SNDRV_CTL_IOCTL_PCM_INFO	_IOWR('U', 0x31, struct snd_pcm_info)
  #define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int)
  #define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int)
  #define SNDRV_CTL_IOCTL_RAWMIDI_INFO	_IOWR('U', 0x41, struct snd_rawmidi_info)
  #define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int)
  #define SNDRV_CTL_IOCTL_POWER		_IOWR('U', 0xd0, int)
  #define SNDRV_CTL_IOCTL_POWER_STATE	_IOR('U', 0xd1, int)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
822
823
824
825
826
827
828
829
830
831
832
833
834
  
  /*
   *  Read interface.
   */
  
  enum sndrv_ctl_event_type {
  	SNDRV_CTL_EVENT_ELEM = 0,
  	SNDRV_CTL_EVENT_LAST = SNDRV_CTL_EVENT_ELEM,
  };
  
  #define SNDRV_CTL_EVENT_MASK_VALUE	(1<<0)	/* element value was changed */
  #define SNDRV_CTL_EVENT_MASK_INFO	(1<<1)	/* element info was changed */
  #define SNDRV_CTL_EVENT_MASK_ADD	(1<<2)	/* element was added */
8aa9b586e   Jaroslav Kysela   [ALSA] Control AP...
835
  #define SNDRV_CTL_EVENT_MASK_TLV	(1<<3)	/* element TLV tree was changed */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
836
  #define SNDRV_CTL_EVENT_MASK_REMOVE	(~0U)	/* element was removed */
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
837
838
  struct snd_ctl_event {
  	int type;	/* event type - SNDRV_CTL_EVENT_* */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
839
840
841
  	union {
  		struct {
  			unsigned int mask;
512bbd6a8   Takashi Iwai   [ALSA] Remove xxx...
842
  			struct snd_ctl_elem_id id;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
843
  		} elem;
89485d493   Daniel Mack   ALSA: include/sou...
844
845
  		unsigned char data8[60];
  	} data;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
  };
  
  /*
   *  Control names
   */
  
  #define SNDRV_CTL_NAME_NONE				""
  #define SNDRV_CTL_NAME_PLAYBACK				"Playback "
  #define SNDRV_CTL_NAME_CAPTURE				"Capture "
  
  #define SNDRV_CTL_NAME_IEC958_NONE			""
  #define SNDRV_CTL_NAME_IEC958_SWITCH			"Switch"
  #define SNDRV_CTL_NAME_IEC958_VOLUME			"Volume"
  #define SNDRV_CTL_NAME_IEC958_DEFAULT			"Default"
  #define SNDRV_CTL_NAME_IEC958_MASK			"Mask"
  #define SNDRV_CTL_NAME_IEC958_CON_MASK			"Con Mask"
  #define SNDRV_CTL_NAME_IEC958_PRO_MASK			"Pro Mask"
  #define SNDRV_CTL_NAME_IEC958_PCM_STREAM		"PCM Stream"
  #define SNDRV_CTL_NAME_IEC958(expl,direction,what)	"IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
865
  #endif /* __SOUND_ASOUND_H */