patch-2.1.6 linux/include/linux/soundcard.h

Next file: linux/include/linux/ultrasound.h
Previous file: linux/include/linux/scc.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.5/linux/include/linux/soundcard.h linux/include/linux/soundcard.h
@@ -24,9 +24,19 @@
  * SUCH DAMAGE.
  */
 
-#define SOUND_VERSION	350
-#define UNIX_SOUND_SYSTEM
 
+/*
+ * OSS interface version. With versions earlier than 3.6 this value is
+ * an integer with value less than 361. In versions 3.6 and later
+ * it's a six digit hexadecimal value. For example value
+ * of 0x030600 represents OSS version 3.6.0.
+ * Use ioctl(fd, OSS_GETVERSION, &int) to get the version number of
+ * the currently active driver.
+ */
+#define SOUND_VERSION	0x030700
+#define OPEN_SOUND_SYSTEM
+
+/* In Linux we need to be prepared for cross compiling */
 #include <linux/ioctl.h>
 
 /*
@@ -65,8 +75,19 @@
  * IOCTL Commands for /dev/sequencer
  */
 
-#ifndef _IOWR
-/*	@(#)ioctlp.h */
+#ifndef _SIOWR
+#if defined(_IOWR) && !defined(sun)
+/* Use already defined ioctl defines if they exist (except with Sun) */
+#define	SIOCPARM_MASK	IOCPARM_MASK
+#define	SIOC_VOID	IOC_VOID
+#define	SIOC_OUT	IOC_OUT
+#define	SIOC_IN		IOC_IN
+#define	SIOC_INOUT	IOC_INOUT
+#define	_SIO		_IO
+#define	_SIOR		_IOR
+#define	_SIOW		_IOW
+#define	_SIOWR		_IOWR
+#else
 
 /* Ioctl's have the command encoded in the lower word,
  * and the size of any in or out parameters in the upper
@@ -74,68 +95,73 @@
  * to encode the in/out status of the parameter; for now
  * we restrict parameters to at most 128 bytes.
  */
-/* #define	IOCTYPE		(0xff<<8) */
-#define	IOCPARM_MASK	0x7f		/* parameters must be < 128 bytes */
-#define	IOC_VOID	0x00000000	/* no parameters */
-#define	IOC_OUT		0x20000000	/* copy out parameters */
-#define	IOC_IN		0x40000000	/* copy in parameters */
-#define	IOC_INOUT	(IOC_IN|IOC_OUT)
+/* #define	SIOCTYPE		(0xff<<8) */
+#define	SIOCPARM_MASK	0x1fff		/* parameters must be < 8192 bytes */
+#define	SIOC_VOID	0x00000000	/* no parameters */
+#define	SIOC_OUT	0x20000000	/* copy out parameters */
+#define	SIOC_IN		0x40000000	/* copy in parameters */
+#define	SIOC_INOUT	(SIOC_IN|SIOC_OUT)
 /* the 0x20000000 is so we can distinguish new ioctl's from old */
-#define	_IO(x,y)	((int)(IOC_VOID|(x<<8)|y))
-#define	_IOR(x,y,t)	((int)(IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y))
-#define	_IOW(x,y,t)	((int)(IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y))
-/* this should be _IORW, but stdio got there first */
-#define	_IOWR(x,y,t)	((int)(IOC_INOUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y))
-#endif  /* !_IOWR */
-
-#define SNDCTL_SEQ_RESET		_IO  ('Q', 0)
-#define SNDCTL_SEQ_SYNC			_IO  ('Q', 1)
-#define SNDCTL_SYNTH_INFO		_IOWR('Q', 2, struct synth_info)
-#define SNDCTL_SEQ_CTRLRATE		_IOWR('Q', 3, int)	/* Set/get timer resolution (HZ) */
-#define SNDCTL_SEQ_GETOUTCOUNT		_IOR ('Q', 4, int)
-#define SNDCTL_SEQ_GETINCOUNT		_IOR ('Q', 5, int)
-#define SNDCTL_SEQ_PERCMODE		_IOW ('Q', 6, int)
-#define SNDCTL_FM_LOAD_INSTR		_IOW ('Q', 7, struct sbi_instrument)	/* Valid for FM only */
-#define SNDCTL_SEQ_TESTMIDI		_IOW ('Q', 8, int)
-#define SNDCTL_SEQ_RESETSAMPLES		_IOW ('Q', 9, int)
-#define SNDCTL_SEQ_NRSYNTHS		_IOR ('Q',10, int)
-#define SNDCTL_SEQ_NRMIDIS		_IOR ('Q',11, int)
-#define SNDCTL_MIDI_INFO		_IOWR('Q',12, struct midi_info)
-#define SNDCTL_SEQ_THRESHOLD		_IOW ('Q',13, int)
+#define	_SIO(x,y)	((int)(SIOC_VOID|(x<<8)|y))
+#define	_SIOR(x,y,t)	((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+#define	_SIOW(x,y,t)	((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+/* this should be _SIORW, but stdio got there first */
+#define	_SIOWR(x,y,t)	((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+#  endif /* _IOWR */
+#endif  /* !_SIOWR */
+
+#define SNDCTL_SEQ_RESET		_SIO  ('Q', 0)
+#define SNDCTL_SEQ_SYNC			_SIO  ('Q', 1)
+#define SNDCTL_SYNTH_INFO		_SIOWR('Q', 2, struct synth_info)
+#define SNDCTL_SEQ_CTRLRATE		_SIOWR('Q', 3, int)	/* Set/get timer resolution (HZ) */
+#define SNDCTL_SEQ_GETOUTCOUNT		_SIOR ('Q', 4, int)
+#define SNDCTL_SEQ_GETINCOUNT		_SIOR ('Q', 5, int)
+#define SNDCTL_SEQ_PERCMODE		_SIOW ('Q', 6, int)
+#define SNDCTL_FM_LOAD_INSTR		_SIOW ('Q', 7, struct sbi_instrument)	/* Valid for FM only */
+#define SNDCTL_SEQ_TESTMIDI		_SIOW ('Q', 8, int)
+#define SNDCTL_SEQ_RESETSAMPLES		_SIOW ('Q', 9, int)
+#define SNDCTL_SEQ_NRSYNTHS		_SIOR ('Q',10, int)
+#define SNDCTL_SEQ_NRMIDIS		_SIOR ('Q',11, int)
+#define SNDCTL_MIDI_INFO		_SIOWR('Q',12, struct midi_info)
+#define SNDCTL_SEQ_THRESHOLD		_SIOW ('Q',13, int)
 #define SNDCTL_SEQ_TRESHOLD		SNDCTL_SEQ_THRESHOLD	/* there was once a typo */
-#define SNDCTL_SYNTH_MEMAVL		_IOWR('Q',14, int)	/* in=dev#, out=memsize */
-#define SNDCTL_FM_4OP_ENABLE		_IOW ('Q',15, int)	/* in=dev# */
-#define SNDCTL_PMGR_ACCESS		_IOWR('Q',16, struct patmgr_info)
-#define SNDCTL_SEQ_PANIC		_IO  ('Q',17)
-#define SNDCTL_SEQ_OUTOFBAND		_IOW ('Q',18, struct seq_event_rec)
+#define SNDCTL_SYNTH_MEMAVL		_SIOWR('Q',14, int)	/* in=dev#, out=memsize */
+#define SNDCTL_FM_4OP_ENABLE		_SIOW ('Q',15, int)	/* in=dev# */
+#define SNDCTL_PMGR_ACCESS		_SIOWR('Q',16, struct patmgr_info)
+#define SNDCTL_SEQ_PANIC		_SIO  ('Q',17)
+#define SNDCTL_SEQ_OUTOFBAND		_SIOW ('Q',18, struct seq_event_rec)
+#define SNDCTL_SEQ_GETTIME		_SIOR ('Q',19, int)
 
 	struct seq_event_rec {
 			unsigned char arr[8];
 		};
 
-#define SNDCTL_TMR_TIMEBASE		_IOWR('T', 1, int)
-#define SNDCTL_TMR_START		_IO  ('T', 2)
-#define SNDCTL_TMR_STOP			_IO  ('T', 3)
-#define SNDCTL_TMR_CONTINUE		_IO  ('T', 4)
-#define SNDCTL_TMR_TEMPO		_IOWR('T', 5, int)
-#define SNDCTL_TMR_SOURCE		_IOWR('T', 6, int)
+#define SNDCTL_TMR_TIMEBASE		_SIOWR('T', 1, int)
+#define SNDCTL_TMR_START		_SIO  ('T', 2)
+#define SNDCTL_TMR_STOP			_SIO  ('T', 3)
+#define SNDCTL_TMR_CONTINUE		_SIO  ('T', 4)
+#define SNDCTL_TMR_TEMPO		_SIOWR('T', 5, int)
+#define SNDCTL_TMR_SOURCE		_SIOWR('T', 6, int)
 #	define TMR_INTERNAL		0x00000001
 #	define TMR_EXTERNAL		0x00000002
 #		define TMR_MODE_MIDI	0x00000010
 #		define TMR_MODE_FSK	0x00000020
 #		define TMR_MODE_CLS	0x00000040
 #		define TMR_MODE_SMPTE	0x00000080
-#define SNDCTL_TMR_METRONOME		_IOW ('T', 7, int)
-#define SNDCTL_TMR_SELECT		_IOW ('T', 8, int)
+#define SNDCTL_TMR_METRONOME		_SIOW ('T', 7, int)
+#define SNDCTL_TMR_SELECT		_SIOW ('T', 8, int)
 
 /*
- *	Endian aware patch key generation algorithm.
+ * Some big endian/little endian handling macros
  */
 
-#if defined(_AIX) || defined(AIX)
+#if defined(_AIX) || defined(AIX) || defined(sparc) || defined(HPPA) || defined(PPC)
+/* Big endian machines */
 #  define _PATCHKEY(id) (0xfd00|id)
+#  define AFMT_S16_NE AFMT_S16_BE
 #else
 #  define _PATCHKEY(id) ((id<<8)|0xfd)
+#  define AFMT_S16_NE AFMT_S16_LE
 #endif
 
 /*
@@ -248,7 +274,7 @@
 #define		PS_MGR_OK		2	/* Patch manager supported */
 #define		PS_MANAGED		3	/* Patch manager running */
 
-#define SNDCTL_PMGR_IFACE		_IOWR('P', 1, struct patmgr_info)
+#define SNDCTL_PMGR_IFACE		_SIOWR('P', 1, struct patmgr_info)
 
 /*
  * The patmgr_info is a fixed size structure which is used for two
@@ -540,30 +566,30 @@
 		unsigned char data[30];
 	} mpu_command_rec;
 
-#define SNDCTL_MIDI_PRETIME		_IOWR('m', 0, int)
-#define SNDCTL_MIDI_MPUMODE		_IOWR('m', 1, int)
-#define SNDCTL_MIDI_MPUCMD		_IOWR('m', 2, mpu_command_rec)
+#define SNDCTL_MIDI_PRETIME		_SIOWR('m', 0, int)
+#define SNDCTL_MIDI_MPUMODE		_SIOWR('m', 1, int)
+#define SNDCTL_MIDI_MPUCMD		_SIOWR('m', 2, mpu_command_rec)
 
 /********************************************
  * IOCTL commands for /dev/dsp and /dev/audio
  */
 
-#define SNDCTL_DSP_RESET		_IO  ('P', 0)
-#define SNDCTL_DSP_SYNC			_IO  ('P', 1)
-#define SNDCTL_DSP_SPEED		_IOWR('P', 2, int)
-#define SNDCTL_DSP_STEREO		_IOWR('P', 3, int)
-#define SNDCTL_DSP_GETBLKSIZE		_IOWR('P', 4, int)
+#define SNDCTL_DSP_RESET		_SIO  ('P', 0)
+#define SNDCTL_DSP_SYNC			_SIO  ('P', 1)
+#define SNDCTL_DSP_SPEED		_SIOWR('P', 2, int)
+#define SNDCTL_DSP_STEREO		_SIOWR('P', 3, int)
+#define SNDCTL_DSP_GETBLKSIZE		_SIOWR('P', 4, int)
 #define SNDCTL_DSP_SAMPLESIZE		SNDCTL_DSP_SETFMT
-#define SNDCTL_DSP_CHANNELS		_IOWR('P', 6, int)
+#define SNDCTL_DSP_CHANNELS		_SIOWR('P', 6, int)
 #define SOUND_PCM_WRITE_CHANNELS	SNDCTL_DSP_CHANNELS
-#define SOUND_PCM_WRITE_FILTER		_IOWR('P', 7, int)
-#define SNDCTL_DSP_POST			_IO  ('P', 8)
-#define SNDCTL_DSP_SUBDIVIDE		_IOWR('P', 9, int)
-#define SNDCTL_DSP_SETFRAGMENT		_IOWR('P',10, int)
+#define SOUND_PCM_WRITE_FILTER		_SIOWR('P', 7, int)
+#define SNDCTL_DSP_POST			_SIO  ('P', 8)
+#define SNDCTL_DSP_SUBDIVIDE		_SIOWR('P', 9, int)
+#define SNDCTL_DSP_SETFRAGMENT		_SIOWR('P',10, int)
 
 /*	Audio data formats (Note! U8=8 and S16_LE=16 for compatibility) */
-#define SNDCTL_DSP_GETFMTS		_IOR ('P',11, int) /* Returns a mask */
-#define SNDCTL_DSP_SETFMT		_IOWR('P',5, int) /* Selects ONE fmt*/
+#define SNDCTL_DSP_GETFMTS		_SIOR ('P',11, int) /* Returns a mask */
+#define SNDCTL_DSP_SETFMT		_SIOWR('P',5, int) /* Selects ONE fmt*/
 #	define AFMT_QUERY		0x00000000	/* Return current fmt */
 #	define AFMT_MU_LAW		0x00000001
 #	define AFMT_A_LAW		0x00000002
@@ -588,10 +614,10 @@
 			/* Note! 'bytes' could be more than fragments*fragsize */
 		} audio_buf_info;
 
-#define SNDCTL_DSP_GETOSPACE		_IOR ('P',12, audio_buf_info)
-#define SNDCTL_DSP_GETISPACE		_IOR ('P',13, audio_buf_info)
-#define SNDCTL_DSP_NONBLOCK		_IO  ('P',14)
-#define SNDCTL_DSP_GETCAPS		_IOR ('P',15, int)
+#define SNDCTL_DSP_GETOSPACE		_SIOR ('P',12, audio_buf_info)
+#define SNDCTL_DSP_GETISPACE		_SIOR ('P',13, audio_buf_info)
+#define SNDCTL_DSP_NONBLOCK		_SIO  ('P',14)
+#define SNDCTL_DSP_GETCAPS		_SIOR ('P',15, int)
 #	define DSP_CAP_REVISION		0x000000ff	/* Bits for revision level (0 to 255) */
 #	define DSP_CAP_DUPLEX		0x00000100	/* Full duplex record/playback */
 #	define DSP_CAP_REALTIME		0x00000200	/* Real time capability */
@@ -605,8 +631,8 @@
 #	define DSP_CAP_TRIGGER		0x00001000	/* Supports SETTRIGGER */
 #	define DSP_CAP_MMAP		0x00002000	/* Supports mmap() */
 
-#define SNDCTL_DSP_GETTRIGGER		_IOR ('P',16, int)
-#define SNDCTL_DSP_SETTRIGGER		_IOW ('P',16, int)
+#define SNDCTL_DSP_GETTRIGGER		_SIOR ('P',16, int)
+#define SNDCTL_DSP_SETTRIGGER		_SIOW ('P',16, int)
 #	define PCM_ENABLE_INPUT		0x00000001
 #	define PCM_ENABLE_OUTPUT	0x00000002
 
@@ -616,22 +642,22 @@
 		int ptr;	/* Current DMA pointer value */
 	} count_info;
 
-#define SNDCTL_DSP_GETIPTR		_IOR ('P',17, count_info)
-#define SNDCTL_DSP_GETOPTR		_IOR ('P',18, count_info)
+#define SNDCTL_DSP_GETIPTR		_SIOR ('P',17, count_info)
+#define SNDCTL_DSP_GETOPTR		_SIOR ('P',18, count_info)
 
 typedef struct buffmem_desc {
 		unsigned *buffer;
 		int size;
 	} buffmem_desc;
-#define SNDCTL_DSP_MAPINBUF		_IOR ('P', 19, buffmem_desc)
-#define SNDCTL_DSP_MAPOUTBUF		_IOR ('P', 20, buffmem_desc)
-#define SNDCTL_DSP_SETSYNCRO		_IO  ('P', 21)
-#define SNDCTL_DSP_SETDUPLEX		_IO  ('P', 22)
-
-#define SOUND_PCM_READ_RATE		_IOR ('P', 2, int)
-#define SOUND_PCM_READ_CHANNELS		_IOR ('P', 6, int)
-#define SOUND_PCM_READ_BITS		_IOR ('P', 5, int)
-#define SOUND_PCM_READ_FILTER		_IOR ('P', 7, int)
+#define SNDCTL_DSP_MAPINBUF		_SIOR ('P', 19, buffmem_desc)
+#define SNDCTL_DSP_MAPOUTBUF		_SIOR ('P', 20, buffmem_desc)
+#define SNDCTL_DSP_SETSYNCRO		_SIO  ('P', 21)
+#define SNDCTL_DSP_SETDUPLEX		_SIO  ('P', 22)
+
+#define SOUND_PCM_READ_RATE		_SIOR ('P', 2, int)
+#define SOUND_PCM_READ_CHANNELS		_SIOR ('P', 6, int)
+#define SOUND_PCM_READ_BITS		_SIOR ('P', 5, int)
+#define SOUND_PCM_READ_FILTER		_SIOR ('P', 7, int)
 
 /* Some alias names */
 #define SOUND_PCM_WRITE_BITS		SNDCTL_DSP_SETFMT
@@ -685,16 +711,16 @@
 		unsigned char data[4000];
 	} copr_msg;
 
-#define SNDCTL_COPR_RESET             _IO  ('C',  0)
-#define SNDCTL_COPR_LOAD	      _IOWR('C',  1, copr_buffer)
-#define SNDCTL_COPR_RDATA	      _IOWR('C',  2, copr_debug_buf)
-#define SNDCTL_COPR_RCODE	      _IOWR('C',  3, copr_debug_buf)
-#define SNDCTL_COPR_WDATA	      _IOW ('C',  4, copr_debug_buf)
-#define SNDCTL_COPR_WCODE	      _IOW ('C',  5, copr_debug_buf)
-#define SNDCTL_COPR_RUN		      _IOWR('C',  6, copr_debug_buf)
-#define SNDCTL_COPR_HALT	      _IOWR('C',  7, copr_debug_buf)
-#define SNDCTL_COPR_SENDMSG	      _IOWR('C',  8, copr_msg)
-#define SNDCTL_COPR_RCVMSG	      _IOR ('C',  9, copr_msg)
+#define SNDCTL_COPR_RESET             _SIO  ('C',  0)
+#define SNDCTL_COPR_LOAD	      _SIOWR('C',  1, copr_buffer)
+#define SNDCTL_COPR_RDATA	      _SIOWR('C',  2, copr_debug_buf)
+#define SNDCTL_COPR_RCODE	      _SIOWR('C',  3, copr_debug_buf)
+#define SNDCTL_COPR_WDATA	      _SIOW ('C',  4, copr_debug_buf)
+#define SNDCTL_COPR_WCODE	      _SIOW ('C',  5, copr_debug_buf)
+#define SNDCTL_COPR_RUN		      _SIOWR('C',  6, copr_debug_buf)
+#define SNDCTL_COPR_HALT	      _SIOWR('C',  7, copr_debug_buf)
+#define SNDCTL_COPR_SENDMSG	      _SIOWR('C',  8, copr_msg)
+#define SNDCTL_COPR_RCVMSG	      _SIOR ('C',  9, copr_msg)
 
 /*********************************************
  * IOCTL commands for /dev/mixer
@@ -740,15 +766,15 @@
 #define SOUND_ONOFF_MAX		30
 
 /* Note!	Number 31 cannot be used since the sign bit is reserved */
-
+#define SOUND_MIXER_NONE	31
 
 /*
  * The following unsupported macros are no longer functional.
  * Use SOUND_MIXER_PRIVATE# macros in future.
  */
-#define SOUND_MIXER_ENHANCE	31
-#define SOUND_MIXER_MUTE	31
-#define SOUND_MIXER_LOUD	31
+#define SOUND_MIXER_ENHANCE	SOUND_MIXER_NONE
+#define SOUND_MIXER_MUTE	SOUND_MIXER_NONE
+#define SOUND_MIXER_LOUD	SOUND_MIXER_NONE
 
 
 #define SOUND_DEVICE_LABELS	{"Vol  ", "Bass ", "Trebl", "Synth", "Pcm  ", "Spkr ", "Line ", \
@@ -793,7 +819,7 @@
 #define SOUND_MASK_ENHANCE	(1 << SOUND_MIXER_ENHANCE)
 #define SOUND_MASK_LOUD		(1 << SOUND_MIXER_LOUD)
 
-#define MIXER_READ(dev)		_IOR('M', dev, int)
+#define MIXER_READ(dev)		_SIOR('M', dev, int)
 #define SOUND_MIXER_READ_VOLUME		MIXER_READ(SOUND_MIXER_VOLUME)
 #define SOUND_MIXER_READ_BASS		MIXER_READ(SOUND_MIXER_BASS)
 #define SOUND_MIXER_READ_TREBLE		MIXER_READ(SOUND_MIXER_TREBLE)
@@ -823,7 +849,7 @@
 #define SOUND_MIXER_READ_STEREODEVS	MIXER_READ(SOUND_MIXER_STEREODEVS)
 #define SOUND_MIXER_READ_CAPS		MIXER_READ(SOUND_MIXER_CAPS)
 
-#define MIXER_WRITE(dev)		_IOWR('M', dev, int)
+#define MIXER_WRITE(dev)		_SIOWR('M', dev, int)
 #define SOUND_MIXER_WRITE_VOLUME	MIXER_WRITE(SOUND_MIXER_VOLUME)
 #define SOUND_MIXER_WRITE_BASS		MIXER_WRITE(SOUND_MIXER_BASS)
 #define SOUND_MIXER_WRITE_TREBLE	MIXER_WRITE(SOUND_MIXER_TREBLE)
@@ -853,9 +879,18 @@
 {
   char id[16];
   char name[32];
+  int  modify_counter;
+  int fillers[10];
 } mixer_info;
 
-#define SOUND_MIXER_INFO		_IOR ('M', 101, mixer_info)
+typedef struct _old_mixer_info /* Obsolete */
+{
+  char id[16];
+  char name[32];
+} _old_mixer_info;
+
+#define SOUND_MIXER_INFO		_SIOR ('M', 101, mixer_info)
+#define SOUND_OLD_MIXER_INFO		_SIOR ('M', 101, _old_mixer_info)
 
 /*
  * A mechanism for accessing "proprietary" mixer features. This method
@@ -865,17 +900,42 @@
  */
 typedef unsigned char mixer_record[128];
 
-#define SOUND_MIXER_ACCESS		_IOWR('M', 102, mixer_record)
+#define SOUND_MIXER_ACCESS		_SIOWR('M', 102, mixer_record)
 
 /*
  * The SOUND_MIXER_PRIVATE# commands can be redefined by low level drivers.
  * These features can be used when accessing device specific features.
  */
-#define SOUND_MIXER_PRIVATE1		_IOWR('M', 111, int)
-#define SOUND_MIXER_PRIVATE2		_IOWR('M', 112, int)
-#define SOUND_MIXER_PRIVATE3		_IOWR('M', 113, int)
-#define SOUND_MIXER_PRIVATE4		_IOWR('M', 114, int)
-#define SOUND_MIXER_PRIVATE5		_IOWR('M', 115, int)
+#define SOUND_MIXER_PRIVATE1		_SIOWR('M', 111, int)
+#define SOUND_MIXER_PRIVATE2		_SIOWR('M', 112, int)
+#define SOUND_MIXER_PRIVATE3		_SIOWR('M', 113, int)
+#define SOUND_MIXER_PRIVATE4		_SIOWR('M', 114, int)
+#define SOUND_MIXER_PRIVATE5		_SIOWR('M', 115, int)
+
+/*
+ * SOUND_MIXER_GETLEVELS and SOUND_MIXER_SETLEVELS calls can be used
+ * for querying current mixer settings from the driver and for loading
+ * default volume settings _prior_ activating the mixer (loading
+ * doesn't affect current state of the mixer hardware). These calls
+ * are for internal use only.
+ */
+
+typedef struct mixer_vol_table {
+  int num;	/* Index to volume table */
+  char name[32];
+  int levels[32];
+} mixer_vol_table;
+
+#define SOUND_MIXER_GETLEVELS		_SIOWR('M', 116, mixer_vol_table)
+#define SOUND_MIXER_SETLEVELS		_SIOWR('M', 117, mixer_vol_table)
+
+/* 
+ * An ioctl for identifying the driver version. It will return value
+ * of the SOUND_VERSION macro used when compiling the driver.
+ * This call was introduced in OSS version 3.6 and it will not work
+ * with earlier versions (returns EINVAL).
+ */
+#define OSS_GETVERSION			_SIOR ('M', 118, int)
 
 /*
  * Level 2 event types for /dev/sequencer

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov